按照上述程序格式, 即可在數據發送區寫入指令進行相應的操作。
1) 讀取溫度, 其指令格式: [ 設備地址] [ 命令號] [ 通道號] [ 傳感器編號] [ 讀取個數高8 位] [ 低8位] [ CRC 低8 位] [ CRC 高8 位] , 其中CRC 校驗字節以子程序形式調用. 設備響應: [ 設備地址] [ 命令號] [ 返回的字節個數] [ 數據1] [ 數據2] . . . [ 數據n] [ CRC 低8 位] [ CRC 高8 位] 。
每個18b20 讀取溫度的返回值占用兩個字節.
轉換方法: 將實際溫度擴大100 倍, 再將此數值分為兩個字節傳送出來即可. 例如, 實測出來溫度是28.65℃ , 擴大100 倍即2 865, 則發送的第一個字節是2 865/ 256 即是11, 第二個字節是2 865% 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。
?
圖5? CRC 校驗流程
?
圖6 CRC 校驗程序
在讀取溫度時, 應嚴格遵守DS18b20 的讀寫時序, 否則就會出現錯誤, 丟幀等, 若用脈沖信號定時讀取, 則間隔應不小于100 ms. 一般出現錯誤幀時數據顯示為0℃, 此時可以進行簡單的濾波, 例如傳回值為0 時不顯示數據, 或者多組數據取平均值后再顯示, 以避免溫度顯示的大幅度跳動。 DS18b20的初始化溫度顯示為85℃, 若一直不變, 則此傳感器可能已經損壞或是接線不良, 應進行相應的檢查。
4? 結束語
該系統應用于生產過程實時監控中, PLC 既作為現場控制機完成對生產過程的自動控制, 又作為主從通信的主機, 與相關儀表連接, 實現與基于Modbus 現場總線協議的DS18b20 型數字溫度傳感器的采集模塊的主從通信, 并通過PLC 高速實時網絡實現對其的遠程監控。 該系統目前處于試運行階段, 表現較為穩定, 通信可靠, 效果良好。
評論
查看更多