首页 > 其他分享 >可配置Modbus网关 嵌入式设备联网解决方案

可配置Modbus网关 嵌入式设备联网解决方案

时间:2023-05-31 14:24:49浏览次数:69  
标签:RTU 网关 TCP 嵌入式 Modbus 指令 寄存器

 1.概述

可配置Modbus网关可以预先配置Modbus RTU端的设备的地址、功能码和寄存器列表,并存储到网关内部。网关会自动采集这些配置的RTU设备的数据,然后映射到连续的Modbus TCP寄存器地址,从而允许Modbus TCP端一次性读取所有的设备的不同寄存器的数据。它的这种地址映射功能是对普通的Modbus RTU转Modbus TCP的Modbus网关的补充。

卓岚ZLAN5143、ZLAN7144、ZLAN7146、ZLAN5207M、ZLAN5407M等都支持可配置Modbus网关功能。其中ZLAN5143需要固件版本1.579及以上版本,配合ZLVircom5.15及以上版本来使用。7144需要固件版本1.491及以上版本。卓岚可配置Modbus网关简称为“ZLMB网关”。

可配置Modbus网关具有如下的优点:

1.指令合并:可以将分散的不同的站地址、寄存器映射到同一片寄存器。这样Modbus TCP端可以用一条指令采集所有数据,而不是分为几条指令分别去采集,实现了Modbus TCP端的传输效率。

2.预先采集:虽然之前的“存储型Modbus”可以自动采集一些数据,但是自动采集是在Modbus TCP端查询第一条指令开始的,所以第一条指令本身的返回数据还是需要等待串口的信息的返回。而可配置Modbus网关的自动采集是从网关上电就开始,第一条指令仍然可以快速应答。

多主机支持:可以支持多台Modbus TCP客户端连接上读取网关数据。

4.支持写指令:目前对于重新映射过的寄存器地址,Modbus TCP端不仅可以使用重新映射的地址读到数据,而且可以向这个重新映射的地址使用05和06指令写入数据。

5.支持任意长度读取:ZLVircom配置工具会显示RTU端的寄存器地址和TCP端的寄存器地址的映射关系。Modbus TCP端不仅可以整片读取寄存器和单个读取寄存器,而且可以任意长度来读取合法地址和长度的寄存器内容。

6.支持离线提示:当某个RTU设备从RS485总线上离线后,从Modbus TCP这端查询到的数据将全部变为0,提示设备的离线。

7.支持丢失重发:由于RS485总线容易存在干扰,假如第一次查询指令没有应答,则网关会再发送一条指令,并等待超时时间,如果确认第二次也没有应答才认为设备离线。通过ZLVircom可以设置第一次发送的时间和第二次超时应答时间。

8.支持大量设备和寄存器:目前支持100条RTU查询指令和500个寄存器数量,同时被访问。

2.简单例子

2.1.RTU采集要求

这里以ZLAN5143为例来介绍,首先确认固件版本为1.579及以上版本, ZLVircom为5.15及以上版本。

假设ZLAN5143的RS485下面接了2个Modbus RTU设备,需要采集的信息如下:

记录编号 从站地址 功能码 寄存器地址 长度
1 1 3 2 4
2 2 1 5 9
3 3 3 2 4

现在需要ZLVircom进行配置,实现可以配置Modbus网关。

2.2.ZLVircom配置

运行ZLVircom,进入设备管理点击搜索设备选择一个需要配置的设备点击编辑设备点击下面“固件和配置”按钮,弹出如下对话框:

编辑

图 1进入ZLMB配置方法

 

这里选择“网页目录下载”,并且点击“…”,选择一个之前新建的空目录,用于存放配置信息。然后点击“ZLMB网关”按钮,弹出如下对话框:

编辑

图 2可配置Modbus网关设置列表

 

点击“添加”按钮可以逐条添加表1的RTU指令。这里需要注意的是网关会将Modbus TCP这端的寄存器地址从0开始自动按顺序增加。所以为了让同一个功能码的指令可以一次性分到同一个区域,应该将相同功能码的指令连续添加。也就是将表1的记录编号1和记录编号3放在一次,而编号2放在最后。添加的3个图如下:

编辑

图 3表1的编号1 RTU指令的配置

 

对于编号1的RTU指令的配置对话框解释如下:

1.记录编号:这个是系统根据添加的顺序自动增加编号,不可修改。不一定和表1一致。

2.从站地址:该RTU指令的RTU端从站地址。

3.Modbus功能码:该RTU指令的功能码。

4.寄存器起始地址:RTU端指令的寄存器开始地址。

5.寄存器长度:RTU端指令的寄存器查询长度。

6.串口轮询间隔:这个间隔是网关正常发送查询指令后等待应答返回的时间。也是轮询的速度。所有RTU指令的这个参数是一样的,如果不一样取最大者。

