使用警报表创建可视化效果
在以下说明中,报警表可视化元素配置为示例。
有关详细信息,请参阅下列内容:定义警报组成和警报
配置
要求: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