アラームテーブルを使用した視覚化の作成
以下の手順では、アラームテーブル視覚化要素は例として構成されています。
詳細については、以下を参照してください。アラームグループとアラームの定義
構成
要件: AG_PartsShortage警報グループとAC_PartsShortageアラーム クラスはプロジェクトで定義されます。
アプリケーションの下に視覚化を追加します。
アプリケーションを選択し、オブジェクトを追加→視覚化指示。
名前を次のように指定
VIS_PartsShortage。
視覚化エディターを開きます。
ドラッグしてアラームテーブル要素からアラームマネージャーカテゴリを視覚化エディターに挿入し、要素のプロパティ ビューを開きます。
アラーム テーブルを次のように設定します。
の中で要素名財産、価値列名を指定
AT_PartsShortage。の構成
Alarm groups視覚化要素のプロパティ:の中でアラーム設定→アラームグループプロパティの場合は、対応する値セルをクリックします。
その選択されたアラームグループダイアログが開きます。
クリアする全てオプションを選択し、
AG_PartsShortage警報グループ。クリック
グループを追加するボタン選択されたアラームグループリスト。クリックわかりました設定を確認します。
の構成警報クラス視覚化要素のプロパティ:
の中でアラーム設定→警報クラスプロパティで、視覚化したいアラームクラスを定義します。値フィールドをクリックします。
の中でアラーム設定→警報クラスプロパティの場合は、対応する値セルをクリックします。
そのアラームクラスを選択ダイアログが開きます。
クリアする全てオプションを選択し、
AC_PartsShortage警報クラス。クリック
選択したアラーム クラスにアラーム クラスを追加するボタン。クリックわかりました設定を確認します。
列の構成:
の中で列プロパティで、新規作成ボタン。
カラム[2]が利用可能です。新しい列の名前は
Bitmap視覚化エディターにリストされます。の中でデータの種類プロパティを選択し、州列[2]の値。
表では、列に新しいデフォルトの見出しが付けられます
State。の中で列ヘッダープロパティ名を指定する
Parts Shortage State。列[2]の名前が変更されました。
の構成選択視覚化要素のプロパティ:
の中で選択色プロパティで色を選択
Greenの中で価値カラム。実行時に、視覚化ユーザーはテーブルセルを選択できます。選択すると、セルは緑色に変わります。
の構成制御変数視覚化要素のプロパティ:
アプリケーションコードで、
bQuitAlarm制御変数。の中で選択したことを確認するプロパティを指定する
PLC_PRG.bQuitAlarm値セル内の変数。
構成されたプロパティ

アラームの視覚化をコントロールで補う
視覚化ユーザーは、アラームの視覚化を操作するためのコントロールを必要とします。プログラミング時には、アラームテーブルウィザードのサポートを利用できます。ウィザードを呼び出すコマンドは、視覚化でアラームテーブルを選択している場合にのみ使用できます。
視覚化エディタでアラームテーブルを選択します
要素。コンテキストメニューで、アラーム確認のための要素を挿入する指示。
そのAlarm Table Wizardダイアログが開きます。
クリックわかりましたすべての設定を受け入れます。
その
選択したことを確認する、Acknowledge all visible、History、 そしてFreeze scrolling positionボタンが追加されました。要素には完全な入力構成があります。
プログラムコード内のアラーム情報の評価
そのアラームテーブル視覚化要素は、実行時に視覚化情報からアプリケーション変数に情報を書き込むことができます。この変数はプログラムで評価できます。
構造体からアラームに関する情報(アラームグループ、アラームID、状態遷移のタイムスタンプ、ラッチ変数、メッセージテキストなど)を取得します。AlarmSelectionInfo(VisuElemsAlarm図書館)。
これを実現するために、選択–選択されたアラームに関する情報の変数アラームテーブルのプロパティ、型の変数を指定しますAlarmSelectionInfo次に、アプリケーション内で変数を次のように使用します。
新しいものを追加
PRG_VISU発注書。追加する
PRG_VISUPOUからVISU_TASK。開く
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