跳到主要内容

4-20mA 电流采集(M001A)

[TOC]

一、实现功能简介

基于 FlexLua 《DTU01万能采集器》实现对 4-20mA 接口的传感器/仪表/设备的的采集,并可通过下面八种无线/有线通信方式中的一种将传感器数据上报至云平台服务器,八种方式分别为:

  • 4G 无线 Mqtt 主动传输
  • 4G 无线 TCP 主动传输
  • WiFi 无线 Mqtt 主动传输
  • WiFi 无线TCP 主动传输
  • Lora 无线 主动传输
  • Lora 无线 被动传输
  • 以太网有线主动传输
  • 以太网有线被动传输

二、4-20mA 简介

4-20mA 是一种常用于工业控制系统中的电流信号标准。它是一种模拟电流信号,通常用于传输传感器数据,如温度、压力、流量等,到监控或控制设备,如PLC(可编程逻辑控制器)或DCS(分散式控制系统)。以下是对4-20mA的介绍:

  1. 范围: 4-20mA表示信号的工作范围,其中4mA通常表示零点或最小值,而20mA表示满量程或最大值。这个范围之间的电流变化表示被测量参数的变化。

  2. 稳定性: 4-20mA信号相对于电压信号来说更稳定,因为它不容易受到电缆电阻、电磁干扰等因素的影响。这种特性使得它在工业环境中更为可靠。

  3. 电缆长度: 由于电流信号的稳定性,4-20mA信号可以在相对较长的电缆上传输而不会丢失精度。这对于在工业设备之间传输数据非常重要。

  4. 电源供应: 4-20mA通常使用直流电源供应,这使得在远离交流电源的现场设备中更为实用。

  5. 设备互操作性: 由于4-20mA是一种标准信号,不同厂商的传感器和控制设备通常可以互相兼容,提高了设备的互操作性。

  6. 故障检测: 4-20mA环路中通常包含对故障的检测机制。例如,如果传感器线路断开,4mA或20mA之外的数值可能表示故障状态,从而提醒系统操作员进行维护。

总体而言,4-20mA电流信号在工业自动化和过程控制领域中得到广泛应用,它提供了稳定、可靠且易于解释的信号,适用于长距离传输和不同制造商的设备集成。

《DTU01采集器》电路板上采用的 4-20mA 采集模块是金升阳的一款 TExxxN 系列有源高精度隔离变送器。TExxxxN 系列是一种前级电压/电流信号输入, 后级电压信号输出的有源隔离模块, 模块内部嵌入了一个高效微功率电源, 可以在向内部信号处理电路供电的同时向外围电路输出一路隔离电源。 由于内部采用电磁隔离技术, 相比光耦隔离具有更好的温漂特性和线性度。此模块为两隔离, 电源输入、 信号输出和电源输出、 信号输入之间隔离, 且该系列产品增加了外部零点、 满度调节端, 可根据需求自行设计调节。

board1

该 4-20mA 采集模块说明书资料可在 {FlexLua开源网盘} -> {Spec} -> {M001A} 文件夹中找到。

sensor1

para1

三、DTU01 万能采集器介绍

基于《DTU01采集器》实现采集市面上常见的 4-20mA 接口的传感器/仪表/设备数据,并将采集到的传感器数据以 Json 字符串的形式通过可选的 4G/WiFi/以太网/Lora 其中一种方式发送给网关或云服务器。在需要电池供电的场景下,还可通过给 DTU01 增加低功耗模块以实现周期性休眠采集,休眠电流可低至 3uA 以内,以实现在电池供电场景下的几个月甚至几年的周期性长期采集。

DTU01

关于 DTU01 万能采集器:

《DTU01万能采集器》内部核心主控采用 ShineBlink C2M 低代码物联网核心模组,使用该主控核心模组可轻松采集大量市面上常见的传感器数据,并可自由选择通过 4G/WiFi/以太网/Lora 中的一种方式进行数据通信。本采集器硬件资料和源代码开放且源码极其精简,所以开发者无论是否有嵌入式单片机开发经验,皆可轻松基于源码进行二次开发(例如:新功能增加、边缘数据处理、逻辑判断、特殊协议解析等)。当然如果使用者对编程不感兴趣也可直接参考下面的技术指导文章即可实现大部分场景的需求。

四、DTU01 硬件要求

