Я пытаюсь прочитать данные 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 и декодирование минимальной шины.метод.Я перепробовал много возможных решений, но не смог их найти.Или, может быть, я делал не так.
Так как мне этого добиться?И каковы возможные решения для этого?