modbus3-关于Modicon Modbus Protocol和modscan32
生活随笔
收集整理的這篇文章主要介紹了
modbus3-关于Modicon Modbus Protocol和modscan32
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Modbus 是Modicon 家的東東,所有的規(guī)矩都要它說了算。
先看一下modscan32對上文的設(shè)備的測試結(jié)果
01.
監(jiān)視到串口的數(shù)據(jù)如下:
發(fā)出:01 01 00 00 00 03 7C 0B ?? ? ? ? ? ? ? ? //01站地址,01功能號,00 00 起始地址,00 03要讀的數(shù)據(jù)個數(shù)
接收:01 01 01 03 11 89 ?? ? ? ? ? ? ? ? ? ? ? ? ? //01站地址,01功能號,01返回的字節(jié)數(shù),02即0000 0011 對應(yīng)1個字節(jié)(后3位有效)
02.
監(jiān)視到串口的數(shù)據(jù)如下:
發(fā)出:01 02 00 00 00 03 38 0B?? ? ? ? ? ? ? ? //01站地址,02功能號,00 00 起始地址,00 03要讀的數(shù)據(jù)個數(shù)
接收:01 02 01 03 E1 89 ?? ? ? ? ? ? ? ? ? ? ???? //01站地址,02功能號,01返回的字節(jié)數(shù),03即0000 0011 對應(yīng)1個字節(jié)(后3位有效)
03.
監(jiān)視到串口的數(shù)據(jù)如下:
發(fā)出:01 03 00 00 00 03 05 CB ?? ? ? ? ? ? ? ? //01站地址,03功能號,00 00 起始地址,00 03要讀的數(shù)據(jù)個數(shù)
接收:01 03 06 00 00 00 01 00 02 F1 74??? //01站地址,03功能號,06返回的字節(jié)數(shù),00 00 00 01 00 02 對應(yīng)6個字節(jié)3個數(shù)
04.
監(jiān)視到串口的數(shù)據(jù)如下:
發(fā)出:01 04 00 00 00 03 B0 0B ?? ? ? ? ? ? ? ? //01站地址,04功能號,00 00 起始地址,00 03要讀的數(shù)據(jù)個數(shù)
接收:01 04 06 00 00 00 01 00 02 B0 92??? //01站地址,04功能號,06返回的字節(jié)數(shù),00 00 00 01 00 02 對應(yīng)6個字節(jié)3個數(shù)
可以看到,modscan32
讀modbus地址00001時,使用的是01功能號,并且發(fā)出的起始地址是0
讀modbus地址10001時,使用的是02功能號,并且發(fā)出的起始地址是0
讀modbus地址30001時,使用的是04功能號,并且發(fā)出的起始地址是0
讀modbus地址40001時,使用的是03功能號,并且發(fā)出的起始地址是0
恩,這是modicon modbus 地址的規(guī)范。40001屬于應(yīng)用層,功能號部分應(yīng)該屬于"數(shù)據(jù)鏈路層"
最終交付給客戶的地址都應(yīng)該是如40001等形式的modbus地址,比如你如果定義40001為冰機(jī)蒸發(fā)器出水溫度,對于一般的軟件如modscan32,ModbusSerialDAServer都是采用modbus標(biāo)準(zhǔn)協(xié)議來寫的,所以他們讀取40001時,會發(fā)03功能號和地址0,所以在設(shè)備的響應(yīng)程序里應(yīng)該在接到03功能號和地址0的時候?qū)⑦@個溫度值發(fā)出。
即對應(yīng)關(guān)系是:modbu地址--->功能號,地址--->設(shè)備內(nèi)部定義的變量
另外對modbus功能碼:
01讀取線圈狀態(tài),線圈為可讀可寫,比如plc中的DO可讀可寫,也可以是plc或單片機(jī)的某個內(nèi)部位變量。
02讀取輸入狀態(tài),輸入為只讀,比如plc中DI的狀態(tài)
03讀取保持寄存器,保持寄存器為可讀可寫,比如plc中的AO通道,也可以是plc或單片機(jī)的某個內(nèi)部變量
04讀取輸入寄存器,輸入寄存器為只讀,比如plc中的AI通道
05強(qiáng)制單個線圈
06強(qiáng)制單個保持寄存器
對modbus的功能碼后的地址:
對于單片機(jī)可以是實際的某個寄存器,也可以是某個內(nèi)部變量,按需選擇。
refer to
Modicon Modbus Protocol Reference Guide
http://bbs.cechina.cn/thread-81236.html
**********************************************************************************************************************************************************************************
modscan32沒有寫功能,就試著對照著它也寫了一個基于view/document的modbus讀寫小工具,取名叫modscan36。
http://blog.csdn.net/luck_good/article/details/6973651
先看一下modscan32對上文的設(shè)備的測試結(jié)果
01.
監(jiān)視到串口的數(shù)據(jù)如下:
發(fā)出:01 01 00 00 00 03 7C 0B ?? ? ? ? ? ? ? ? //01站地址,01功能號,00 00 起始地址,00 03要讀的數(shù)據(jù)個數(shù)
接收:01 01 01 03 11 89 ?? ? ? ? ? ? ? ? ? ? ? ? ? //01站地址,01功能號,01返回的字節(jié)數(shù),02即0000 0011 對應(yīng)1個字節(jié)(后3位有效)
02.
監(jiān)視到串口的數(shù)據(jù)如下:
發(fā)出:01 02 00 00 00 03 38 0B?? ? ? ? ? ? ? ? //01站地址,02功能號,00 00 起始地址,00 03要讀的數(shù)據(jù)個數(shù)
接收:01 02 01 03 E1 89 ?? ? ? ? ? ? ? ? ? ? ???? //01站地址,02功能號,01返回的字節(jié)數(shù),03即0000 0011 對應(yīng)1個字節(jié)(后3位有效)
03.
監(jiān)視到串口的數(shù)據(jù)如下:
發(fā)出:01 03 00 00 00 03 05 CB ?? ? ? ? ? ? ? ? //01站地址,03功能號,00 00 起始地址,00 03要讀的數(shù)據(jù)個數(shù)
接收:01 03 06 00 00 00 01 00 02 F1 74??? //01站地址,03功能號,06返回的字節(jié)數(shù),00 00 00 01 00 02 對應(yīng)6個字節(jié)3個數(shù)
04.
監(jiān)視到串口的數(shù)據(jù)如下:
發(fā)出:01 04 00 00 00 03 B0 0B ?? ? ? ? ? ? ? ? //01站地址,04功能號,00 00 起始地址,00 03要讀的數(shù)據(jù)個數(shù)
接收:01 04 06 00 00 00 01 00 02 B0 92??? //01站地址,04功能號,06返回的字節(jié)數(shù),00 00 00 01 00 02 對應(yīng)6個字節(jié)3個數(shù)
可以看到,modscan32
讀modbus地址00001時,使用的是01功能號,并且發(fā)出的起始地址是0
讀modbus地址10001時,使用的是02功能號,并且發(fā)出的起始地址是0
讀modbus地址30001時,使用的是04功能號,并且發(fā)出的起始地址是0
讀modbus地址40001時,使用的是03功能號,并且發(fā)出的起始地址是0
恩,這是modicon modbus 地址的規(guī)范。40001屬于應(yīng)用層,功能號部分應(yīng)該屬于"數(shù)據(jù)鏈路層"
最終交付給客戶的地址都應(yīng)該是如40001等形式的modbus地址,比如你如果定義40001為冰機(jī)蒸發(fā)器出水溫度,對于一般的軟件如modscan32,ModbusSerialDAServer都是采用modbus標(biāo)準(zhǔn)協(xié)議來寫的,所以他們讀取40001時,會發(fā)03功能號和地址0,所以在設(shè)備的響應(yīng)程序里應(yīng)該在接到03功能號和地址0的時候?qū)⑦@個溫度值發(fā)出。
即對應(yīng)關(guān)系是:modbu地址--->功能號,地址--->設(shè)備內(nèi)部定義的變量
另外對modbus功能碼:
01讀取線圈狀態(tài),線圈為可讀可寫,比如plc中的DO可讀可寫,也可以是plc或單片機(jī)的某個內(nèi)部位變量。
02讀取輸入狀態(tài),輸入為只讀,比如plc中DI的狀態(tài)
03讀取保持寄存器,保持寄存器為可讀可寫,比如plc中的AO通道,也可以是plc或單片機(jī)的某個內(nèi)部變量
04讀取輸入寄存器,輸入寄存器為只讀,比如plc中的AI通道
05強(qiáng)制單個線圈
06強(qiáng)制單個保持寄存器
對modbus的功能碼后的地址:
對于單片機(jī)可以是實際的某個寄存器,也可以是某個內(nèi)部變量,按需選擇。
refer to
Modicon Modbus Protocol Reference Guide
http://bbs.cechina.cn/thread-81236.html
**********************************************************************************************************************************************************************************
modscan32沒有寫功能,就試著對照著它也寫了一個基于view/document的modbus讀寫小工具,取名叫modscan36。
http://blog.csdn.net/luck_good/article/details/6973651
轉(zhuǎn)載于:https://www.cnblogs.com/-song/archive/2011/11/05/3331935.html
總結(jié)
以上是生活随笔為你收集整理的modbus3-关于Modicon Modbus Protocol和modscan32的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装centos6.0 未找到任何驱动器
- 下一篇: modbus4-232 485 单机 多