跳到主要内容

仁科 PM200 液位计(M005A)

[TOC]

一、实现功能简介

基于 FlexLua 《DTU01万能采集器》实现对 RS485 接口的仁科 PM200 液位计的采集,并可通过下面八种无线/有线通信方式中的一种将数据上报至云平台服务器,八种方式分别为:

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

二、建大仁科 PM200 投入式液位计简介

建大仁科的PM200 系列投入式液位变送器前端防护帽起保护传感器膜片的作用, 也能使液体流畅地接触到膜片, 防水导线与外壳密封连接, 通气管在电缆内与外界相连, 内部结构防结露设计。 内置微型信号处理电路, 可进行远程传输。 具有良好的稳定性和可靠性。 该产品采用进口扩散硅芯片和低功耗 ADI 专业芯片并结合微处理器技术研制而成, PM200 系列投入式液位变送器具有 RS485 通讯功能, 体积小、 精度高、 重量轻、 量程覆盖范围广, 适用于各行业需要对流体压力进行精密测量的场所,广泛应用于工业过程控制、 石油、 农业、 灌溉、 物联网等行业。可广泛应用于水厂、 污水处理厂、 城市供水、 高楼水池、 水井、 地热井、 矿井、 工业水池、 油池、 水文地质、 水库、 河流、 海洋等领域的液位测量控制。

sensor1

para1

说明书资料可在 {FlexLua开源网盘} -> {Spec} -> {M005A} 文件夹中找到。

三、DTU01 万能采集器介绍

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

DTU01

关于 DTU01 万能采集器:

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

四、DTU01 硬件要求

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

  • DTU01 电路板上的 ‘A’ 和 ‘B’ 引脚需配置成 485 接口的 ‘A’ 和 ‘B’,即 S3 选择
  • DTU01 电路板上的 ‘+’ 和 ‘-’ 电源输出引脚需配置成 12v 输出(注意在 DTU01 电路板上 ‘+’ 和 ‘-’ 对应 ‘VIN’ 和 ‘GND’)

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

五、仪表采集核心代码

参考仪表 RS485 通信参数以及 Modbus 寄存器点位表,可得如下代码,将以下代码覆盖至对应的 main.lua 源代码文件中即可实现采集。

--读取RS485接口的 仁科 PM200 液位计
--获取到的Json数据形如:{"Depth":0.101} --表示液位深度=0.101米
function ModbusToJson()
--配置RS485 Modbus转Json功能,并设置Json字符串最大长度为150字节
LIB_ModbusToJsonConfig(150)--必须小于255
--液位深度值寄存器地址0x0004,16bit无符号整数AB类型,3位小数,Json名称"Depth"
LIB_ModbusToJsonAdd(0x0004,"U_AB",3,"Depth")

--参数设置(4800,无校验,1位停止位,功能码"03",从机地址默认0x01,应答最长等待1000ms,包与包最短间隔100ms)
LIB_ModbusToJsonSend("BAUDRATE_4800","NoneParity","StopBit_1","03",0x01,1000,100)
end

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

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

sensor_dtu01_4g

周期性采集 RS485 Modbus 仁科 PM200 液位计数据并转换成可读性更强的 Json 字符串,然后通过 4G Mqtt 发送至云端,Json 字符串示例如下:

{"Dev":"TH","Data":{"Depth":0.101},"Err":null}

实现方法如下:

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

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

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

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

sensor_dtu01_4g

周期性采集 RS485 Modbus 仁科 PM200 液位计数据并转换成可读性更强的 Json 字符串,然后通过 4G Tcp 发送至云端,Json 字符串示例如下:

{"Dev":"TH","Data":{"Depth":0.101},"Err":null}

实现方法如下:

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

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

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

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

sensor_dtu01_wifi

周期性采集 RS485 Modbus 仁科 PM200 液位计数据并转换成可读性更强的 Json 字符串,然后通过 WiFi Mqtt 发送至云端,Json 字符串示例如下:

{"Dev":"TH","Data":{"Depth":0.101},"Err":null}

实现方法如下:

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

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

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

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

sensor_dtu01_wifi

周期性采集 RS485 Modbus 仁科 PM200 液位计数据并转换成可读性更强的 Json 字符串,然后通过 WiFi Tcp 发送至云端,Json 字符串示例如下:

{"Dev":"TH","Data":{"Depth":0.101},"Err":null}

实现方法如下:

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

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

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

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

lora_net1

Lora从机周期性采集 RS485 Modbus 仁科 PM200 液位计数据并转换成可读性更强的 Json 字符串,然后无线发送至Lora中心点网关(DTU02万能网关),Json 字符串示例如下:

{"LrAddr":1,"Dev":"TH","Data":{"Depth":0.101},"Err":null}

实现方法如下:

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

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

{FlexLua开源网盘} -> {Software} -> {DTU01万能采集器} -> {RS485} -> {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"表示查询指令标识(例如表示查询某款传感器或仪表的数据,该标识在485同时接多个传感器或仪表时有用)
{"LrAddr":1, "Dev":"TH"}

当收到以上 Json 指令后,本设备通过 RS485 Modbus 采集连接在本设备上的仁科 PM200 液位计数据并转换成可读性更强的 Json 字符串,然后通过 Lora 返回给网关(DTU02万能网关),返回的 Json 数据格式如下:

{"LrAddr":1, "Dev":"TH","Data":{"Depth":0.101},"Err":null}

实现方法如下:

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

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

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

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

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

DTU02万能网关的资料位于:

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

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

eth

周期性采集 RS485 Modbus 仁科 PM200 液位计数据并转换成可读性更强的 Json 字符串,然后通过 以太网 Tcp Client 发送至云端,Json 字符串示例如下:

{"Dev":"TH","Data":{"Depth":0.101},"Err":null}

实现方法如下:

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

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

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

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

eth

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

--"Dev"="TH"表示查询指令标识(例如表示查询某款传感器或仪表的数据,该标识在485同时接多个传感器或仪表时有用)
{"Dev":"TH"}

当收到以上 Json 指令后,本设备通过 RS485 Modbus 采集连接在本设备上的仁科 PM200 液位计数据并转换成可读性更强的 Json 字符串,然后通过 以太网 返回给 Client 端,返回的 Json 数据格式如下:

{"Dev":"TH","Data":{"Depth":0.101},"Err":null}

实现方法如下:

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

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

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

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

(1)硬件开源资料

硬件开源网盘路径
《仁科 PM200 液位计说明书》{FlexLua开源网盘}->{Spec}->{M005A} 文件夹
《DTU01万能采集器硬件使用指导书》{FlexLua开源网盘}->{Hardware}->{DTU01万能采集器}->{DTU01硬件使用指导书} 文件夹
《DTU01万能采集器硬件原理图》{FlexLua开源网盘}->{Hardware}->{DTU01万能采集器}->{DTU01硬件原理图} 文件夹

(2)软件开源资料

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

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

(3)其他(非必需)

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

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