7.超时应答时间:这个时间是在正常发送查询指令接收不到应答时,立刻发送第二条查询时的等待应答返回时间。所有RTU指令的这个参数是一样的,如果不一样取最大者。

8.支持06或者05写指令:勾选这个选项将可以支持Modbus TCP端对RTU设备的数据的改写。若不需要改写则不要勾选,因为勾选,会额外增加内存和计算量开销。

9.Modbus TCP寄存器地址:这个地址是系统自动按照顺序计算的,Modbus TCP端只要按照这个起始地址读取即可得到这条RTU指令获得的数据。这个参数是地址映射的关键信息。

确定后,再次点击“添加”,添加表1编号3的指令:

编辑

图 4表1的编号3 RTU指令的配置

 

这里看到Modbus TCP寄存器地址自动增加到4。说明两条指令合并的寄存器从0~7,整个寄存器范围都可以一次性读取。

添加表1编号2的指令:

编辑

图 5表1的编号2 RTU指令的配置

 

这里系统自动分配的Modbus TCP地址为01指令的128地址(十进制)。最后列出的表格是:

编辑

图 6 RTU和Modbus TCP寄存器映射关系表

 

这个表格列出了RTU和Modbus TCP寄存器映射关系。也清楚的展示了,如果用户需要获得RTU端的某个设备的数据需要用什么功能码的什么寄存器地址去读取数据。

例如需要读取从站地址2功能码1、寄存器地址5、长度9的数据可以使用Modbus TCP指令的任意从站地址、功能码1、寄存器地址128、长度9来读取。 最后点击“保存并返回”来保存设计,如果点击“不保存返回”则放弃设计。同时可以通过选择某一行点击“编辑”进行编辑,点击“删除”删除某个RTU指令。

点击“保存并返回”后回到“卓岚网页/程序下载工具”界面。在这个界面点击“下载按钮”。下载完毕后弹出“传输完毕…”按钮,然后点击确定,设备将会自动重启,并加载这个配置。

2.3.数据测试

现在使用串口模拟这个RTU设备,并进行测试,RTU端模拟参数如下图。

编辑

图 7 模拟表1的3个RTU设备

 

然后将ZLAN5143连接到这个计算机串口。假如设备的IP为192.168.0.200,端口4196,Modbus TCP软件连接上这个IP和端口后读取如下的数据。根据映射关系表,应该读取0~7这8个寄存器,功能码为03;应该读取128到136这9个bit性寄存器,功能码为01。

编辑

图 8 Modbus读取网关数据

 

如图所示,可配置Modbus网关实现了站地址1、站地址3这两个RTU Modbus的数据合并,将其合并到寄存器0~7整片区域,实现指令合并功能。 使用SockeDlgTest连接上192.168.0.200的4196端口发送12 34 00 00 00 06 01 03 00 00 00 00指令,立即返回数据。

编辑

图 9 预采集效果

 

如图所示返回时间大约为18ms。这个反应时间比“存储型”Modbus的第一次应答时间要快速很多。 打开多个Modbus TCP客户端可以同时对网关进行数据采集。说明可以支持多主机功能。 在Modbus TCP端修改某个寄存器的值,则在RTU端的数据就被修改,同时也会反馈到Modbus TCP端。这说明发送的05/06单线圈修改和单寄存器修改指令写是支持的。

修改任意长度的寄存器长度读取,例如修改为从01地址开始的06个长度的寄存器内容,同样可以正常读取到Modbus TCP软件中。说明支持任意长度的数据读取。 将Modbus RTU软件关闭或者关闭串口。则Modbus TCP软件中的数据全部变为0,可见可以通过数据全部变为0来反映一个仪表的离线还是在线。 关闭Modbus RTU软件,使用ZLComDebug打开COM口接收数据,可以看到当一条指令没有应答时会重发一次。说明网关具有数据重发功能。

编辑

图 10 数据重发功能

 

2.4.设置离线默认值

编辑

图 11 设置离线默认值

 

设置离线默认值功能,可以可以让设备离线的时候采集到一个特殊的值,例如65535(也就是有符号的-1)。因为之前的默认值为0,有些设备的0是一个可能出现的值,无法区分是离线还是有效数据。

这个离线只要求高字节和低字节一样,即可以设置:v*256+v,其中v≤255且v>=0。 只有第一条记录的设置值是有效的,其它记录仿造第一条记录的参数。这里只看第一条记录的参数还包括:串口轮询间隔、超时应答时间、支持06或者05写指令。

3.其它注意事项

1.某些bit型数据无法合并,如下图,01/02指令的第一个指令的数据长度为9,不是16的倍数。所以无法通过从128开始的地址读取19个来一起读取所有数据。而是应该按照软件给出的128地址读9个,144地址读10个,分别读取。

编辑

图 12 Bit数据的连续

 

2.Modbus TCP的站地址无所谓,一般用01即可。

