我正在尝试使用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)))
有人能告诉我哪里出错了吗?
答案 0 :(得分:0)
您正在发送8位字符(字符串),而您问题中描述的协议正在发送压缩字节。使用struct
模块将您要发送的内容转换为打包
字节数:
import struct
print ser.write(struct.pack("<HL", PackedData.Handle, powerMeter.ParameterA))
您可能需要修复endianess(在struct format string前面使用“&gt;”或“&lt;”)。当然,将格式调整为远程设备的预期(在上面的示例中,我假设无符号整数)。