WINCC6.2
在wincc6.2中用C脚本写一个功能:当BOOL量QRR为1时,播放声音文件1.wav 一直循环播放;
当BOOL量QRR为0时,停止播放。
以下是一个实现该功能的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的值,则需要将该变量声明为全局变量。 我的计算机是WINDOWS XP系统,无法识别#include <windows.h>
无法编译SND_FILENAME`、`SND_ASYNC`和`SND_LOOP 这般难离舍 发表于 2023-04-12 13:41
我的计算机是WINDOWS XP系统,无法识别#include &lt;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秒以免过于频繁地进行检查。
请注意,以上代码仅供参考,具体实现方法还需要根据实际情况进行修改和调试。 #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" 这般难离舍 发表于 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的安装目录下搜索相关的头文件和库文件,并将其添加到项目中。
请注意,以上操作需要具备一定的编程经验和技术能力。如果您感到困难,建议寻求专业工程师的帮助。 WINCC6.2中无法输入头文件#include "applib.h"
可以用只调用#include "apdefap.h"里的函数和功能来写一个脚本实现吗 这般难离舍 发表于 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-04-12 14:19
可以把这个代码工整的写一下吗
当然可以,以下是更加工整、易于理解的代码:#include &quot;apdefap.h&quot;// 定义函数void PlaySoundLoop(){ PlaySnd(&quot;1.wav&quot;, TRUE, TRUE);// 播放声音,循环播放}void StopSound(){ StopSnd();// 停止播放声音}// 主函数void main(){ // 定义BOOL量QRR,初始化为false BoolVar QRR; BoolVarInit(&amp;QRR, FALSE); while (1) { if (BoolVarAccess(&amp;QRR)) {// 如果QRR的值为true PlaySoundLoop();// 播放声音文件 } else { StopSound();// 停止播放声音 } Sleep(100);// 程序等待0.1秒 }}在以上代码中,我们定义了`PlaySoundLoop()`和`StopSound()`函数来实现声音的播放和停止。在主函数中,我们使用了BOOL量`QRR`的取值来控制声音的播放。当`QRR`为真时,我们调用`PlaySoundLoop()`函数来播放声音文件;否则我们调用`StopSound()`函数停止播放声音。在主循环中,我们让程序等待0.1秒以免过于频繁地进行检查。请注意,以上代码仅供参考,具体实现方法还需要根据实际情况进行修改和调试。
页:
[1]