---
# System prepended metadata

title: TPW1 PC Server Protocol
tags: [TPW1]

---

---
tags: TPW1
---

# TPW1 PC Server Protocol

[TOC]

## 通訊方式

以ZeroMQ函式庫進行通訊
https://zeromq.org/languages/python/

使用Sub模式接收ROS訊息，位址預設為tcp://PC ip:17777
使用Push模式發送訊息給ROS，位址預設為tcp://PC ip:17778

#### PC Server 位址廣播
Port: 58788
編碼為以冒號分隔資料與check sum
ex: data:checksum
checksum的資料為data的字元值相加

## 通訊格式
使用byte array進行通訊

前9個byte為命令的Header，為命令的內容位於 (9 + 錯誤來源字串長度 + 錯吳訊息字串長度)。
| 位元 | 長度 | 用途描述 |
| --- | -------- |  -------- |
| 0 | 1 | 命令編號(ID)     |
| 1 | 1 | 傳送序號，PC Server收到命令後，會以該序號進行回傳，用以區別回應哪一個命令 |
| 2 | 1 | 錯誤碼 |
| 3 | 1 | 錯誤來源字串長度，以UTF-8編碼 |
| 4 | 1 | 錯誤訊息字串長度，以UTF-8編碼 |
| 5-8 | 4 | 命令所附帶資料的長度，以little endian編碼的int |
### Sequence Diagram
#### 一般命令
```mermaid
    sequenceDiagram
    UI->>PC Server: Command with sn:(ex:1)
    PC Server->>UI: Ack with sn:(ex:1)
```
## 命令種類
因payload啟始位元為變動值，
下列命令的位元皆為payload起始位置的相對位置，
命令內容如遇需要位元轉數值的部份，
皆以little endian編碼
### (ID: 2 ) Change Password Req
- Request command: <br><br>
    | 位元         | 長度       | 用途描述             |
    |:------------ |:---------- |:-------------------- |
    | 0            | 2          | 姓名長度: short      |
    | 2            | 2          | 密碼長度: short      |
    | 3            | 2          | 新密碼長度: short    |
    | 5            | 姓名長度   | 姓名: UTF-8 String   |
    | 5 + 姓名長度 | 密碼長度   | 密碼: UTF-8 String   |
    | 5 + 姓名長度 + 密碼長度   | 新密碼長度 | 新密碼: UTF-8 String |
- Response command: (ID: 3)
### (ID: 3 ) Change Password Resp
- Response command: no data

### 錯誤碼清單
| 代號 | 描述 |
| ---- | ---- |
| 通訊錯誤 ||
| 10   | 產生錯誤物件失敗 |
| 11   | 通訊實體層初始失敗 |
| 12   | 通訊實體層傳送失敗 |
| 14   | 遠端離線 |
| 15   | 連線中斷 |
| 16   | 超時錯誤 |
| 18   | ZMQ連線異常 |
| 19   | 重覆開啟錯誤 |
| 20   | 缺少參數錯誤 |
| 22   | 離線錯誤 |
| JSON檔案錯誤 |      |
| 23 | Buffer writer寫出失敗 |
| 24 | 檔案不存在 |
| 25 | JSON檔案讀取失敗 | 
| 26 | JSON檔案寫出失敗 |
| 27 | Output stream writer關閉失敗 |
| 28 | 無JSON內容錯誤 |
| 29 | JSON對應錯誤 | 
| 錯誤 | |
| 101 | 找不到該任務錯誤 |
| 102 | 無執行者錯誤 |
| 103 | 系統忙碌錯誤 |
| 104 | 拒絕停止錯誤 |
| 105 | 無任務可供提止錯誤 |
| 106 | 使用者取消 |
| 107 | Query Http failed error |
| 108 | 執行條件狀態錯誤 |
| 109 | 任務執行例外錯誤 |
| 130 | 熱像儀監控點數過多錯誤 |
| 131 | 熱像儀監控方框過多錯誤 |
| 140 | 啟動錄音失敗 |
| 141 | 錄音檔儲存失敗 |
| 150 | 無進行中巡邏 |
| 151 | 影像檔案儲存失敗 |
| 160 | 登入失敗 |
| 161 | 密碼變更失敗 |
| ROS端錯誤 | |
| 170 | NAVERR_NOT_INIT 導航尚未啟動 |
| 171 | NAVERR_TARGET_PENDING 導航目標移動暫停 |
| 172 | NAVERR_TARGET_FAIL 導航目標移動失敗 |
| 173 | NAVERR_PROC_RECALLED 導航程序重複啟動 | 
| 174 | NAVERR_PROC_REJECTED 導航程序被拒絕 | 
| 175 | NAVERR_PROC_PREEMPTED 導航程序被中斷 | 
| 176 | NAVERR_PROC_LOST 導航程序失敗 |
| 177 | NAVERR_PROC_ABORTED 導航程序停止 | 
| 178 | ROS_NOT_READY ROS尚未啟動 | 
| 179 | PATH_RECORD_REJECTED 移動路徑紀錄啟動失敗 | 
| 180 | MOVEBASE_LINK_FAIL MOVEBASE連線失敗 |
| 255 | 未編碼錯誤 |
