WINCC6.2
WINCC6.2中用C脚本写程序实现如下目的:BOOL量QRR变为1时,Alarm03.wav循环播放;
BOOL量QRR变为0时,停止声音
您可以使用WinCC的C脚本编写以下代码来实现您的要求:
BOOL bLastQRR = FALSE; //用于记录上一次的QRR状态
BOOL bCurQRR = FALSE; //用于记录当前的QRR状态
while(TRUE)
{
bCurQRR = READ_QRR_STATE(); //获取当前的QRR状态
if(bCurQRR != bLastQRR) //如果当前的QRR状态与上一次不同
{
if(bCurQRR) //如果当前的QRR状态为1(开启)
{
SOUND_PLAY("Alarm03.wav", TRUE); //循环播放声音文件
}
else //如果当前的QRR状态为0(关闭)
{
SOUND_STOP(); //停止播放声音文件
}
bLastQRR = bCurQRR; //更新上一次的QRR状态为当前状态
}
SLEEP(100); //延时100毫秒
}
请注意,在上述代码中,我们使用了以下两个函数:
1. READ_QRR_STATE():该函数用于读取QRR的当前状态。请根据您的实际情况修改该函数。
2. SOUND_PLAY("Alarm03.wav", TRUE)和SOUND_STOP():这两个函数用于播放和停止声音文件。其中,第一个参数是声音文件的名称,第二个参数用于指定是否循环播放(TRUE表示循环播放,FALSE表示仅播放一次)。请根据您的实际情况修改这些函数。 BOOL bLastQRR = FALSE;
BOOL bCurQRR = FALSE;
while(TRUE)
{
bCurQRR = READ_QRR_STATE();
if(bCurQRR != bLastQRR)
{
if(bCurQRR)
{
SOUND_PLAY("Alarm03.wav", TRUE);
}
else
{
SOUND_STOP();
}
bLastQRR = bCurQRR;
}
SLEEP(100);
}
我这样写后 编译报错:
expected before 'while'
expected before 'if'
expected before '}' 这般难离舍 发表于 2023-04-13 10:09
BOOL bLastQRR = FALSE;
BOOL bCurQRR = FALSE;
whil ...
看起来像是语法错误,可以尝试将代码重新比对格式:
BOOL bLastQRR = FALSE;
BOOL bCurQRR = FALSE;
while(TRUE){
bCurQRR = READ_QRR_STATE();
if(bCurQRR != bLastQRR) {
if(bCurQRR) {
SOUND_PLAY("Alarm03.wav", TRUE);
}
else {
SOUND_STOP();
}
bLastQRR = bCurQRR;
}
SLEEP(100);
}
如果还有报错,可以把报错的具体内容发给我,我再帮您分析一下。 依旧报错:
line4: error (0040):<type> expected before 'while'
line7: error (0040):<type> expected before 'if'
line10: error (0040):<type> expected before '}'
line13: error (0040):<type> expected before '}'
line16: error (0040):<type> expected before '}' 这般难离舍 发表于 2023-04-13 10:15
依旧报错:
line4: error (0040):<type> expected bef ...
这可能是由于某些编译器不支持C++风格的注释导致的错误。请尝试使用C风格的注释来解决这个问题,即用“/*”和“*/”代替“//”。以下是修改后的示例代码:BOOL bLastQRR = FALSE;BOOL bCurQRR = FALSE;while(TRUE){ bCurQRR = READ_QRR_STATE(); if(bCurQRR != bLastQRR) { if(bCurQRR) { SOUND_PLAY("Alarm03.wav", TRUE); } else { SOUND_STOP(); } bLastQRR = bCurQRR; } SLEEP(100);}如果还有报错,请把具体内容发给我,我再帮您分析。 现在我的程序里没有/* 或//;
依旧编译故障:
line4: error (0040):<type> expected before 'while'
line7: error (0040):<type> expected before 'if'
line10: error (0040):<type> expected before '}'
line13: error (0040):<type> expected before '}'
line16: error (0040):<type> expected before '}' 这般难离舍 发表于 2023-04-13 10:17
现在我的程序里没有/* 或//;
依旧编译故障:
line4:...
那么这可能是由于编译器找不到相关的头文件或库文件导致的错误。请确保您已经包含了所有需要的头文件,并正确设置了库路径。另外,您可以尝试将代码中的宏定义转换为明确的类型,例如将TRUE改为1,将FALSE改为0,这有助于解决一些常见的编译问题。
下面是修改后的代码示例:int bLastQRR = 0;int bCurQRR = 0;while(1){ bCurQRR = READ_QRR_STATE(); if(bCurQRR != bLastQRR) { if(bCurQRR == 1) { SOUND_PLAY("Alarm03.wav", 1); } else { SOUND_STOP(); } bLastQRR = bCurQRR; } SLEEP(100);}请注意,我已经将BOOL类型改为了int类型,并将TRUE和FALSE分别改为了1和0。
页:
[1]