摘要:本文基于某監控系統的設計,實現了三菱FX2N系列PLC在無協議通信方式下與DS18b20型數字
溫度傳感器的采集模塊以Modbus協議通信,在電爐熔化工作過程中,對電爐、電容、冷卻水等100多點的溫度實現巡檢。
隨著3C技術迅速發展,網絡集成信息自動化正迅速應用到現場設備、控制中,現場總線控制系統正逐步取代傳統的集散控制系統,其中Modbus現場總線協議在基于PLC的控制系統中得到了越來越廣泛的應用.在本系統中,以PLC為主機、溫度采集模塊為從機,完成對生產過程的自動控制、工業流程及工藝參數的顯示、修改,根據PLC的無協議通信功能,用Modbus現場總線協議實現主機與從機的通訊。
1、系統硬件組成
溫度監控部分系統的硬件由DS18b20型數字溫度傳感器、采集模塊、FX2N系列PLC、FX2N-485-BD、HITECH觸摸屏組成,其結構如圖1所示。
圖1系統硬件組成
DS18b20是世界上*支持單線總線接口(1wirebusinterface)的數字化溫度傳感器,單總線接口便于構建分布式的溫度測控網絡,數字化的輸出提高了信號傳輸的可靠性,而且使外圍電路大為簡化。DS18b20具有很高的適應性和性價比,其測溫范圍為-55~125℃,測溫精度為±0.5℃,測溫距離zui大為200m,測溫方式使用3線制,本系統使用的傳感器排序方式為排序。
DS18b20內部主要有3個數字部件:1個溫度傳感器、1個64位的激光刻蝕ROM、9字節高速暫存器ScratchpadRAM和3字節EERAM.ROM上64位數據是傳感器的序列號。暫存器確保數據的完整性,數據先被寫入暫存器,并可以被讀回.數據經校驗后,可以由拷貝暫存器命令傳輸到EERAM,以確保更改存儲器時數據的完整性。暫存器為9個字節,第0和第1字節是溫度編碼的低字節和高字節.
第2和第3字節是溫度編碼的低字節和高字節的拷貝,第4字節是配置寄存器,其值決定溫度轉換的分辨率。
本系統采用的STA-D溫度采集模塊,是一種遠程數字化溫度采集系統,有10個通道,每個通道zui多可以掛接16個DS18b20型數字溫度傳感器,總共可以監控160個點的溫度,以RS485方式同上位機通訊,通信協議為標準Modbus協議,波特率為9600bps,與上位機通信距離zui大為1200m,工作電源為12~24V,工作溫度為-20~75℃。與FX2N??485??BD采用兩線制的485連線方式(圖2),接線要使用規范的屏蔽線。
圖2485連接圖
中國臺灣HITECH公司觸摸屏PWS系列是專為PLC設計的互動式工作站,用232直接與PLC連接,可以直接讀取PLC的數據寄存器,具有良好的人機界面,操作人員通過它可設置所有參數,控制系統自動運行。并且編程簡便,運行穩定,可設置不同的管理權限,適合于本系統使用。
2、Modbus協議
標準的Modbus口是使用RS??232C兼容串行接口,它定義了連接口的針腳、電纜、信號位、傳輸波特率、奇偶校驗,控制器能直接或經由Modem組網.控制器通信使用主!從技術,即僅一設備(主設備)能初始化傳輸(查詢),其它設備(從設備)根據主設備查詢提供的數據作出相應反應。
表1Modbus部分功能碼定義
Modbus通訊協議有兩種傳送方式?RTU方式和ASCII方式。本系統使用RTU模式,這種方式的主要優點是:在同樣的波特率下,可比ASCII方式傳送更多的數據。
使用RTU模式時,消息發送至少要以3.5個字符時間的停頓間隔開始,如圖3的T1-T2-T3-T4所示。傳輸的*個域是設備地址,可以使用的傳輸字符是十六進制數值。通信期間,網絡設備不斷偵測網絡總線,包括停頓間隔時間內,當*個域(地址域)接收到,每個設備都進行解碼以判斷是否發往自己的。在zui后一個傳輸字符之后,至少要有3.5個字符時間的停頓以標定消息的結束,之后可開始新的消息傳輸。典型的消息幀如圖3所示。使用RTU模式,消息包括了一個基于CRC方法的錯誤檢測域.CRC域檢測了整個消息的內容。
圖3Modbus消息幀結構
CRC域是兩個字節,包含一個16位的二進制值。它由傳輸設備計算后加入到消息中。接收設備重新計算收到消息的CRC,并與接收到的CRC域中的值比較,如果兩值不同,則有誤,后面將具體講述CRC算法的實現。
3、系統軟件構成
考慮到操作的方便性,在系統初次安裝時,先在PC機上用上位機軟件將所有傳感器的ID搜索出來,然后按實際安裝位置給每個傳感器編號,讀溫度測試傳感器是否工作正常。在PLC上使用Modbus協議通信時首先要對通信格式進行設定,即對D8120寄存器進行寫操作,在本系統條件下設置為0C87,即數據長度為8位,無校驗,無起始位與停止位,波特率9600bps。修改D8120設置后,確保通斷PLC電源一次。再用RS指令進行數據的傳輸,相關程序格式如圖4所示。
圖4RS指令程序格式
按照上述程序格式,即可在數據發送區寫入指令進行相應的操作。
1)讀取溫度,其指令格式:[設備地址][命令號][通道號][傳感器編號][讀取個數高8位][低8位][CRC低8位][CRC高8位],其中CRC校驗字節以子程序形式調用.設備響應:[設備地址][命令號][返回的字節個數][數據1][數據2]...[數據n][CRC低8位][CRC高8位]。
每個18b20讀取溫度的返回值占用兩個字節.
轉換方法:將實際溫度擴大100倍,再將此數值分為兩個字節傳送出來即可.例如,實測出來溫度是28.65℃,擴大100倍即2865,則發送的*個字節是2865/256即是11,第二個字節是2865%256即49,那么傳送的兩個字節為0×0B和0×31。
需要注意的是,由于采用兩線制的485連線方式,會產生回波通信,即接收端會先接收到自己發送出去的數據,但數據還是會正常發送給采集模塊,此時接收端則應該避開前面的無用數據,接收后面模塊響應的有效數據。
2)在系統運行后,若需更換傳感器,則需執行以下兩條指令,首先,搜索ID,[01][06][0c][00][00][00][CRC低][CRC高],此指令為搜索模塊1上各個通道的所有傳感器。然后寫編號,例如:[01][06][09][05][00][05][CRC低][CRC高],表示將第9通道的原來編號為05的傳感器更換后重新設定為05,執行此兩條指令后,方可重新讀取溫度。
3)CRC校驗字節的生成是比較關鍵的一步,其過程比較復雜,步驟如下:
①預置一個16位CRC寄存器為十六進制FFFF,即所有數位均為1。
②該16位寄存器的低8位字節與信息幀的*個字節的低8位進行&異或?運算.運算結果放入這個16位寄存器。
③把這個16寄存器向右移一位,用0*高位。
④若向右(標記位)移出的數位是1,則生成多項式A001(1010000000000001)和這個寄存器進行“異或”運算;若向右移出的數位是0,則返回③。
⑤重復③和④,直至移出8位。
⑥重復③~⑤,直至該報文所有字節均與16位寄存器進行&異或?運算,并移位8次。
⑦將得到的l6位CRC寄存器的高、低位字節進行,即2字節CRC,加到報文。
其程序流程如圖5,以上面的溫度讀取指令為例,其CRC校驗梯形圖如圖6。
圖5CRC校驗流程
圖6CRC校驗程序
在讀取溫度時,應嚴格遵守DS18b20的讀寫時序,否則就會出現錯誤,丟幀等,若用脈沖信號定時讀取,則間隔應不小于100ms.一般出現錯誤幀時數據顯示為0℃,此時可以進行簡單的濾波,例如傳回值為0時不顯示數據,或者多組數據取平均值后再顯示,以避免溫度顯示的大幅度跳動。DS18b20的初始化溫度顯示為85℃,若一直不變,則此傳感器可能已經損壞或是接線不良,應進行相應的檢查。
4、結束語
該系統應用于生產過程實時監控中,PLC既作為現場控制機完成對生產過程的自動控制,又作為主從通信的主機,與相關儀表連接,實現與基于Modbus現場總線協議的DS18b20型數字溫度傳感器的采集模塊的主從通信,并通過PLC高速實時網絡實現對其的遠程監控。該系統目前處于試運行階段,表現較為穩定,通信可靠,效果良好。