Modbus协议接入
概述
Modbus协议目前已经成为工业领域通信协议的业界标准,是工业电子设备之间最常用的连接方式。
使用Modbus协议的设备接入IoT边缘节点的方式为非直连,组网方案如图1所示。
接入方式 |
方案说明 |
适用场景 |
---|---|---|
非直连接入 |
Modbus设备通过RTU串口与网关进行连接,然后边缘节点通过TCP协议与网关进行通信。网关作为Master节点,Modbus设备作为Slave节点。该方式中,需要将该Modbus设备绑定到指定的Modbus网关,并且,通过“salve id”区分同一Modbus网关下不同的Modbus设备。 |
Modbus设备不具备TCP通信能力,只能通过RTU(串口)方式进行通信。 |
在数据采集时,边缘节点可根据指定的数据采集间隔时间,通过网关向Modbus设备进行数据的采集,数据格式为二进制格式。
数据采集完成后,IoT边缘服务将采集的数据规整(Json格式)后,通过MQTT的方式将数据上报到设备接入服务。
接入流程
业务场景 |
操作步骤 |
说明 |
---|---|---|
设备准备 |
准备Modbus网关 |
购买支持Modbus协议的网关(Modbus设备与网关支持通过RTU通信,网关与边缘节点采用TCP通信)。 |
准备Modbus设备 |
购买支持Modbus协议的传感器设备。 |
|
物联网平台侧操作 |
开发Modbus设备产品模型 |
在设备接入服务开发Modbus设备的产品模型。 |
添加Modbus边缘设备(即网关) |
在边缘节点下,添加Modbus边缘设备(即网关)。 |
|
注册Modbus子设备 |
在Modbus边缘设备下注册Modbus子设备,将Modbus子设备绑定到指定的Modbus网关。 |
开发Modbus设备产品模型
开发Modbus设备能力的产品模型。
首先创建产品,然后通过定义产品模型,在平台构建一款设备的抽象模型,使平台理解该款Modbus设备支持的服务、属性、命令等信息,如温度、电量等,具体操作请参考在线开发产品模型。
创建协议类型为Modbus的产品,如图2所示。

