Modbus通信协议

1、简介

Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准,并且现在是工业电子设备之间常用的连接方式,由于其开放性,现大量用于智能仪表。

2、协议版本

Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。

基于串口通信,存在两个变种,即RTU和ASCII两种通信模式。

3、通信和设备

Modbus协议是一个master/slave架构的协议,但只可以有一个主设备,1-247个从设备,每个从设备有唯一的设备地址。

4、报文格式

RTU 模式

起始位(T3-T5) + 设备地址(8bit) + 功能码(8bit) + 数据 + CRC校验 + 结束符

ASCII 模式

起始位(':') + 设备地址(8bit) + 功能码(8bit) + 数据 + LRC校验 + 结束符

(1)起始位:ASCII模式下起始符是一个冒号  “:” ,RTU模式下是一段时间间隔

(2)设备地址:即从设备地址1-247

(3)功能码:03表示读取,06表示写入(单寄存器)

(4)数据:发送时(寄存器首地址 + 寄存器读取数量);接收时(字节数 + 实际数据)

(5)校验:略

(6)结束符:略

5、常用功能码

01 :读取线圈状态

02 :读取输入状态

03 :读取保持寄存器

04 :读取输入寄存器

05 :强置单线圈

06 :预置单寄存器

07 :读取异常状态

16 :预置多寄存器

6、通讯参数

波特率:一秒钟传送的位数,也就是通讯速率,常用有9600、19200、115200;

校验方式:奇校验('O')或偶校验('E')或无校验('N'),目的是判断传输过程中是否有错误;

数据位:传输一个字符由几个位组成,计算机的基本单位就是“位”,其值非“0”即“1”,又如传送A,定义通讯格式时,是定义的八位,其传送的数据可能就是:00001010;

停止位:传输一个字符有几个停止位,用天判断某个字符是否传输结束,以便开始接收下一个字符。

7、建立modbus通讯相关函数

//创建通讯对象

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、示例

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值