如何实现FB GetLocalAmsNetId?
How to implement FB GetLocalAmsNetId?
这是我在 Whosebug 上的第一个问题,我希望有人能帮助我。 我正在尝试获取我的 TwinCat PLC 系统的本地 AmsNetId。本地 TwinCat 系统上的代码是 运行。 该函数运行正常,编译没有问题。但是功能块 FB_GetLocalAmsNetId 似乎从来没有 return 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