问题标签 [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 投票
2 回答
3162 浏览

python - pymodbus:请求创建和响应接收

谁能解释如何通过 Modbus TCP/IP 使用 pymodbus 以正确的方式创建请求并获得响应?

我有PLC,我想用作从站和PC - 作为主站。

我试图这样做:

0 投票
1 回答
1517 浏览

python - Pymodbus/Twisted 异步客户端重新连接

我编写了一个测试代码,它从 PLC 的 modbus 服务器读取一些线圈/寄存器。当我调用一个请求时,代码有效。我拔掉了电缆,然后 Twisted 调用了 clientConnectionLost 函数,所以当我插回电缆时,我的客户端将重新连接。如果我执行多个请求,如下面的代码所示,处理中断,没有任何反应。我不知道是什么导致了问题。

0 投票
2 回答
1512 浏览

c# - 如何从此 Modbus 地址获取正确的值?

我有一个 MOXA Modbus TCP 模块(M-4210 与 NA-4010 网络模块相结合,还连接了一些其他模块)用作 2 通道模拟输出,每个电压从 0 到 10 伏。

在我的 C# 应用程序中,我需要获取这些输出的当前值,这并不像我对整个 Modbus 事物很陌生那样容易。

在我的代码中,我已经有一个工作的 modbus tcp 客户端来完成它的工作,我通过读取和写入另一个数字输出模块的单个线圈来测试它。然而,模拟输出模块似乎使用寄存器而不是线圈。

从头开始,这些是此模块中两个通道的 modbus 设置(取自 MOXA ioAdmin Tool):

在此处输入图像描述

和地址:

在此处输入图像描述

这是来自网络界面的另一个屏幕截图:

在此处输入图像描述

所以我试图读取这样的值:

此代码返回一个值,更改如下:

  • 当通道 #0 设置为 的(原始)值时1139,返回的 int 值为29440

  • 当通道 #0 设置为1140时,返回值为29696

我似乎走在正确的轨道上,但我不太了解偏移量以及当值返回时如何分离通道。如果有人能对此有所了解,那就太好了,在此先感谢!

0 投票
0 回答
280 浏览

c++ - How can I choose the port to which I send the response

I am currently trying to communicate with a PLC by using Modbus/TCP but even thought I can read the Modbus frame send by the PLC I must give the Modbus response to port 502 and the stream I use send to the port used by the PLC to send the frame. I tried using two stream to receive and send but when i close the first one the PLC get that as a timed out communication and then refuse the second connection. If it can help you here is the code I use but for now it barely does anything else than allowing me to test the connection.

If you have any suggestion.

0 投票
1 回答
43599 浏览

c - Create a simple Client/Server using Modbus in C

I am currently working on a project which will allow different automates to communicate. To do so, I would like to create a client and a server that will talk using the modbus protocol. I am not sure if I want to be using ModBus/TCP, ModBus/RTU or ModBus/ASCII for now.

I have searched for client/server examples in C and I could find libraries but no simple example of communication. I would like to start from scratch so libraries are not what I am looking for.

What I am asking for is if someone could give me a simple code written in C for a client and/or a server that communicate using Modbus, since I am not sure of what I will be using any type of Modbus would be a great help (RTU/TCP/ASCII).

The simpler the better, what I would like the code to demonstrate is, for example : an initialization to the server, a request, an answer, closing the connection.

Thank you very much for your time.

0 投票
2 回答
1382 浏览

c# - C# Modbus 每 20 秒获取大量寄存器

我用 C# 做了一个应用程序,在这个应用程序中,我必须每 20 秒通过 Modbus TCP 读取 PLC 的 840 个寄存器。我使用这个库http://www.codeproject.com/Tips/16260/Modbus-TCP-class。当我使用该方法时

Master.ReadHoldingRegister(ushort id, byte unit, ushort startAddress, ushort numInputs)

它返回一个长度为 144 而不是 1680 的字节数组,你知道吗?

0 投票
0 回答
379 浏览

java - 我正在尝试从 modbus 模拟器中读取寄存器值,但无法执行

已建立与 modbus 模拟器的连接,但我正在尝试从模拟器中读取寄存器值并将其写入控制台但无法执行。此代码成功创建了与 modbus 模拟器的连接,但包含读取寄存器值的语法,即请求寄存器值,并且响应大致相同但无法获取寄存器值。

下面是我试过的代码。

0 投票
0 回答
607 浏览

java - 从 modbus 模拟器读取寄存器值

已建立与 modbus 模拟器的连接,但我试图从模拟器中读取寄存器值并将其写入控制台但无法执行。此代码成功地创建了与 modbus 模拟器的连接,但包含读取寄存器值的语法,即请求寄存器值以及响应大致相同但无法获取寄存器值。我尝试初始化寄存器值和范围,但代码也不起作用。下面是我试过的代码。我已经在代码中初始化并输入了寄存器值的范围,但无法从 modbus 模拟器中获取值。下面是我试过的代码。

0 投票
1 回答
9463 浏览

c# - PInvoke 签名与非托管目标签名不匹配

我正在尝试为 modbusm.dll (win-tech.com/html/mbusocx.htm) 创建一个包装 C# 文件,我为此使用了 dumpbin 输出。

文件 modbusm.dll 的转储

文件类型:DLL

部分包含 modbusm.dll 的以下导出

概括

我的 C# 包装器是

当我运行代码时

在视觉工作室中,我遇到了异常

对 PInvoke 函数 'TestApp!TestApp.MbMasterV7::ConnectModbusTCP' 的调用使堆栈失衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。

我已经尝试了所有调用约定并得到相同的错误。可用于 modbus 协议的 .Net 库对于我正在使用的新 plc 类型来说还不够好。

0 投票
1 回答
544 浏览

python - PyModbus - Read_holding_coils 返回奇怪的值

我编写了以下一小段代码:

.

我从 print 得到的输出是:

.

为什么我得到这个而不是寄存器持有的实际值(整数/字符串)?

感谢您的回答!