MODBUS规约
文章平均质量分 68
XZHOUMIN
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MODBUS规约的秘密之五-----如何用C++编写MODBUS规约
如上图,我们可以看到MODBUS_RTU和MODBUS_TCP之间有共同的部分,因此可以考虑用C++中的继承方式。这个类中主要实现就是分析报文函数AnalyseDiagram,处理都是从功能码开始的,之所以传入全部报文,还是为了打印显示报文用。在main函数中,根据读取配置文件,判断是MODBUS_TCP,还是MODBUS_RTU来实例化不同的类。发送报文函数WriteTele也定义为纯虚函数,需要继承实现,基类只负责将需要发送的应用层报文传入,由继承类来增加头尾并进行具体发送。// modbus实例。原创 2024-11-23 08:30:40 · 843 阅读 · 0 评论 -
MODBUS规约的秘密之四-----各种数据类型
至于字符串,一般用一个字节表示一个字符,需要约定编码方式,是GBK还是UTF8,还需要约定字符串最大长度,还需要约定字符串的发送顺序,是从阅读顺序的最高字节开始送还是从最左边的最低字节开始送。LONG_R 4字节 低字在前,高字在后,高字的高字节bit7为符号位,补码表示。FLOAT 4字节 高字在前,低字在后,高字节在前,低字节在后。FLOAT_R 4字节 高字在后,低字在前,高字节在前,低字节在后。DOUBLE 8字节 高字节在前,低字节在后,高字前,低字后。原创 2024-11-21 10:26:32 · 1099 阅读 · 0 评论 -
MODBUS规约的秘密之二-----写数据之遥控遥调
MBAP报文头报文中的长度:设备地址长度+功能码长度+寄存器地址长度+需要写的值的长度 = 6。MBAP报文头报文中的长度:设备地址长度+功能码长度+寄存器地址长度+需要写的值的长度 = 6。黄色表示MODBUS_TCP报文包含的部分,蓝色表示MODBUS_RTU表示报文包含的部分。写数据主要用于遥控,遥调和对时等操作,本质是通过写寄存器的方式来实现的。差别就是MODBUS_TCP多一个MBAP报文头,少一个校验码。MODBUS_RTU是少一个MBAP报文头,多一个校验码。因此这个开发是比较好做的。原创 2024-11-15 08:55:50 · 1494 阅读 · 0 评论 -
MODBUS规约的秘密之一-----读取数据
设备地址在第一个字节,这是因为MODBUS最开始只有串口通讯方式,在一条485总线上接了很多设备,是一主多从,当主发出请求数据报文后,所有设备都会收到报文,根据第一个字节的设备地址和自己的地址相比较,相同的设备进行回复,其他设备静默。这里的回复数据是按顺序的,一共12个字节,2个字节表达一个寄存器的值,按顺序分别表达寄存器地址为2531,2532,2533,2534,2535,2536的值。数据01 C8为一个寄存器的值,高字节在前,低字节在后,因此值的计算方式为:01原创 2024-11-13 08:30:12 · 1958 阅读 · 0 评论
分享