def create_slave_context(self): register_size = len(self.registers_float) * 2 + len( self.registers_int32) * 2 store = ModbusSlaveContext(di=ModbusSequentialDataBlock(0, [17] * 100), co=ModbusSequentialDataBlock(0, [17] * 100), hr=ModbusSequentialDataBlock( 0, [0] * register_size), ir=ModbusSequentialDataBlock(0, [17] * 100)) if self.context == None: self.context = [ModbusServerContext(slaves=store, single=True)] else: self.context.append(ModbusServerContext(slaves=store, single=True))
def run_updating_server(): # ----------------------------------------------------------------------- # # initialize your data store # ----------------------------------------------------------------------- # slaves = { 0x0A: ModbusSlaveContext(), 0x0B: ModbusSlaveContext(), 0x0C: ModbusSlaveContext(), } context = ModbusServerContext(slaves=slaves, single=False) # ----------------------------------------------------------------------- # # initialize the server information # ----------------------------------------------------------------------- # identity = ModbusDeviceIdentification() identity.VendorName = 'Synology NAS' identity.ProductCode = 'Synology' identity.VendorUrl = '' identity.ProductName = 'Synology Server' identity.ModelName = 'Synology Server' identity.MajorMinorRevision = '0.0.1' # ----------------------------------------------------------------------- # # run the server you want # ----------------------------------------------------------------------- # StartTcpServer(context, identity=identity, address=(MODBUS_SERVER_IP, MODBUS_SERVER_PORT))
def run_updating_server(): # ----------------------------------------------------------------------- # # initialize your data store # ----------------------------------------------------------------------- # 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) # ----------------------------------------------------------------------- # # initialize the server information # ----------------------------------------------------------------------- # 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.3.0' # ----------------------------------------------------------------------- # # run the server you want # ----------------------------------------------------------------------- # time = 5 # 5 seconds delay loop = LoopingCall(f=updating_writer, a=(context,)) loop.start(time, now=False) # initially delay by time StartTcpServer(context, identity=identity, address=("localhost", 5020))
def run(self): store = ModbusSlaveContext( di=ModbusSequentialDataBlock(0, [i for i in range(100)],), co=ModbusSequentialDataBlock(0, [i for i in range(100)]), hr=ModbusSequentialDataBlock(0, [i for i in range(100)]), ir=ModbusSequentialDataBlock(0, [i for i in range(100)]), zero_mode=True ) for key, value in store.store.items(): log.debug('number of coils/registers in {}: {}'.format(key, len(value.values))) 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.5' self.server = ModbusTcpServer(context, identity=identity, address=("localhost", 5020)) log.info("starting modbus tcp server [localhost:5020]: {}".format(self.server)) self.server.serve_forever()
def testTcpServerNoSlave(self): ''' Test unknown slave unit exception ''' context = ModbusServerContext(slaves={0x01: self.store, 0x02: self.store }, single=False) data = b"\x01\x00\x00\x00\x00\x06\x05\x03\x00\x00\x00\x01" # get slave 5 function 3 (holding register) server = yield from StartTcpServer(context=context,address=("127.0.0.1", 0),loop=self.loop) if PYTHON_VERSION >= (3, 7): server_task = asyncio.create_task(server.serve_forever()) else: server_task = asyncio.ensure_future(server.serve_forever()) yield from server.serving connect, receive, eof = self.loop.create_future(),self.loop.create_future(),self.loop.create_future() received_data = None random_port = server.server.sockets[0].getsockname()[1] # get the random server port class BasicClient(asyncio.BaseProtocol): def connection_made(self, transport): _logger.debug("Client connected") self.transport = transport transport.write(data) connect.set_result(True) def data_received(self, data): _logger.debug("Client received data") receive.set_result(True) received_data = data def eof_received(self): _logger.debug("Client stream eof") eof.set_result(True) transport, protocol = yield from self.loop.create_connection(BasicClient, host='127.0.0.1',port=random_port) yield from asyncio.wait_for(connect, timeout=0.1) self.assertFalse(eof.done()) server.server_close()
def __init__(self, store, framer=None, identity=None): """ Overloaded initializer for the modbus factory If the identify structure is not passed in, the ModbusControlBlock uses its own empty structure. :param store: The ModbusServerContext datastore :param framer: The framer strategy to use :param identity: An optional identify structure """ self.decoder = ServerDecoder() if isinstance(framer, IModbusFramer): self.framer = framer else: self.framer = ModbusSocketFramer if isinstance(store, ModbusServerContext): self.store = store else: self.store = ModbusServerContext() self.control = ModbusControlBlock() self.access = ModbusAccessControl() if isinstance(identity, ModbusDeviceIdentification): self.control.Identity.update(identity)
def run_callback_server(): # ----------------------------------------------------------------------- # # initialize your data store # ----------------------------------------------------------------------- # queue = Queue() devices = read_device_map("device-mapping") block = CallbackDataBlock(devices, queue) store = ModbusSlaveContext(di=block, co=block, hr=block, ir=block) context = ModbusServerContext(slaves=store, single=True) # ----------------------------------------------------------------------- # # initialize the server information # ----------------------------------------------------------------------- # 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 = version.short() # ----------------------------------------------------------------------- # # run the server you want # ----------------------------------------------------------------------- # p = Process(target=device_writer, args=(queue,)) p.start() StartTcpServer(context, identity=identity, address=("localhost", 5020))
def __init__(self, server="tcp", *args, **kwargs): # initialize server information self.identity = ModbusDeviceIdentification() self._add_device_info() self._server_type = server self._port = kwargs.get('port', None) self.context = ModbusServerContext(single=False) self.simulate = kwargs.get('simulate', False) byte_order = kwargs.pop("byte_order", "big") word_order = kwargs.pop("word_order", "big") self.byte_order = Endian.Big if byte_order == "big" else Endian.Little self.word_order = Endian.Big if word_order == "big" else Endian.Little self.dirty = False if server == "tcp": self._port = int(self._port) self._address = kwargs.get("address", "localhost") self.server = ModbusTcpServer(self.context, identity=self.identity, address=(self._address, self._port)) else: self.server = MbusSerialServer(self.context, framer=ModbusRtuFramer, identity=self.identity, **kwargs) self.server_thread = ThreadedModbusServer(self.server)
def run_callback_server(ip, porta, queue, queue2): # ----------------------------------------------------------------------- # # initialize your data store # ----------------------------------------------------------------------- # diDataBlock = CallbackDataBlock(di_map(), queue, queue2) coDataBlock = CallbackDataBlock(co_map(), queue, queue2) hrDataBlock = CallbackDataBlock(hr_map(), queue, queue2) irDataBlock = CallbackDataBlock(ir_map(), queue, queue2) store = ModbusSlaveContext(di=diDataBlock, co=coDataBlock, hr=hrDataBlock, ir=irDataBlock) context = ModbusServerContext(slaves=store, single=True) # ----------------------------------------------------------------------- # # initialize the server information # ----------------------------------------------------------------------- # identity = ModbusDeviceIdentification() identity.VendorName = 'LHF Instrumentacao' identity.ProductCode = 'mOHM 1.0' identity.VendorUrl = 'lhf.ind.br' identity.ProductName = 'Miliohmimetro' identity.MajorMinorRevision = '1.0' # ----------------------------------------------------------------------- # # run the server you want # ----------------------------------------------------------------------- # StartTcpServer(context, identity=identity, address=(ip, porta))
def run_callback_server(): # ----------------------------------------------------------------------- # # initialize your data store # ----------------------------------------------------------------------- # queue = Queue() devices = {} temp = get_temp_c() devices[1] = temp # thermostat BT devices[2] = 0 # heater devices[3] = 0 # fan block = CallbackDataBlock(devices, queue) store = ModbusSlaveContext(di=block, co=block, hr=block, ir=block) context = ModbusServerContext(slaves=store, single=True) identity = ModbusDeviceIdentification() identity.VendorName = 'nick_labs' identity.ProductCode = 'PM' identity.VendorUrl = 'http://github.com/bashwork/pymodbus/' identity.ProductName = 'poppycock Server' identity.ModelName = 'poppycock Server' identity.MajorMinorRevision = '1.0' # ----------------------------------------------------------------------- # # run the server you want # ----------------------------------------------------------------------- # p = Process(target=device_handler, args=(queue, )) p.start() StartTcpServer(context, identity=identity, address=("0.0.0.0", 5020))
def __init__(self, system_settings): """ Modified StartTcpServer from pymodbus.server.sync .. warning:: DO NOT CHANGE START TCP SERVER SECTION! VERY SENSITIVE! """ identity = ModbusDeviceIdentification() identity.VendorName = system_settings['company'] identity.ProductCode = system_settings['product'] identity.VendorUrl = system_settings['url'] identity.ProductName = system_settings['product'] identity.ModelName = system_settings['version'] identity.MajorMinorRevision = system_settings['version'] framer = ModbusSocketFramer if MODBUS_FILL_EMPTY_DATA: slave = ModbusSlaveContext() else: # TODO: Complete this feature! Does not work properly at the moment! empty_block = ModbusSparseDataBlock({0x00: 0x00}) slave = ModbusSlaveContext(di=empty_block, co=empty_block, hr=empty_block, ir=empty_block) # LOGGER.debug("slave.store = " + str(slave.store)) context = ModbusServerContext(slaves=slave, single=True) self.server = ModbusTcpServer(context, framer) self.server.RequestHandlerClass = CustomModbusHandler super(ModbusProcess, self).__init__(target=self.server.serve_forever)
def run_async_server(): store_feed1 = ModbusSlaveContext( di=ModbusSequentialDataBlock(0, [17]*100), co=ModbusSequentialDataBlock(0, [17]*100), hr=ModbusSequentialDataBlock(0, [17]*100), ir=ModbusSequentialDataBlock(0, [17]*100)) context_feed1 = ModbusServerContext(slaves=store_feed1, single=True) # ----------------------------------------------------------------------- # # initialize the server information # ----------------------------------------------------------------------- # # If you don't set this or any fields, they are defaulted to empty strings. # ----------------------------------------------------------------------- # identity_feed1 = ModbusDeviceIdentification() identity_feed1.VendorName = 'Pymodbus' identity_feed1.ProductCode = 'PM' identity_feed1.VendorUrl = 'http://github.com/bashwork/pymodbus/' identity_feed1.ProductName = 'Pymodbus Server' identity_feed1.ModelName = 'Pymodbus Server' identity_feed1.MajorMinorRevision = '1.0' # ----------------------------------------------------------------------- # # run the server you want # ----------------------------------------------------------------------- # StartTcpServer(context_feed1, identity=identity_feed1, address=("192.168.95.10", 502))
def run_custom_db_server(address, port): # ----------------------------------------------------------------------- # # initialize your data store # ----------------------------------------------------------------------- # coil_block = ModbusSequentialDataBlock(1, [0] * 256) discrete_input_block = ModbusSequentialDataBlock(10001, [0] * 256) input_register_block = ModbusSequentialDataBlock(30001, register_data) holding_register_block = ModbusSequentialDataBlock(40001, register_data) store = ModbusSlaveContext(di=discrete_input_block, co=coil_block, hr=holding_register_block, ir=input_register_block, zero_mode=True) context = ModbusServerContext(slaves=store, single=True) # ----------------------------------------------------------------------- # # initialize the server information # ----------------------------------------------------------------------- # 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.3.0' # ----------------------------------------------------------------------- # # run the server you want # ----------------------------------------------------------------------- # # p = Process(target=device_writer, args=(queue,)) # p.start() StartTcpServer(context, identity=identity, address=(address, port))
def run_server(): # Initialize data store 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) # Server information 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 = '2.3.0' # run the server you want after creating tasks sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(("127.0.0.1", 9977)) loop = asyncio.get_event_loop() loop.create_task(start_servers(context, identity, loop)) loop.create_task(updating_writer(context, 0.3, sock)) loop.run_forever() sock.close()
def init(): slaves = { UNIT: ModbusSlaveContext( di=ModbusSequentialDataBlock(0, [17]*100), co=ModbusSequentialDataBlock(0, [17]*100), hr=ModbusSequentialDataBlock(0, [17]*100), ir=ModbusSequentialDataBlock(0, [17]*100) ) } context = ModbusServerContext(slaves=slaves, single=False) identity = ModbusDeviceIdentification() identity.VendorName = 'HAXOM' identity.ProductCode = 'SIMU-ICS-PORTAIL' identity.VendorUrl = 'https://github.com/haxom/' identity.ProductName = 'SIMU-ICS' identity.ModelName = 'PORTAIL' identity.MajorMinorRevision = '1.0.0' print(f'Modbus slave launched on {listen_int}:{listen_port}') StartTcpServer( context, identity=identity, address=(listen_int, listen_port) )
def run_simulation_server(): # ----------------------------------------------------------------------- # # initialize your data store # ----------------------------------------------------------------------- # store = ModbusSlaveContext( co=ModbusSparseDataBlock({100: 0, 110: 0, 120: 0, 130: 0,}),#initiate Coils di=ModbusSparseDataBlock({100: 0, 110: 0}), #initiate discrete inputs ir=ModbusSparseDataBlock({100: 0, 110: 0, 120:0, 130:0, 140:0}), #initiate input registers hr=ModbusSparseDataBlock({100: 60000, 110: 10000, 120:655}), zero_mode=True) #initiate holding registers context = ModbusServerContext(slaves=store, single=True) # ----------------------------------------------------------------------- # # initialize the server information # ----------------------------------------------------------------------- # identity = ModbusDeviceIdentification() identity.VendorName = 'akiUP' identity.ProductCode = 'IOP' identity.VendorUrl = 'https://github.com/akiUp/ICSonPySim' identity.ProductName = 'ICSonPy' identity.ModelName = 'ICS Simulation' identity.MajorMinorRevision = '0.0.1' # ----------------------------------------------------------------------- # # run the Modbus Server with looping call of simulation # ----------------------------------------------------------------------- # time = 0.1 # process frequency delay in seconds, increase if you want to slow down the process loop = LoopingCall(f=Process, mbcontext=(context,)) # Main caleer function continiously calls the Process() function loop.start(time, now=False) # initially delay by time StartTcpServer(context, identity=identity, address=("0.0.0.0", 502))
def run_server(): 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 = version.short() StartTlsServer( context, identity=identity, certfile="server.crt", keyfile="server.key", address=("127.0.0.1", 8020), )
def run_PiCam_server(): # ----------------------------------------------------------------------- # # initialize your data store # ----------------------------------------------------------------------- # store = ModbusSlaveContext(di=ModbusSequentialDataBlock(0, [1] * 100), co=ModbusSequentialDataBlock(0, [17] * 100), hr=ModbusSequentialDataBlock(0, [0] * 100), ir=ModbusSequentialDataBlock(0, [17] * 100)) context = ModbusServerContext(slaves=store, single=True) # ----------------------------------------------------------------------- # # initialize the server information # ----------------------------------------------------------------------- # identity = ModbusDeviceIdentification() identity.VendorName = 'Robot system design' identity.ProductCode = 'PI' # ----------------------------------------------------------------------- # # run the server you want # ----------------------------------------------------------------------- # time = utilities_modbus.REGISTER_REFRESH_FREQUENCY loop = LoopingCall(f=updating_server, a=(context, )) loop.start(time, now=False) # initially delay by time StartTcpServer(context, identity=identity, address=(utilities_modbus.IP, utilities_modbus.PORT))
def __init__(self, context, framer=None, identity=None, **kwargs): ''' Overloaded initializer for the socket server If the identify structure is not passed in, the ModbusControlBlock uses its own empty structure. :param context: The ModbusServerContext datastore :param framer: The framer strategy to use :param identity: An optional identify structure :param port: The serial port to attach to :param stopbits: The number of stop bits to use :param bytesize: The bytesize of the serial messages :param parity: Which kind of parity to use :param baudrate: The baud rate to use for the serial device :param timeout: The timeout to use for the serial device ''' self.threads = [] self.decoder = ServerDecoder() self.framer = framer or ModbusAsciiFramer self.context = context or ModbusServerContext() self.control = ModbusControlBlock() if isinstance(identity, ModbusDeviceIdentification): self.control.Identity.update(identity) self.device = kwargs.get('port', 0) self.stopbits = kwargs.get('stopbits', Defaults.Stopbits) self.bytesize = kwargs.get('bytesize', Defaults.Bytesize) self.parity = kwargs.get('parity', Defaults.Parity) self.baudrate = kwargs.get('baudrate', Defaults.Baudrate) self.timeout = kwargs.get('timeout', Defaults.Timeout) self.socket = None self._connect()
def run_server(device, baud=9600): store = ModbusSlaveContext(di=ModbusSequentialDataBlock(0, [17] * 100), co=ModbusSequentialDataBlock(0, [17] * 100), hr=ModbusSequentialDataBlock(0, [25185] * 1024), ir=ModbusSequentialDataBlock(0, [25185] * 1024)) slaves = { 1: copy.deepcopy(store), 2: copy.deepcopy(store), 3: copy.deepcopy(store), 4: copy.deepcopy(store), 5: copy.deepcopy(store), 6: copy.deepcopy(store), 246: copy.deepcopy(store) } context = ModbusServerContext( slaves=slaves, single=False, ) # RTU Server StartSerialServer(context, identity=None, port=device, framer=ModbusRtuFramer, stopbits=1, bytesize=8, parity=serial.PARITY_NONE, baudrate=baud)
def __init__(self, context, framer=None, identity=None, address=None, handler=None, **kwargs): """ Overloaded initializer for the socket server If the identify structure is not passed in, the ModbusControlBlock uses its own empty structure. :param context: The ModbusServerContext datastore :param framer: The framer strategy to use :param identity: An optional identify structure :param address: An optional (interface, port) to bind to. :param handler: A handler for each client session; default is ModbusDisonnectedRequestHandler :param ignore_missing_slaves: True to not send errors on a request to a missing slave :param broadcast_enable: True to treat unit_id 0 as broadcast address, False to treat 0 as any other unit_id """ self.threads = [] self.decoder = ServerDecoder() self.framer = framer or ModbusSocketFramer self.context = context or ModbusServerContext() self.control = ModbusControlBlock() self.address = address or ("", Defaults.Port) self.handler = handler or ModbusDisconnectedRequestHandler self.ignore_missing_slaves = kwargs.get('ignore_missing_slaves', Defaults.IgnoreMissingSlaves) self.broadcast_enable = kwargs.get('broadcast_enable', Defaults.broadcast_enable) if isinstance(identity, ModbusDeviceIdentification): self.control.Identity.update(identity) socketserver.ThreadingUDPServer.__init__(self, self.address, self.handler)
def run_updating_server(): # ----------------------------------------------------------------------- # # initialize your data store # ----------------------------------------------------------------------- # InitialValueList = [0] * 29 + CheckInitialValues() store = ModbusSlaveContext( hr=ModbusSequentialDataBlock(0, InitialValueList)) context = ModbusServerContext(slaves=store, single=True) # ----------------------------------------------------------------------- # # initialize the server information # ----------------------------------------------------------------------- # 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.3.0' # ----------------------------------------------------------------------- # # run the server you want # ----------------------------------------------------------------------- # time = scan_interval # 5 seconds delay loop = LoopingCall(f=updating_writer, a=(context, )) loop.start(time, now=False) # initially delay by time StartTcpServer(context, identity=identity, address=(ip_address, port))
def run_server(): 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 = version.short() # socat -d -d PTY,link=/tmp/ptyp0,raw,echo=0,ispeed=9600 PTY,link=/tmp/ttyp0,raw,echo=0,ospeed=9600 StartSerialServer( context, framer=ModbusRtuFramer, identity=identity, port="/tmp/ttyp0", timeout=0.005, baudrate=9600, )
def run_async_server(): # ----------------------------------------------------------------------- # # initialize your data store # ----------------------------------------------------------------------- # store = ModbusSlaveContext(di=ModbusSequentialDataBlock(0, [17] * 100), co=ModbusSequentialDataBlock(0, [17] * 100), hr=ModbusSequentialDataBlock(0, [17] * 100), ir=ModbusSequentialDataBlock(0, [17] * 100)) store.register(CustomModbusRequest.function_code, 'cm', ModbusSequentialDataBlock(0, [17] * 100)) context = ModbusServerContext(slaves=store, single=True) # ----------------------------------------------------------------------- # # initialize the server information 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' # ----------------------------------------------------------------------- # # run the server you want # ----------------------------------------------------------------------- # StartTcpServer(context, identity=identity, address=("192.168.0.119", 5020), custom_functions=[CustomModbusRequest])
def run_custom_db_server(): # ----------------------------------------------------------------------- # # initialize your data store # ----------------------------------------------------------------------- # block = CustomDataBlock([0]*100) store = ModbusSlaveContext(di=block, co=block, hr=block, ir=block) context = ModbusServerContext(slaves=store, single=True) # ----------------------------------------------------------------------- # # initialize the server information # ----------------------------------------------------------------------- # 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.3.0' # ----------------------------------------------------------------------- # # run the server you want # ----------------------------------------------------------------------- # # p = Process(target=device_writer, args=(queue,)) # p.start() StartTcpServer(context, identity=identity, address=("localhost", 5020))
def initRegistersArea(self, hr_size): # ----------------------------------------------------------------------- # # initialize the server information # ----------------------------------------------------------------------- # # If you don't set this or any fields, they are defaulted to empty strings. # ----------------------------------------------------------------------- # identity = ModbusDeviceIdentification() identity.VendorName = 'ITLabs' identity.ProductCode = 'Conta-e-spara' identity.VendorUrl = 'https://github.com/fablabromagna-org/Conta-Spara' identity.ProductName = 'CS Modbus Gateway' identity.ModelName = 'Modbus Gateway' identity.MajorMinorRevision = '1.0' self.modbusIdentity = identity # ----------------------------------------------------------------------- # # initialize the data store # ----------------------------------------------------------------------- # store = ModbusSlaveContext( # di=ModbusSequentialDataBlock(0, [991]*100), # co=ModbusSequentialDataBlock(0, [992]*100), hr=ModbusSequentialDataBlock(0, [0] * hr_size)) self.Size = hr_size self.clientContext = ModbusServerContext(slaves=store, single=True) return self.clientContext
def run_dbstore_update_server(): # ----------------------------------------------------------------------- # # initialize your data store # ----------------------------------------------------------------------- # block = ModbusSequentialDataBlock(0x00, [0] * 0xff) store = SqlSlaveContext(block) context = ModbusServerContext(slaves={1: store}, single=False) # ----------------------------------------------------------------------- # # initialize the server information # ----------------------------------------------------------------------- # 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 = version.short() # ----------------------------------------------------------------------- # # run the server you want # ----------------------------------------------------------------------- # time = 5 # 5 seconds delay loop = LoopingCall(f=updating_writer, a=(context,)) loop.start(time, now=False) # initially delay by time loop.stop() StartTcpServer(context, identity=identity, address=("", 5020))
def run_server(): block1 = ModbusSequentialDataBlock(0x00, [0] * 0xFF) block2 = ModbusSequentialDataBlock(0x10, [0] * 0xFF) block3 = ModbusSequentialDataBlock(0x00, [0] * 0xFF) block4 = ModbusSequentialDataBlock(0x00, [0] * 0xFF) store1 = ModbusSlaveContext(co=block3, di=block4, hr=block1, ir=block2) store2 = ModbusSlaveContext(co=block3, di=block4, hr=block1, ir=block2) slaves = {0xFF: store1} context = ModbusServerContext(slaves=slaves, single=False) 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' interval = 1 server = ModbusTcpServer(context, identity=identity, address=('0.0.0.0', 502)) t = threading.Thread(target=server.serve_forever, daemon=True) t.start() loop = LoopingCall(f=updatevalues, a=server) loop.start(interval, now=True) reactor.run()
def modbus_master(module, properties): log.debug('Modbus master module : ' + str(module)) # Modbus Master #--------------------------------------------------------------------------# # initialize your data store #--------------------------------------------------------------------------# store = ModbusSlaveContext(co=ModbusSequentialDataBlock(0, [0] * 100), hr=ModbusSequentialDataBlock(0, [0] * 100)) context = ModbusServerContext(slaves=store, single=True) #--------------------------------------------------------------------------# # initialize the server information #--------------------------------------------------------------------------# identity = ModbusDeviceIdentification() identity.VendorName = 'ASO+AKO' identity.ProductCode = 'DYODEv2' identity.VendorUrl = 'http://github.com/wavestone-cdt/dyode' identity.ProductName = 'DYODE' identity.ModelName = 'Very Low Cost @ BlackHat Arsenal' identity.MajorMinorRevision = '1.0' #--------------------------------------------------------------------------# # run the server you want #--------------------------------------------------------------------------# time = 1 # 1 seconds delay loop = LoopingCall(f=modbus_master_update, a=(module, properties, context)) loop.start(time, now=False) # initially delay by time StartTcpServer(context, identity=identity, address=("0.0.0.0", \ properties['port_out']))
def run_server(): store = ModbusSlaveContext(di=ModbusSequentialDataBlock(0, [17] * 100), co=ModbusSequentialDataBlock(0, [17] * 100), hr=ModbusSequentialDataBlock(0, [17] * 100), ir=ModbusSequentialDataBlock(0, [17] * 100)) store.register(CustomModbusRequest.function_code, 'cm', ModbusSequentialDataBlock(0, [17] * 100)) context = ModbusServerContext(slaves=store, single=True) # ----------------------------------------------------------------------- # # initialize the server information # ----------------------------------------------------------------------- # # If you don't set this or any fields, they are defaulted to empty strings. # ----------------------------------------------------------------------- # 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 = '2.1.0' # ----------------------------------------------------------------------- # # run the server you want # ----------------------------------------------------------------------- # # Tcp: StartTcpServer(context, identity=identity, address=("localhost", 5020), custom_functions=[CustomModbusRequest])