由于 DTU01 的硬件接口是可配置的,所以需要确认一下您手上的 DTU01 采集器是否满足要求,如果确认已满足就无需再做任何操作,否则请按《DTU01硬件使用指导书》完成下面的硬件配置:

  • DTU01 电路板上的 ‘A’ 和 ‘B’ 引脚需配置成4-20mA 电流监测输入的 I+ 和 I- ,即 S5 选择

《DTU01硬件使用指导书》可在 {FlexLua开源网盘}->{Hardware}->{DTU01万能采集器}->{DTU01硬件使用指导书} 文件夹中找到。

五、传感器采集核心代码

完成 SensorInit() 和 SensorGetValue() 两个函数的构造以实现4-20mA 接口的传感器/仪表/设备的采集,并将这两个函数代码覆盖至对应的 main.lua 源代码文件中即可实现传感器的采集。

--采集接口初始化函数
function SensorInit()
--配置A0-A3这四个AD电压采集通道同时开始工作,每通道采满50个点缓存满,
--每点间隔为2ms,这里4-20mA只用到A2通道采集电压
LIB_ADConfig(50,2000)
end

--读取4-20mA 接口的传感器/仪表/设备数据,获取到的json data数据形式可如下:
--{"Current":15.21},表示:电流=15.21mA
function SensorGetValue()
err = "null" --err包含错误信息,如果没有错误,设置为"null"

--读取4-20mA电路的电压值
A2_full_flag, A2_tab = LIB_ADCheckBufFull("A2")
--隔100ms,当A2通道的缓存满以后,计算缓存内的50个AD值的平均值(每2ms一个点)
if A2_full_flag == 1 then
SUM = 0
for i = 1, #A2_tab do --此处#A2_tab的值是50
SUM = SUM + A2_tab[i]
end
aver = SUM / #A2_tab
--计算实际电压mv(12位AD,0~3600mv)
volt = ((aver*3600)/4096)
current = 4 + volt*16/2500 -- 0~2.5v的采样电压代表4-20mA
--如果获取成功,data将是一条完整的json字符串
--%.2f 表示传感器结果保留2位小数
data = string.format("{\"Current\":%.2f}", current)
else
--如果获取失败,data设置为"null"
data = "null"
err = "Read sensor fail"
end

--返回结果
finish = 1 --finish=1表示传感器读取完成(无论是否成功)
return finish,data,err
end

六、八种采集传输方式实现(选一种阅读即可)

(1)4G Mqtt 主动传输(直流供电+电池供电)

sensor_dtu01_4g

周期性采集 4-20mA 接口的传感器/仪表/设备数据并转换成可读性更强的 Json 字符串,然后通过 4G Mqtt 发送至云端,Json 字符串示例如下:

{"Dev":"TH","Data":{"Current":15.21},"Err":null}

实现方法如下:

  • 请仔细阅读参考 DTU01 的《软件使用指导书(OTHERS_4G_MQTT)》,并在 main.lua 源代码文件中修改好"配置信息"
  • 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中
  • 注意:如果需要使用低功耗电池供电功能,还需在配置信息中配置 SysSleepEn 参数

指导书文件和main.lua源代码文件均位于:

{FlexLua开源网盘} -> {Software} -> {DTU01万能采集器}-> {Others} -> {4G主动发送} -> {MQTT} 文件夹中

(2)4G TCP主动传输(直流供电+电池供电)

sensor_dtu01_4g

周期性采集 4-20mA 接口的传感器/仪表/设备数据并转换成可读性更强的 Json 字符串,然后通过 4G Tcp 发送至云端,Json 字符串示例如下:

{"Dev":"TH","Data":{"Current":15.21},"Err":null}

实现方法如下:

  • 请仔细阅读参考 DTU01 的《软件使用指导书(OTHERS_4G_TCP)》,并在 main.lua 源代码文件中修改好"配置信息"
  • 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中
  • 注意:如果需要使用低功耗电池供电功能,还需在配置信息中配置 SysSleepEn 参数

指导书文件和main.lua源代码文件均位于:

{FlexLua开源网盘} -> {Software} -> {DTU01万能采集器}-> {Others} -> {4G主动发送} -> {TCP} 文件夹中

(3)WiFi Mqtt 主动传输(直流供电+电池供电)

sensor_dtu01_wifi

周期性采集 4-20mA 接口的传感器/仪表/设备数据并转换成可读性更强的 Json 字符串,然后通过 WiFi Mqtt 发送至云端,Json 字符串示例如下:

{"Dev":"TH","Data":{"Current":15.21},"Err":null}

实现方法如下:

  • 请仔细阅读参考 DTU01 的《软件使用指导书(OTHERS_WIFI_MQTT)》,并在 main.lua 源代码文件中修改好"配置信息"
  • 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中
  • 注意:如果需要使用低功耗电池供电功能,还需在配置信息中配置 SysSleepEn 参数

指导书文件和main.lua源代码文件均位于:

{FlexLua开源网盘} -> {Software} -> {DTU01万能采集器}-> {Others} -> {WiFi 主动发送} -> {MQTT} 文件夹中

(4)WiFi TCP主动传输(直流供电+电池供电)

sensor_dtu01_wifi

周期性采集 4-20mA 接口的传感器/仪表/设备数据并转换成可读性更强的 Json 字符串,然后通过 WiFi Tcp 发送至云端,Json 字符串示例如下:

{"Dev":"TH","Data":{"Current":15.21},"Err":null}

实现方法如下:

  • 请仔细阅读参考 DTU01 的《软件使用指导书(OTHERS_WIFI_TCP)》,并在 main.lua 源代码文件中修改好"配置信息"
  • 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中
  • 注意:如果需要使用低功耗电池供电功能,还需在配置信息中配置 SysSleepEn 参数

指导书文件和main.lua源代码文件均位于:

{FlexLua开源网盘} -> {Software} -> {DTU01万能采集器}-> {Others} -> {WiFi 主动发送} -> {TCP} 文件夹中

(5)Lora 主动传输(直流供电+电池供电)

lora_net1

Lora从机周期性采集 4-20mA 接口的传感器/仪表/设备数据并转换成可读性更强的 Json 字符串,然后无线发送至Lora中心点网关(DTU02万能网关),Json 字符串示例如下:

{"LrAddr":1,"Dev":"TH","Data":{"Current":15.21},"Err":null}

实现方法如下:

  • 请仔细阅读参考 DTU01 的《软件使用指导书(OTHERS_LORA_ACTIVE)》,并在 main.lua 源代码文件中修改好"配置信息"
  • 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中
  • 注意:如果需要使用低功耗电池供电功能,还需在配置信息中配置 SysSleepEn 参数

指导书文件和main.lua源代码文件均位于:

{FlexLua开源网盘} -> {Software} -> {DTU01万能采集器} -> {Others} -> {Lora主动发送} 文件夹中

Lora通信组网需要结合 DTU02万能网关,DTU02网关可支持以下功能:

  • Lora 转 4G 透传
  • Lora 转 WiFi 透传
  • Lora 转 以太网 透传

DTU02万能网关的资料位于:

{FlexLua开源网盘} -> {Software} -> {DTU02万能网关} 文件夹中

(6)Lora 被动传输(直流供电)

lora_net2

本设备以 Lora 从机方式工作,等待 Lora中心点网关(DTU02万能网关)发来查询 Json 指令,查询指令格式如下:

--"LrAddr"=1表示云端服务器希望网关去查询其旗下的某个Lora从机地址为1的设备
--例如:"Dev"="TH"表示查询指令标识(例如表示查询某款传感器的数据,该标识可用来区分传感器)
{"LrAddr":1, "Dev":"TH"}

当收到以上 Json 指令后,本设备通过采集4-20mA 接口的传感器/仪表/设备的数据并转换成可读性更强的 Json 字符串,然后通过 Lora 返回给网关(DTU02万能网关),返回的 Json 数据格式如下:

{"LrAddr":1, "Dev":"TH","Data":{"Current":15.21},"Err":null}

实现方法如下:

  • 请仔细阅读参考 DTU01 的《软件使用指导书(OTHERS_LORA_PASSIVE)》,并在 main.lua 源代码文件中修改好"配置信息"
  • 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中

指导书文件和main.lua源代码文件均位于:

{FlexLua开源网盘} -> {Software} -> {DTU01万能采集器} -> {Others} -> {Lora被动发送} 文件夹中

Lora通信组网需要结合 DTU02万能网关,DTU02网关可支持以下功能:

  • Lora 转 4G 透传
  • Lora 转 WiFi 透传
  • Lora 转 以太网 透传

DTU02万能网关的资料位于:

{FlexLua开源网盘} -> {Software} -> {DTU02万能网关} 文件夹中

(7)以太网 Tcp Client 主动传输(直流供电)

eth

周期性采集4-20mA 接口的传感器/仪表/设备数据并转换成可读性更强的 Json 字符串,然后通过 以太网 Tcp Client 发送至云端,Json 字符串示例如下:

