搬家第一天-11.Wincc V7.3基于上位机声音报警的实现方法

案例:Wincc V7.3做上位机程序,希望有报警到来时,发出声音报警防止操作员打盹。这里描述了实现这种功能的方法之一,但不是唯一的方法。

Wincc建以下内部变量:

Alarm 32位浮点数;Path 文本变量8位字符集。

Wincc中建立一个主画面,有一排导航按钮,有一个picturewindow,点击导航按钮跳转到相应工艺画面,有一个报警控件,名字为ctrlAlarm,有一个消音按钮用于消除声音和报警确认,如下图所示。

搬家第一天-11.Wincc V7.3基于上位机声音报警的实现方法

在画面的打开事件中,写入以下VBS脚本,把项目路径和波形文件路径写入path变量。

Sub OnOpen()
Dim path_vbs,path_c
Set path_vbs=HMIRuntime.Tags("Path")
path_vbs.write HMIRuntime.ActiveProject.Path & "\alarm.wav"
'以下代码将'\'替换成'\\',以备c脚本引用项目路径
path_c=Replace(path_vbs.read,"\","\\") 
HMIRuntime.Tags("Path").Write path_c
End Sub

 

建立一个全局VBS脚本,判断是不是有新的报警产生,5秒循环触发。

Option Explicit
Function action
'每5秒通过每个工艺画面报警控件"组确认"按钮是不是灰色的判断是不是有新的报警,如果有就把ResetAlarm复位
Dim ctrlAlarm,ctrlToolbarButton
Set ctrlAlarm=HMIRuntime.ActiveScreen.ScreenItems("ctrlAlarm")

Set ctrlToolbarButton=ctrlAlarm.GetToolbarButton("QuitVisible")

If ctrlToolbarButton.Enabled Then  ‘如果按钮'组确认'不是灰色的,说明有新的报警产生
  HMIRuntime.Tags("Alarm").Write 1.0
Else
  HMIRuntime.Tags("Alarm").Write 0
End If
End Function

建立一个全局C脚本,用于播放声音文件,5秒循环触发.

#include "apdefap.h"

int gscAction( void )
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
//每5秒做一次判断
#pragma code("Winmm.dll")
void WINAPI sndPlaySoundA(char *szWave,DWORD dwflag);
#pragma code()
char* prjpath;
prjpath=GetTagChar("Path"); //Return-Type: char*

if (GetTagFloat("Alarm")==1.0)
{
if (GetTagChar("Path")!="")
{
sndPlaySoundA(GetTagChar("Path"),1);
}
}
return 0;
}

 

在WINCC-计算机属性的启动选项中,勾选“全局脚本运行系统”和“报警记录运行系统”。报警记录设置方法不在这里讨论。

上一篇:搬家第三天-61.Wincc V7.3 Horn方式声音报警


下一篇:WinCC字符串归档变量查询