minimalmodbus
是一个用于与 Modbus 设备通信的 Python 库,主要用于实现 Modbus 主站(Master)功能。它不直接支持实现 Modbus 从站(Slave)功能。如果您需要实现一个 Modbus 从站,您可能需要使用其他库,如 pymodbus
,它支持实现 Modbus 主站和从站功能。
以下是如何使用 pymodbus
来实现一个简单的 Modbus 从站的示例:
pymodbus
首先,您需要安装 pymodbus
库:
pip install pymodbus
以下是一个使用 pymodbus
实现简单 Modbus 从站的示例:
from pymodbus.server.sync import StartTcpServer
from pymodbus.device import ModbusDeviceIdentification
from pymodbus.datastore import ModbusSequentialDataBlock
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext
from pymodbus.transaction import ModbusRtuFramer, ModbusBinaryFramer
import logging
# 配置日志
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)
# 创建数据存储
store = ModbusSlaveContext(
di=ModbusSequentialDataBlock(0, [17]*100),
co=ModbusSequentialDataBlock(0, [17]*100),
hr=ModbusSequentialDataBlock(0, [17]*100),
ir=ModbusSequentialDataBlock(0, [17]*100))
context = ModbusServerContext(slaves=store, single=True)
# 配置设备标识
identity = ModbusDeviceIdentification()
identity.VendorName = 'pymodbus'
identity.ProductCode = 'PM'
identity.VendorUrl = 'http://github.com/riptideio/pymodbus/'
identity.ProductName = 'pymodbus Server'
identity.ModelName = 'pymodbus Server'
identity.MajorMinorRevision = '1.0'
# 启动TCP服务器
StartTcpServer(context, identity=identity, address=("localhost", 5020))
ModbusSlaveContext
创建一个从站上下文,其中包含离散输入(di)、线圈(co)、保持寄存器(hr)和输入寄存器(ir)。StartTcpServer
启动一个 Modbus TCP 服务器,监听 localhost
上的端口 5020
。您可以使用 minimalmodbus
或其他 Modbus 主站工具来测试这个从站。例如,使用 minimalmodbus
作为主站:
import minimalmodbus
# 创建仪表对象
instrument = minimalmodbus.Instrument('localhost', 1) # 端口名称, 从站地址
instrument.serial.baudrate = 9600 # 设置波特率
# 读取保持寄存器
value = instrument.read_register(0, 0) # 寄存器地址, 小数位数
print(f'Register value: {value}')
请注意,minimalmodbus
主要用于串行通信(如 RS-485),而上面的从站示例使用的是 TCP。如果您需要使用串行通信,可以使用 StartSerialServer
来启动串行服务器。
如果您需要实现一个串行 Modbus 从站,可以使用以下代码:
from pymodbus.server.sync import StartSerialServer
# 启动串行服务器
StartSerialServer(context, identity=identity, port='/dev/ttyUSB0', baudrate=9600, framer=ModbusRtuFramer)
在这个示例中,您需要将 port
参数设置为您的串行端口(如 /dev/ttyUSB0
或 COM3
)。
通过这些步骤,您可以使用 pymodbus
实现一个简单的 Modbus 从站,并使用 minimalmodbus
或其他工具进行测试。
领取专属 10元无门槛券
手把手带您无忧上云