这般难离舍 发表于 2023-4-12 13:36:35

WINCC6.2

在wincc6.2中用C脚本写一个功能:
当BOOL量QRR为1时,播放声音文件1.wav 一直循环播放;
当BOOL量QRR为0时,停止播放。

chatGPT_小柔 发表于 2023-4-12 13:37:22

以下是一个实现该功能的C脚本:

// 引入头文件
#include <windows.h>
#include "apdefap.h"

void PlaySoundLoop()
{
    // 播放声音文件1.wav,循环播放
    PlaySound("1.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
}

void StopSound()
{
    // 停止播放声音
    PlaySound(NULL, NULL, 0);
}

// 主函数
void main()
{
    BoolVar QRR;
    BoolVarInit(&QRR, FALSE);// 初始化BOOL量QRR为false
   
    while (1) {
      if (BoolVarAccess(&QRR)) {// 如果QRR的值为true
            PlaySoundLoop();// 播放声音文件
      } else {
            StopSound();// 停止播放声音
      }
      Sleep(100);// 等待0.1秒
    }
}

以上脚本中,我们使用了`PlaySound()`函数来播放声音文件,并通过`SND_FILENAME`、`SND_ASYNC`和`SND_LOOP`参数来指定文件名、异步播放和循环播放。同时,在主循环中,我们不断地检查BOOL量QRR的值,如果为真,则播放声音文件;否则停止播放。在每次检查后,我们让程序等待0.1秒,以免过于频繁地进行检查。

请注意,以上脚本只是简单的示例代码,需要根据具体需求进行修改和优化。比如,如果需要在程序运行时动态修改BOOL量QRR的值,则需要将该变量声明为全局变量。

这般难离舍 发表于 2023-4-12 13:41:37

我的计算机是WINDOWS XP系统,无法识别#include <windows.h>
无法编译SND_FILENAME`、`SND_ASYNC`和`SND_LOOP

chatGPT_小柔 发表于 2023-4-12 13:42:54

这般难离舍 发表于 2023-04-12 13:41
我的计算机是WINDOWS XP系统,无法识别#include <wind ...

抱歉,我之前的回答没有考虑到WinCC 6.2只支持C语言,不支持Windows API。以下是一种不依赖Windows API的解决方案:

// 引入头文件
#include "apdefap.h"
#include "applib.h"

void PlaySoundLoop(){
    // 播放声音文件1.wav,循环播放
    PlaySnd("1.wav", TRUE, TRUE);
}

void StopSound(){
    // 停止播放声音
    StopSnd();
}

// 主函数
void main(){
    BoolVar QRR;
    BoolVarInit(&QRR, FALSE);// 初始化BOOL量QRR为false
   
    while (1) {
      if (BoolVarAccess(&QRR)) {// 如果QRR的值为true
            PlaySoundLoop();// 播放声音文件
      } else {
            StopSound();// 停止播放声音
      }
      Sleep(100);// 等待0.1秒
    }
}

在以上代码中,我们使用了WinCC提供的`PlaySnd()`和`StopSnd()`函数来实现声音的播放和停止。其中,`PlaySnd()`函数需要指定要播放的声音文件名、是否循环播放以及是否异步播放。当BOOL量QRR的值为真时,我们调用`PlaySoundLoop()`函数来播放声音文件;否则我们调用`StopSound()`函数停止播放声音。同样地,在主循环中,我们让程序等待0.1秒以免过于频繁地进行检查。

请注意,以上代码仅供参考,具体实现方法还需要根据实际情况进行修改和调试。

这般难离舍 发表于 2023-4-12 14:03:37

#include "apdefap.h"

int gscAction( void )
{


void PlaySoundLoop()
{
   
    PlaySnd("Alarm03.wav", TRUE, TRUE);
}

void StopSound(){

    StopSnd();
}


void main(){
    BoolVar QRR;
    BoolVarInit(&QRR, FALSE);
   
    while (1) {
      if (BoolVarAccess(&QRR)) {
            PlaySoundLoop();
      } else {
            StopSound();
      }
      Sleep(100);
    }
}
这样写编译后有很多报错,比如无法找到#include "applib.h"

chatGPT_小柔 发表于 2023-4-12 14:04:31

这般难离舍 发表于 2023-04-12 14:03
#include "apdefap.h"

int gscAction( void )
{


vo ...

这些错误可能是因为您没有引入必要的头文件和库文件。请尝试按照以下步骤进行修改:

1. 在代码最开头引入必要的头文件:

#include "apdefap.h"
#include "aplib.h"

2. 检查`PlaySnd()`和`StopSnd()`函数是否在`aplib.lib`库文件中。如果不在,则需要手动添加。

3. 如果仍然有报错,可以尝试在WinCC 6.2的安装目录下搜索相关的头文件和库文件,并将其添加到项目中。

请注意,以上操作需要具备一定的编程经验和技术能力。如果您感到困难,建议寻求专业工程师的帮助。

这般难离舍 发表于 2023-4-12 14:16:41

WINCC6.2中无法输入头文件#include "applib.h"
可以用只调用#include "apdefap.h"里的函数和功能来写一个脚本实现吗

chatGPT_小柔 发表于 2023-4-12 14:17:49

这般难离舍 发表于 2023-04-12 14:16
WINCC6.2中无法输入头文件#include "applib.h"
可以用 ...

可以的,不需要引入"applib.h"头文件也可以实现你想要的功能,以下是一个示例代码:#include "apdefap.h"void main(){    BoolVar QRR;    BoolVarInit(&QRR, FALSE);    while (1) {      if (BoolVarAccess(&QRR)) {            PlaySnd("1.wav", TRUE, TRUE);// 播放声音,循环播放      } else {            StopSnd();// 停止播放声音      }      Sleep(100);// 程序等待0.1秒    }}在以上代码中,我们使用了`PlaySnd()`和`StopSnd()`函数来实现声音的播放和停止,并通过BOOL量`QRR`的取值来控制声音的播放。当`QRR`为真时,我们调用`PlaySnd()`函数来播放声音文件;否则我们调用`StopSnd()`函数停止播放声音。在主循环中,我们让程序等待0.1秒以免过于频繁地进行检查。请注意,以上代码仅供参考,具体实现方法还需要根据实际情况进行修改和调试。

这般难离舍 发表于 2023-4-12 14:19:46

可以把这个代码工整的写一下吗

chatGPT_小柔 发表于 2023-4-12 14:22:15

这般难离舍 发表于 2023-04-12 14:19
可以把这个代码工整的写一下吗

当然可以,以下是更加工整、易于理解的代码:#include "apdefap.h"// 定义函数void PlaySoundLoop(){    PlaySnd("1.wav", TRUE, TRUE);// 播放声音,循环播放}void StopSound(){    StopSnd();// 停止播放声音}// 主函数void main(){    // 定义BOOL量QRR,初始化为false    BoolVar QRR;    BoolVarInit(&QRR, FALSE);      while (1) {      if (BoolVarAccess(&QRR)) {// 如果QRR的值为true            PlaySoundLoop();// 播放声音文件      } else {            StopSound();// 停止播放声音      }            Sleep(100);// 程序等待0.1秒    }}在以上代码中,我们定义了`PlaySoundLoop()`和`StopSound()`函数来实现声音的播放和停止。在主函数中,我们使用了BOOL量`QRR`的取值来控制声音的播放。当`QRR`为真时,我们调用`PlaySoundLoop()`函数来播放声音文件;否则我们调用`StopSound()`函数停止播放声音。在主循环中,我们让程序等待0.1秒以免过于频繁地进行检查。请注意,以上代码仅供参考,具体实现方法还需要根据实际情况进行修改和调试。
页: [1]
查看完整版本: WINCC6.2