最近刚写完一个完整的MODBUS协议(RTU),包括主站和从站。
其实主站从站这个说法不全面,应该是请求方(request)和回应方(respond)。协议的说明书是从回应方的角度来写的,而请求方因为需求不一样,写法有很多。
协议没有讲的一个地方是DATBUF,数据存储区。作为从站必须要有这样的4个区来保存数据。一个区:线圈输入;一个区:线圈输出。一个区:寄存器输入;一个区:寄存器输出。这四个区实际就是4个数组。他们的现实意义是:线圈用来保存开关量类,寄存器用于保存多字节的数据类。输入的含义是主站无法改变的量,主站只能改变输出量,这个从现实中想想就明白,比如输入是一个限位开关,他的状态不能以主站来改变的。
有这四个区的作用是,如果有数据输入或者变化,从站只需要改变相应的值就可以,而不必关系主站来请求什么。主站只需要在相应的位置获取相应的值就可以了。
主站也要有相似的区来存放读取的值。这个区间的大小取决于需要。
MODBUS通讯的完整字节应该是:地址+功能码+数据区+CRC,协议里讨论的只是中间部分,功能码和数据区。
其他协议说的够明白了。
更新说明(2024年3月21日)
在MODBUS通讯协议中,输入线圈(Input Coils)和输出线圈(Output Coils)是两种不同类型的数据结构,用于在MODBUS网络中传输和控制数字信号。它们的主要区别在于其用途和操作。
-
输入线圈(Input Coils):
- 输入线圈是只读的,表示外部系统或设备的状态。
- 它们代表实际的物理输入,例如传感器的状态或外部开关的状态。
- 输入线圈可以被读取,以便从远程设备获取实时状态信息。
- 在MODBUS网络中,输入线圈通常对应于保持寄存器(Holding Registers)的特定位或字节。
1571




被折叠的 条评论
为什么被折叠?



