modbus3-关于Modicon Modbus Protocol和modscan32

Modbus 是Modicon 家的东东,所有的规矩都要它说了算。

先看一下modscan32对上文的设备的测试结果
01.

监视到串口的数据如下:
发出:01 01 00 00 00 03 7C 0B                  //01站地址,01功能号,00 00 起始地址,00 03要读的数据个数
接收:01 01 01 03 11 89                            //01站地址,01功能号,01返回的字节数,03即0000 0011 对应1个字节

02.

监视到串口的数据如下:
发出:01 02 00 00 00 03 38 0B                 //01站地址,02功能号,00 00 起始地址,00 03要读的数据个数
接收:01 02 01 03 E1 89                           //01站地址,02功能号,01返回的字节数,03即0000 0011 对应1个字节

03.

监视到串口的数据如下:
发出:01 03 00 00 00 03 05 CB                  //01站地址,03功能号,00 00 起始地址,00 03要读的数据个数
接收:01 03 06 00 00 00 01 00 02 F1 74    //01站地址,03功能号,06返回的字节数,00 00 00 01 00 02 对应6个字节3个数

04.

监视到串口的数据如下:
发出:01 04 00 00 00 03 B0 0B                  //01站地址,04功能号,00 00 起始地址,00 03要读的数据个数
接收:01 04 06 00 00 00 01 00 02 B0 92    //01站地址,04功能号,06返回的字节数,00 00 00 01 00 02 对应6个字节3个数

可以看到,modscan32
读modbus地址00001时,使用的是01功能号,并且发出的起始地址是0
读modbus地址10001时,使用的是02功能号,并且发出的起始地址是0
读modbus地址30001时,使用的是04功能号,并且发出的起始地址是0
读modbus地址40001时,使用的是03功能号,并且发出的起始地址是0


最终交付给客户的地址都应该是如40001等形式的modbus地址,比如你如果定义40001为冰机蒸发器出水温度,对于一般的软件如modscan32,ModbusSerialDAServer都是采用modbus标准协议来写的,所以他们读取40001时,会发03功能号和地址0,所以在设备的响应程序里应该在接到03功能号和地址0的时候将这个温度值发出。
即对应关系是:modbu地址--->功能号,地址--->设备内部定义的变量

另外对modbus功能码:
01读取线圈状态,线圈为可读可写,比如plc中的DO可读可写,也可以是plc或单片机的某个内部位变量。
02读取输入状态,输入为只读,比如plc中DI的状态
03读取保持寄存器,保持寄存器为可读可写,比如plc中的AO通道,也可以是plc或单片机的某个内部变量
04读取输入寄存器,输入寄存器为只读,比如plc中的AI通道
05强制单个线圈
06强制单个保持寄存器

对modbus的功能码后的地址:
对于单片机可以是实际的某个寄存器,也可以是某个内部变量,按需选择。

refer to
Modicon Modbus Protocol Reference Guide
http://bbs.cechina.cn/thread-81236.html
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值