如何实现FB GetLocalAmsNetId?



这是我在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

相关内容

  • 没有找到相关文章

最新更新