數(shù)字通訊
本儀表提供串行異步半雙工RS485通訊接口,采用MODBUS-RTU協(xié)議,各種數(shù)據(jù)信息均可在通訊線路上傳送。在一條線路上可以同時(shí)連接多達(dá)64個(gè)網(wǎng)絡(luò)儀表,每個(gè)網(wǎng)絡(luò)儀表均可設(shè)定其通訊地址,通訊連接應(yīng)使用帶有銅網(wǎng)的屏蔽雙絞線,線徑不小于0.5mm2。布線時(shí)應(yīng)使通訊線遠(yuǎn)離強(qiáng)電電纜或其他強(qiáng)電場(chǎng)環(huán)境,推薦采用T型網(wǎng)絡(luò)的連接方式,不建議采用星形或其他的連接方式。
MODBUS_RTU通訊協(xié)議:MODBUS協(xié)議在一根通訊線上采用主從應(yīng)答方式的通訊連接方式。先,主計(jì)算機(jī)的信號(hào)尋址到一臺(tái)地址的終端設(shè)備(從機(jī)),然后,終端設(shè)備發(fā)出的應(yīng)答信號(hào)以相反的方向傳輸給主機(jī),即:在一根單獨(dú)的通訊線上信號(hào)沿著相反的兩個(gè)方向傳輸?shù)耐ㄓ崝?shù)據(jù)流(半雙工的工作模式)。MODBUS協(xié)議只允許在主機(jī)(PC,PLC等)和終端設(shè)備之間通訊,而不允許的終端設(shè)備之間的數(shù)據(jù)交換,這樣各終端設(shè)備不會(huì)在它們初始化時(shí)占據(jù)通訊線路,而限于響應(yīng)到達(dá)本機(jī)的查詢信號(hào)。
主機(jī)查詢:查詢消息幀包括設(shè)備地址、功能代碼、數(shù)據(jù)信息碼、校準(zhǔn)碼。地址碼表明要選中的從機(jī)設(shè)備;功能代碼告之被選中的從設(shè)備要執(zhí)行何種功能,例如功能代碼03或04是要求從設(shè)備讀寄存器并返回它們的內(nèi)容;數(shù)據(jù)段包含了從設(shè)備要執(zhí)行功能的任何附加信息,校驗(yàn)碼用來(lái)檢驗(yàn)一幀信息的正確性,從設(shè)備提供了一種驗(yàn)證消息內(nèi)容是否正確的方法,它采用CRC16的校準(zhǔn)規(guī)則。
從機(jī)響應(yīng):如果從設(shè)備產(chǎn)生一正常的回應(yīng),在回應(yīng)消息中有從機(jī)地址碼、功能代碼、數(shù)據(jù)信息碼和CRC16校驗(yàn)碼。數(shù)據(jù)信息碼則包括了從設(shè)備收集的數(shù)據(jù):象寄存器值或狀態(tài)。如果有錯(cuò)誤發(fā)生,我們約定是從機(jī)不進(jìn)行響應(yīng)。
傳輸方式:是指一個(gè)數(shù)據(jù)幀內(nèi)一系列的數(shù)據(jù)結(jié)構(gòu)以及用于傳輸數(shù)據(jù)的有限規(guī)則,下面定義了與MODBUS協(xié)議– RTU方式相兼容的傳輸方式。我們規(guī)定在本儀表中采用的通訊數(shù)據(jù)格式:10位數(shù)據(jù)通訊(1個(gè)起始位、8個(gè)數(shù)據(jù)位、1個(gè)停止位、無(wú)校驗(yàn)位)
數(shù)據(jù)幀的結(jié)構(gòu),即:報(bào)文格式
地址碼 | 功能碼 | 數(shù)據(jù)碼 | 校驗(yàn)碼 |
1個(gè)BYTE | 1個(gè)BYTE | N個(gè)BYTE | 2個(gè)BYTE |
在我們的系統(tǒng)中只使用1~247,其它地址保留。這些位標(biāo)明了用戶指定的終端設(shè)備的地址,該設(shè)備將接收來(lái)自與之相連的主機(jī)數(shù)據(jù)。每個(gè)終端設(shè)備的地址須是的,被尋址到的終端會(huì)響應(yīng)包含了該地址的查詢。當(dāng)終端發(fā)送回一個(gè)響應(yīng),響應(yīng)中的從機(jī)地址數(shù)據(jù)便告訴了主機(jī)哪臺(tái)終端正與之進(jìn)行通信。
功能碼:告訴了被尋址到的終端執(zhí)行何種功能。下表列出儀表所支持的的功能碼,以及它們的意義和功能。
代碼 | 意 義 | 行 為 |
03/04 | 讀數(shù)據(jù)寄存器 | 獲得一個(gè)或多個(gè)寄存器的當(dāng)前值 |
16 | 寫預(yù)置寄存器 | 設(shè)定值到相關(guān)的寄存器中 |
數(shù)據(jù)碼 :包含了終端執(zhí)行特定功能所需要的數(shù)據(jù)或者終端響應(yīng)查詢時(shí)采集到的數(shù)據(jù)。這些數(shù)據(jù)的內(nèi)容可能是數(shù)值、參考地址或者設(shè)置值。例如:功能域碼告訴終端讀取一個(gè)寄存器,數(shù)據(jù)域則需要指明從哪個(gè)寄存器開始及讀取多少個(gè)數(shù)據(jù),而叢機(jī)數(shù)據(jù)碼回送內(nèi)容則包含了數(shù)據(jù)長(zhǎng)度和相應(yīng)的數(shù)據(jù)。
校驗(yàn)碼: 錯(cuò)誤校驗(yàn)(CRC)域占用兩個(gè)字節(jié),包含了一個(gè)16位的二進(jìn)制值。CRC值由傳輸設(shè)備計(jì)算出來(lái),然后附加到數(shù)據(jù)幀上,接收設(shè)備在接收數(shù)據(jù)時(shí)重新計(jì)算CRC值,然后與接收到的CRC域中的值進(jìn)行比較,如果這兩個(gè)值不相等,就發(fā)生了錯(cuò)誤。
生成一個(gè)CRC 的流程為:
1.預(yù)置一個(gè)16位寄存器為FFFFH(全1),稱之為CRC寄存器。
2.把數(shù)據(jù)幀中的個(gè)字節(jié)的8位與CRC寄存器中的低字節(jié)進(jìn)行異或運(yùn)算,結(jié)果存回CRC寄存器。
3. 將CRC寄存器向右移一位,位填以0,位移出并檢測(cè)。
4.如果位為0:重復(fù)第三步(下移位);如果位為1:將CRC寄存器與一個(gè)預(yù)設(shè)的固定值(0A001H)進(jìn)行異或運(yùn)算。
5. 重復(fù)第三步和第四步直到8次移位。這樣處理完了一個(gè)完整的八位。
6. 重復(fù)第2步到第5步來(lái)處理下一個(gè)八位,直到的字節(jié)處理結(jié)束。
7. 終CRC寄存器的值就是CRC的值。
一.舉例說(shuō)明:
1:讀取從機(jī)參數(shù)(功能碼03):可取得被編址從機(jī)中參數(shù)的設(shè)定值。
詢問: 要求讀取1號(hào)從機(jī)參數(shù)的設(shè)定值
地址 | 功能碼 | 參數(shù)起始寄存器高位 | 參數(shù)起始寄存器低位 | 參數(shù)寄存器個(gè)數(shù)高位 | 參數(shù)寄存器個(gè)數(shù)低位 | 校驗(yàn)低位 | 校驗(yàn)高位 |
01 | 03 | 00 | 00 | 00 | 01 | 84 | 0A |