最新提现记录

  • 恭喜 admin 于 2023-6-6 15:17 成功提现 500元
  • 恭喜 admin 于 2023-5-3 09:45 成功提现 400元

WINCC6.2

[复制链接]
查看1565 | 回复7 | 2023-4-13 10:03:39 | 显示全部楼层 |阅读模式
WINCC6.2中用C脚本写程序实现如下目的:
BOOL量QRR变为1时,Alarm03.wav循环播放;
BOOL量QRR变为0时,停止声音
回复

使用道具 举报

chatGPT_小智 | 2023-4-13 10:04:10 | 显示全部楼层
您可以使用WinCC的C脚本编写以下代码来实现您的要求:

[code]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毫秒
}[/code]

请注意,在上述代码中,我们使用了以下两个函数:

1. READ_QRR_STATE():该函数用于读取QRR的当前状态。请根据您的实际情况修改该函数。

2. SOUND_PLAY("Alarm03.wav", TRUE)和SOUND_STOP():这两个函数用于播放和停止声音文件。其中,第一个参数是声音文件的名称,第二个参数用于指定是否循环播放(TRUE表示循环播放,FALSE表示仅播放一次)。请根据您的实际情况修改这些函数。
回复

使用道具 举报

这般难离舍 | 2023-4-13 10:09:43 | 显示全部楼层
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 '}'
回复

使用道具 举报

chatGPT_小智 | 2023-4-13 10:09:59 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2935&ptid=1285][color=#999999]这般难离舍 发表于 2023-04-13 10:09[/color][/url][/size]
BOOL bLastQRR = FALSE;
BOOL bCurQRR = FALSE;

whil ...[/quote]

看起来像是语法错误,可以尝试将代码重新比对格式:

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);
}

如果还有报错,可以把报错的具体内容发给我,我再帮您分析一下。
回复

使用道具 举报

这般难离舍 | 2023-4-13 10:15:04 | 显示全部楼层
依旧报错:
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 '}'
回复

使用道具 举报

chatGPT_小智 | 2023-4-13 10:15:27 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&amp;goto=findpost&amp;pid=2937&amp;ptid=1285][color=#999999]这般难离舍 发表于 2023-04-13 10:15[/color][/url][/size]
依旧报错:
line4: error (0040):&lt;type&gt; expected bef ...[/quote]

这可能是由于某些编译器不支持C++风格的注释导致的错误。请尝试使用C风格的注释来解决这个问题,即用“/*”和“*/”代替“//”。以下是修改后的示例代码:BOOL bLastQRR = FALSE;BOOL bCurQRR = FALSE;while(TRUE){    bCurQRR = READ_QRR_STATE();    if(bCurQRR != bLastQRR) {        if(bCurQRR) {            SOUND_PLAY(&quot;Alarm03.wav&quot;, TRUE);        }        else {            SOUND_STOP();        }        bLastQRR = bCurQRR;    }    SLEEP(100);}如果还有报错,请把具体内容发给我,我再帮您分析。
回复

使用道具 举报

这般难离舍 | 2023-4-13 10:17:39 | 显示全部楼层
现在我的程序里没有/* 或//;
依旧编译故障:
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 '}'
回复

使用道具 举报

chatGPT_小智 | 2023-4-13 10:18:06 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&amp;goto=findpost&amp;pid=2939&amp;ptid=1285][color=#999999]这般难离舍 发表于 2023-04-13 10:17[/color][/url][/size]
现在我的程序里没有/* 或//;
依旧编译故障:
line4:  ...[/quote]

那么这可能是由于编译器找不到相关的头文件或库文件导致的错误。请确保您已经包含了所有需要的头文件,并正确设置了库路径。另外,您可以尝试将代码中的宏定义转换为明确的类型,例如将TRUE改为1,将FALSE改为0,这有助于解决一些常见的编译问题。

下面是修改后的代码示例:int bLastQRR = 0;int bCurQRR = 0;while(1){    bCurQRR = READ_QRR_STATE();        if(bCurQRR != bLastQRR)     {        if(bCurQRR == 1)         {            SOUND_PLAY(&quot;Alarm03.wav&quot;, 1);         }        else         {            SOUND_STOP();         }                bLastQRR = bCurQRR;    }       SLEEP(100);}请注意,我已经将BOOL类型改为了int类型,并将TRUE和FALSE分别改为了1和0。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则