Skip to main content

プログラムコード内のアラーム情報の評価

アラームテーブル 視覚化要素は、実行時に視覚化からの情報をアプリケーション変数に書き込むことができます。この変数はプログラムで評価できます。

構造体からアラームに関する情報(アラームグループ、アラームID、ステータス遷移のタイムスタンプ、ラッチ変数、メッセージテキストなど)を取得します。 AlarmSelectionInfoVisuElemsAlarm 図書館)。

これを実現するために、 選択選択されたアラームに関する情報の変数 アラームテーブルのプロパティ、型の変数を指定します AlarmSelectionInfo次に、アプリケーション内で変数を次のように使用します。

  1. 新しいものを追加 PRG_VISU POU。

  2. 追加する PRG_VISU POUから VISU_TASK

  3. 開く PRG_VISU エディターで POU を開き、次のプログラム行を挿入します。

    宣言

    PROGRAM PRG_VISU
    VAR
        alarmSelectionInfoDefault : AlarmSelectionInfoDefault;
        sLastTimestampDate : STRING;
        sLastTimestampTime : STRING;
        sLatch1 : STRING;
        sLatch2 : STRING;
        wsMessage1 : WSTRING := "No selection";
        wsMessage2 : WSTRING := "No selection";
        pInt : POINTER TO INT;
        xInit: BOOL := TRUE;
        pString : POINTER TO STRING;
        cbsFormattedValueLatch1 : CharBufferString(uiBufferSize := 0, stringType := TYPE_CLASS.TYPE_STRING);
        cbsFormattedValueLatch2 : CharBufferString(uiBufferSize := 0, stringType := TYPE_CLASS.TYPE_STRING);
        abyLocalBufferLatch1 : ARRAY[0..LENGTH] OF BYTE;
        abyLocalBufferLatch2 : ARRAY[0..LENGTH] OF BYTE;
        iPrevSelectionChangedCounter: INT;
        END_VAR
    VAR CONSTANT
        // The length of the string of the local CharBufferString instance
        LENGTH : INT := 80 * 2;
    END_VAR                        

    実装

    IF xInit THEN
        cbsFormattedValueLatch1.Init(pBuffer:=ADR(abyLocalBufferLatch1), uiBufferSize:=INT_TO_UINT(LENGTH + 1), stringType:=TYPE_CLASS.TYPE_STRING);
        cbsFormattedValueLatch2.Init(pBuffer:=ADR(abyLocalBufferLatch2), uiBufferSize:=INT_TO_UINT(LENGTH + 1), stringType:=TYPE_CLASS.TYPE_STRING);
        xInit := FALSE;
    END_IF
    IF alarmSelectionInfoDefault.AlarmSelectionInfo.iSelectionChangedCounter <> iPrevSelectionChangedCounter THEN
        // Format Date/Time as string
        sLastTimestampDate := AlarmManager.FormatDate(alarmSelectionInfoDefault.AlarmSelectionInfo.timeStampLast, AlarmManager.AlarmGlobals.g_sDateFormat);
        sLastTimestampTime := AlarmManager.FormatTime(alarmSelectionInfoDefault.AlarmSelectionInfo.timeStampLast, AlarmManager.AlarmGlobals.g_sTimeFormat);
        // Retrieve latch variables as string
        cbsFormattedValueLatch1.FromString('');
        pString := FormatTypedValue(alarmSelectionInfoDefault.AlarmSelectionInfo.paLatchVariables^[0], cbsFormattedValueLatch1);
        STU.StrCpyA(ADR(sLatch1), SIZEOF(sLatch1), pString);
        cbsFormattedValueLatch2.FromString('');
        pString := FormatTypedValue(alarmSelectionInfoDefault.AlarmSelectionInfo.paLatchVariables^[1], cbsFormattedValueLatch2);
        STU.StrCpyA(ADR(sLatch2), SIZEOF(sLatch2), pString);
        // Retrieve messages
        STU.StrCpyW(ADR(wsMessage1), SIZEOF(wsMessage1), alarmSelectionInfoDefault.AlarmSelectionInfo.papwsAlarmMessages^[0]);
        STU.StrCpyW(ADR(wsMessage2), SIZEOF(wsMessage2), alarmSelectionInfoDefault.AlarmSelectionInfo.papwsAlarmMessages^[1]);
        iPrevSelectionChangedCounter := alarmSelectionInfoDefault.AlarmSelectionInfo.iSelectionChangedCounter;
    END_IF