搬家第一天-11.Wincc V7.3基于上位机声音报警的实现方法
作者:互联网
案例:Wincc V7.3做上位机程序,希望有报警到来时,发出声音报警防止操作员打盹。这里描述了实现这种功能的方法之一,但不是唯一的方法。
Wincc建以下内部变量:
Alarm 32位浮点数;Path 文本变量8位字符集。
Wincc中建立一个主画面,有一排导航按钮,有一个picturewindow,点击导航按钮跳转到相应工艺画面,有一个报警控件,名字为ctrlAlarm,有一个消音按钮用于消除声音和报警确认,如下图所示。
在画面的打开事件中,写入以下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-计算机属性的启动选项中,勾选“全局脚本运行系统”和“报警记录运行系统”。报警记录设置方法不在这里讨论。
标签:11,ctrlAlarm,V7.3,WINCC,报警,Wincc,HMIRuntime,path,Path 来源: https://www.cnblogs.com/fishingsriver/p/14344260.html