---
# System prepended metadata

title: 馬達版控制 API

---

馬達版控制 API
===
[TOC]
## gCode
### gCode 檔名與格式
    gCode 目前是使用文字檔格式，並不侷限副檔名。
    為了一些編輯器顯示語法提示的方便，
    可使用附檔名為 .js 或 .c 都以開啟編輯器的語法提示。
### Comment
    %[debugLevel] 註解
    Example:
        %0 設定軸向代碼
        %1 設定速度
    與 Debug Level 設定搭配可過濾希望列印的字串
    
    // 註解
    此種註解將永不被列印
### Debug level
    Example: debug=1
        Debug Level = 1 , 此時 debug level 小於 1 的字串將不被列印
### 設定軸代號
    Example:
        y=axis0
        v=axis1
        m=axis2
        x=axis3
    將第 0 軸馬達代碼設為 y
    將第 1 軸馬達代碼設為 v
    將第 2 軸馬達代碼設為 m
    將第 3 軸馬達代碼設為 x
### 建立軸座標變數
    軸代碼+數字的變數
    Example:
        y0=5000        // 建立 y 軸座標變數，數值為 5000
        y1=10000
        y2=y0+y1
### 設定軸座標
    Example:
        y0=500        
        // 建立軸座標變數 y0
        y1=y0+1000    
        // 建立軸座標變數 y1
        v0=1000       
        // 建立軸座標變數 v0
        x0=5000       
        // 建立軸座標變數 x0
        y0            
        // 設定 y 軸移動到座標變數 y0 的位置，結束後才執行下一行
        v0            
        // 設定 v 軸移動到座標變數 v0 的位置，結束後才執行下一行
        x0,y1,v0      
        // 設定 x ,y,v 軸，同步移動到對應軸變數位置，全部移動完成才執行下一行
        
### 常用變數
* 軸代號+"_POS": 此變數代表目前軸座標位置
        Example: y_POS , x_POS , m_POS , v_POS
        Usage: y_POS=500 , origPos=y_POS

* 軸代號+"_VL": 此變數代表目前軸速度 Level
        Example: y_VL , x_VL , m_VL , v_VL
        Usage: y_VL=1 , origVL=y_VL   
    
* 軸代號+"_VTL": 此變數代表目前軸移動的 Torque Level
        Example: y_VTL , x_VTL , m_VTL , v_VTL
        Usage: y_VTL=1 , origVL=y_VTL
### 一般變數宣告
    只要不是上述常用變數名稱之非數字開頭字串，皆可當作變數名稱使用
    Example: tmp, cc ....
### 常用函式
    * INIT: 重新初始化馬達參數
    * HOME: 將馬達座標移到 HOME 的位置
    * SEARCH_SWITCH: 將馬達座標重新回歸到對位感測器的位置
    * GET_POSITION: 從馬達版重新讀取座標，更新到常用變數的目前軸座標變數中
    
<b>
    一般 GET_POSITION 不常被使用，因為任何移動指令都會更新軸的位置到常用變數中
</b>

### include
    Example: 
        include "function2.js"
        插入 function2.js 內的 gCode 到此行中
### 副程式宣告
    Example:
        function getTip(x) 
        {
            x_pos=500+x
            v1
            v0
            x_pos=600+x
        }
        getTip(100)
        
### Delay
    Example: delay 200 // 200 ms
### For loop
    Example:
    [20] {
        x0,y1,v2
        delay 250
        x0,y1,v0
        delay 250
    }
## MQTT
* IP: localhost
* MQTT Port: 2002
* MQTT over WebSocket Port: 2001
* Host Topic: /katsura/motor/host
* Client Topic: /katsura/motor/client
### Motor Init
* Send payload :
```
{
    command: 'init'
}
```
* Response:
```
{
    status: 'init done'
}
```
### Get Position
* Send payload :
```
{
    motorIndex: 0,
    command: 'getPosition'
}
```
* Response:
```
{
    status: 'getPosition done',
    value: [axis0_POS,axis1_POS,axis2_POS...]
}
```
### Move
* Send payload :
```
{
    motorIndex: 0,
    axis=0,
    target=1000,
    command: 'move'
}
```
* Response:
```
{
    status: 'move done',
    motorIndex: 0,
    axis=0,
    target=1000,
}
```
### Search Switch
* Send payload :
```
{
    command: 'searchSwitch'
}
```
* Response:
```
{
    status: 'searchSwitch done',
}
```
### Torque Off
* Send payload :
```
{
    command: 'torqueOff'
}
```
* Response:
```
{
    status: 'torqueOff done',
}
```
### Teaching
* Send payload :
```
{
    command: 'teaching',
    motorIndex: 0,
    axis=0,
}
```
* Response:
```
{
    status: 'teaching done',
    motorIndex: 0,
    axis=0,
}
```
### Save Origin 儲存 HOME 座標
* Send payload :
```
{
    command: 'saveOrigin',
}
```
* Response:
```
{
    status: 'saveOrigin done',/
}
```
### HOME
* Send payload :
```
{
    command: 'home',
}
```
* Response:
```
{
    status: 'home done',
}
```
### Load Script
* Send payload :
```
{
    command: 'loadScript',
    file: 'script'+FILENAME,
}
```
* Response:
```
{
    status: 'loadScript done',
}
```
### Start Script
* Send payload :
```
{
    command: 'startScript',
}
```
* Response:
```
{
    status: 'startScript done',
}
```



