抖音粉丝群1
『7x24小时有问必答』

AI浪潮下的计算机行业——从业者现状与未来展望
随着物联网技术蓬勃发展,Modbus 设备数据采集上报需求日益增加,本文将具体介绍如何利用 EsDA 快速实现Modbus RTU Master数据转TCP Server数据,缩短产品研发时间。

    简介
随着时代的发展,数据上云等需求越来越普遍,不同协议之间的数据转换,也成了用户普遍的需求之一。本章将带大家快速实现如何将EPC6450-AWI工控板的Modbus RTU数据,快速转换成TCP服务器数据,传送给TCP客户端,工作框架如图1.1。

图1
本文主要使用本公司的EPC6450AWI型号工控板,外接使用Modbus RTU协议传输的温湿度变送器,读取相关温湿度数据,并创建TCP服务器,向PC机上的TCP客户端实时发送温湿度数据。

    入门基础
本章内容,主要使用modbus_master_in、modbus_parse_in、fscript、log、push、tcp_server_ex节点。用户在进行阅读之前,需具备一定基础的AWFlow Designer开发经验。若刚开始接触,可阅读以下文章,进行基础知识的学习。

    硬件前提
1. EPC6450-AWI型号工控板

图2
2.  USB转TTL类型串口设备

图3
3.  温湿度变送器(Modbus RTU协议,RS485接口)

图4
此传感器,内部使用了Modbus RTU协议,数据分别存储在地址为0(温度)和1(湿度)上。
4. Type-C线、网线、杜邦线若干

图5

    硬件连接图

图6
将USB转TLL接口与DUART接口相接(此处注意RXD接TXD,TXD接RXD),Type-C供电线与工控板Type-C接口相接,网口接eth0接口,温湿度变送器上的A/B信号线分别与工控板上的RS485A/RS485B相连,+电源线接于5V,-地线接于GND。

    本章流图解析

图7
1. 本流图节点列表
modbus_master_in节点,该节点负责读取从机的相关寄存器地址中的数据。
modbus_parse_in节点,该节点负责解析modbus_master_in获取的数据,将数据转化成对应类型的数值数组。
fscript节点,该节点主要负责对modbus_parse_in节点所生成的数值数组进行提取,并格式化输出对应的温湿度数据。
log节点,该节点主要负责把接收到的fscript节点输出的数据,显示于串口与调试口。
push节点,该节点主要负责将接收到的fscript节点输出的数据,传送至tcp_server_ex节点。
tcp_server_ex节点,该节点主要负责将得到的push节点数据,转发给PC上位机上的TCP客户端。
2. 数据流向
通过RS485接口与Modbus RTU协议读取温湿度变送器的数据,对该数据进行数值化生成对应的数值数组,对生成的数值数组进行提取,格式化输出对应的温湿度情况,并将信息显示在串口与调试窗口上,以及发送至PC上位机上的TCP客户端窗口。

    节点解析
1. modbus_master_in节点

图8
该节点关键参数一览:
主机参数配置,此处配置与配置串口参数同理,配置如下:

图9
读取模式,该属性将决定节点的触发方式。分别有:(1)  循环读取数据,该模式节点将以用户设定的周期定时输出数据,如周期内数据未被刷新,则在下一周期输出;  (2)  根据输入的信息读取从机设备的数据,读取成功则向下一节点输出数据。可使用push节点向此节点输入读取所需要的参数信息,具体请查看输入参数。此处我们选用periodic read data模式,即第  (1)  种。
从机ID,从机设备的ID号,数值为0-255。此处从机ID为1,具体用户可根据实际情况修改。
输出周期,数值为0-65535,  此处我们设置为1000。

寄存器地址,该值为读取的起始寄存器地址,数值为0-65535,此处我们设置为0。
读取数量,数值为0-1000,此处我们设置为2,即读取两个数据(分别为温度和湿度)。
寄存器类型,读取的寄存器类型。分别有:(1)  读取线圈量,此类型的数据将输出uint8_t指针类型的payload;  (2)  读取离散量,此类型的数据将输出uint8_t指针类型的payload;(3)  读取保持寄存器,此类型的数据将输出uint16_t指针类型的payload;  (4)  读取输入寄存器,此类型的数据将输出uint16_t指针类型的payload。此处我们设置为read holding resgisters,即第(3)种。
2. modbus_parse_in节点

图10
该节点关键参数一览:
数据转换模式,  该模式有:(1)  单地址数据转换,此模式只对某一地址的数据进行转换,因此输出payload是对应地址的单个数据值;  (2)  多地址数据转换,此模式对指定地址及数量的数据进行同一的转换,并将转换后的值存入array对象;  (3)  全地址数据转换,此模式对输入的所有数据进行同一的转换,并将转换后的值存入array对象。
注:数据地址及长度必须在modbus输入节点的读取范围内,否则转换将失败。此处我们选择multi-address address parse模式,即第(2)种。
数据转换起始地址,此处设置为0。
转换数量,此处设置为2。
数据转换类型,读取的数据格式,对读取的数据进行位整合,例: int32_t:  将数据地址开始的4byte整合成int32_t类型的值。此处我们选择16bits-unsigned int类型。
大小端选择,此处选择配置读取的存储大小端模式,此处我们设置为小端模式。
3. fscript节点
该节点为脚本节点,具体脚本如下。
a = msg.payload

output.payload = "temp:" + array_get(a, 0)/10 + "C,   " + "humi:" +  array_get(a, 1)/10 + "RH"
此脚本主要实现将modbus_parse_in节点所生成的数值数组提取数值,并进行格式化处理,输出对应的温湿度数据。
4. push  节点

图11
该节点用法较为简单,直接选择需要进行传送的目标节点即可。
5.  tcp_server_ex节点

图12
该节点主要实现将push节点发送而来的数据,传达给连接上来的TCP客户端。
该节点关键参数一览:
端口,本地开放连接的端口号,取值为1024-60000,此处取值为5353。
最大连接数,是指可支持的最大客户端连接数量,此处我们设置为8。
输出模式,存在两种输出模式可以选择,第一种为携带报文头部的模式,第二种为不携带报文头部的模式,此处我们设置为第二种模式payload。
保活时间,取值范围为0-100000,此处我们设置为120。
空闲掉线时间,取值范围为0-100000,此处我们设置为0。
6.  log节点

图13
该节点主要实现,将上一个节点传输而下的数据,打印至串口和调试窗口上,一个很好用的调试信息反馈节点。

    流图下载
1.  点击下拉框

图14
2.  点击配置按钮

图15
3.  配置ip地址与端口号

图16
若用户不知道流图下载的端口号,可以在板子重启时,调试串口中打印信息获取,或者在shell命令窗口使用ipconfig命令获取网口配置。
4.  先选择配置,后点击下载按钮

图17
5.  下载完成

图18
6.  完整调试窗口

图19

    效果验证
1.  查看调试窗口信息

图20
点击对应信息条目可以查看详情。

图21
可见具体的温湿度数据信息。
2.  TCP客户端
此处需要使用一款助手工具,而本章便用SSCOM进行效果展示。

图22
可见客户端接收到的数据如下。

图23
到此,本章结束,如果您对此有兴趣,那就赶快行动起来吧!

    技术交流群
长按识别如下二维码可加入“EsDA嵌入式系统设计自动化交流群”,与志同道合的朋友交流,并有专业技术人员为您答疑解惑,如有问题可以咨询小致微信zlgmcu-888。
更多往期文章,请点击“  阅读原文  ”。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

Copyright 2010-2015. All rights reserved. 

微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码