-
Notifications
You must be signed in to change notification settings - Fork 2
Chinese Protocol Wire Format
戴梓恆 (TAI TZU-HENG) edited this page Aug 31, 2026
·
1 revision
Python 跟控制器之間送什麼字串,怎麼判斷收完了,怎麼判斷版本。
送出: <指令>[:<參數>...]\n
收到: <碼>:<訊息>
碼 0 成功,1 失敗。
兩件容易踩到的事:
- 送出的指令要以換行結尾,driver 的
READ comm_file(cmd)是一行一行讀的。 - 回應沒有結尾字元。
mappdk_server.kl裡WRITE comm_file (resp)不帶 CR,分界只靠 TCP 封包邊界。上游因此只recv()一次,封包被拆開就會 讀到半截。這裡改成由 protocol 層告訴 transport「收夠了沒」,不夠就 繼續收,見transport.MappdkTransport._recv。
連線建立時 driver 會先送一個 0:success(mappdk_comm.kl 的
OPEN_COMM),要先讀掉,不然會被下一道指令當成回應。
movej:VVVV:AAAA:CCC:M:N:<值1>:<值2>...
│ │ │ │ └ 軸數,1 位
│ │ │ └ 0=關節內插 1=直線內插
│ │ └ CNT,3 位
│ └ 加速度,4 位
└ 速度,4 位
每個數值是正負號加 13 字元定點數,共 14 字元,例如 +000090.000000。
13 是總寬(6 位整數 + 小數點 + 6 位小數),不是整數位數,這裡很容易看錯。
FanucRobot.connect() 會送 ver。上游版本回 wrong-command,這時 robot.extended
設成 False,之後呼叫擴充方法會直接說原因;RDO 編號上限也會跟著切換。
transport.py 原本預設的 is_complete 只檢查「有沒有冒號」,訊息夠長、
剛好卡在 TCP 封包邊界時會提前判定收完,殘留位元組混進下一次的回應。
_recv 現在在判定完整後會用短逾時再讀一次確認沒有後續資料,正常情況
幾乎不花時間。
最後更新:2026-08-31
Controller Setup
Protocol
- Overview
- Commands (Upstream)
- Commands (Extended)
- Wire Format
- Connections
- Errors
- Driver Limits
- Reserved Resources
- Extending the Driver
- Debugging Notes
控制器設定
協定