- 协议类型(必填):Modbus
- 创建产品后需为产品添加服务、为服务能力添加属性,不能使用空产品来创建设备。具体操作请参考在线开发产品模型。
添加Modbus边缘设备
在边缘节点下,添加Modbus边缘设备(即网关)。
- 访问IoT边缘,单击“立即使用”进入IoT边缘控制台。
- 选择左侧导航栏的“IoT边缘 > 边缘节点”,选择您的边缘节点名称,进入节点详情页。
- 选择左侧导航栏“应用模块”页签,部署边缘应用。
为了保证设备能够正常在线,请您先部署edge_access应用,具体操作请参考部署应用。
- 选择“边缘设备”页签,单击“添加边缘设备”按钮,按照表1填写参数后,单击“确认”。图3 添加Modbus边缘设备
表1 添加边缘设备 参数名称
说明
所属产品
选择要添加的产品名称“modbus_server”。
说明:- 该“modbus_server”网关设备产品模型已预置,请勿删除。
- 若边缘节点所在的资源空间为非默认的资源空间,则Modbus网关的产品名称为“资源空间ID+modbus_server”。
设备标识码
设备唯一物理标识,如IMEI、MAC地址等,用于设备在接入物联网平台时携带该标识信息完成接入鉴权。
无真实设备时可随意填写英文字母和数字的组合字符串。
设备名称
自定义。
连接类型
- 选择“Server”时需配置以下参数:
- ip:Modbus Server 接入的ip地址。
- port:Modbus Server 接入的端口号,例如502。
- 选择“Client”时需选择“认证类型”:
- None
- Password:填写密钥信息。
- 完成添加设备后,可以查看设备状态,并管理边缘设备。单击“设备ID”跳转至“设备接入”服务控制台查看和管理。图4 查看管理Modbus边缘设备
表2 操作说明 参数名称
说明
配置
查看边缘设备的原有配置,或者修改边缘设备的配置。
删除
删除边缘设备。
说明:若您已在“设备接入服务控制台”删除边缘设备,请前往“IoT边缘控制台>边缘节点详情页>子设备管理”继续删除该设备,否则“IoT边缘服务”将继续对此设备计费。
管理子设备
查看边缘设备详情,以及注册子设备,具体操作可参考注册Modbus子设备。
注册Modbus子设备
在Modbus边缘设备下注册Modbus子设备,将Modbus子设备绑定到指定的Modbus网关。
- 选择左侧导航栏的“IoT边缘>边缘节点”,选择您的边缘节点名称,进入节点详情页。
- 选择左侧导航栏“边缘设备”,根据对应“设备名称”单击操作列的“管理子设备”进入页面。
- 单击“注册子设备”。图5 注册Modbus子设备
- 注册Modbus子设备。按照如下步骤操作:
- 选择产品。所属产品选择开发Modbus设备产品模型中创建的产品。图6 选择Modbus产品
- 数据采集配置。若首次使用新产品注册Modbus子设备,需要进行数据采集配置,配置完成后不能更改。您可以参考表3所示配置产品属性。图7 Modbus数据采集配置
表3 modbus设备属性说明 参数名称
说明
采集方式
- 全量测点采集:一个指令采集设备下的所有属性数据。采集地址范围必须是传感器支持的,建议全量测点采集地址范围与单测点采集中所有测点范围一致。
- 单测点采集:一个指令采集设备下的一个属性数据。
设备配置
全量测点采集时填写。
寄存器起始地址:自定义。
读取寄存器数目:自定义。
属性配置
读功能码
Modbus Device提供读操作的指令。
读功能码分为“比特访问(Bit Access)”和“16比特访问(16 Bit Access)”,功能码均为十进制。比特访问功能码:
- 01:读线圈(Read Coils)
- 02:读输入离散量(Read Discrete Inputs)
16比特访问功能码:
- 03:读多个寄存器(Read Holding Registers)
- 04:读单个寄存器(Read Input Register)
写功能码
Modbus Device提供给Server写操作的指令。
写功能码分为“比特访问(Bit Access)”和“16比特访问(16 Bit Access)”,功能码均为十进制。比特访问功能码:
- 05:写单个线圈(Write Single Coil)
- 15:写多个线圈(Write Multiple Coils)
16比特访问功能码:
- 06:写单个寄存器(Write Single Register)
- 16:写多个寄存器(Write Multiple Registers)
说明:对于设备属性值以寄存器为单位存储时,读功能码建议为“3”,写功能码建议为“16”。
寄存器地址
存储Modbus Device属性值的寄存器地址,寄存器地址占16比特。
寄存器数量
属性对应的数据所在的寄存器个数,占16比特。
交换寄存器内高低字节
是否对寄存器内的数据进行高低位交换,默认:false。例如寄存器中存储的属性数据为:0xabcd ,则IoT边缘节点获取的数据经过高低位交互后为: 0xcdab。
交换寄存器顺序
是否对寄存器的位置进行交换,默认:false。例如寄存器的起始地址为0001,寄存器地址为0002,则将0002地址寄存器与0001地址寄存器进行交换。
缩放因子
对寄存器内的数据进行乘以缩放因子,得到所需的数据,例如获取的温度数据为365,缩放因子为0.1,则得到实际的温度数据为365*0.1=36.5
您可以参考如下图温湿度传感器手册所示,得到如下产品配置属性信息:
- 属性值温度和湿度的存储单位为寄存器,因此读写功能码建议设为3、16;
- 温度属性的寄存器地址为0,湿度属性寄存器地址则为1;
- 使用一个寄存器即可表示温度或者湿度的值,因此寄存器数量为1;
- 不存在寄存器顺序和寄存器内高低字节交换,则使用默认值false;
- 由于该传感器值比实际值扩大10倍,因此缩放因子需要设置为0.1。
- 添加子设备。按照表4填写参数后,单击“确认”。图9 添加Modbus子设备
- 选择产品。所属产品选择开发Modbus设备产品模型中创建的产品。
- 执行完以上操作后,Modbus设备上电接入到IoT边缘节点后,经过一个数据采集周期即可在设备接入服务的设备列表中查看采集的设备数据。
