CS機器人30020端口使用
1. 簡(jiǎn)介
● def腳本為主程序腳本,一次僅支持一個(gè)def腳本運行,如果在第一個(gè)def腳本運行過(guò)程中,下 發(fā)第二個(gè)def腳本,則會(huì )強制停止第一個(gè)運行中的def腳本,去執行新收到的def腳本。
● sec腳本可以與def腳本同時(shí)運行,不會(huì )導致def腳本停止,但sec腳本不支持運動(dòng)指令,并且不 允許運行耗時(shí)指令(如sleep、串口、socket的超時(shí)操作等),有一定的限制。
● 由于def腳本與sec腳本的定義,導致目前的python運行過(guò)程中,無(wú)法實(shí)現一些動(dòng)態(tài)的腳本插隊 運行,比如用戶(hù)在自己的上位機程序,實(shí)時(shí)計算出一些運行點(diǎn)位腳本,用戶(hù)無(wú)法在程序運行 的過(guò)程中,將一些實(shí)時(shí)計算的腳本插隊到當前運行的任務(wù)當中。存在一定的使用限制。
● 針對上述需求,CS控制軟件開(kāi)發(fā)了Interpreter Mode(解釋器模式)功能,也就是30020接口,用于在一定的條件下,實(shí)現用戶(hù)腳本的插隊運行。
● 解釋器模式的使用,需要更新至2.11及以上的版本。
2. 操作流程
● 解釋器模式腳本命令
1. 解釋器功能
系統進(jìn)入解釋器模式后,允許編程人員在任務(wù)運行時(shí)發(fā)送并插隊運行腳本語(yǔ)句,只需要腳本語(yǔ) 句為有效的python語(yǔ)句即可,用戶(hù)可以將腳本語(yǔ)句通過(guò)30020端口,發(fā)送到控制器,控制器解 收之后,會(huì )根據當前的狀態(tài),對語(yǔ)句進(jìn)行編譯運行。發(fā)送到30020端口的腳本語(yǔ)句,會(huì )已隊列 的方式存儲在控制軟件內部,并按順序執行,腳本語(yǔ)句必須為單行語(yǔ)句,并以\n作為結束符, 如 set_tcp([0,0,0,0,0,0])\n
腳本語(yǔ)句參考CS腳本手冊
2. interpreter_mode(clearQueueOnEnter = True, clearOnEnd = True)
clearQueueOnEnter:為 True 時(shí),會(huì )在進(jìn)入解釋器模式時(shí),清除所有進(jìn)入之前收到的腳 本 隊列。
clearOnEnd:為 True 時(shí),會(huì )在退出解釋器模式時(shí),清除所有還未執行的腳本隊列中的腳 本內容。
該函數用于是任務(wù)進(jìn)入解釋器模式,其為阻塞函數
30020端口的解釋器模式,是通過(guò)30001端口發(fā)送解釋器腳本命令觸發(fā)。
30001端口詳情,請參考CS用戶(hù)手冊。
例:30001 端口調用,需使用 def 腳本,采用 python 格式,要注意格式(縮進(jìn),大小寫(xiě) 等)
def a():
interpreter_mode(clearQueueOnEnter = True, clearOnEnd = True)
end
3. end_interpreter()
該函數用于關(guān)閉任務(wù)的解釋器模式,此時(shí)阻塞的 interpreter_mode 函數會(huì )退出,該函數可 以在 30001 端口調用(sec 和 def 腳本效果相同),程序立即停止并退出解釋器模式。
也可以在 30020 中使用,發(fā)送到解釋器模式中,在腳本隊列中等待調用,隊列運行到該命 令后退出解釋器模式。
4. clear_interpreter()
該函數用于清除解釋器腳本隊列,可以在 30001 端口使用(sec 腳本),不建議用 def 腳 本,def 腳本執行程序會(huì )立即停止并退出解釋器模式。
也可以在 30020 中使用,發(fā)送到解釋器模式中, 在腳本隊列中等待調用,調用后,會(huì )將 該函數執行前接收到的腳本隊列清除,在其之后接收到的腳本則不受影響。
● 解釋器模式回復
1. 解釋器模式接收到可執行的腳本語(yǔ)句后,將會(huì )通過(guò)返回以下格式信息,告知客戶(hù)端。
ack::
id為接受的語(yǔ)句被分配的唯一id,后續的一些狀態(tài)命令字返回值,會(huì )以該id信息返回。
2. 如果任務(wù)未處于運行狀態(tài),或腳本語(yǔ)句發(fā)生編譯錯誤或腳本隊列達到上限等等各種異常原因導致接受的腳本沒(méi)有被正常的壓入解釋器隊列,解釋器會(huì )返回命令拋棄信息以及拋棄原因,格式如下。
discard::
3. 編譯錯誤:
觸發(fā)原因:一般為腳本格式錯誤,需要檢查確保下發(fā)的腳本格式是否正常的python格式的 代碼段
返回報文信息:discard: Compile error::
4. 任務(wù)狀態(tài)錯誤:
觸發(fā)原因:當前任務(wù)未處于運行狀態(tài)
返回報文信息:discard: Task is in an invalid state:
5. 腳本隊列的長(cháng)度超限:
觸發(fā)原因:當前腳本隊列長(cháng)度超過(guò)最大值(目前最大值為2000)
返回報文信息:discard: Too many interpreted messages:
6. 執行解釋器前隊列清除:
觸發(fā)原因:由于clearQueueOnEnter參數設置為T(mén)rue,再打開(kāi)解釋器模式之前發(fā)送到解釋器隊列的腳本,會(huì )在打開(kāi)時(shí)(即調用interpreter_mode腳本)進(jìn)行discard。
返回報文信息:discard: Cleaned up before interpretation:
7. 執行解釋器后隊列清除:
觸發(fā)原因:由于clearOnEnd參數設置為T(mén)rue,再結束解釋器模式后,解釋器隊列中已有的腳本會(huì )在結束時(shí)(即調用end_interpreter腳本)進(jìn)行discard。
返回報文信息:discard: Cleaned up after end:
8. 執行隊列清除操作:
觸發(fā)原因:由于執行clear_interpreter腳本discard掉的腳本隊列中的腳本。
返回報文信息:discard: Cleaned up:
● 解釋器模式關(guān)鍵字命令
解釋器模式的關(guān)鍵字命令,為非python腳本函數,此類(lèi)命令會(huì )在接收到后,馬上被執行,不會(huì )進(jìn)入腳本隊列等待執行。
skipbuffer該命令可以讓腳本隊列跳過(guò)已經(jīng)接收到,但還未執行的所有腳本命令(正在執行的命令不會(huì )結束,會(huì )繼續正常運行到命令結束)。
● 解釋器模式狀態(tài)命令
1. statelastexecuted 命令
該命令會(huì )返回最后執行過(guò)(或正在執行)的命令id,返回格式如下:
state:: statelastexecuted
2. statelastinterpreted 命令
該命令會(huì )返回最新解收的已經(jīng)解析完成的腳本命令id,返回格式如下:
state:: statelastinterpreted
3. statelastcleared 命令
該命令會(huì )返回最后的被清除(調用clear_interpreter或解釋器模式退出)的命令id,返回格式如下:
state:: statelastcleared
4. stateunexecuted 命令
該命令會(huì )返回當前隊列中還未執行的腳本命令(已skipbuffer的命令不會(huì )計數在內),返回格式如下:
state: <#unexecuted>: stateunexecuted
5. state 命令
該命令會(huì )返回當前是否處于解釋器模式,返回格式如下:
state: 0: running: state
state: 0: stopped: state
● 示例
1.將機器人打到遠程模式

