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网关嵌入式设备联网解决方案——上海卓岚

可配置Modbus网关 嵌入式设备联网解决方案的更多相关文章

  1. 物联网无线数传通信模块设备常见的几种Modbus网关

    物联网无线数传通信常见的几种Modbus网关 以下提到Modbus网关均指Modbus RTU转Modbus TCP,并不涉及对Modbus ASCII数据帧的处理,Modbus ASCII仅支持透明 ...

  2. 嵌入式设备上的 Linux 系统开发

    转载:http://www.ibm.com/developerworks/cn/linux/embed/embdev/index.html   如果您刚接触嵌入式开发,那么大量可用的引导装载程序(bo ...

  3. 嵌入式设备web服务器比较

    目录(?)[-] Boa Thttpd Mini_httpd Shttpd Lighttpd Goahead AppWeb Apache 开发语言和开发工具 结论 备注   现在在嵌入式设备中所使用的 ...

  4. 嵌入式设备web服务器

    操作系统:ubuntu10.04 前言:    为了提高对设备的易操作性,很多设备中提供pc机直接通过浏览器操作设备的功能.这就需要在设备中实现web服务器.    现在在嵌入式设备中所使用的web服 ...

  5. 【ARM-Linux开发】ARM嵌入式设备Linux系统启动步骤和方式

    1). 简介 本文简单介绍ARM嵌入式设备基于嵌入式Linux操作系统时候的启动步骤和启动方式, 区别与X86平台,ARM平台下并没有一个标准的启动步骤,不同ARM SoC都会使用各自定义的boot ...

  6. 【物联网串口服务器通信经验教程】Modbus网关协议转换

    在前面的文章中,我们已经详细地介绍了Modbus网关的几种主要类型,今天,就让我们来介绍一下其中简单协议转换的处理过程. 简单协议转换是最常规.最普遍的Modbus网关功能,也是数据处理效率最高Mod ...

  7. Local Binary Convolutional Neural Networks ---卷积深度网络移植到嵌入式设备上?

    前言:今天他给大家带来一篇发表在CVPR 2017上的文章. 原文:LBCNN 原文代码:https://github.com/juefeix/lbcnn.torch 本文主要内容:把局部二值与卷积神 ...

  8. 在嵌入式设备中使用 JavaScript 的前景

    by Conmajia PC上的JavaScript已经发展到ECMAScript 6(ES6),马上ES10都快出来了(虽然还是草案),但是硬件上的JS却很少听说.这几年手持设备/可穿戴设备的发展非 ...

  9. 在远程桌面服务中配置RD网关直接访问内网

    原文地址:http://wangchunhai.blog.51cto.com/225186/1139388/ 远程桌面网关(RD 网关)是一项角色服务,使授权远程用户可以从任何连接到 Internet ...

  10. 嵌入式设备hacking(转)

    原帖地址:http://drops.wooyun.org/papers/5157 0x00 IPCAM hacking TOOLS github-binwalk firmware-mod-kit ID ...

随机推荐

  1. nrm

    nrm npm install -g nrm nrm ls nrm use taobao Tips:不要使用cnpm,会有些奇怪的问题,导致npm install失败. 参考

  2. nodejs参数的处理与用户的交互

    解析脚本参数 作为脚本或者命令行工具,一般都需要支持不同的用户参数.默认参数被保存在process.argv的数组中,如下: [ nodeBinary, script, arg0, arg1, ... ...

  3. [设计模式/Java/多线程] 设计模式之单例模式【9】

    0 序 此文系对最常见的设计模式----单例模式的最全总结. 1 概述:单例模式 模式定义 单例模式: 保证1个类有且仅有1个实例,并提供1个访问它的全局访问点. 1个类有且仅有1个实例,并自行实例化 ...

  4. 课程上线:面向 AI 编程 | Semantic Kernel 从入门到精通

    课程计划 本课程设计不低于50课时,目前已录制44课时,已在2025-3-15日发布上线,未完课时将尽快录制发布.点击下方链接可在线试看购买: B 站课堂| Semantic Kernel 从入门到精 ...

  5. Source Tree ssh配置

    此链接中的gitlab和github使用ssh是一样的 https://blog.csdn.net/u014222765/article/details/78909074 注意在生成公钥后,要手动复制 ...

  6. 1703. 得到连续 K 个 1 的最少相邻交换次数

    1703. 得到连续 K 个 1 的最少相邻交换次数 class Solution { public int minMoves(int[] nums, int k) { List<Integer ...

  7. wso2~介绍

    1. Wso2-apim的介绍 WSO2 API Manager 是一个开源的 API 管理解决方案,旨在帮助组织设计.发布.管理和分析 API.它提供了全面的功能,支持企业在现代应用程序开发中实现更 ...

  8. 69.9K star!这个API调试神器让你告别Postman,开源免费真香!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 Hoppscotch 是一款专为开发者打造的轻量级API调试工具,凭借其极简的界面设计和强大 ...

  9. servlet 作用域

    作用域总结 HttpServletRequest:一次请求,请求响应之前有效 HttpSession:一次会话开始,浏览器不关闭或不超时之前有效 ServletContext:服务器启动开始,服务器停 ...

  10. CF1930G Prefix Max Set Counting 题解

    题意: 给定一棵以 1 为根的有根树,求出其所有 dfs 序中前缀最大值序列的数量.\(n\le 10^6\). 思路 显然考虑 DP. 由于是求前缀最大值序列的方案数,因此如果一些点要出现在这个序列 ...