3.如果发现无法支持05/06指令,请确认设计的时候是否已经勾选05/06支持选项。

4.注意02功能的寄存器是无法被修改的。

5.注意Modbus网关的“转化协议”部分不要选择“Modbus TCP转RTU”,请选择“无”协议。

6.现在可以支持多寄存器写入的15/16指令。但是不要跨区域写入。例如原来的地址为2个寄存器是一起排列的,如果试图跨区域一次写入超过2个寄存器将会出错。

原文连接:可配置Modbus网关嵌入式设备联网解决方案——上海卓岚

标签:RTU,网关,TCP,嵌入式,Modbus,指令,寄存器
From: https://www.cnblogs.com/li-2136815881/p/17445968.html

相关文章

  • 【windowns】记一次天玥安全网关无法连接运维机排查
    问题背景:在用天玥安全网关来连接项目中的运维机时,发现无法连接报网络连接错误(报错图如下:),但是通过同网络的区域的其它电脑是可以正常远程到目标主机。解决方案:经过排查发现,是因为之前有做加固操作,WindowsServer远程桌面SSL/TLS漏洞修复  修复过程如下:1、运行“gpedit.m......
  • MODBUS和RS485说明
    传输格式为帧格式一般1号位为起始位为低电压10号位为停止位--高电压波特率模拟线路信号的速率,也称调制速率,以波形每秒的振荡数来衡量。在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。波特率通常单位是bit/s,也......
  • java modbus_rtu串口通讯
    基于modbus和串口通讯的Java分享本文推荐一个简单好用java实现基于modbus—rtu协议通讯方法:如果采用非标准modbus协议通讯,可以查看我的这篇博文:java实现串口通讯关于modbus的java开源库主要有以下四种:Jamod:JavaModbus实现:JavaModbus库。该库由DieterWimberger实施。Mod......
  • Musl libc 库成功适配到 openEuler Embedded,推动欧拉嵌入式生态发展
    近期,RISC-VSIG在欧拉嵌入式操作系统上成功实现了musllibc的适配,完成了使用musllibc库替换glibc库构建镜像的工作。目前,以musllibc为基础库编译的镜像已在RaspberryPi4开发板上可用,这一成果推动了openEulerEmbedded的多态发展。编译镜像步骤说明:https://openeule......
  • 七牛云上传,网关超时502 Bad Gateway
    本地可以正常上传七牛云,服务器上网站正常访问,七牛云无法上传,报错502 BadGateway原因:域名解析节点出错。域名解析节点出现问题可能会导致网络请求无法正常访问到对应的服务器,因而会影响上传七牛云图片这类网络操作。例如,如果您的浏览器无法将域名正确解析为IP地址,那么就无法......
  • nginx代理给网关时 丢失请求的host信息问题
    nginx搭建域名访问环境描述:访问gulimall.com,Nginx反向代理到网关地址,然后网关转发到具体的product服务域名映射的效果如下:具体步骤:(1)hosts文件配置域名和ip映射修改windows下host文件:C:\Windows\System32\drivers\etc\hosts为了方便,可以使用SwitchHost工具(2)配置nginx......
  • Netty+Nacos+Disruptor自研企业级API网关-江潭落月复西斜
    Netty+Nacos+Disruptor自研企业级API网关download:3w51xuebccom使用Netty和SpringBoot实现仿微信的示例在本文中,我们将使用Netty和SpringBoot框架来创建一个简单的聊天应用程序,类似于微信。这个应用程序将支持多用户聊天和即时消息发送。下面让我们来一步步看看如何实现。第一步......
  • 《安富莱嵌入式周报》第313期:搬运机器人,微软出的C语言手册,开源生物信号采集板,开源SMD
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 更新一期视频教程:DSP视频教程第12期:TI开源分享IQmathDSP源码,适用于所有Cortex-M内核,本期教程做个手把手移植(2022-05-22)https://www.armbbs.cn/forum.php?mod=viewthread&......
  • Android平台如何实现外部RTSP|RTMP流注入轻量级RTSP服务模块(内网RTSP网关)
     技术背景今天分享的是外部RTSP或RTMP流,拉取后注入到本地轻量级RTSP服务模块,供内网小并发场景下使用,这里我们叫做内网RTSP网关模块。内网RTSP网关模块,系内置轻量级RTSP服务模块扩展,完成外部RTSP/RTMP数据拉取并注入到轻量级RTSP服务模块工作,多个内网客户端直接访问内网轻量级RTSP......
  • 多功能RTU环境采集网关支持温湿度风速采集
    无线工业物联网数据采集控制短信报警终端S475/S475E系列在工业物联网产业链中发挥着非常重要的作用,可以广泛应用于很多领域,例如智能电网、智能交通、智能家居、金融、移动POS终端、供应链自动化、工业自动化等。该系列产品内嵌工业级GSM/GPRS/3G/4G通信模块,并集成了稳定可靠......