2012-08-01 69 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