1

我正在尝试通过我的 AWS 云 EC2 实例读取 Modbus TCP 数据。因为我有一台机器正在生成 MODBUS TCP(从)数据并将其发送到云端。在云端,我正在使用使用套接字用 python 编写的 TCP 服务器程序接收数据。以下是我在 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消息解析器和minimalmodbus解码方法。我尝试了许多可能的解决方案,但无法获取一个。或者可能是我做错了。

那么我该如何实现呢?对此有什么可能的解决方案?

4

0 回答 0