Modbus通信协议

      最后更新: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、示例

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

          热门文章

          文章分类