Link IoT Edge提供Modbus官方驱动,用于支持工业领域广泛应用的Modbus通信协议设备。本文主要介绍Modbus驱动及其用法。

概览

Modbus是常用的应用层数据通信协议,阿里云官方Modbus驱动(以下简称Modbus驱动)支持Modbus RTU和Modbus TCP两种交互。

Modbus驱动可以直接连接Modbus从设备,示意图如下所示。Modbus驱动直接连接设备
Modbus驱动也可以通过Modbus网关连接Modbus从设备,示意图如下所示。Modbus驱动通过网关连设备

Modbus驱动支持的功能有读取输入状态和输入寄存器、读取和写入线圈状态、保持寄存器。

Link IoT Edge提供C和Python语言Modbus驱动,同时根据CPU架构的不同,有多种C语言Modbus驱动。您可以直接从控制台部署Modbus驱动到网关,也可以从控制台下载Modbus驱动代码进行修改,作为您的自定义驱动使用。

本文以示例方式介绍Modbus官方驱动的使用步骤,具体操作如下文所示。

前提条件

请确保已创建边缘实例并上线网关,具体操作请参见环境搭建

一、分配驱动

  1. 登录物联网平台控制台
  2. 左侧导航栏单击边缘计算 > 边缘实例,在已创建的边缘实例右侧单击查看
  3. 实例详情页面设备与驱动页签下,单击全部驱动右侧的+图标 。
  4. 分配驱动页面中,选择官方驱动,根据网关CPU架构选择需要使用的Modbus驱动,单击对应操作栏中的分配。然后单击关闭
    说明
    • C语言Modbus驱动,需在v1.8.4及以上版本的Link IoT Edge中使用。
    • Python语言Modbus驱动,仅支持在Link IoT Edge专业版中使用。
    选驱动

二、配置驱动

  1. 单击已分配的Modbus驱动,在设备列表右侧单击驱动配置
  2. 在弹出页面中单击添加通道
    通道是网关与具体物理设备之间的连接介质。添加通道
  3. 根据界面提示设置参数,然后单击确定
    参数 描述
    通道名称 设置通道名称,需在网关维度具有唯一性。支持中文汉字、英文字母、数字和下划线(_),长度不超过1~30个字符,1个中文汉字算2个字符。
    传输模式

    支持RTUTCPLoRa LAN三种。

    当传输模式为RTU时,需设置以下参数:
    串口 设置串口,如/dev/ttyUSB0/dev/ttyUSB1。支持英文字母、数字、正斜杠(/)和下划线(_),长度限制1~64字符。
    波特率 表示每秒传送的符号个数,从下拉列表中选择。
    数据位 表示一组数据实际包含的数据位数,从下拉列表中选择。
    校验位 从下拉列表中选择奇偶校验、或者无校验。
    停止位 用于表示单个包的最后一位,从下拉列表中选择。
    当传输模式为TCP时,需设置以下参数:
    IP地址 Modbus设备IP地址,输入点分十进制格式的地址。
    端口号 Modbus设备端口号,输入1~65535范围的整数。
    当传输模式为LoRa LAN时,需设置以下参数:
    DevAddr 设备地址。请填写8位十六进制数值,例如66be****
    AppSKey 应用会话密钥。请填写32位十六进制数值,例如623bd505f042090b5af660954509****
    NwkSKey 网络会话密钥。请填写32位十六进制数值,例如e1336a94a03aa3beae55b737acda****
    Class 通信节点的特定类。当前仅支持C特定类,即随时接收设备上报的数据。
    上行 FPort 上行应用端口,取值范围为1~223。
    下行 FPort 下行应用端口,取值范围为1~223。
  4. (可选)在设备列表右侧,单击容器配置,根据如下参数说明,对当前驱动进行容器配置。配置完成后单击保存
    说明 仅在产品规格为专业版的边缘实例中,允许设置容器配置
    参数 描述
    是否使用宿主机host模式 选择是否隔离容器的网络。直接使用宿主机网络环境。
    • 是:表示不隔离容器的网络,直接使用宿主机网络环境。
    • 否:表示隔离容器的网络,需要设置网络端口映射
    网络端口映射 是否使用宿主机host模式时出现的参数。函数的网络环境和宿主机的环境是完全隔离的。通过网络端口映射,将容器内函数的监听端口映射到宿主机的某一个端口上,实现不同主机上的客户端程序,能够访问该函数提供的服务。最多支持映射10条网络端口。

    例如,运行在宿主机容器内的fc-http-server函数,通过80端口对外界提供服务。此时,其它主机上的客户端程序,无法通过访问宿主机的80端口,访问到fc-http-server函数。因此需要将fc-http-server函数所在的容器端口映射到宿主机的某一个端口上(例如将容器内的80端口映射到宿主机8080端口),允许其它主机上的客户端程序通过访问宿主机的IP地址:8080,访问到容器内部的fc-http-server函数。

    是否启动特权模式

    容器内的root用户实际上只是宿主机的一个普通用户。若在容器内部做修改系统时间、使用mount命令等需要root权限的操作,则需要赋予容器privileged特权。

    说明 特权模式下,容器内部拥有宿主机的root权限,而且宿主机的所有设备会默认映射到容器内部,即无需配置设备映射
    设备映射 是否启动特权模式时出现的参数。设备管理系统和宿主机的环境是完全隔离的。当一个函数需要访问宿主机的设备(例如串口)时,需要将设备映射到运行函数的容器内部。最多可添加10个设备映射。
    卷映射 文件系统和宿主机的环境是完全隔离的。当一个函数需要访问宿主机的文件时,需要将文件映射到运行函数的容器内部。最多可添加10个卷映射。
    内存限制 设置容器的内存上限。 当容器内存使用超过限制时,容器会被重启。如果内存限制值过小,可能会导致容器内的应用运行失败。默认内存为1024 MB,请根据容器内应用大小,上调内存限制。

