我正在尝试使用 pymodbus 从 Raspberry Pi 3b 写入 PCON 控制器。我有 python 3.5 和 pymodbus 1.4。我通过连接运行 modbus 编程工具的笔记本电脑验证了通过硬件的通信路径(这是用于控制电动缸夹紧零件的应用程序),我能够打开/关闭伺服,我能够点动气缸。
我创建了一个非常简单的脚本来测试与控制器的对话并打开伺服。#!/usr/bin/env python3 # - - 编码:utf-8 - -
import pymodbus
import serial
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)
client = ModbusClient(method="rtu", port="/dev/serial0", stopbits=1,
bytesize=8, parity='N', bauderate = 38400, timeout=.5)
connection=client.connect()
#read/write to coils
client.write_coil(260,1,unit=0x00) #address, value, unit
这是调试输出
DEBUG:pymodbus.transaction:Running transaction 1
DEBUG:pymodbus.transaction:send: 0x3a 0x30 0x30 0x30 0x36 0x30 0x31 0x30
0x34 0x30 0x30 0x30 0x31 0x46 0x34 0xd 0xa
DEBUG:pymodbus.transaction:recv:
DEBUG:pymodbus.transaction:getting transaction 1
线圈的地址为260(来自供应商),单位为#0,数据值为1(线圈位)。当您查看 DEBUG 中的十六进制值并通过十六进制到 ascii 转换器运行它时,您会得到:00050104FF00F7。第一个“00”是单元号,这是正确的,05是功能代码,是pymodbus添加的,接下来的四个字符是地址-是0104应该是0260,接下来的四个是值-in这种情况下FF00代表ON,这是正确的。我使用整数作为地址,但显然这是不正确的。我找不到有关地址格式的任何信息 - 所有示例似乎都是整数。如果有人有 pymodbus 经验,或者您认为我应该放弃 pymodbus 并转到 minimummodbus 或 modbus-tk,我将不胜感激任何帮助/建议。