自用modbus-rtu详解

整合了一些便于自己理解的内容

0x :离散量输出,可读/可写【对应PLC: DO】线圈类地址:00000~09999。使用功能码:01、05、15

1x :离散量输入16位,只读【对应PLC: DI】触点类地址:10000~19999。使用功能码:02

3x :输入寄存器16位,只读【对应PLC: AI】类地址:30000~39999。使用功能码:04

4x :保持寄存器,可读/可写【对应PLC: AO】类地址:40000~49999。使用功能码:03、06、16

 01   读线圈状态

      查询信息规定了要读的起始线圈和线圈量,线圈的起始地址为零,1-16个线圈的寻址地址分为0-15。例:请求从机设备17读20-56线圈。

则为:11 01  00  13   00  25

11为16进制的17,13为16进制的19(20-1),25为57-20

假如回复:11 01 05 CD 6B  B2 0E 1B (无校验码)

05为回复的字节数

线圈27-20的状态用CDH表示,二进制值为11001101,该字节的MCB(最高位)为线圈27,LSB(最低位) 为20。线圈从左(27)向右(20)状态分别为ON-ON-OFF-OFF-ON-ON-OFF-ON,因此第一个字节中的线圈从左到右应是27-20。下一个字节的线圈应为35至28。位数据串行转输从低位到高位,即20…27,28…35。最后一个数据字节中,56-52线圈的状态为1B(或二进制00011011),线圈56是左数第4位,线圈52是该字节的最低位,所线圈56至52的状态分别为ON-ON-OFF-ON-ON注意3个剩余位(至最高位的数)全部填0

02     读输入位状态

读取输入信号,只读,用法同01

03    读取保持寄存器

        读取从机保持寄存器(4X类型)的二进制数据,不支持广播

       响应信息中的寄存器数据为二进制数据,每个寄存器分别对应2个字节,第一个字节为高位值数据,第二个字节为低位数据

04     读取输入寄存器

         读取从机输入寄存器(3X类型)中的二进制数据,不支持广播

        如

        11   04   00   08  00 01

        是读取17号从机的第0009寄存器

05     强置单线圈

        由查询数据区中的一个常量,规定被请求线圈的ON/OFF状态, FF00H值请求线圈处于ON状态,0000H值请求线圈处于OFF状态

        如

        01 05 00 00  FF 00

        是使第一个线圈至1(打开)

06     预置单寄存器

        把一个值预置到一个保持寄存器(4X类型)中,广播时,该功能把值预置到所有从机的相同类型的寄存器中

        如

        01 06 00 00 00 01

        是把数值0001输入到第一个寄存器中

07     读取异常状态

        直接输入从机地址和07码即可

                如:01 07

15     强置多线圈

        如:01 0F 00 00 00 02 01 0E

        01从机地址,0F 功能码,0000是开始地址,0002是往后读两位地址,01是输入一个字节,

0E是输入的数据1110

  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值