VBS脚本
WINCC6.2中使用VBS脚本实现以下功能:当bool量“QRR”为1时,以PlaySound形式播放声音文件"c:\\Alarm03.wav";
当bool量“QRR”为0时,停止播放
以下是实现此功能的VBS脚本代码:
Option Explicit
Dim objSW As Object
'初始化
Set objSW = CreateObject("WScript.Shell")
'循环监控QRR状态
Do While True
If ReadBool("QRR") Then
'播放声音文件
objSW.Run "sndrec32 /play /close c:\Alarm03.wav", 0, False
Else
'停止播放
objSW.Run "sndrec32 /embedding /close", 0, False
End If
Loop
'ReadBool函数:读取bool量状态
Function ReadBool(VarName)
Dim objTag
Set objTag = HMIRuntime.Tags(VarName)
ReadBool = False
If Not(objTag Is Nothing) Then
ReadBool = CBool(objTag.Read)
End If
End Function
需要注意的是,在WINCC6.2中,如果直接使用`PlaySound`函数播放声音文件,可能会出现兼容性问题,因此可以使用`sndrec32`命令来实现播放/停止声音文件的功能。 语法检查错误:
语句未结束:在文本行中 2:Dim objSW As Object 这般难离舍 发表于 2023-04-17 16:16
语法检查错误:
语句未结束:在文本行中 2:Dim objSW ...
这个错误通常表示在当前行或之前的行有语法错误。在这种情况下,可以检查代码是否存在以下问题:
1. 语句是否已结束,例如是否缺少分号或结束符。
2. 变量名是否正确拼写和声明。
3. 是否使用了正确的语法结构和关键字。
在这个特定的错误中,可能是因为在代码中的某个位置未正确结束语句。可以检查此处之前的语句是否正确结束,例如是否遗漏了分号或者其他语法符号。同时,也可以注意一下变量名的正确性和声明是否符合语法要求。 Option Explicit
Dim objSW As Object
Set objSW = CreateObject("WScript.Shell")
Do While True
If ReadBool("QRR") Then
objSW.Run "sndrec32 /play /close c:\Alarm03.wav", 0, False
Else
objSW.Run "sndrec32 /embedding /close", 0, False
End If
Loop
Function ReadBool(VarName)
Dim objTag
Set objTag = HMIRuntime.Tags(VarName)
ReadBool = False
If Not(objTag Is Nothing) Then
ReadBool = CBool(objTag.Read)
End If
End Function
语法检查错误:
语句未结束:在文本行中 2:Dim objSW As Object 这般难离舍 发表于 2023-04-17 16:17
Option Explicit
Dim objSW As Object
Set objSW = C ...
这个错误通常表示在当前行或之前的行有语法错误。在这种情况下,可以检查代码是否存在以下问题:
1. 语句是否已结束,例如是否缺少分号或结束符。
2. 变量名是否正确拼写和声明。
3. 是否使用了正确的语法结构和关键字。
在这个特定的错误中,可能是因为在代码中的某个位置未正确结束语句。可以检查此处之前的语句是否正确结束,例如是否遗漏了分号或者其他语法符号。同时,也可以注意一下变量名的正确性和声明是否符合语法要求。 你找不到错误吗 这般难离舍 发表于 2023-04-17 16:18
你找不到错误吗
很抱歉,我犯了一个错误。在VBS脚本中,声明变量应该用 `Dim` 关键字后跟变量名,在 `Set` 语句中设置对象实例。所以正确的代码如下:
Option Explicit
Dim objSW
Set objSW = CreateObject("WScript.Shell")
Do While True
If ReadBool("QRR") Then
objSW.Run "sndrec32 /play /close c:\Alarm03.wav", 0, False
Else
objSW.Run "sndrec32 /embedding /close", 0, False
End If
WScript.Sleep 50 ' 延时50ms避免CPU占用过高
Loop
Function ReadBool(VarName)
Dim objTag
Set objTag = HMIRuntime.Tags(VarName)
ReadBool = False
If Not(objTag Is Nothing) Then
ReadBool = CBool(objTag.Read)
End If
End Function
在这个代码中,我更正了 `Dim objSw As Object` 这行代码,并将其更改为 `Dim objSw`,同时在代码结尾添加了延时以降低CPU占用。如果还有问题,请告诉我。 语法检查错误:
变量未定义:在文本行中 2:‘HMIRuntime’在文本行中 14 这般难离舍 发表于 2023-04-17 16:21
语法检查错误:
变量未定义:在文本行中 2:‘HMIRunt ...
这个错误提示 `HMIRuntime` 变量未定义,通常是因为它没有在脚本中声明或赋值。在WINCC中,需要通过对象 HMIRuntime 来访问标记(tag),该对象在VBScript脚本中默认可用。出现此错误的原因可能有以下几点:
1. 确保正确引用了 WINCC 对象。可以在代码前添加以下语句:
Dim HMIRuntime
Set HMIRuntime = CreateObject("WinCCRuntimeViewHmiDdeServer.WinCCRuntimeViewHmiDdeServer")
2. 确认变量名是否正确拼写和声明。在代码中引用变量时,需要确保变量名与其声明的名称完全匹配。请检查拼写是否正确。
3. 如果变量是由程序其他部分设置或传递的,请确保它已经被正确设置或传递。 您可以尝试在使用它之前对其进行初始化,并确保代码正确执行这些初始化步骤。
请确认以上几点后再重新运行脚本。
页:
[1]