コード例 #1
0
 def __init__(self, port, baud=9600):
     self.port = port
     self.baud = baud
     self.connection = serial.Serial(
         port,
         baud,
         timeout=float(self.kByteLength * self.kMaxReadSize) / baud)
     self.client_framer = ModbusRtuFramer(decoder=ClientDecoder())
     self.server_framer = ModbusRtuFramer(decoder=ServerDecoder())
コード例 #2
0
    def __implementation(method):
        ''' Returns the requested framer

        :method: The serial framer to instantiate
        :returns: The requested serial framer
        '''
        method = method.lower()
        if method == 'rtu': return ModbusRtuFramer(ClientDecoder())
        raise ParameterException("Invalid framer method requested")
コード例 #3
0
    def testSerialClientInit(self):
        """ Test the tornado serial client client initialize """
        client = AsyncModbusSerialClient(ioloop=schedulers.IO_LOOP, framer=ModbusRtuFramer(ClientDecoder()), port=SERIAL_PORT)
        self.assertEqual(0, len(list(client.transaction)))
        self.assertTrue(isinstance(client.framer, ModbusRtuFramer))

        framer = object()
        client = AsyncModbusSerialClient(framer=framer)
        self.assertTrue(framer is client.framer)
コード例 #4
0
 def testSerialClientConnect(self, mock_serial, mock_seriostream, mock_ioloop):
     """ Test the tornado serial client client connect """
     client = AsyncModbusSerialClient(ioloop=schedulers.IO_LOOP,
                                      framer=ModbusRtuFramer(
                                          ClientDecoder()),
                                      port=SERIAL_PORT)
     self.assertTrue(client.port, SERIAL_PORT)
     self.assertFalse(client._connected)
     client.connect()
     self.assertTrue(client._connected)
     client.close()
コード例 #5
0
 def setUp(self):
     ''' Sets up the test environment '''
     self.client = None
     self.decoder = ServerDecoder()
     self._tcp = ModbusSocketFramer(decoder=self.decoder)
     self._rtu = ModbusRtuFramer(decoder=self.decoder)
     self._ascii = ModbusAsciiFramer(decoder=self.decoder)
     self._binary = ModbusBinaryFramer(decoder=self.decoder)
     self._manager = DictTransactionManager(self.client)
     self._queue_manager = FifoTransactionManager(self.client)
     self._tm = ModbusTransactionManager(self.client)
コード例 #6
0
 def _framer(method):
     if method == "ascii":
         framer = ModbusAsciiFramer(ClientDecoder())
     elif method == "rtu":
         framer = ModbusRtuFramer(ClientDecoder())
     elif method == "binary":
         framer = ModbusBinaryFramer(ClientDecoder())
     elif method == "socket":
         framer = ModbusSocketFramer(ClientDecoder())
     else:
         framer = None
     return framer
コード例 #7
0
    def testSerialClientExecute(self, mock_serial, mock_seriostream, mock_ioloop):
        """ Test the tornado serial client client execute method """
        client = AsyncModbusSerialClient(ioloop=schedulers.IO_LOOP,
                                         framer=ModbusRtuFramer(
                                             ClientDecoder()),
                                         port=SERIAL_PORT)
        client.connect()
        client.stream = Mock()
        client.stream.write = Mock()

        request = ReadCoilsRequest(1, 1)
        d = client.execute(request)
        tid = request.transaction_id
        self.assertEqual(d, client.transaction.getTransaction(tid))
コード例 #8
0
    def __implementation(method, client):
        """ Returns the requested framer

        :method: The serial framer to instantiate
        :returns: The requested serial framer
        """
        method = method.lower()
        if method == 'ascii':
            return ModbusAsciiFramer(ClientDecoder(), client)
        elif method == 'rtu':
            return ModbusRtuFramer(ClientDecoder(), client)
        elif method == 'binary':
            return ModbusBinaryFramer(ClientDecoder(), client)
        elif method == 'socket':
            return ModbusSocketFramer(ClientDecoder(), client)
        raise ParameterException("Invalid framer method requested")
コード例 #9
0
    def testSerialClientDisconnect(self, mock_serial, mock_seriostream, mock_ioloop):
        """ Test the tornado serial client client disconnect """
        client = AsyncModbusSerialClient(ioloop=schedulers.IO_LOOP,
                                         framer=ModbusRtuFramer(
                                             ClientDecoder()),
                                         port=SERIAL_PORT)
        client.connect()
        self.assertTrue(client._connected)

        def handle_failure(failure):
            self.assertTrue(isinstance(failure.exception(), ConnectionException))

        d = client._build_response(0x00)
        d.add_done_callback(handle_failure)
        client.close()
        self.assertFalse(client._connected)
コード例 #10
0
    def testSerialClientBuildResponse(self, mock_serial, mock_seriostream, mock_ioloop):
        """ Test the tornado serial client client builds responses """
        client = AsyncModbusSerialClient(ioloop=schedulers.IO_LOOP,
                                         framer=ModbusRtuFramer(
                                             ClientDecoder()),
                                         port=SERIAL_PORT)
        self.assertEqual(0, len(list(client.transaction)))

        def handle_failure(failure):
            exc = failure.exception()
            self.assertTrue(isinstance(exc, ConnectionException))
        d = client._build_response(0x00)
        d.add_done_callback(handle_failure)
        self.assertEqual(0, len(list(client.transaction)))

        client._connected = True
        d = client._build_response(0x00)
        self.assertEqual(1, len(list(client.transaction)))
コード例 #11
0
    def testSerialClientHandleResponse(self, mock_serial, mock_seriostream, mock_ioloop):
        """ Test the tornado serial client client handles responses """
        client = AsyncModbusSerialClient(ioloop=schedulers.IO_LOOP,
                                         framer=ModbusRtuFramer(
                                             ClientDecoder()),
                                         port=SERIAL_PORT)
        client.connect()
        out = []
        reply = ReadCoilsRequest(1, 1)
        reply.transaction_id = 0x00

        # handle skipped cases
        client._handle_response(None)
        client._handle_response(reply)

        # handle existing cases
        d = client._build_response(0x00)
        d.add_done_callback(lambda v: out.append(v))
        client._handle_response(reply)
        self.assertEqual(d.result(), reply)
コード例 #12
0
ファイル: __init__.py プロジェクト: Biondoap/pymodbus
 def __init__(self, framer=None, **kwargs):
     framer = framer or ModbusRtuFramer(ClientDecoder())
     super(ModbusSerClientProtocol, self).__init__(framer, **kwargs)
コード例 #13
0
def make_protocol():
    return ModbusClientProtocol(framer=ModbusRtuFramer(ClientDecoder()))