最后更新:2022-04-10 21:22
1、简介
Modbus是一项合作通信议定书。1979年,Modicon(原Schneider Electric)首次使用可编程逻辑控制器(PLC)通信。摩布斯已成为工业通信协定的行业标准。它正在成为连接工业装置的典型方法。由于其开放性,目前正在使用许多智能仪器。
2、协议版本
摩德布斯协议现在包括支持序列输入网络、以太网和其他互联网协议。
序列通信在两种变式中使用:RTU和ASCII。
3、通信和设备
《摩德布斯协定》是一份主/奴隶结构协定,但只有1件主要设备,其中1至247件来自设备,每个设备都有独特的设备地址。
4、报文格式
RTU 模式:
启动 (T3-T5) 位置+设备地址( 8bit) + 函数代码( 8bit) + 数据+ CRC 校验+ Ender
ASCII 模式:
开始 (':') 位置 + 设备地址 (8bit) + 函数代码 (8bit) + 数据 + LRC 核查+ Ender
(1) ASCII是一个冒号“:”, RTU是一个时间段 。
(2) 设备的地址:即1-247(设备地址)
(3) 读取功能代码为03,而创建功能代码为06(单一登记册)。
(4) 数据:发送时(初始登记地址+登记册读数);收到时(字节+实际数据)。
(5)校验:略
(6)结束符:略
5、常用功能码
01: 检查圆形状态
02:阅读输入条件
03:阅读以保持记录
04: 输入登记簿读数
05 :强置单线圈
06: 配置单一的登记册
07:检查异常状态
16:多仓库预设
6、通讯参数
(a) 波特费率:一秒钟内通知的地点数目,即通信费率,通常为9 600、19200和115 200;
核查方法:奇数核查(`O')、甚至核查('E'),或没有核查('N'),以确定在传输过程中是否发生了错误;
数据位数:由多个位数组成的字符的传输,计算机的基本单位为“位数”,其值既不是“0”或“1”,例如,传输A,通信格式被指定为8个位数,传送的数据可能为:0010;
停止位数 : 传输一个字符, 有许多停止位数, 以便检测一个字符在传输结束时是否终止, 以便接收以下字符 。
7. 发展模式通信功能。
//创建通讯对象
modbus_t* modbus_new_rtu(const char *device, int baud, char parity, int data_bit, int stop_bit);
//设置从机地址
int modbus_set_slave(modbus_t* ctx, int slave);
//设置超时
int modbus_set_response_timeout(modbus_t *ctx, uint32_t to_sec, uint32_t to_usec);
//建立连接
int modbus_connect(modbus_t *ctx);
//读取寄存器值
int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest);
//写入寄存器值
int modbus_write_register(modbus_t *ctx, int reg_addr, int value);
8、示例

本文由 在线网速测试 整理编辑,转载请注明出处。