首先,我要感谢任何能帮助我的人。
- 环境
我在Windows 8操作系统中使用Python v2.7。 我使用COM4通过在Python代码中发送一些命令来与机器人通信。
我向机器人发送一个命令getversion
,并假设得到一堆数据,这些数据采用以下格式(我省略了一些,它太长了):
组件,主要,次要,构建辅助
APPassword,956FC721
了baseid,1.2,1.0,18000,2000,
BatteryType,4,LIION_4CELL_SMART,
Beehive网址,beehive.cloud.com
BlowerType,1,BLOWER_ORIG,
Bootloader版本,27828 ,,
BrushMotorType,1,BRUSH_MOTOR_ORIG,
BrushSpeed,1400 ,,
BrushSpeedEco,800 ,,
ChassisRev,1 ,,
Cloud Selector,2
DropSensorType,1,DROP_SENSOR_ORIG,
LCD Panel,137,240,124,
LDS CPU,F2802x / c001 ,,
LDS Serial,KSH13315AA-0000153 ,,
具体来说,我的代码是:
ser.write('getver \n') # send 'getversion' cmd to robot
ser.read(1305)
getver
的响应大小是1305字节,是的,我手动计算,这就是为什么我想让Python告诉我它有多大。
答案 0 :(得分:1)
为了能够与设备通信,您必须知道该通信的协议是什么。设计协议的人必须定义一种方法让您知道要读取多少字节。如果你有一个规范,它可能涵盖了这个问题。
因此,有一种方法可以预先确定字节数或检测传输结束,例如:由一个特殊的结束角色存在。
如果没有某种规范,我们只能猜出协议是什么。
'\0'
)?如果有的话,你可以逐个阅读,直到它出现。ser = serial.Serial(..., timeout=2, ...)
)。然后尝试阅读所有内容。当没有其他内容可读时,read
函数将无限期冻结,除非超时。如果您设置了相当长的超时且在该时间内没有收到日期,则可以假设传输已结束。