如何使用 Apache NiFi 读取 Modbus TCP/IP 数据?
Posted
技术标签:
【中文标题】如何使用 Apache NiFi 读取 Modbus TCP/IP 数据?【英文标题】:How to read Modubus TCP/IP data with Apache NiFi? 【发布时间】:2020-12-23 09:23:47 【问题描述】:我有 Modbus TCP/IP 中的数据。我必须使用 Apache NiFi 读取可用数据。我不知道,必须使用哪个处理器(例如 GetTCP、ListenTCP、Plc4xSourceProcessor)。你能帮我解决这个问题吗? Apache NiFi 有什么可行性吗?
【问题讨论】:
【参考方案1】:Plc4xSourceProcessor 正是您要寻找的。 Apache PLC4X 项目提供了使用各种协议访问 PLC 的驱动程序。其中之一是 Modbus 协议。因此,如果您使用 Plc4xSourceProcessor 并配置一个 modbus 连接字符串并列出您要收集的地址,那么您将能够这样做。
几天前我恰好在我们的网站上写了 PLC4X-NiFi 集成文档:https://plc4x.apache.org/users/integrations/apache-nifi.html
我认为这会有所帮助。
克里斯
【讨论】:
感谢@Christofer 的精彩文章。现在,我陷入了 modbus 协议的“PLC 连接字符串”和“PLC 资源地址字符串”的语法。 此语法 100% 取决于连接类型...因此,如果您使用的是 Modbus,请在此处尝试其他页面:plc4x.apache.org/users/protocols/modbus.html 但一般来说,连接字符串应该是“modbus://1.2.3.4”(使用正确的 IP),然后是您喜欢的格式的地址字符串,如该页面所述。 我正在用 WinModbus 模拟 modbus 协议。我在 Apache Nifi 的“Plc4xSourceProcessor”中的配置,PLC 连接字符串 - modbus://localhost:502 和 PLC 资源地址字符串 - test1: 40001。我收到类似“无法正确初始化处理器的错误。如果仍计划运行,NiFi 将在“管理产量持续时间”过去后尝试初始化并再次运行处理器。失败是由于 org.apache.plc4x.java。 api.exceptions.PlcRuntimeException:地址格式无效:org.apache.plc4x.java.api.exceptions.PlcRuntimeException:地址格式无效" 我认为问题可能是纯数字格式是最近才添加的……我建议使用 0.8.0-SNAPSHOT 版本。或使用“holding-register:1”作为地址。【参考方案2】:我真的不知道 Modbus TCP/IP 是什么,但这基本上归结为您希望 NiFi 成为客户端还是服务器。
ListenTCP 创建一个 TCP 服务器,它正在等待某个客户端建立连接并开始发送数据。最常见的情况是日志转发系统,如 syslog,可以配置为通过 TCP 将日志转发到主机/端口。
GetTCP 是一个客户端,它连接到作为服务器的某个主机/端口,并开始读取数据。
Plc4xSourceProcessor 不是官方 Apache NiFi 代码的一部分,但快速查看它似乎更像是一个类似于 GetTCP 的客户端处理器,因为你给它一个连接字符串告诉它连接到哪里。
【讨论】:
非常感谢您的回复 Bryan。这句话是什么意思? “GetTCP 是一个客户端,它连接到作为服务器的某个主机/端口,并开始读取数据。”。我可以有任何关于 GetTCP 的教程或示例吗?会更有帮助。 我在解释客户端和服务器之间的区别......服务器等待客户端启动连接。 GetTCP 是一个客户端,因为它会启动一个与正在等待连接的服务器的连接。以上是关于如何使用 Apache NiFi 读取 Modbus TCP/IP 数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何集成Apache NiFi和Azure Active Directory以进行用户身份验证?