这是我在stackoverflow上的第一个问题,我希望有人能够帮助我。 我正在尝试获取我的TwinCat PLC系统的本地AmsNetId。该代码在本地运行在 TwinCat 系统上。 函数工作正常,编译没有问题。但是功能块FB_GetLocalAmsNetId似乎永远不会返回 Ams Net 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