示例

常规

下面是使用 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 列表,而先前发送的消息仍被忽略。