问题标签 [modbus-tcp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1529 浏览

vb.net - 为远程终端单元创建定制的 MODBUS 程序

我这里有一个 King Pigeon S275 远程终端单元。这个 RTU 有用于 GSM、GPRS 和 TCP/IP 的通信模块(通过 RJ45 连接)我也可以通过 USB 将它连接到我的计算机来与这个 RTU 通信。

我在此链接中上传的手册... https://www.mediafire.com/?gnfzfz5l7pess1p

此 RTU 可以使用购买时包含的配置器软件进行配置。通过使用该配置器软件,您还可以查看连接到它的所有传感器的数据/读数,还可以查看连接到 RTU 的所有数字输入/触点的状态...

过去几天我一直在研究 MODBUS,我想创建自己的 MODBUS 程序,以便 S275 RTU 也可以将传感器数据或所有 I/O 数据发送到我自己的程序....

但是......我仍然不知道我可以从哪里开始......我可以制作这个 Modbus 程序 1. 使用 VB 吗?2.使用PHP?

我还需要知道哪些其他参数?和制作这个 modbus 软件的教程......

我还在这里上传了 S275;1. GPRS 自定义协议 2. MODBUS TCP 握手通讯协议 3. 注册地址

https://www.mediafire.com/?khnfu53a4p12nrd

谢谢

0 投票
1 回答
1510 浏览

c# - 从 Modbus-TCP 读取不同的元素

我试图弄清楚如何从 modbus 设备(Powerscout 24)中读取不同元素的不同值。这里有一本手册说

处理一个元素

PowerScout 24 有八个元素。Modbus 和 BACnet 各自使用不同的方式来指定 PS24 上的元素。在 Modbus 模式下,十进制网络开关设置计量元件“A”的基地址。计量元件“B”到“H”的 Modbus 地址总是比之前的元件高 1。例如,如果旋转地址开关设置为 001,则计量元件“A”寄存器值将在 Modbus 地址 001 处访问,元素“B”寄存器将在 Modbus 地址 002 处访问,元素“C”在地址 003 处访问,并且很快。

所以根据我的理解,如果我想读取元素 A(或从站 1)上寄存器 4012 的值,我会读取 4012 的保持寄存器。

如果我想读取元素 B,寄存器将是 4013?但这怎么可能,4013被用于不同的值——排量PF系统。(查看第 65 页顶部)

我试过使用这个库EasyModbusTCP

我已经对此进行了测试,它的工作原理是它只能读取元素 A(从站 1)的寄存器。我无法弄清楚如何读取其他元素的寄存器。

我检查了库的另一部分(RTU - 从串行端口读取),这定义了一个要读取的从属设备,但我需要通过 TCP 而不是串行读取设备,所以我不能以这种方式实现它。

谁能解释我如何通过 TCP 读取不同的元素?

0 投票
1 回答
1202 浏览

modbus-tcp - Modbuspal slave 和 Jamod 作为 tcp master

我使用 Modbuspal 模拟器作为从机,使用 Jamod tcp 主代码作为主机。以下是我从寄存器读取数据的 Jamod tcp 主代码:

Modbuspal 从站:

Modbuspal 从机

当我执行我的代码时,连接已建立,但出现以下错误:

错误是在“transaction.execute();”行触发。请帮忙。

提前致谢。

0 投票
1 回答
113 浏览

c - 重新解释为浮点数时可以指定字节顺序吗?

我正在编写一个通过 modbus TCP 进行通信的 C 程序。3.14我在我的 modbus 客户端上发送浮点数,以0x4048F5C3. 我的 C 代码正在正确接收 modbus 数据包,现在我只需要将 重新解释unsigned char *buffer为浮点数,以便获得 value 3.14。这是我的代码

现在,我可以说这个问题是由于字节顺序,因为如果我交换字节顺序,缓冲区看起来像这样:

然后一切正常。但这感觉有点乱。我必须交换字节顺序吗?或者有没有一种方法可以在我这样做时指定字节顺序:

0 投票
2 回答
689 浏览

python - 我应该如何处理 twisted.application.internet.ClientService 中的重新连接?

我正在尝试在一个扭曲的应用程序中使用最近引入 的类,该应用程序使用. 我觉得我的问题与我使用的 modbus 协议无关,因为我使用较低级别的扭曲 API 创建了很多其他工作原型;但是这个新的看起来完全符合我的需求,因此应该减少我的代码足迹并保持它的整洁,如果我能让它工作的话。twisted.application.internet.ClientServicepymodbusClientService

我的测试显示ClientService手柄重新连接,正如预期的那样,我可以轻松访问第一个连接Protocol。我遇到的问题是获取Protocol重新连接的后续对象。这是我遇到问题的代码的简化版本:

当连接失败(无论出于何种原因)errback时,deferred返回的 fromread_holding_registers()被调用,目的是我的服务可以放弃它Protocol并返回等待回调返回新连接的状态Protocol......whenConnected()但是似乎正在发生的是 ClientService 还没有意识到连接已死,并返回给我相同的断开连接的协议,给我一个完整的日志:

还是很相似,注意重复的 ModbusClientProtocol 对象地址。

我很确定我可能只是为这个 API 选择了一个糟糕的模式,但是我已经迭代了一些不同的可能性,比如创建我自己的,Protocol并且完全Factory基于ModbusClientProtocol和处理该类中的轮询机制;但是通过持久性配置和机制来存储轮询数据感觉有点混乱,似乎在 ClientService 级别或更高级别处理这个是一种更清洁的方法,但我无法找到跟踪的最佳方法当前连接的协议。我想我真正想要的是在扩展轮询情况下使用该类的最佳实践建议。ClientService

0 投票
1 回答
402 浏览

raspberry-pi - Raspberry pi modbus on rj45

Hi there (I apologize for my english, that not my native lang) I have a sort of "blackbox" who send me data trought a RJ45 port, in a MODBUS format and I want to read the data with my Raspberry Pi 2. I searched a lot on google, but the only solutions for listening a modbus is to put a card on top of my RPI2, using the RX/TX ports, that I dont want... If someone have a solution, thanks !

0 投票
2 回答
9358 浏览

arduino - Arduino 上的 Modbus TCP/IP

我正在尝试使用以下代码在 arduino uno + ethernet shield 上实现 Modbus TCP。我在 pc 上使用 modbus slave 模拟器来检查以下代码。但是,代码似乎不起作用。我已经从http://myarduinoprojects.com/modbus.html下载了代码和库。如有必要,请建议我更正。还有另一个可用于 arduino 上的 modbus tcp/ip 的工作示例。

谢谢。

0 投票
0 回答
867 浏览

python - Modbus TCP Python 服务器不工作

我正在尝试使用modbus基于异步服务器来流式传输多个数据值,但我只看到零。请帮忙。我的代码基于

https://pymodbus.readthedocs.io/en/latest/examples/asynchronous-server.html

图像

0 投票
1 回答
903 浏览

java - Modbus TCP 从属线程 - 设置和获取寄存器值

根据这个howToModbusSlave,我正在尝试使用所选值的寄存器构建我自己的modbus从站(稍后我想使用python / jython用来自受监控设备的数据填充这些值)并使用Predix(云平台)将它们发送出去。由于我是一个 modbus 新手,我仍然无法找到如何将我选择的值添加到我的寄存器持有者中的方法。

这是我用来在 localhost:502 上为 Master 提供数据的 Slave 线程:

数据节点配置:

我得到这些转移(“输出”):

主要问题:

1) 节点 1-2 和 2-2 的数据在哪里(输出中缺失)?

2)如何编辑从寄存器发送的值?(为什么我得到“价值”:655370?)

可选问题:(我在文档中不理解的东西)

3) simpleDigitalOut/In 类代表什么?

4) ModbusCoupler.getReference().setUnitID(value) 代表什么?(它显然不必与数据节点的 unitID 做任何共同的事情

5) SimpleInputRegister 和 SimpleRegister 类有什么区别?

0 投票
1 回答
75 浏览

modbus - 一个 PLC 中是否可以有两个 Modbus 映射?

我有一个已经有大地图(3000 个寄存器)的 PLC。我有一个与 PLC 通信的 PC 软件。

现在客户想要重新安排收银机。我想知道我是否可以将相同的逻辑映射到第二张地图。例如,对于我的软件,Modbus ID 1: 40001 是移动阀门,而客户想要移动到 40100。那么有没有办法对 ID 1:40001 和 ID2:40100 做同样的事情?

这是一个普遍的问题。如果您需要了解我的PLC 下划线编程语言,我必须看看。