TwinCAT3中通过PLC修改Coe参数的例程
程序员文章站
2022-06-09 16:46:11
...
CoE 接口的驱动器,要在 PLC 程序中修改驱动器参数,可以使用 CoeSDO 通讯的方式 。 CoeSDO 通 讯 的 功 能 块 包 括 FB_EcCoeSdoRead , FB_EcCoeSdoWrite ,FB_EcCoeSdoReadEx , FB_EcCoeSdoWriteEx 等 , 属 于 库 文 件 TcEtherCAT.Lib 。 以FB_EcCoeSdoWriteEx 为例。首先导入TcEtherCAT.Lib库文件。
以修改8010:01最大电流为800mA为例。
Coe子模块:
FUNCTION_BLOCK CoeSet
VAR_INPUT
bExecute : BOOL; (* rising edge starts writing to the CoE Object *)
END_VAR
VAR_OUTPUT
bError : BOOL;
nErrId : UDINT;
END_VAR
VAR
fbSdoWrite : FB_EcCoESdoWrite;
sNetId : T_AmsNetId := '169.254.208.225.3.1'; (* NetId of EtherCAT Master *)
nSlaveAddr_1 : UINT := 1002; (* Port Number of EtherCAT Slave *)
nMaxCurrent : WORD := 16#8010; (* CoE Object Index *)
nMaxCurrentSubIndex : BYTE := 1; (* Subindex of CoE Object *)
valueMaxCurrent_1 : UINT := 800; (* variable to be written to the CoE Object *)
END_VAR
fbSdoWrite(
sNetId := sNetId,
nSlaveAddr := nSlaveAddr_1,
nIndex := nMaxCurrent,
nSubIndex := nMaxCurrentSubIndex,
pSrcBuf := ADR(valueMaxCurrent_1),
cbBufLen := SIZEOF(valueMaxCurrent_1),
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
主程序:
PROGRAM MAIN
VAR
coe:CoeSet;
bExcuteCOE : BOOL;
bResError : BOOL;
nResErrId : UDINT;
END_VAR
coe(bExecute:=bExcuteCOE,bError=>bResError,nErrId=>nResErrId);
sNetId: EtherCAT 主站卡的 NetID,字符串,如下图。
nSlaveAddr: 要写参数的 EtherCAT 节点地址。如下图中的 EtherCAT Addr:1002。