线圈和寄存器 表示数据类型
线圈:表示Boolean数据类型
寄存器:表示非Boolean数据类型,用来暂时存放参与运算的数据和运算结果,具有接收数据、存放数据和输出数据的功能。
ModbusRTU
读输出线圈 存储区代号 0区 功能码 0x01
读输入线圈 存储区代号 1区 功能码 0x02
》》》》寄存器按字节,线圈按位 操作 1个寄存器占2个字节 2B 8bit=1B
读输出寄存器 == 读保持寄存器 存储区代号4区 功能码 0x03
2个寄存器 4个字节 0x04
寄存器1(高位) 0xA1
寄存器1(低位) 0x05
寄存器2(高位) 0x04
寄存器2(低位)0xCD
综上:40007上的寄存器数据 0xA105 40008上的寄存器数据 0x04CD
读输入寄存器 存储区代号3区 功能码 0x04
写入单个输出线圈 存储区代号0区 功能码 0x05
写入单个输出寄存器 存储区代号4区 功能码 0x06
写入多输出线圈 存储区代号0区 功能码 0x0f
写入多保持寄存器 === 多输出寄存器 存储区代号4区 功能码 0x10
ModbusRTU如何判断开始与结束,避免粘包 C# 线程要休眠一会,一般 thread.sleep(50)
ModBusTCP
Modbus TCP协议是在Modbus RTU协议上加入**MBAP(ModbusApplication Protocol Header)**报文头,由于TCP是基于可靠连接的服务,所以在Modbus TCP协议中没有CRC校验,所有的Modbus TCPADU的发送和接收都是使用TCP传输控制协议,Modbus TCP/IP服务器端通常使用端口502作为接收报文的端口, IANA(Internet Assigned Numbers Authority,互联网编号分配管理机构)给Modbus协议赋予TCP端口号为502,这是目前在仪表与自动化行业中唯一分配到的端口号。
读输出寄存器==保持寄存器 存储代号 4区 功能码 0x03
通信状况
》》》
异常码表