三、驱动关联子设备

  1. 单击设备列表页面中的分配子设备,在Modbus驱动下为边缘实例分配设备。
    您可以分配已有的Modbus设备,也可以根据下面的步骤,新建Modbus设备。
    说明 分配已有的Modbus设备时,该设备所属产品必须接入网关,且接入网关协议为Modbus。详细说明请参见创建产品
  2. 在右侧弹出的分配子设备页面中,单击添加子设备
    添加子设备按钮
  3. 添加设备对话框,单击新建产品,创建Modbus设备所属产品。
    新增客厅灯产品
  4. 创建产品对话框设置参数后,单击完成
    创建产品
    表 1. 参数说明
    参数 描述
    产品名称 设置产品名称,产品名称在账号内具有唯一性。支持中文、英文字母、数字、下划线(_)、短划线(-)、at符号(@)和英文圆括号,长度限制4~30个字符,一个中文汉字算2个字符。
    所属品类 选择品类,为该产品定义物模型。此处选择自定义品类
    接入网关协议 此处必须选择Modbus
    认证方式 选择适合您设备的认证方式。详情请参见设备安全认证
    产品描述 添加对该产品的描述。可以为空。
  5. 添加设备对话框,产品自动分配已创建的产品,单击产品下的前往配置,为产品添加自定义功能。
    说明 您也可以使用Modbus调试工具配置Modbus产品,但需要先完成添加设备并分配到边缘实例的操作,再使用调试工具。
    前往设置

    系统跳转到产品详情页面功能定义页签。单击编辑草稿,在弹出页面中单击添加自定义功能

    添加功能
  6. 添加自定义功能对话框,根据实际情况设置属性参数。具体操作请参见单个添加物模型
    在配置物模型属性的过程中,单击新增扩展描述设置如下扩展描述参数,将属性映射到寄存器中。官方Modbus驱动会将所有的属性聚合为Modbus数据请求,驱动收到Modbus数据之后再转换为物模型数据。扩展描述

    参数说明如下所示,详细的参数解释请参见单个添加物模型中“扩展描述”的说明。

    名称 描述
    操作类型 指操作Modbus的功能码。

    此处选择保持寄存器(读写,读取使用0x03,写入使用0x06)

    寄存器地址 填写十六进制,以0x开头。

    根据您自己设备的属性地址设置寄存器地址。例如,要调试温度属性,您设备的温度属性地址为1,则寄存器地址可设置为0x1。

    原始数据类型 如采集的温度值的数据类型为浮点型。
    取值范围 取值范围指的是原始数据经过缩放因子处理之后的取值范围,超出取值范围的数据会被丢弃。
    交换寄存器内高低字节 是否把寄存器内16位数据的前后8个bits互换。此处设置为互换true
    交换寄存器顺序 是否把原始数据32位数据的bits互换。此处设置为不互换false
    缩放因子 指缩放系数,如采集的值为100, 但真实的值为10,因此需要缩放10倍,故缩放因子填写0.1即可。如放大10倍(即真实的值为1000),则放大因子为10。
    数据上报方式 有两种数据上报方式。
    • 按时上报:根据采集间隔指定的时间采集并上报。
    • 变更上报:采集后的值发生变化后才会上报。
  7. 返回实例详情页面,添加Modbus设备。
    Modbus产品添加设备_专有云
  8. 将新建的Modbus设备分配到边缘实例。
  9. 分配设备到边缘实例后,单击设备名称对应操作栏中的设备配置,通过关联通道,关联设备与Modbus驱动。
    设备配置
    表 2. 参数说明
    参数 描述
    关联通道 选择配置驱动步骤2中已创建的通道。
    从站号 从站号是Modbus设备标识信息,在同一个通道中是唯一的。
    数据采集间隔 Modbus协议是半双工协议,由网关主动请求数据,因此需要指定对数据点的采集间隔时间。单位为毫秒。
    说明 单个属性点的采集耗时时间大概为60毫秒(ms),则采集间隔的计算方式为:
    采集耗时时间(60 ms) * 该通道的所有属性点个数
    例如,当前Modbus总线通道上有10个设备,且每个设备有10个属性点,即采集间隔时间应大于等于6000 ms(60 ms * 10 * 10 = 6000 ms),这样才能保证每个属性点能正常上报。

四、部署边缘实例

  1. (可选)在部署实例前,可以使用Modbus调试工具,测试网关能否连接该Modbus设备,同时也可以测试Modbus设备所属产品的物模型是否配置正确。
  2. 实例详情页面,单击右上角部署,部署边缘实例。

常见问题

Modbus官方驱动上报消息到云端时,是按照设备维度上报,还是属性维度上报?

答:Modbus官方驱动在每个采集周期内,按照设备维度进行采集和上报数据。例如,1个Modbus设备有100个属性,数据采集间隔为5秒,那么Modbus驱动每5秒上报云端1条消息(因为是1个设备)。