Modbus协议(一)

       Modbus协议是一只应用层报文传输协议,有RTU、ASCII、TCP/IP三种报文类型,使用串口传输时,有两种模式RTU和ASCII模式。ASCII模式采用是LRC校验,RTU模式采用16位的CRC校验,使用TCP/IP网络传输时,则不需要这种校验。

Modbus协议规定了4个存储区,如下表所示
区号名称读写范围
0区输出线圈可读可写00001-09999
1区输入线圈只读10001-19999
3区输入寄存器只读30001-39999
4区保存寄存器可读可写40001-49999
常用的功能码
功能码名称modbus设备寄存器地址

位操作/字操作

操作数量
01H读取输出线圈(读取)00001-09999位操作单个或多个
02H读取输入线圈(读取)10001-19999位操作单个或多个
03H读取保持寄存器(读取)40001-49999字操作单个或多个
04H读取 输入寄存器(读取)30001-39999字操作单个或多个
05H预置单线圈(写入)00001-09999位操作单个线圈
06H预置单寄存器(写入)40001-49999字操作单个寄存器
0FH预置多线圈(写入)00001-09999位操作多个线圈
10H预置多寄存器(写入)40001-49999字操作多个寄存器

       在modbus标准中,RTU是必须要求的,ASCII是可选项,即一个Modbus设备可以只支持RTU模式或兼容RTU和ASCII两种模式,不能只支持ASCII模式。在发送报文时,一帧结束后,必须要有3.5个字符周期的是间隔时间(4.01ms),否则会出现粘包的情况。

串行通讯的报文格式

从站地址功能码数据CRC/LRC
1 Byte1 ByteN Byte2 Byte

读取输出线圈(01H)

报文格式例子:

从站地址功能码起始地址(高位)起始地址(低位)数量(高)数量(低)校验
0x010x010x000x000x000x1BXXXX

      报文解析的意思是从站号为1的设备中读取00001-00027的线圈状态值(0x1B=27),功能码0x01表示读取的是0区的输出线圈状态值。

返回的报文格式

从站地址功能码字节计算字节1字节2字节3字节4校验
0x010x010x040xCD0x6B0xB20x05XXXX

读取返回的状态值为 CD 6B B2 05

      报文的意思就是从1号从站设备返回输出线圈00001-00027的状态值,bit位被置1,表示该输出线圈为ON

0xCD=1100 1101 对应00001-00008  0x6B=0110 1011对应的是00009-00016

0xB2=1011 0010 对应的是00017-00024 0x05=0000 0101对应的是00025-00027

其他功能的读取,同上述功能码的读取报文,返回报文类似 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值