我正在尝试通过我的AWS云EC2实例读取Modbus TCP数据。 因为我有一台机器正在生成MODBUS TCP(从站)数据并将其发送到Cloud。在云端,我正在使用使用套接字使用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解码方法。我尝试了许多可能的解决方案,但无法获取。还是我做错了。
那么我该如何实现呢?对此有什么可能的解决方案?