конвертировать данные Modbus TCP в читаемый формат - PullRequest
1 голос
/ 01 апреля 2019

Я пытаюсь прочитать данные Modbus TCP через мой экземпляр AWS cloud EC2.Так как у меня есть одна машина, которая генерирует данные MODBUS TCP (Slave) и отправляет их в облако.И в облаке я получаю данные, используя программу сервера TCP, написанную на python, используя сокет.Ниже приведен мой код получения, который выполняется на экземпляре EC2:

import socket

bind_ip = '13.2x4.29.18x' #is my instance Public IPv4   
bind_port = 45000

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bind_ip, bind_port))
server.listen(5)  # max backlog of connections

print('Listening on {}:{}'.format(bind_ip, bind_port))


def handle_client_connection(client_socket):
    request = client_socket.recv(1024)
    x=str(request)
    print("Received Data:",x)
    client_socket.close()
try:
    while True:
        client_sock, address = server.accept()
        print('Accepted connection from {}:{}'.format(address[0], address[1]))
        client_handler = threading.Thread(
            target=handle_client_connection,
            args=(client_sock,)  
            )
        client_handler.start()
except KeyboardInterrupt as e:
    print("Connection Terminated")

И это то, что я получаю после выполнения кода выше:

b'\x00\x00\x00\x00\x00\x06\x01\x03\x00\x00\x00\n'

Желаемый результат:

0001 0000 0009 11 03 06 022B 0064 007F # According to Modbus TCP packet

Теперь я хочу проанализировать это сообщение в удобочитаемом формате и отделить данные регистра.На данный момент я попытался распаковать python struct unpack,

import struct
data = bytearray(b'\x00\x00\x00\x00\x00\x06\x01\x03\x00\x00\x00\n')
number = struct.unpack("<d", data)

Но здесь, в приведенном выше коде, я получаю эту ошибку:

struct.error: unpack requires a bytes object of length 8

Затем я попробовал парсер сообщений pymodbus и декодирование минимальной шины.метод.Я перепробовал много возможных решений, но не смог их найти.Или, может быть, я делал не так.

Так как мне этого добиться?И каковы возможные решения для этого?

...