使用 IO-Link、MDP 或 CANopen 裝置
有了 EtherCAT,可使用其他協定來新增子網路,並非所有這些協定都可以掃描,因此可能需要透過 API 提供有關連接裝置的資訊,KINGSTAR 具有針對三種類型子網路的專用 ST 函式,這些函式應在 ksStart 設置為 TRUE 之前使用,因此我們建議在附加到 Init 任務的程式組織單元 (POU) 中呼叫,以下是這些函式的語法:
unsigned char KsConfigureIoLinkDevice(long Index, long Port, unsigned char Revision, unsigned char Spdu, unsigned short Control, long InputLength, long OutputLength);
unsigned char KsConfigureMdpDevice(long Index, long Id, long InputLength, long OutputLength, long CommandCount, KS_SDO_COMMAND* Commands);
unsigned char KsConfigureCanDevice(long SlaveId, long CanId, long RxPdoCount, KS_CAN_PDO* RxPdos, long TxPdoCount, KS_CAN_PDO* TxPdos, long CommandCount, KS_SDO_COMMAND* Commands);
這些 ST 函式改編自 KINGSTAR C 介面中的 AddModuleConfiguration 函式。前兩個參數分別對應 AddModuleConfiguration 中的 SlaveId 與 ModuleId。
Index, SlaveId:Index 指從站陣列的索引;而 SlaveId 指從站裝置在網路中的位置。當 EtherCAT 從站裝置啟動時,此索引具有與 SlaveId 相同的值,該值對應於從站裝置在網路中的位置。請注意,在 EtherCAT 進入運行 (Op) 狀態後,加入或移除網路上的任何從站裝置將改變各裝置在網路中的位置 (SlaveId)。儘管如此,從站的索引將保持不變。新增的裝置將排列在陣列的末端。對於更改後的所有從站,索引和 SlaveId 將不再匹配。上述行為模式僅適用於實體裝置;不適用於模擬裝置。詳細資訊請參閱 EnableHotConnect 中的使用案例。
Port, Id, CanId:模組(連接至耦合器的裝置)ID,此可以是插槽 ID、連接埠 ID 或從站 ID。
其他參數的說明請見 IOLINK_SETTING、ECMDP_SETTING 及 CANOPEN_SETTING 結構。
欲使用這些函式:
- 於 Project 面板中右鍵點擊 KINGSTAR Project(您的專案名稱)並選擇 Add > New program。
- 在 New program 對話框中的 Language 底下選擇 ST,在 Name 輸入框中輸入程式名稱(在此輸入 "ConfigDevice"),於 Task 底下的 Assign to 清單中選擇 Init,完成編輯後按 OK。
- 於 ConfigDevice 面板中的 Local variables 編輯器中右鍵點擊空白區域並點選 Insert。
- 區域變數即建立,點擊其 Name 輸入欄位。
- 為此變數輸入一個有意義的名稱並按下 Enter,在此範例中我們輸入 "ksOutput"。
- 於 Project 面板中右鍵點擊Global_vars(您的專案名稱)並點選 New variable > Automatic 以新增全域變數。
- 在 New variable 對話框中的 Name 輸入框中輸入 "Commands",並於 Type 區域點擊 ... 以開啟 Object browser。
- 在 Object browser 中勾選 User types,並於 User types 清單中選擇 KS_SDO_COMMAND 然後點擊 OK。
- 於 New variable 對話框中的 Array 區域點擊 ... 以開啟 Size of variable,並點選 Array / Matrix,於 Dimension 1 中輸入 "19" 以使陣列大小為 20,可自訂陣列大小,完成編輯後點擊 OK。
- 於 New variable 對話框點擊 OK。
- 於 Project 面板中的 Global_vars 群組中, Commands 變數已新增,雙擊 Commands 以開啟 Global_vars 面板。
- 於 Global_vars 面板中新增另外兩個名為 RxPdos 與 TxPdos 的變數,類型為 KS_CAN_PDO 且陣列大小為 20。
- 於 Project 面板中雙擊 ConfigDevice,並在原始碼編輯器中輸入代碼,下列為範例程式碼,您應選則可滿足您需求的函式,並根據您的裝置及其設定修改該程式碼。
- 編譯及執行程式。
ksOutput := ksConfigureIoLinkDevice(0,0,17,0,3,16,0);
ksOutput := ksConfigureMdpDevice(0,0,16,16,20,ADR(Commands));
ksOutput := ksConfigureCanDevice(1,1,3,ADR(RxPdos),3,ADR(TxPdos),10,ADR(Commands));