使用Python将命令参数发送到串行端口

使用Python将命令参数发送到串行端口,python,serial-port,hex,pyserial,Python,Serial Port,Hex,Pyserial,我使用python的pySerial库与机器通信(如果您必须知道的话)。机器内置了一些场景,我可以通过com/串行端口发送与这些场景对应的特定十六进制值来调用这些场景。例如,以下代码适用于机器中的“Park secnario” 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 TrackS

我使用python的pySerial库与机器通信(如果您必须知道的话)。机器内置了一些场景,我可以通过com/串行端口发送与这些场景对应的特定十六进制值来调用这些场景。例如,以下代码适用于机器中的“Park secnario”

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
上述代码按预期工作,机器响应这些命令。但是,Goto场景中有一个bult被命令“\x02”激活。我的问题是goto命令也将水平和垂直角度作为参数,在这种格式中goto,其中xxxx和yyyy是两个角度。如何在s.write()命令中传入这些参数。我试过: s、 写入('\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 
编辑: 下面是一个使用超级终端发送的“Park Scenario”命令示例,以防万一

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

以下对
s.write()
的调用与您在超级终端上发送的调用相同:

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

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

谢谢!你的解决方案奏效了。出于某种原因,仪器制造商决定使角度的格式变得非常奇怪。如果您好奇,第一个角度“\x30\x34\x3b\x30\”相当于1200度(十进制)。1200是04b0的十六进制。对于“04b0”中的每个字符,他们在其前面添加了一个3。我不知道为什么。