{"Dev":"TH","Data":{"Current":15.21},"Err":null}

实现方法如下:

  • 请仔细阅读参考 DTU01 的《软件使用指导书(OTHERS_ETH_ACTIVE)》,并在 main.lua 源代码文件中修改好"配置信息"
  • 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中

指导书文件和main.lua源代码文件均位于:

{FlexLua开源网盘} -> {Software} -> {DTU01万能采集器} -> {Others} -> {Eth主动发送} 文件夹中

(8)以太网 TCP Server 被动传输(直流供电)

eth

本设备的以太网接口以 TCP Server 静态 IP 方式工作,等待 Client 设备发来查询 Json 指令,指令格式如下:

--"Dev"="TH"表示查询指令标识(例如表示查询某款传感器的数据,该标识可用来区分传感器)
{"Dev":"TH"}

当收到以上 Json 指令后,本设备通过采集4-20mA 接口的传感器/仪表/设备数据并转换成可读性更强的 Json 字符串,然后通过 以太网 返回给 Client 端,返回的 Json 数据格式如下:

{"Dev":"TH","Data":{"Current":15.21},"Err":null}

实现方法如下:

  • 请仔细阅读参考 DTU01 的《软件使用指导书(OTHERS_ETH_PASSIVE)》,并在 main.lua 源代码文件中修改好"配置信息"
  • 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中

指导书文件和main.lua源代码文件均位于:

{FlexLua开源网盘} -> {Software} -> {DTU01万能采集器} -> {Others} -> {Eth被动发送} 文件夹中

七、本章相关开源资料汇总

(1)硬件开源资料

硬件开源网盘路径
《4-20mA 采集模块说明书》{FlexLua开源网盘}->{Spec}->{M001A} 文件夹
《DTU01万能采集器硬件使用指导书》{FlexLua开源网盘}->{Hardware}->{DTU01万能采集器}->{DTU01硬件使用指导书} 文件夹
《DTU01万能采集器硬件原理图》{FlexLua开源网盘}->{Hardware}->{DTU01万能采集器}->{DTU01硬件原理图} 文件夹

(2)软件开源资料

注意:以下八个文档,只需按需选择其中一个阅读即可。

软件开源网盘路径
《4G Mqtt 主动传输实现指导书》及main.lua源码{FlexLua开源网盘}->{Software}->{DTU01万能采集器}->{Others}->{4G主动发送}->{MQTT} 文件夹
《4G TCP 主动传输实现指导书》及main.lua源码{FlexLua开源网盘}->{Software}->{DTU01万能采集器}->{Others}->{4G主动发送}->{TCP} 文件夹
《WiFi Mqtt 主动传输指导书》及main.lua源码{FlexLua开源网盘}->{Software}->{DTU01万能采集器}->{Others}->{WiFi主动发送}->{MQTT} 文件夹
《WiFi TCP 主动传输指导书》及main.lua源码{FlexLua开源网盘}->{Software}->{DTU01万能采集器}->{Others} ->{WiFi主动发送}->{TCP} 文件夹
《 Lora 主动传输实现指导书》及main.lua源码{FlexLua开源网盘}->{Software}->{DTU01万能采集器}->{Others}->{Lora主动发送} 文件夹
《 Lora 被动传输实现指导书》及main.lua源码{FlexLua开源网盘}->{Software}->{DTU01万能采集器}->{Others}->{Lora被动发送} 文件夹
《 以太网主动传输实现指导书》及main.lua源码{FlexLua开源网盘}->{Software}->{DTU01万能采集器}->{Others}->{ETH主动发送} 文件夹
《 以太网被动传输实现指导书》及main.lua源码{FlexLua开源网盘}->{Software}->{DTU01万能采集器}->{Others}->{ETH被动发送} 文件夹

(3)其他(非必需)

如对源代码中的实现细节感兴趣,开发者可查阅 《Lua编程学习指导》、《ShineBlink 函数API手册》、《ShineBlink C2M模组资料》:

内容开源网盘路径
《Lua编程学习指导》{FlexLua开源网盘}->{Tutorial}->{Lua编程学习指导} 文件夹
《ShineBlink 函数API手册》{FlexLua开源网盘}->{Tutorial}->{ShineBlink 函数API手册} 文件夹
《ShineBlink C2M模组资料》{FlexLua开源网盘}->{Tutorial}->{ShineBlink C2M模组资料} 文件夹