这是我在stackoverflow上遇到的第一个问题,我希望有人能够帮助我。我正在尝试获取TwinCat PLC系统的本地AmsNetId。该代码在本地TwinCat系统上运行。该功能正常运行,编译没有问题。但是功能块FB_GetLocalAmsNetId似乎从不返回Ams网络ID。 fbGetAmsNetId.bBusy总是很忙。我不知道我在做什么错。
变量:
FUNCTION_BLOCK FB_GetAmsNetId
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
fbGetAmsNetId : FB_GetLocalAmsNetId;
bRequestStarted : BOOL := FALSE;
sAmsNetId : T_AmsNetId;
END_VAR
程序代码:
IF(bRequestStarted = FALSE) THEN
fbGetAmsNetId(bExecute := TRUE, tTimeOut := T#2S);
bRequestStarted := TRUE;
ELSE
IF(NOT fbGetAmsNetId.bBusy) THEN
sAmsNetId := fbGetAmsNetId.AddrString;
fbGetAmsNetId.bExecute := FALSE;
bRequestStarted := FALSE;
END_IF
END_IF
您需要在代码中循环调用fbGetAmsNetId,否则FB_GetLocalAmsNetId将无法完成其内部操作,只能执行一个plc周期。
例如:
fbGetAmsNetId();
IF(bRequestStarted = FALSE) THEN
fbGetAmsNetId(bExecute := TRUE, tTimeOut := T#2S);
bRequestStarted := TRUE;
ELSE
IF(NOT fbGetAmsNetId.bBusy) THEN
sAmsNetId := fbGetAmsNetId.AddrString;
fbGetAmsNetId.bExecute := FALSE;
bRequestStarted := FALSE;
END_IF
END_IF