没有音响,就不能使用Signal assingment选项页的Sound中选择.wav声音文件播放了,可不可以直接用pc上的蜂鸣器发声,脚本应该怎么编写?补充:报警变量是模拟量,怎么编脚本转换成布尔型变量用来报警?新手上路请高人指点
问题补充:
又有问题了,假如在PLC里把模拟量转换成了开关量horn作为报警变量,想组态一个报警,并编一个C脚本当报警消息来时报警,蜂鸣器发声,确认报警后,蜂鸣器声音停止。
(1)用wincc编C全局脚本:
#pragma option(mbcs)
void New_Function()
{
DWORD value;
value=GetTagDWord("horn");
while(value)
{
Beep(1000,100); //蜂鸣器 频率:1000 Hz,指定蜂鸣声的持续时长100 ms
}
}
(2)在图形编辑器的画面上加个按钮,C动作触发上面的New_Function()函数:#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#pragma option(mbcs)
// 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
New_Function();
}
(3)在报警记录中组态一个报警消息,message tag 为horn。
(4)在图形编辑器的画面上加个“输入/输出域”,选择变量“horn”,模拟报警信号输入。
运行:点击按钮,改变“输入/输出域”的horn值为1
结果:蜂鸣器长鸣,解除报警(horn置1)不能关闭蜂鸣器。。。。。。
是程序脚本编错了?陷入死循环了么?
最佳答案
是你的脚本用错了,不要用while,否则是死循环,改为if。
其触发条件也不应该放到按钮的事件中触发,应该放到全局脚本中,触发周期选1S。
提问者对于答案的评价:
嗯,多谢哈,照你的方法实现了,没用if ,在while里又加了一条语句也ok
while(value)
{
value=GetTagDWord("horn");
Beep(1000,100);
}
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc268634.html