了解使用PySerial进行设备串行通信和实现的伪代码

时间:2014-08-15 18:51:53

标签: python pyserial

我正在尝试使用PySerial自动化一些数据收集,但我不明白设备是如何要求我传递/写入命令的。

伪代码如下:

Structure{

WORD Handle //Reserves address space of a 2 byte word to store Handle
DWORD ParameterA[] // Reserves address space of one 4 byte word to store ParameterA (4         byte word is a double word)
DWORD ParameterB[6] //Resereves address space of 6 double words to store an array of 6    parameters called ParameterB
} PackedData

... // Later in program

Handle = 1200
ParamaterA = 1
SendStringToSerialPort(PackedData, 6)//This routine transfers the data found at theaddress of structure PackedData to the serial port. 6bytes used, 2 for the Handle, 4 for the DWORD ParameterA

以下是原始文档的链接,如果有用的话:http://www.gentec-eo.com/Content/downloads/user-manual/User_Manual_SOLO_2_V7.pdf第40页

到目前为止我是如何解释它的,但我知道它不正确,因为它只写了5个字节。

import serial

ser = serial.Serial()
ser.baudrate = 9600
ser.port = 3
ser.open()

    class PackedData:

    Handle = 1200
    ParameterA = bytearray(0)
    ParameterB = bytearray(6)

powerMeter = PackedData()
powerMeter.ParameterA = long(1)
print(ser.write(str(PackedData.Handle)+ str(powerMeter.ParameterA)))

有人能告诉我哪里出错了吗?

1 个答案:

答案 0 :(得分:0)

您正在发送8位字符(字符串),而您问题中描述的协议正在发送压缩字节。使用struct模块将您要发送的内容转换为打包 字节数:

import struct

print ser.write(struct.pack("<HL", PackedData.Handle, powerMeter.ParameterA)) 

您可能需要修复endianess(在struct format string前面使用“&gt;”或“&lt;”)。当然,将格式调整为远程设备的预期(在上面的示例中,我假设无符号整数)。