2012-08-01 36 views
4

我正在使用python的pySerial库与机器进行通信(如果您必须知道的话,可以使用月球光度计)。该机器内置了一些场景,我可以通过发送与COM /串行端口相对应的特定十六进制值来调用。例如,以下代码适用于机器中的“Park secnario”。使用Python发送命令参数到串行端口使用Python

s.write('\x11') #s is my serial object, '\x11' is the command for the park senario 
s.write('\x12') #'\x12' is the command for the TrackSun scenario 

上述代码按预期工作,机器响应这些命令。但是,在命令'\ x02'激活的Goto场景中存在一个缺陷。我的问题是,goto命令将水平和垂直角度作为参数以这种格式转到GoTo,其中xxxx和yyyy是两个角度。我如何在我的s.write()命令中传递这些参数。我已经尝试过: s.write('\ x02 xxxx yyyy') 这似乎不起作用。我做错了传递参数?

8/1/2012 11:37:36.048 [TX] - 02 30 34 3B 30 3F 3A 3D 3B 03 
8/1/2012 11:37:51.166 [RX] - 01 

编辑:: 下面是使用超级终端发送的“公园情景”命令的一个例子,以防万一当我使用超级终端(十六进制模式)用下面的代码的命令工作正常。

8/1/2012 12:14:56.649 [TX] - 11 
8/1/2012 12:15:07.962 [RX] - 01 

回答

2

s.write()下面的调用将是一样的,你要发送的超级终端是什么:

s.write('\x02\x30\x34\x3b\x30\x3f\x3a\x3d\x3b\x03') 

一般的解决将取决于你的角度如何编码。我无法确定您的示例中的编码。

+0

谢谢!您的解决方案奏效仪器制造商出于某种原因决定使角度的格式非常奇怪。如果您好奇,第一个角度'\ x30 \ x34 \ x3b \ x30 \'相当于1200度(十进制)。 1200是十六进制的04b0。对'04b0'中的每个角色,他们增加了3个角色。我不知道为什么。 – 2012-08-01 18:10:49