Я довольно новичок во вселенной EtherCAT / CANopen и пытаюсь реализовать собственное ведомое устройство. Пока ведомое устройство проходит тест на соответствие и хочет записать в один из моих ведомых объектов данных, ведомое устройство подключено к CX5120, который обнаружен XAE и также показывает ведомое устройство. Для этого я скопировал свой ESI-файл в папку TwinCAT (C: \ TwinCAT \ 3.1 \ Config \ Io \ EtherCAT).
Я создал небольшую программу структурированного текста PL C, которая использует FB_EcCoESdoWrite для записи данных по адресу 0x607A. Но когда я устанавливаю его активным и пытаюсь подключиться, Visual Studio сообщает, что устройству нужен хотя бы один Syn c Master. Кроме того, при установке bExecute на TRUE я получаю сообщение об ошибке от функции. Насколько я понимаю, мне приходится связывать переменные между моей ST-программой и ведомым, но я не вижу необходимости связывать переменные, потому что на самом деле вызов функции должен управлять передачей? Какие шаги для записи в SDO ES C? Может кто-нибудь сказать мне, что мне не хватает или у меня есть маленький пример под рукой?
PROGRAM MAIN
VAR
heartbeat : UINT;
fbSdoWrite : FB_EcCoESdoWrite;
sNetId : T_AmsNetId := '5.76.204.148.1.1'; (* NetId of EtherCAT Master *)
nSlaveAddr : UINT := 1001; (* Port Number of EtherCAT Slave *)
nIndex : WORD := 16#607A; (* CoE Object Index *)
nSubIndex : BYTE := 0; (* Subindex of CoE Object *)
nValue : UINT := 16#AAAA; (* variable to be written to the CoE Object *)
bExecute : BOOL; (* rising edge starts writing to the CoE Object *)
bError : BOOL;
nErrId : UDINT;
END_VAR
fbSdoWrite(
sNetId := sNetId,
nSlaveAddr := nSlaveAddr,
nIndex := nIndex,
nSubIndex := nSubIndex,
pSrcBuf := ADR(nValue),
cbBufLen := SIZEOF(nValue),
bExecute := bExecute
);
IF NOT fbSdoWrite.bBusy THEN
bExecute := FALSE;
IF NOT bError THEN
(* write successful *)
bError := FALSE;
nErrId := 0;
ELSE
(* write failed *)
bError := fbSdoWrite.bError;
nErrId := fbSdoWrite.nErrId;
END_IF
fbSdoWrite(bExecute := FALSE);
END_IF