【发布时间】:2022-02-25 01:17:54
【问题描述】:
我对 OOP 和 TwinCat 还是很陌生,所以请多多包涵。我目前正在为一台小型机器开发软件,该软件将与 TF2000 HMI 结合使用。因为事件网格占用了大量工作,所以我想设置 TC3 EventLogger。我了解您如何创建警报等,我可以在 HMI 事件网格中显示它们。
它适用于单个事件,但现在我想更进一步并添加每个功能块的错误。比如FB_TemperatureController可以报告过热,FB_Motor可以报告停止错误等等。
如何设置事件记录器,以便从每个实例化的 FB 发送相同的错误?
我想创建一个 FB_FaultHandler:
FUNCTION_BLOCK FB_FaultHandler
VAR
fbEventLogger : FB_TcEventLogger;
aMessages : ARRAY [0..100] OF Fb_TcMessage;
aAlarms : ARRAY [0..100] OF Fb_TcAlarm;
END_VAR
METHOD init
VAR_INPUT
END_VAR
aAlarms[0].CreateEx(Tc_Events.AlarmEvents.Error_Overtemp, TRUE, 0);
aAlarms[1].CreateEx(Error2, TRUE, 0);
aAlarms[2].CreateEx(Error3, TRUE, 0);
aAlarms[3].CreateEx(Error4, TRUE, 0);
aAlarms[4].CreateEx(, TRUE, 0);
aAlarms[5].CreateEx(, TRUE, 0);
aAlarms[6].CreateEx(, TRUE, 0);
有几件事我不喜欢这个:
- 事件源始终是 FB_FaultHandler 但我希望它显示相关的 FB
- 我不确定如何从不同的实例两次发出警报。例如:fbTemp1 和 fbTemp 2 都是 FB_TemperatureController 的实例。现在,如果我在 FB_FaultHandler 中创建一个“SetFault”方法,它会引发并确认一个警报,它会在我不知道来源的情况下引发两次相同的错误。
METHOD setError
VAR_INPUT
nErrorId: INT;
bErrorActive: BOOL;
END_VAR
- 如果数组设置为事件的 ID,我更愿意。因此“Error_Overtemp”的 id 为 96,
FB_FaultHandler会将其放入aAlarms[96]
我还没有在任何地方找到任何关于此的真实样本。我观看了网络研讨会,但老实说,它的描述非常糟糕。如果有任何帮助、输入或优秀事件记录器的示例,我将不胜感激。
【问题讨论】: