Skip to main content

アラームテーブルを使用した視覚化の作成

以下の手順では、アラームテーブル視覚化要素は例として構成されています。

詳細については、以下を参照してください。アラームグループとアラームの定義

構成

要件: AG_PartsShortage警報グループとAC_PartsShortageアラーム クラスはプロジェクトで定義されます。

  1. アプリケーションの下に視覚化を追加します。

    1. アプリケーションを選択し、オブジェクトを追加視覚化指示。

    2. 名前を次のように指定VIS_PartsShortage

  2. 視覚化エディターを開きます。

  3. ドラッグしてアラームテーブル要素からアラームマネージャーカテゴリを視覚化エディターに挿入し、要素のプロパティ ビューを開きます。

  4. アラーム テーブルを次のように設定します。

    1. の中で要素名財産、価値列名を指定AT_PartsShortage

    2. の構成Alarm groups視覚化要素のプロパティ:

      1. の中でアラーム設定アラームグループプロパティの場合は、対応する値セルをクリックします。

        その選択されたアラームグループダイアログが開きます。

      2. クリアする全てオプションを選択し、AG_PartsShortage警報グループ。

      3. クリック_visu_img_add_selected_alarm_group.pngグループを追加するボタン選択されたアラームグループリスト。

      4. クリックわかりました設定を確認します。

    3. の構成警報クラス視覚化要素のプロパティ:

      1. の中でアラーム設定警報クラスプロパティで、視覚化したいアラームクラスを定義します。値フィールドをクリックします。

        の中でアラーム設定警報クラスプロパティの場合は、対応する値セルをクリックします。

        そのアラームクラスを選択ダイアログが開きます。

      2. クリアする全てオプションを選択し、AC_PartsShortage警報クラス。

      3. クリック_visu_img_add_selected_alarm_group.png選択したアラーム クラスにアラーム クラスを追加するボタン。

      4. クリックわかりました設定を確認します。

    4. 列の構成:

      1. の中でプロパティで、新規作成ボタン。

        カラム[2]が利用可能です。新しい列の名前はBitmap視覚化エディターにリストされます。

      2. の中でデータの種類プロパティを選択し、列[2]の値。

        表では、列に新しいデフォルトの見出しが付けられますState

      3. の中で列ヘッダープロパティ名を指定するParts Shortage State

        列[2]の名前が変更されました。

    5. の構成選択視覚化要素のプロパティ:

      1. の中で選択色プロパティで色を選択Greenの中で価値カラム。

        実行時に、視覚化ユーザーはテーブルセルを選択できます。選択すると、セルは緑色に変わります。

    6. の構成制御変数視覚化要素のプロパティ:

      1. アプリケーションコードで、bQuitAlarm制御変数。

      2. の中で選択したことを確認するプロパティを指定するPLC_PRG.bQuitAlarm値セル内の変数。

    構成されたプロパティ

    _visu_img_alarm_table_porperties.png

アラームの視覚化をコントロールで補う

視覚化ユーザーは、アラームの視覚化を操作するためのコントロールを必要とします。プログラミング時には、アラームテーブルウィザードのサポートを利用できます。ウィザードを呼び出すコマンドは、視覚化でアラームテーブルを選択している場合にのみ使用できます。

  1. 視覚化エディタでアラームテーブルを選択します要素。

  2. コンテキストメニューで、アラーム確認のための要素を挿入する指示。

    そのAlarm Table Wizardダイアログが開きます。

  3. クリックわかりましたすべての設定を受け入れます。

    その選択したことを確認するAcknowledge all visibleHistory、 そしてFreeze scrolling positionボタンが追加されました。要素には完全な入力構成があります。

    _visu_img_alarm_table_controls.png

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

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

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

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

  1. 新しいものを追加PRG_VISU発注書。

  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