CoeReadSdoEntryDescription

透過 EtherCAT CANopen (CoE) 從 SDO 讀取物件字典分錄的描述。

語法

KsCommandStatus CoeReadSdoEntryDescription(
     int SlaveId,
     SdoEntryDescription* Data
);

參數

SlaveId:從站陣列的索引。當 EtherCAT 從站裝置啟動時,此索引具有與 SlaveId 相同的值,該值對應於從站裝置在網路中的位置。請注意,在 EtherCAT 進入運行 (Op) 狀態後,加入或移除網路上的任何從站裝置將改變各裝置在網路中的位置 (SlaveId)。儘管如此,從站的索引將保持不變。新增的裝置將排列在陣列的末端。對於更改後的所有從站,索引和 SlaveId 將不再匹配。上述行為模式僅適用於實體裝置;不適用於模擬裝置。詳細資訊請參閱 EnableHotConnect 中的使用案例。

Data:可指示欲讀取參數的 SdoEntryDescription 結構指標。

回傳值

返回 KsCommandStatus 結構。

可用的 EtherCAT 狀態

ecatPreOP, ecatSafeOP, ecatOP

範例

複製
short length[5] = { 0 }; // For OD list 0
int readLength = 0;
SdoObjectDescription Obj6061 = { 0 }; // For object index 0x6061
Obj6061.Index = 0x6061;
SdoEntryDescription Entry6061_0 = { 0 }; // For object entry 0x6061:0
Entry6061_0.Index = 0X6061;
Entry6061_0.SubIndex = 0;

// Acquire OD list 0
Command = WaitForCommand(5, TRUE, CoeReadSdoODList(0, 0, (BYTE*)length, 10, &readLength));

short* ODList1 = (short*)malloc(length[0] * sizeof(short));
Command = WaitForCommand(5, TRUE, CoeReadSdoODList(0, 1, (BYTE*)ODList1,
                         length[0] * sizeof(short), &readLength)); // Acquire OD list 1

for (int i = 0; i < length[0]; i++)
{
    if (ODList1[i] == 0x6061) {
        Command = WaitForCommand(5, TRUE, CoeReadSdoObjectDescription(0, &Obj6061));
        RtPrintf("SDO Object %x: %s Sub %d, Type %d, Code %d\n", Obj6061.Index, Obj6061.Name,
                 Obj6061.MaxSubIndex, Obj6061.DataType, Obj6061.ObjectCode);
        Command = WaitForCommand(5, TRUE, CoeReadSdoEntryDescription(0, &Entry6061_0));
        RtPrintf("SDO Entry %x:%d Type %d, Length %d, Access %x\n", Entry6061_0.Index,
                 Entry6061_0.SubIndex, Entry6061_0.DataType, Entry6061_0.BitLength,
                 Entry6061_0.ObjectAccess);
    }
}
free(ODList1);

使用需求

  RT Win32
最低支援版本 4.0 4.0
標頭檔 ksapi.h ksapi.h
程式庫 KsApi_Rtss.lib KsApi.lib

參見

CoeReadSdoObject

CoeReadSdoObjectDescription

CoeReadSdoODList

CoeWriteSdoObject