- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 python 脚本,可以使用 pymodbus 库处理 Modbus 事务。为了进行故障排除,我想打印发送和接收到设备的原始字节,最好以十六进制格式。
这是简化的代码,请参阅底部的注释以获取我想要得到的示例。我使用了 TCP 客户端,但希望它也能在 ModbusSerialClient 上工作。
from pymodbus.client.sync import ModbusTcpClient
ipAddress = '10.130.14.174'
registerToRead = 3000
client = ModbusTcpClient(ipAddress, port=502)
connection = client.connect()
response = client.read_holding_registers(registerToRead, 1, unit=1)
print(response.registers)
# Would like to get something like:
# OUT: [00h] [00h] [00h] [00h] [00h] [06h] [01h] [03h] [0Bh] [B8h] [00h] [01h]
# IN : [00h] [00h] [00h] [00h] [00h] [05h] [01h] [03h] [02h] [00h] [FFh]
我尝试了 response.encode()
但只返回了 b'\x02\x00\xff'
最佳答案
要获取原始帧,您只需在 Debug模式下运行请求即可。
那就是这样的:
from pymodbus.client.sync import ModbusTcpClient
import logging
FORMAT = ('%(asctime)-15s %(threadName)-15s '
'%(levelname)-8s %(module)-15s:%(lineno)-8s %(message)s')
logging.basicConfig(format=FORMAT)
log = logging.getLogger()
log.setLevel(logging.DEBUG)
ipAddress = '10.130.14.174'
registerToRead = 3000
client = ModbusTcpClient(ipAddress, port=502)
connection = client.connect()
response = client.read_holding_registers(registerToRead, 1, unit=1)
如果您现在从 Python 控制台运行此代码,您应该会看到类似以下内容:
2019-10-08 13:10:42,872 MainThread DEBUG transaction :111 Current transaction state - TRANSACTION_COMPLETE
2019-10-08 13:10:42,872 MainThread DEBUG transaction :116 Running transaction 3
2019-10-08 13:10:42,872 MainThread DEBUG transaction :215 SEND: 0x0 0x3 0x0 0x0 0x0 0x6 0x1 0x3 0x0 0x1 0x0 0x1
2019-10-08 13:10:42,872 MainThread DEBUG sync :73 New Transaction state 'SENDING'
2019-10-08 13:10:42,872 MainThread DEBUG transaction :224 Changing transaction state from 'SENDING' to 'WAITING FOR REPLY'
2019-10-08 13:10:42,873 MainThread DEBUG transaction :300 Changing transaction state from 'WAITING FOR REPLY' to 'PROCESSING REPLY'
2019-10-08 13:10:42,873 MainThread DEBUG transaction :229 RECV: 0x0 0x3 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x14
2019-10-08 13:10:42,873 MainThread DEBUG socket_framer :147 Processing: 0x0 0x3 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x14
2019-10-08 13:10:42,873 MainThread DEBUG factory :266 Factory Response[ReadHoldingRegistersResponse: 3]
2019-10-08 13:10:42,873 MainThread DEBUG transaction :379 Adding transaction 3
2019-10-08 13:10:42,873 MainThread DEBUG transaction :390 Getting transaction 3
2019-10-08 13:10:42,873 MainThread DEBUG transaction :189 Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'
>>>
如果您想要更多详细信息或需要处理多个帧,我建议安装 Wireshark这是非常强大的。如果您需要通过串行方式对 Modbus 执行相同操作,您可以尝试 SerialPCAP .
编辑:这可能是您目前不需要的东西,但如果您无法访问 Modbus 串行链路的任何一侧,您可以点击总线或使用正如我所解释的软件嗅探器here , here和 here .
对于 Modbus TCP,如果您无法访问链路的任何一侧或 network switch,我不知道有任何简单的技术可以使用 Wireshark 监控流量。 .
关于python - 访问 pyModbus 事务中的原始字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58276741/
我是 python 和 modbus 的初学者,现在我正在尝试使用 pymodbus 控制连接到串行端口的风扇几个小时。使用制造商的专有软件,我能够控制风扇,因此连接本身有效。然而,我自己的代码没有。
谁能解释如何通过 Modbus TCP/IP 使用 pymodbus 以正确的方式创建请求并获得响应? 我有 PLC,我想将其用作从站,PC 用作主站。 我尝试这样做: from pymodbus.c
我被指派在没有任何文档的情况下执行该任务。我在从 MODBUS 读取数据时遇到问题。这是我能够创建的脚本: from pymodbus.constants import Endian from pym
我对 pymodbus 相当陌生,我正在尝试使用 pymodbus 读取协作机器人的保存寄存器以获取当前 z 坐标的值。此类信息位于 7053 地址。我查看了较旧的问题,但无法让我的代码工作: fro
我有 pymodbus TcpClient 超时问题: import logging from pymodbus.client.sync import ModbusTcpClient logging.
我是 docker 和 Modbus 的新手,我正在尝试使用 Modbus(准确地说是 pymodbus 工具包)编写自定义客户端/服务器应用程序,我可能遇到了 docker 的一些问题。 我试过示例
我有一个 python 脚本,可以使用 pymodbus 库处理 Modbus 事务。为了进行故障排除,我想打印发送和接收到设备的原始字节,最好以十六进制格式。 这是简化的代码,请参阅底部的注释以获取
我有一些在 pymodbus 1.2 下编写的 modbus TCP 代码相关代码是 result = modbus_client.read_holding_registers(40093, 3) 在
如何从 Register with pymodbus 中读取数据? 我正在尝试这段代码: import pymodbus from pymodbus.pdu import ModbusRequest
我写了一个测试代码,它从 PLC 的 modbus 服务器读取一些线圈/寄存器。当我调用一个请求时,代码有效。我拔下电缆,然后 Twisted 调用 clientConnectionLost 函数,这
我对 Modbus 和 PyModBus 很陌生,但是我花了很多时间尝试阅读和试验它。如果有人能指出我正确的方向,我将不胜感激…… 我在寄存器 40001、40003、40005 和 40007(分别
我正在对 PLC 设备(Moxa ioLogik E1214)进行编程,并将 DI 端口连接到按钮,并将线圈连接到 LED 灯。这个想法是,当您按下按钮时,LED 应该亮起。 如果您按住按钮直到执行读
我正在尝试从Modbus TCP读取字符串(Usecase-1)和一个请求中的多种类型的数据(Usecase-2)数据 em> 设备,但是无法正确解码。 系统配置: Python 3.6.5 Pymo
希望你做得很好!我最近开始使用 python 进行 modbus 通信。我想澄清我的一些疑虑。 哪个模块更适合使用 Python 实现 modbus - minimalmodbus、pymodbus、
我想停止 pymodbus async ModbusTcpServer 然后启动一个新服务器。因此,我尝试使用以下简化的代码片段,但出现错误: from pymodbus.server.async i
一般来说,我是 pymodbus 和 modbus 的新手,我已经尝试了一段时间直接添加一个 float 到服务器上下文没有任何成功,我想知道你是否有任何关于如何去做的线索。我已经尝试通过执行以下操作
我使用 pymodbus 读取并解码 float_32 值。 之前,我使用以下代码简单地对其进行解码: from pymodbus.client.sync import ModbusTcpClient
当我尝试使用 pymodbus 和 raspberry pi 读取保持寄存器时遇到问题。我似乎无法同时连接两个服务器/从属设备(一个或另一个都可以工作,但在一起,我无法从两个设备读取寄存器)。这些连接
我已经开始使用 pymodbus 从 modbus 读取值以存储在异地数据库中。我一直在努力解决响应中收到的值与我在 Jace 上看到的值不同的问题。 我也尝试过 modbus-tk 并且我得到了同样
我正在做一个项目,我有两个都安装了 Pymodbus 的 Debian 虚拟机。我正在尝试设置一个虚拟测试环境,在其中我可以在它们通信时从第三个 Kali VM 对两者执行各种网络攻击。不幸的是,我对
我是一名优秀的程序员,十分优秀!