以可读格式转换Modbus TCP数据

时间:2019-04-01 14:53:58

标签: python modbus-tcp pymodbus

我正在尝试通过我的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解码方法。我尝试了许多可能的解决方案,但无法获取。还是我做错了。

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

0 个答案:

没有答案