2. 用通訊助手創(chuàng )建一個(gè) 30001端口的客戶(hù)端,連接機器人并發(fā)送腳本使機器人進(jìn)入解釋器模式

3.機器人進(jìn)入解釋器模式,示教器顯示運行中,如下圖

4. 用通訊助手創(chuàng )建一個(gè)30020端口的客戶(hù)端

5.通過(guò) 30020 端口發(fā)送腳本使得機器人按先后順序依次執行發(fā)送的腳本

6. 發(fā)送成功后,收到來(lái)自機器人的反饋

7.參考CS腳本手冊,依次發(fā)送指令給機器人,機器人將按順序依次執行

3. 常見(jiàn)問(wèn)題解答
1. 解釋器模式中創(chuàng )建的線(xiàn)程,不會(huì )再解釋器模式推出后,自動(dòng)關(guān)閉,使用時(shí),請自主管理好線(xiàn)程狀態(tài)。
2. 運行耗時(shí)腳本(如移動(dòng)指令),會(huì )完整的運動(dòng)結束后,才可以自動(dòng)退出,中途即使調用了end_interpreter()命令,也不會(huì )強制停止耗時(shí)腳本運行,除非使用30001以def函數的形式發(fā)送。
3. 解釋器腳本隊列數量上限目前為2000條,腳本隊列數量超過(guò)該數量時(shí),再次添加新的解釋器腳本,會(huì )返回discard信息,并拋棄新添加的腳本