本文是基于modbus协议书英文原版的阅读理解,对其进行了翻译和摘取,如有不当之处,还请指出,望不吝赐教。
一、基本概念明确
在开始之前,首先明确一些基本概念:
位:单位bit,缩写为b,最小的数据单位
字节:单位bytes,缩写为B,一个字节拥有8位
字:字是其用来一次性处理事务的一个固定长度的位组,其长度依据不同的系统而定。在Modbus中,常采用字长为16-bit的字
PS:1KB=1024B,单位换算上是1024进制。
二、modbus的字节序
modbus采用大端字节序,所谓字节序,就是在传输数据时,决定数据哪位有限发送的排序。大端字节序指的就是优先发送高位,最高有效字节(Most Significant Byte,MSB)在前,最低有效字节(Least Significant Byte,LSB)在后。
英文原版说明书实例下:
寄存器中存储了一个十六进制数0x1234,其最高有效字节是0x12,最低有效字节是0x34。在传输时,先发送0x12,然后发送0x34。
三、modbus的数据结构和寻址模型
现在切入正题,想要了解Modbus的功能码,必须先弄清楚Modbus的数据结构和传输方式。
原版与个人意译表如上。
modbus将数据分为4种类型(块)进行管理。但是需要注意的是,则4种类型的数据在某些情况下可能会叠加(重合)。打个比方,在普通情况下,设有一个5个数据块的设备A,modbus通过使用功能码对表中四项对应的数据块进行了操作,这时它们是相互独立的,各取所需,互不影响。但对于一个只有一个数据块的设备B,四连一,通过功能码得到的数据则可能都是一样的。
在MODBUS数据模型中,每个数据块中的元素都从1到n进行编号。
MODBUS数据模型必须与设备应用程序(IEC-61131对象或其他应用程序模型)进行绑定。MODBUS数据模型与设备应用程序之间的预映射完全取决于供应商设备的特定要求。
MODBUS寻址模型
MODBUS应用协议也明确定义了PDU(Protocol Data Unit)的寻址规则。每个数据在PDU中都有一个地址,范围从0到65535。
在实际使用中,一般不会发生地址溢出问题。PLC 厂商说明书往往提供地址名称和Modbus协议地址。此处的详情可以参考该作者:
https://blog.csdn.net/csdnharrychinese/article/details/130592546
4.Modbus事务 MODBUS事务是指MODBUS客户端和MODBUS服务器之间的通信过程。简单来说就是客户端请求,服务器处理并响应。原图如下: 服务器从空闲状态开始,等待来自客户端的请求。一旦接收到请求,服务器将转换到“处理请求”状态。随后服务器处理请求并根据请求功能码确定适当的响应。如果请求成功处理,则会给出正向响应(相对于异常响应)。响应功能码设置为与请求功能码相同的值。随后服务器转换到“发送响应”状态,将响应发送回客户端。 然而,如果在处理请求过程中检测到错误,则会构建一个MODBUS异常响应。异常功能码设置为请求功能码加上0x80。此外,提供异常代码以指示错误的原因。然后,服务器转换到“发送异常响应”状态,将异常响应发送给客户端。一旦发送响应或异常响应,服务器将返回到空闲状态,准备接收下一个请求。 总体而言,MODBUS事务涉及服务器处理客户端的请求,并根据处理结果生成适当的响应或异常响应。 标签:MODBUS,请求,Modbus,响应,服务器,数据结构,字节 From: https://www.cnblogs.com/Kawashiro-Nitori/p/17613902.html