跳到主要内容

RS485 Modbus主机教程(简版)

前言

本文章主要讲解简版。

繁版和简版区别:

  • 繁版更灵活,使用起来稍微繁琐一点,但能实现更灵活的 Modbus 主机通信功能;
  • 简版使用起来非常简单,但主要专注于最频繁使用的 Modbus 读寄存器/读线圈的操作(例如 01、02、03和04功能码)

一、介绍

ShineBlink 提供如下四个 Modbus-RTU 主机通信(简版)函数,用来简化 Modbus-RTU 主机通信实现的代码量,开发者只需要在函数参数中完成简单的配置即可实现通过 RS485 读取各种 RS485传感器设备的数据:

--四个Modbus-RTU主机通信简版函数的详细说明,这四个函数的详细说明请参看 ShineBlink 的 Api 文档
LIB_ModbusToJsonConfig() --初始化 Modbus-RTU 主机通信实例,并配置结果 Json 字符串长度
LIB_ModbusToJsonAdd() --增加一个要读取的寄存器
LIB_ModbusToJsonSend() --执行RS485发送
LIB_ModbusToJsonFinishCheck() --等待RS485应答数据

目前支持的功能为:01,02,03,04:

功能码功能介绍
01读线圈
02读离散量输入
03读保持寄存器
04读输入寄存器

二、核心代码片段示例

以下代码示例使用 Modbus-RTU 主机通信(简版)函数读取一个 RS485 温湿度传感器的代码片段。

开发者通过配置相应的参数,构造一个 ModbusToJson() 函数后即可获取到温湿度传感器的数据(以 Json 字符串形式返回),关于该函数的详细使用例程源码请参看《RS485 Modbus主机例程(简版)》文章。

--读取RS485温湿度传感器
--获取到的Json数据形如:{"Humi":79.7,"Temp":26.8}
function ModbusToJson()
--配置RS485 Modbus转Json功能,并设置将要生成的Json字符串最大长度为150字节
LIB_ModbusToJsonConfig(150)--必须小于255
--湿度值寄存器地址0x0000,类型为16bit带符号AB型,小数点个数1个,Json Key名称"Humi"
LIB_ModbusToJsonAdd(0x0000,"S_AB",1,"Humi")
--温度值寄存器地址0x0001,类型为16bit带符号AB型,小数点个数1个,Json Key名称"Temp"
LIB_ModbusToJsonAdd(0x0001,"S_AB",1,"Temp")

--参数设置(波特率4800,无校验,1位停止位,功能码"03",从机地址0x01,应答最长等待1000ms,包与包最短间隔100ms)
LIB_ModbusToJsonSend("BAUDRATE_4800","NoneParity","StopBit_1","03",0x01,1000,100)
end
如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。