plc c语言做报警,wincc声音报警C脚本版
//wincc声音报警C脚本版,和wincc自身的报警没有任何关系,所以不要和wincc自带的报警相关联
#include "apdefap.h"
//播放声音的函数声明
#pragma code("winmm.dll")
VOID WINAPI PlaySoundA(char *,char *,DWORD);
#pragma code()
struct datainfo //变量名和声音文件名的对应关系
{
const char * const tagname; //变量名
const char * const soundname; //声音文件名
};
struct statusdatainfo //保存报警变量的状态信息
{
int prevStatus;
int playing;
};
//所有的报警变量和声音文件名对应关系表
//注意:变量名和文件名要和实际的变量名、文件名完全一致
//注意:声音文件只支持wav文件
//注意:变量越靠前,则优先级越高,在同时发生多个报警时,优先级最高的声音优先播放,而且任一时刻只能播放一个声音
static struct datainfo data[]=
{
{"www","Windows XP 启动.wav"},
{"testalarm","ringin.wav"},
{"qqq","Windows XP 关机.wav"},
{"eee","Windows XP 注销音.wav"}
};
static struct statusdatainfo statusdata[sizeof(data)/sizeof(data[0])];
int gscAction( void )
{
int totalnum=0; //总的报警变量数量,也等于总的报警声音数量
int index=0; //循环变量
int hasfound=0; //已找到优先级最高的报警变量
char * filename=NULL; //当前要播放声音的文件名
char * dir; //声音文件存放的目录
static char * currfilename=NULL; //当前正在播放声音的文件名,注意:该变量是静态变量
static char FullName[200]; //当前正在播放声音的文件全名,注意:文件名全名不能太长,该变量是静态变量
char * ack_; //报警确认变量的名字,一次只能确认优先级最高的报警
int ack_status=0; //当前确认变量的状态
totalnum=sizeof(data)/sizeof(struct datainfo); //报警变量的数量
ack_status=GetTagBit(ack_name);
for(index=0;index
{
if (statusdata[index].playing)
{
statusdata[index].prevStatus=GetTagBit(data[index].tagname);
if (ack_status) //确认报警变量
{
ack_status=0;
statusdata[index].playing=0;
}
else
{
if (0==hasfound)
{
hasfound=1;
filename=data[index].soundname;
}
}
}
else
{
statusdata[index].playing=!statusdata[index].prevStatus && GetTagBit(data[index].tagname);
statusdata[index].prevStatus=GetTagBit(data[index].tagname);
if (statusdata[index].playing)
{
if(0==hasfound)
{
filename=data[index].soundname;
hasfound=1;
}
}
}
}
SetTagBit(ack_name,0);
if (filename!=currfilename) //当要播放的声音文件和当前正在播放的声音文件不同时才播放新的声音
{
currfilename=filename; //修改当前正在播放的声音文件名
if (NULL==currfilename) //如果没有报警则停止播放声音
{
FullName[0]=0x0;
PlaySoundA(NULL,NULL,0x2000|1|8); //停止播放声音
}
else //循环播放新的声音文件
{
strcpy(FullName,dirname); //复制目录名
strcat(FullName,currfilename); //合成声音文件全名
PlaySoundA(FullName,NULL,0x2000|1|8); //播放声音
}
}
return 0;
}
plc c语言做报警,wincc声音报警C脚本版相关推荐
- plc c语言做报警,基于PLC编程报警功能块的实现
电气工程师在平常的程序编写中,会有各种各样的技巧类的方法,有助于程序结构清晰的,有利于程序简化的,更有自我创新的,多多地学他人之长以弥补自己之短,对自己的工作是有十足好处的. 在一个项目程序中,报警程 ...
- nagios-3种报警方式–声音–email/邮件—短信
应用nagios3的原因就是因为它的强大性和易扩张性,首先我们来研究nagios3的3种报警配额 1. nagios3声音报警 2. nagios3邮件报警 3. nagios3短信报警 ###### ...
- B08.python智能盯盘 + 声音报警 - 有意思的小东西【黑科技】
文章目录 一.对上证大盘进行盯盘 二.盯盘侠.bat 三.对外盘进行盯盘 适合人群:稍微有点python基础者,炒股或对金融感兴趣者. 一.对上证大盘进行盯盘 1,首先需要安装winsound, ea ...
- 用计算机内置蜂鸣器音乐,WINCC如何用计算机的蜂鸣器作声音报警?-工业支持中心-西门子中国...
没有音响,就不能使用Signal assingment选项页的Sound中选择.wav声音文件播放了,可不可以直接用pc上的蜂鸣器发声,脚本应该怎么编写?补充:报警变量是模拟量,怎么编脚本转换成布尔型 ...
- Nagios Web 页面声音报警
这个声音报警算是最简单的报警配置了吧. 第一步: 准备音频文件,自己可定制,后缀必须为 .wav 格式,然后上传到/usr/local/nagios/share/media/ 目录下,注意文件命名为下 ...
- 请问在C#中如何实现声音报警?
实现声音报警,就是播放一个声音文件,如.wav文件.请问在C#中有可以直接调用的函数吗?应该如何实现呢?
- BIOS 报警声 / 声音提示
BIOS 报警声 / 声音提示 BIOS 的报警声是电脑故障排除的最好诊断工具. 1. BIOS 供应商 Major BIOS vendors include American Megatrends ...
- 显示屏插到服务器上不显示,WINCC画面报警栏中显示没有数据服务器的连接是怎么回事...
WINCC画面报警栏中显示没有数据服务器的连接并且报警画面中也没有报警记录,其它的都挺正常是怎么回事 问题补充: 以前WinCC运行都挺正常,突然不能显示报警记录,其中在"Computer ...
- WINCC SQL报警记录和变量记录数据读取查询
WINCC SQL报警记录和变量记录数据读取查询 按时间查询报警记录 用到控件为listView,textbox,progctrl,ImageComboCtrl Sub X6309X94AE1X000 ...
- 计算机常见故障报警,常见听报警志与故障
○ 常见故障表现 对经验不足的用户来说,蓝屏.花屏.黑屏.重启.报警,每一种都是能吓死人的故障现象:而对有一定经验的"老鸟"来说,这些现象虽然也麻烦,但常常也是指出故障所在的&qu ...
最新文章
- 软件开发大师谈企业应用架构模式
- Python 中的匿名函数,你会用吗
- EasyUI中树的基本操作
- spring boot实现下载文件
- matlab 2010 win7 64位,64位WIN7系统怎么安装Matlab2010
- Zabbix 3.2.6 升级到 Zabbix 3.4.3
- .NET Core 项目指定SDK版本
- [PAT乙级]1032 挖掘机技术哪家强
- Arm发布移动端v9体系新架构,CPU、GPU、IP全囊括了!
- 聊天系统服务器端类图怎么画,聊天系统服务器端类图
- 《面向模式的软件体系结构3-资源管理模式》读书笔记(3)--- Eager Acquisition模式...
- 开发微信小程序 中遇到的坑 及解决方法
- Win11高效日历推荐
- Pytorch—时序数据的加载与简单处理
- 腾讯云 mysql 连接_远程连接腾讯云的mysql
- java wlan_浅谈无线局域网WLAN
- 计算机硬盘数据如何恢复,如何防止硬盘数据被恢复?毁灭数据教程
- Written English-书面-现在进行时
- 面试官问上一家公司离职原因怎么办?
- 英语词源基础之后缀-ion详解: -ion,-tion,-ction,-ption,-ation,-ition的区别
热门文章
- c++ win10下 遍历文件夹的方式, dirent.h头文件缺失问题
- cada0图纸框_CAD怎么画图纸框?cad图纸框的绘制方法
- 数字信号处理-基础一
- 《工业设计史》第七章:艺术变革与现代设计
- 易居(个人中心资料修改+实名认证)
- 十八个经典问答,讲透了RS485接口!-小白收藏
- WDM驱动实操No.1
- Autoencoder理解(2): 自动编码器的作用之稀疏编码
- cortana 无法使用_如何使用Cortana创建和编辑列表(并将它们与Wunderlist同步)
- mac 爱普生打印机驱动_EPSON 打印机软件