当前位置: 首页 > 工具软件 > Modbus-c# > 使用案例 >

Modbus协议(C#)

益和雅
2023-12-01

Modbus是一个工业上常用的通讯协议,主要用于控制器之间通信或者控制器通过以太网和其他设备(如PC)通信。

一、Modbus协议要点

1.Modbus是主/从通信协议,主站发送报文,只有与主站发送报文中呼叫地址相同的从站才能向主站发送回答报文。

2.报文以0地址发送为广播报文,无需从站回答。

3.Modbus规定了2种字符传输模式,ASCII模式RTU(二进制)模式,两种模式不能混用,本文采用RTU模式。

4.传输错误校验(RTU模式采用循环冗余校验),当检验出错时,报文停止处理从机不再继续通信,不对此报文产生回应,主机在一定时间过后未收到从站回答后,即做出“通信错误已发生”的判断。

RTU格式
地址功能码数据CRC校验
1 byte1 byteN bytes2 bytes

二、Modbus存储区

Modbus涉及到的控制器存储区以0xxxx,1xxxx,3xxxx,4xxxx标识。

存储区标识名称类型读/写存储单元地址
0xxxx输出线圈读/写00001-0xxxx
1xxxx输入线圈只读10001-1xxxx
3xxxx输入寄存器只读30001-3xxxx
4xxxx保持寄存器读/写40001-4xxxx

三、Modbus功能

下面介绍几种常见的功能报文:

1.读取输出线圈   功能码0x01

Tx:01 01 00 00 00 0A BC 0D

从站地址(0x01)+功能码(0x01)+起始地址(高位0x00  低位0x00)+线圈数(高位0x00  低位0x0A)+CRC(0xBC 0x0D)

功能:读取1号从站输出线圈00001-00010,共10个线圈状态。

Rx:01 01 02 0F 00 BC 0C

从站地址(0x01)+功能码(0x01)+字节数(0x02)+线圈状态1-8(0x0F)+线圈状态9-10(0x00)+CRC(BC 0C)

功能:返回输出线圈状态,1个字节表示8个线圈状态,尾部不足则充余。

 

2.读取输入线圈   功能码0x02     

除开功能码以及起始地址表示含义,与上相同。

 

3.读取保持型寄存器   功能码0x03

Tx:01 03 00 00 00 0A C5 CD

从站地址(0x01)+功能码(0x03)+起始地址(高位0x00  低位0x00)+寄存器数量(0x00  0x0A)+CRC(0xC5  0xCD)

功能:读取1号从站保持寄存器40001-40010,共10个字(即20个字节,1个字=2个字节=16位)

Rx:01 03 14 00 37 00 2C 00 21 00 0A 00 00 00 00 00 00 00 00 00 00 00 00 7C CC

从站地址(0x01)+功能码(0x03)+字节数(0x14)+字节状态(00 37 00 2C 00 21 00 0A 00 00 00 00 00 00 00 00 00 00 00 00)+CRC(0x7C 0xCC)

功能:返回保持型寄存器状态

 

4.强制单线圈   功能码0x05

Tx:01 05 00 03 00 00 3D CA

从站地址(0x01)+功能码(0x05)+线圈地址(高位0x00  低位0x03)+操作数(0x00  0x00)+CRC(0x3D  0xCA)

功能:强制1号从站4号线圈位OFF状态,ON状态操作数即(0xFF  0x00)

Rx:01 05 00 03 00 00 3D CA

原报文返回

 

5.预置单保持型寄存器   功能码0x06

Tx:01 06 00 10 42 C8 76 69

从站地址(0x01)+功能码(0x06)+寄存器地址(高位0x00  0x10)+数据值(高位0x42  低位0xC8)+CRC(76 69)   

功能:预置1号从站40017号寄存器数据

Rx:01 06 00 10 42 C8 76 69

原文返回
           

6.预置多保持型寄存器   功能码0x10

Tx:01 10 00 00 00 02 04 42 C8 00 00 66 29

从站地址(0x01)+功能码(0x10)+起始地址(0x00  0x00)+寄存器数量(0x00  0x02)+字节数量(0x04)+预置数(0x42 0xC8  0x00  0x00)+CRC(0x66  0x29)           

功能:预置1号从站40001-40002号寄存器数据    

Rx:01 10 00 00 00 02 41 C8 

从站地址(0x01)+功能码(0x10)+起始地址(0x00  0x00)+寄存器数量(0x00  0x02)+CRC(0x41 0xC8)

功能:确认40001-40001预置成功
                                                                                                                       


 

 类似资料: