Modbus网关的 四种类型

2023-11-11

  1. 概述
    Modbus网关是一种能够将Modubs TCP协议转化为Modbus RTU协议的设备。Modbus广泛应用于仪表和传感器领域,可以获得仪表和传感器的数据,但是传统的基于RS485的Modbus RTU(或ASCII)速度和扩展性较差,所以后来出现了Modbus TCP这种基于网络的协议。所以Modbus网关这种转换器就应运而生了。
    四种Modbus网关从简单协议转换到多主机网关,再到存储型网关,再到ZLMB这种可配置网关。从简单到复杂也是反映了它的发展过程,了解他们的优缺点有助于工程师更好掌握它们的使用方法。
    这里特别推荐的是ZLMB可配置网关,它可以预先配置需要读取的多个从站的多个寄存器列表,然后网口可以用一条指令一次性读取所有寄存器,读取效率非常高。且读取速度很快。具体参考《可配置Modbus网关ZLMB》。
  2. 四类Modbus网关
    2.1. 简单协议转化
    最初的Modubs网关,只不过是需要解决数据格式的转化。举一个例子,Modbus RTU(RS485端)中03功能码,读取00开始的1个寄存器的指令为:01 03 00 00 00 01 84 0a,其中84 0a是CRC校验。而一个Modbus TCP指令(网络端)为00 00 00 00 00 06 01 03 00 00 00 01。我们知道普通的串口服务器是“透传”的,也就是发送串口发送01 03 00 00 00 01 84 0a,网口也是01 03 00 00 00 01 84 0a。为了实现这个RTU转Modbus TCP功能,对比发现只要去掉CRC校验84 0a加上开头的00 00 00 00 00 06即可。

图 1简单协议转化的多主机冲突
这种简单的格式转化确实能够初步地满足要求。但是缺点是:

  1. 无法多主机访问:不能实现多个Modbus TCP主机去访问网关,因为主机A和主机B发送的数据在RS485总线上会产生抢占总线冲突,引起数据错乱。
  2. 返回数据干扰:设备对主机A的应答不仅会返回给主机A也会返回给主机B,这样主机B的返回数据中就会有干扰数据。

虽然简单协议转化进本已经被淘汰,这里也简要介绍一下它的设置方法:在ZLVircom配置工具的“设备编辑”界面中选择转化协议为“Modbus TCP转RTU”,在高级选项中去掉“多主机”和“RS485防冲突”两个勾。
2.2. 多主机模式
多主机模式的Modbus网关正是为解决“简单协议转化”模式的缺点设计的。如上图所示,当主机A和主机B同时访问是Modbus网关会进行总线的占用调度,从而解决总线冲突问题,另外主机A访问的数据也不会再发送给主机B,解决了返回数据干扰问题。
数据通讯步骤如下:

  1. 当网关收到主机A的查询请求时,检查总线是否有在使用,如果空闲则发送到RS485总线上,否则等待到总线空闲。
  2. 网关记录下来当前查询的主机,这里是主机A。
  3. 当数据从RS485总线返回时,网关将其转化为Modbus TCP格式转发给相应的主机(这里是主机A)。

多主机模式的优点是,实现了多台主机的同时访问,解决了总线冲突和返回数据干扰问题,但是仍然存在不足之处:

  1. 数据返回慢:从以上的数据通讯步骤可以看出,一台主机获得数据需要数据线从网络转发到RS485总线,等待设备返回后再从RS485转发到网络。由于RS485总线本身是慢速通信方式,主机一般需要等待50~100ms才能获得一个数据。
  2. 主机数量很多时,等待容易超时:这也是数据返回慢引起的另外一个问题。

对于早期的ZLAN5142默认即“多主机模式”;对于ZLAN5143(1.565之前版本)不支持“多主机模式”,只支持“存储型”;对于于ZLAN5143(1.565及其之后版本)支持“多主机模式”,设置方法为:在ZLVircom配置工具的“设备编辑”界面中选择转化协议为“Modbus TCP转RTU”,在高级选项中将RS485总线冲突最多等待时间改为2秒即可。
2.3. 存储型网关
存储型网关正是为了解决“多主机模式”的缺点而设计的,由于“多主机模式”的慢速问题主要是由于RS485总线返回数据太慢引起的,“存储型”的思路就是通过预先获得某些需要的数据,事先存储起来,等网络端需要数据时可以立即提供,从而减少数据查询时间。
存储型网关有两个特点:

  1. 自学习:存储型网关无需配置,因为它可以在主机索要一个查询数据的时候就会将这个记录保存一起,网关内部会自动学习当前网口需要的数据。
  2. 事先查询:当网关获悉所有主机索要的所有的寄存器之后,网关会事先进行逐条查询,并把结果存储到网关的内部。

如此一来,当主机A想要之前要过的数据的时候,网关会从自己的内存中调取数据,并立即返回给主机A,由于没有转发到RS485总线的过程,这个时间大约在1~2ms,比之前的50~100ms大大提高。
存储型网关的优点:

  1. 返回速度快:主机A查询返回数据时间大大提高。
  2. 无需配置:由于采用自学习方式,无需配置,操作起来和“多主机模式”并没有差别。

存储型网关的问题:

  1. 首条指令返回慢:由于网关是通过学习来获得主机索要的寄存器号的,在获得这个信息前,无法事先查询。所以主机发送的第一条指令仍然需要通过转到RS485总线来获得数据。首条指令返回和多主机模式一样慢。
  2. RS485总线查询过快可能影响设备工作:由于一般默认情况下RS485总线会以最快速的速度查询从站设备内部的寄存器内容,而某些仪表可能无法适应这么快速的查询导致设备工作异常。对于这点实际可以加大“RS485总线空余时间”参数来解决查询过快的问题,实际是可以解决的。
  3. 不是最新数据:由于数据是事先查询获得,存储起来的,所以查到的数据可能并不是最新的数据,虽然这个时间也就只有几百毫秒,对于某些特殊情况也需要考虑到这种延时。
  4. 时序问题:某些Modbus TCP的读取和存储需要按照写、读等时序操作的,“存储型”的这种预先存储会打乱这种时序,会引起某些设备无法兼容的问题。

这里的缺点2、3、4都可以撤回到“多主机模式”的网关来解决这个问题,注意撤回到“多主机模式”后,数据返回会变慢。注意ZLAN5143的新固件支持“多主机模式”和“存储型”两种模式。而上述缺点1(首条指令返回慢),将会在后面的“可配置”网关中解决。

ZLAN5142不支持“存储型”,ZLAN5143设置为“存储型”的方法为:在ZLVircom配置工具的“设备编辑”界面中选择转化协议为“Modbus TCP转RTU”即可。
2.4. 可配置网关
为了解决“存储型”网关的首条指令返回慢的问题可以采用可配置网关。可配置网关也采用“存储型”网关的事先查询获得RS485总线从站寄存器内容的办法。但是它不采用自学习的方法,为了解决首条指令返回慢的问题,必须事先把需要的寄存器列表配置到网关内部。它可以预先配置Modbus RTU端的设备的地址、功能码和寄存器列表,并存储到网关内部。网关会自动采集这些配置的RTU设备的数据,然后映射到连续的Modbus TCP寄存器地址,从而允许Modbus TCP端一次性读取所有的设备的不同寄存器的数据。

卓岚可配置网关又称之为ZLMB网关,有如下的优点:

  1. 所有指令返回速度都快:即使是首条指令也同样快速。
  2. 指令合并提高效率:可以将分散的不同的站地址、寄存器映射到同一片寄存器。这样Modbus TCP端可以用一条指令采集所有数据,包括不同站地址的设备的数据,而不是分为几条指令分别去采集,提高了Modbus TCP端的传输效率。
  3. 地址重映射:对于某些情况需要将不同分散的寄存器重新映射到整片连续的区域,ZLMB网关可以实现这个要求。

可配置网关的缺点:

  1. 需要手动配置:如果“存储型”网关就能够满足要求的可以优先选择“存储型”,因为“存储型”无需任何配置。ZLMB方式需要手动使用ZLVircom配置需要的寄存器。
  2. 事先预读取引起的问题:和存储型一样存在“不是最新数据”和“时序问题”。

