сохранение адреса регистра Modbus и соответствующих заданных значений в базе данных MySQL - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь запустить код сервера Modbus, который просто сохраняет адрес регистра Modbus и соответствующие значения в базе данных MySQL.например, я хочу отправить команду серверу Modbus, чтобы установить значение адреса 40001 равным 25. Сервер Modbus просто сохраняет этот адрес и значения в базе данных.У кого-нибудь есть идеи по этому поводу?Я использую библиотеку pymodbus python.

1 Ответ

0 голосов
/ 18 июня 2019
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()
...