FAQ
PCI-1203通訊記錄功能需要透過Utility進行設定,請參考Figure1圖示,操作步操如下:
- 開啟Common motion Utility
- 選擇要開啟通訊記錄的PCI-1203,如Figure1中的○1所示
- 選定PCI-1203之後,右邊會出現相關的Tab頁面,選擇”Information”這個Tab,如Figure1中的○2所示
- 按下[Dump info.]按鈕,如Figure1的○3所示
- 完成步驟4之後,會出現{Dump all information}的子視窗,之後按下[Clear all error counters of slaves]按鈕,清除目前所有子站即有的記錄,如Figure1的○4所示
- 關閉{Dump all information}子視窗,並將Common motion utility最小化
- 當通訊發生斷線之後,回到{Dump all information}子視窗,並按下[Dump all information of device]按鈕(如Figure1的○5所示),將記錄檔儲存至使用者指定的路徑之中

如图一所示为PCI-1203在转矩控制时的基本控制架构图
原理说明
在转矩控制时,PCI-1203的角色是负责传送伺服驱动器的转矩设定值,所以本身并不具有转矩调整之功能,使用者必须要有一个PID控制器,不管是由软体方式实现或是其它的PID控制器;会需要PID控制器主要的原因,是因为马达输出的力量经由机构结构传递到最后作用在加工件上表现出来的张力,和马达输出的转矩大小有一定的关系,但该关系通常不是线性,也因为机构传递的关系,所有的摩擦力和机构件的弹力都会响影到最终的张力结果,为了克服这个问题,会需要一个张力传感器(Load cell)来侦测实际作用在加工件上的张力值,并且通常会经有外部的张力显示器(Load cell meter),以通讯的方式将张力值回传到PID控制器上作为回授讯号,借以调整PCI-1203输出的转矩设定值,而达到使用者所需要张力。

相关API及属性
在PCI-1203,控制模式的变换以及张力的设定,是以属性的方式进行设置,以下是相关的属性说明。
屬性ID | 450 |
---|---|
屬性類型 | U32 |
讀寫性 | R/W |
描述 | 切換Slave的操作模式。 |
屬性ID | 735 |
---|---|
屬性類型 | U32 |
讀寫性 | R/W |
描述 | 設定伺服馬達最高速度上限,主要搭配轉矩模式使用,以防止在轉矩模式下因外部阻力太小而使馬達以全速運轉。 |
屬性ID | 447 |
---|---|
屬性類型 | I32 |
讀寫性 | R/W |
描述 | 設定使用馬達輸出的目標轉矩,通常以%為單位,實際的單位以各伺服的EtherCAT參數手冊中說明為準。 |
程式範例
本程式是以士林電機SPD(以下簡稱士電)伺服為範例,不同的伺服在Operation mode的選擇可能有所不同,所以需要參照各家伺服驅動器的EtherCAT使用手冊。
下圖為士電EhterCAT 手冊關於Operation mode選擇的說明表格,由表格中可以看到Profile torque mode是4號, 因此PAR_AxOperationMode要設定為4程式如下。
Object 6060h: Modes of operation
據CoE通訊協定,定義相關運動協定的數值,使用者根據設定數值,啟用當前的操作模式。
索引 | 子索引 | 名稱 | 資料型態 | 資料存取 | PDO映射 | EEPROM |
---|---|---|---|---|---|---|
6060h | 0 | Modes of operation | SINT | RW | Yes | Yes |
模式設定 | 定義模式內容 |
---|---|
1 | Profile position mode |
3 | Profile velocity mode |
4 | Profile torque mode |
6 | Homing mode |
7 | Interpolated position mode |
8 | Cyclic synchronous position mode |
9 | Cyclic synchronous velocity mode |
10 | Cyclic synchronous torque mode |
public void SwitchToTorqueMode(short axisNumber, uint TargetTorque, uint SpeedLimitRPM)
{ uint Mode = 0; do { Error = Motion.mAcm_SetU32Property(Axis[axisNumber], (uint)PropertyID.CFG_AxMaxMotorSpeed, SpeedLimitRPM); // Unit: RPM Error = Motion.mAcm_SetU32Property(Axis[axisNumber], (uint)PropertyID.PAR_AxTargetTorque, TargetTorque); // Unit: 0.1% Error = Motion.mAcm_SetU32Property(Axis[axisNumber], (uint)PropertyID.PAR_AxOperationMode, 0x04); Thread.Sleep(100); Error = Motion.mAcm_GetU32Property(Axis[axisNumber], (uint)PropertyID.PAR_AxOperationMode, ref Mode); } while (Mode != 0x04); // 當模式設定失敗,重新執行直到成功 } |
---|