卓岚ZLAN5143、ZLAN7144、ZLAN7146、ZLAN8303等都支持可配置Modbus网关功能。其中ZLAN5143需要固件版本1.579及以上版本,配合ZLVircom5.15及以上版本来使用。7144需要固件版本1.491及以上版本。配置方法是:在ZLVircom配置工具的“设备编辑”界面中点击“固件和配置”按钮,然后在弹出的“网页程序下载工具”对话框中,选择“网页目录下载”,然后点击“ZLMB”按钮,设计完毕后点击“下载”按钮下载到设备内容。具体内容请参考《可配置Modbus网关ZLMB》的详细介绍。
3. 四类网关比较
综上分析我们将最后的比较结果列出表格如下:
网关类型 简单协议转化 多主机模式 存储型网关 可配置网关
多主机支持 ╳ √ √ √
返回指令快 ╳ ╳ √ √
首条指令返回快 ╳ ╳ ╳ √
不存在预先读取引起的问题 √ √ ╳ ╳
无需配置 √ √ √ ╳
支持指令和合并和重新映射地址 ╳ ╳ ╳ √
总的来说,可配置网关是读取效率最高的,最为先进的Modbus网关,但是配置较为繁琐;而存储型网关是默认的模式,也是使用最简便的模式,同时具有多主机、读取速度快等特点;而在某些RS485设备不适应“预先读取”这种的情况下,可以退回到“多主机”模式这种慢速模式。而“简单协议转化”模式由于存在多主机时有总线误码和丢失,一般情况不会采用。
4. 型号和支持的模式
四种Modbus网关模式和对应的型号现列出到如下表:
名称 型号 简单协议转化 多主机模式 存储型网关 可配置网关
多串口Modbus网关 ZLAN5240、ZLAN5443A、ZLAN5843A、ZLAN5G40A √ √ ╳ ╳
老的单串口Modbus网关 ZLAN5142、ZLAN5142-3 √ √ ╳ ╳
新一代多串口Modbus网关 ZLAN5443D、ZLAN5443-232 √ √ √ √
以太网Modus网关 ZLAN5143 √ √ √ √
Wifi+以太网Modus网关 ZLAN7144 √ √ √ √
Wifi Modus网关 ZLAN7146 √ √ √ √
4G+以太网Modbus网关 ZLAN8303-7 √ √ √ √
Zigbee Modbus网关 ZLAN9543 √ √ √ √
Lora Modbus网关 ZLAN9743 √ √ √ √

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Modbus网关的 四种类型 的相关文章

  • 压测以及python的自省

    经过两个季度的开发 数据库收敛的项目一期终于到了最后阶段 这周完成最后的功能测试之后即将部署到测试环境进行压测 并进行运维文档的完善 下午小组会上 heng哥分享了python类和自省机制的相关内容 他用了苏格拉底那句经典的 The une
  • Eolink 旗下网关产品各版本功能及性能对比

    GoKu 网关提供企业版 EE 与开源版 CE 两个版本 满足不同阶段用户对于微服务的需求 两个版本均支持 私有云部署 开源版 CE 目前已停止维护 Apinto 开源版本是 Goku 开源版 CE 的一次架构升级 经过前面几年的网关架构和
  • modbus读取保持寄存器实例

    读取108 110的实例 一共读取3个寄存器 请求 03 00 6B 00 03 03 功能码 表示读取保存寄存器 006B 十六进制表示107 从107开始往后读取 0003 十六进制表示读取3个寄存器 响应 03 06 02 2B 00
  • 【计算机网络】【湖科大MOOC】网络层IP数据报发送和转发过程 默认网关 静态路由配置 默认路由 路由环路

    目录 网络层 4 IP数据报的发送和转发过程 4 1 直接交付 vs 间接交付 4 2 源主机如何知道目的主机是否与自己在同一个网络中 4 3 主机C如何知道路由器R的存在 4 4 路由器收到IP数据包后如何转发 5 静态路由配置 5 1
  • APISIX源码解析-插件-客户端IP【real-ip】

    real ip 客户端IP插件 关键属性 源码解析 real ip 插件用于动态改变传递到 APISIX 的客户端的 IP 和端口 local function get addr conf ctx if conf source http x
  • JavaDoc注释的使用跟导出JavaDoc文档

    1 Javadoc是什么 JavaDoc是Sun公司提供一种从程序源代码中抽取类 方法 成员等注释形成一个和源代码配套的API帮助文档技术 但是需要在编写程序时以一套特定的标签作注释 在程序编写完成 后 通过Javadoc就可以同时形成程序
  • 支付宝API接口开发相关文档以及实例

    支付宝实物即时到账接口 在下载该接口之前 请确定你已经签约了即时到账的服务协议 并且账号已经开通了即时到账的权限 口常见错误问题搜集 http union alipay com alipay zhichi shiwu 商家工具FAQ pdf
  • 静态测试

    之前对 静态测试 一直不怎么理解 一直徘徊在为什么要进行静态测试 看了下面这几篇文章 突然觉得的柳暗花明了 目前我正在测试的项目xx让我烦心的问题终于找到出路了 http qa taobao com p 8017 http qa taoba
  • 微服务之服务网关(GateWay)

    服务网关 概述 什么是网关 为什么需要网关 GateWay实现网关 spring cloud 2 0 概念 Route 路由 工作流程 搭建 动态路由 Predicate 断言 注意 Filter 过滤 自定义过滤器 todo gatewa
  • 程序员MM一年的工作总结

    11月8号就是 工作 一周年纪念日了 是该对这过去的一年做个总结了 当初来这个公司因为它是第一个递橄榄枝给我的地方 为了尽量少的减少毕业和工作之间的空档时间 就接受了 我在这一年中改变很大 这样的改变是综合的 1 技术 这里所说的技术应该算
  • Spring Cloud Gateway替代zuul作为API网关(一)

    本文简要介绍如何使用Spring Cloud Gateway 作为API 网关 不是使用zuul作为网关 关于Spring Cloud Gateway和zuul的性能比较本文不再赘述 基本可以肯定Spring Cloud Finchley版
  • AppDomain 和动态加载

    应用程序体系结构 在我专攻代码之前 我想谈谈我尝试做的事 您可能记得 SuperGraph 让您从函数列表中进行选择 我希望能够在具体的目录中放置外接程序程序集 让 SuperGraph 检测它们 加载它们 并找到它们中包含的所有函数 如果
  • C++客户端Modbus通信(TCP主站)

    本文简单介绍Qt使用外部modbus通信C 编程流程 modbus中文手册 https blog csdn net qq 23670601 article details 82155378 Qtmodbus较为方便 建议无特殊情况可以使用q
  • qt中clicked(bool checked)和toggled(bool checked)的区别

    先来看qt文档的解释 上面看出 共同点是 当点击按钮时 状态信号都会被发送 不同点 clicked this signal is not emitted if you call setDown setChecked or toggle to
  • 基于状态机的单个按键长按,短按实现复用

    开博第一文 希望再次记录学习的过程 按键扫描 单片机里面再基础不过的程序了 但对于初学者来说 用好按键也不是一件简单的事情 在毛老师的介绍下 第一次知道了状态机的思想也可以用于单片机的程序设计 感觉很是新奇 看了老师给发的几个文档后对状态机
  • code style

    最近一直在看java convention和google c style 因为老板要提高代码质量 我们小公司一个 因为客户说我们的代码质量太烂了 于是开始搞代码质量 先从静态 代码质量开始 于是就研究起来code style 但是 我发现
  • QT信号和槽以结构体为参数传递复杂数据

    QT 的信号和槽机制能十分方便的用来传输数据 但是如果数据种类比较多 分类比较多的时候 就需要更好地更高效的来传递数据的方法 以结构体作为参数是个很不错的选择 这几天写的程序正好需要以结构体来作为参数 但是网上搜的资料很少 讲的也不详细 我
  • MFC 中的 libmodbus

    我正在尝试将 libmodbus 提供的 modbus 库集成到 Visual Studio 2010 中的自定义 MFC 项目中 到目前为止我所遵循的步骤如下 1 我在 Visual Studio 2010 中创建了项目 如下面的快照所示
  • Modbus TCP Android 应用程序

    我正在开发 Android 应用程序来在 tcp ip modbus 的帮助下控制 PLC 有人对此有很好的教程吗 Modbus协议转义线程 Android Jamod https stackoverflow com questions 1
  • 我可以在输入寄存器中写入吗? MODBUS

    我已经在一家公司工作了两个月MODBUS项目现在我发现了一个问题 我的客户要求我写入输入寄存器 地址 30001 到 40000 我认为这对我来说不是什么问题 因为每个modbus文档说 30001 到 40000 寄存器是只读的 甚至可以

随机推荐