将 Modbus 寄存器地址和相应的设置值存储到 MySQL 数据库



我正在尝试运行一个Modbus服务器代码,该代码仅将Modbus寄存器地址和相应的值存储到MySQL数据库中。 例如,我想向 Modbus 服务器发送一个命令,将 40001 地址值设置为 25。Modbus服务器只是将此地址和值保存到数据库中。有人对此有想法吗?我正在使用pymodbus python库。

from __future__ import print_function
from pymodbus.server.asynchronous import StartTcpServer
from pymodbus.device import ModbusDeviceIdentification
from pymodbus.datastore import ModbusSparseDataBlock
from pymodbus.datastore import SqlSlaveContext
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext
from pymodbus.transaction import ModbusRtuFramer, ModbusAsciiFramer
import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)
class CustomDataBlock(ModbusSparseDataBlock):
    def setValues(self, address, value):
        super(ModbusSparseDataBlock, self).setValues(address, value)
        print("wrote {} to {}".format(value, address))

def run_custom_db_server():
    block  = CustomDataBlock([0]*100)
    store  = SqlSlaveContext(di=block, co=block, hr=block, ir=block)
    context = ModbusServerContext(slaves=store, single=True)
    identity = ModbusDeviceIdentification()
    identity.VendorName = 'pymodbus'
    identity.ProductCode = 'PM'
    identity.VendorUrl = 'http://github.com/bashwork/pymodbus/'
    identity.ProductName = 'pymodbus Server'
    identity.ModelName = 'pymodbus Server'
    identity.MajorMinorRevision = '2.2.0'
    StartTcpServer(context, identity=identity, address=("localhos", 502))

if __name__ == "__main__":
    run_custom_db_server()
`
from pymodbus.server.asynchronous import StartTcpServer
from pymodbus.device import ModbusDeviceIdentification
from pymodbus.datastore import ModbusSparseDataBlock
from pymodbus.datastore import SqlSlaveContext
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext
from pymodbus.transaction import ModbusRtuFramer, ModbusAsciiFramer
import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)
class CustomDataBlock(ModbusSparseDataBlock):
    def setValues(self, address, value):
        super(ModbusSparseDataBlock, self).setValues(address, value)
        print("wrote {} to {}".format(value, address))

def run_custom_db_server():
    block  = CustomDataBlock([0]*100)
    store  = SqlSlaveContext(di=block, co=block, hr=block, ir=block)
    context = ModbusServerContext(slaves=store, single=True)
    identity = ModbusDeviceIdentification()
    identity.VendorName = 'pymodbus'
    identity.ProductCode = 'PM'
    identity.VendorUrl = 'http://github.com/bashwork/pymodbus/'
    identity.ProductName = 'pymodbus Server'
    identity.ModelName = 'pymodbus Server'
    identity.MajorMinorRevision = '2.2.0'
    StartTcpServer(context, identity=identity, address=("localhos", 502))

if __name__ == "__main__":
    run_custom_db_server()

最新更新