下面是使用 ApplicationLogger 的短源代码示例。
声明部分
VAR
udiState : UDINT;
xSomethingHappened : BOOL;
fbLoggerPoint : APL.FB_LoggerPoint;
etDiagBuffer : GD.ET_Diag;
etDiagExtAplBuffer : APL.ET_DiagExt;
END_VAR
程序部分
CASE udiState OF
0: // Machine initialization
// Register ApplicationLogger service
APL.G_ifApplicationLogger.RegisterCommunicationService();
// Register first LoggerPoint
fbLoggerPoint.RegisterLoggerPoint(
_ifParent := APL.G_ifApplicationLogger,
i_sName:= 'AplTest',
i_sType:= 'MyProject',
i_sSource := 'Project',
q_etDiag => etDiagBuffer,
q_etDiagExt => etDiagExtAplBuffer);
IF (etDiagBuffer = GD.ET_Diag.Ok) THEN
udiState := 10;
ELSE
// not able to register logger point -> check exception message of RegisterLoggerPoint
udiState := 100;
END_IF
10: // cyclic program
IF xSomethingHappened THEN
xSomethingHappened := FALSE;
// write message wia LoggerPoint
fbLoggerPoint.AddLogEntry(
i_etLogLevel := APL.ET_LogLevel.Exception,
i_etDiag := GD.ET_Diag.Ok,
i_udiDiagExt := 0,
i_sMessage := 'Something has happened!',
q_etDiag => etDiagBuffer,
q_etDiagExt => etDiagExtAplBuffer);
IF (etDiagBuffer <> GD.ET_Diag.Ok) THEN
// there was an exception during logging -> check exception message of AddLogEntry
udiState := 100;
END_IF
END_IF
END_CASE
通过在控制器上运行此代码并设置 xSomethingHappened = TRUE,在缺省情况下,应用程序记录器中没有消息条目。这是因为,根据缺省设置,LoggerPoints 的内部 LogLevel 被设置为 Nothing。LoggerPoint 仅记录此刻相关的消息。这就意味着,方法 fbLoggerPoint.AddLogEntry 的输入 i_etLogLevel 被设置为不低于 LoggerPoint 的内部 LogLevel 的层级。
有关如何通过 ApplicationLogger 的“记录器点”选项卡设置此内部 LogLevel 的详细说明,见章节更改记录器点的记录层级。如果无法直观地理解,则在 ET_LogLevel 枚举中定义 LogLevels 的顺序。
如果内部 LogLevel 被设置为(例如)StatusMessage,那么从此点发送的消息将被添加到 LogMessage 列表,而先前发送的消息仍被忽略。