wincc报警
Windows XP系统,WINCC6.2 使用VBS脚本如何实现报警记录出现报警,调用Windoes中的报警声音文件以下是实现报警记录并调用Windows中的报警声音文件的VBS脚本示例:
\'定义报警信息和报警等级
alarmInfo = \"这是一个报警提示!\"
alarmLevel = 2 \'报警等级为2
\'创建WinCC数据模型对象
Set objWinCC = CreateObject(\"WinCC.Runtime\")
Set objData = objWinCC.Tags(\"AlarmList\")
\'判断是否已存在相同等级和信息的报警记录
bExist = False
For Each objAlarm In objData.Alarms
If objAlarm.Level = alarmLevel And objAlarm.Text = alarmInfo Then
bExist = True
Exit For
End If
Next
\'如果不存在相同记录,则添加新的报警记录
If Not bExist Then
Set objNewAlarm = objData.CreateAlarm(alarmLevel, alarmInfo)
objNewAlarm.Raise()
End If
\'调用Windows中的声音文件(例如警告声)
Set objShell = CreateObject(\"WScript.Shell\")
objShell.Run \"sndrec32 /play /close \"\"C:\\Windows\\Media\\Windows Warning.wav\"\"\", 0, True
说明:
- `objWinCC.Tags(\"AlarmList\")`:获取WinCC中的报警列表。
- `objData.CreateAlarm(alarmLevel, alarmInfo)`:在报警列表中创建一个新的报警记录,其中 `alarmLevel` 表示报警等级,`alarmInfo` 表示报警信息。
- `objNewAlarm.Raise()`:触发新的报警记录,将其显示在WinCC的报警窗口中。
- `objShell.Run \"sndrec32 /play /close \"\"C:\\Windows\\Media\\Windows Warning.wav\"\"\", 0, True`:调用Windows中的声音文件,播放警告声,其中 `\"C:\\Windows\\Media\\Windows Warning.wav\"` 为声音文件的路径。 建立该脚本后,触发报警无反应,还需其他参数设置吗 是的,需要对代码进行一些修改和补充。以下是完整的VBS脚本示例:
\'定义报警信息和报警等级
alarmInfo = \"这是一个报警提示!\"
alarmLevel = 2 \'报警等级为2
\'创建WinCC数据模型对象
Set objWinCC = CreateObject(\"WinCC.Runtime\")
Set objData = objWinCC.Tags(\"AlarmList\")
\'判断是否已存在相同等级和信息的报警记录
bExist = False
For Each objAlarm In objData.Alarms
If objAlarm.Level = alarmLevel And objAlarm.Text = alarmInfo Then
bExist = True
Exit For
End If
Next
\'如果不存在相同记录,则添加新的报警记录
If Not bExist Then
Set objNewAlarm = objData.CreateAlarm(alarmLevel, alarmInfo)
objNewAlarm.Raise()
End If
\'调用Windows中的声音文件(例如警告声)
Set objShell = CreateObject(\"WScript.Shell\")
objShell.Run \"cmd /c start /MIN mplay32 /play /close \" & Chr(34) & \"C:\\Windows\\Media\\Windows XP Critical Stop.wav\" & Chr(34), 0, True
其中需要注意的几点:
1. 对于触发报警无反应的情况,建议先检查代码中的报警等级和数据模型是否与实际设置一致。
2. 在播放声音文件的命令中,建议使用 `start` 命令来执行程序,并带上参数 `/MIN` (表示最小化窗口),以避免因为弹出的声音播放窗口导致操作被阻塞。
3. 如果您的Windows系统中并没有 `mplay32` 命令,可以使用其他的多媒体播放器命令来代替。例如,可以使用 `wmplayer` 命令调用Windows Media Player来播放声音文件。需要注意的是,`wmplayer` 命令的参数与 `mplay32` 有所不同。
希望以上信息能够帮助您解决问题。 无报警等级 有报警优先级;
如何修改 WinCC中使用的是“优先级”(Priority)而非“等级”(Level)。因此,在VBS脚本中应该使用 `Priority` 属性来设置报警优先级,而不是 `Level` 属性。以下是修改后的VBS脚本示例:\\\'定义报警信息和报警优先级alarmInfo = \\\"这是一个报警提示!\\\"alarmPriority = 2 \\\'报警优先级为2\\\'创建WinCC数据模型对象Set objWinCC = CreateObject(\\\"WinCC.Runtime\\\")Set objData = objWinCC.Tags(\\\"AlarmList\\\")\\\'判断是否已存在相同优先级和信息的报警记录bExist = FalseFor Each objAlarm In objData.Alarms If objAlarm.Priority = alarmPriority And objAlarm.Text = alarmInfo Then bExist = True Exit For End IfNext\\\'如果不存在相同记录,则添加新的报警记录If Not bExist Then Set objNewAlarm = objData.CreateAlarm(alarmPriority, alarmInfo) objNewAlarm.Raise()End If\\\'调用Windows中的声音文件(例如警告声)Set objShell = CreateObject(\\\"WScript.Shell\\\")objShell.Run \\\"cmd /c start /MIN mplay32 /play /close \\\" & Chr(34) & \\\"C:\\\\Windows\\\\Media\\\\Windows XP Critical Stop.wav\\\" & Chr(34), 0, True在以上代码中,只需要将 `alarmLevel` 改为 `alarmPriority`,并且在创建报警记录和判断报警记录是否已存在时,都改为使用 `Priority` 属性即可。 不需报警信息 直接是 如果报警等级为0 则触发声音报警 以下是对代码进行修改,实现当报警优先级为0时触发声音报警:\\\\\\\'创建WinCC数据模型对象Set objWinCC = CreateObject(\\\\\\\"WinCC.Runtime\\\\\\\")Set objData = objWinCC.Tags(\\\\\\\"AlarmList\\\\\\\")\\\'获取报警列表中优先级为0的报警记录集合Set objAlarms = objData.AlarmsByPriority(0)If objAlarms.Count > 0 Then \\\'有优先级为0的报警记录 \\\'调用Windows中的声音文件(例如警告声) Set objShell = CreateObject(\\\\\\\"WScript.Shell\\\\\\\") objShell.Run \\\\\\\"cmd /c start /MIN mplay32 /play /close \\\\\\\" & Chr(34) & \\\\\\\"C:\\\\\\\\Windows\\\\\\\\Media\\\\\\\\Windows XP Critical Stop.wav\\\\\\\" & Chr(34), 0, TrueEnd If在以上代码中,通过 `objData.AlarmsByPriority(0)` 获取报警列表中所有优先级为0的报警记录集合。然后判断集合中是否有元素,如果有,则触发声音报警。需要注意的是,在这种情况下并不需要设置报警信息。 可以写的规范些一行一行的吗 当然,以下是修改后的规范化的VBS脚本示例,实现当报警优先级为0时触发声音报警:
Option Explicit
Dim objWinCC, objData, objFilter, objList, objAlarm, objFso, objFile, alarmPriority
Set objWinCC = CreateObject(\"WinCC.Runtime\")
Set objData = objWinCC.Tags(\"AlarmList\")
Set objFilter = objData.Filter
objFilter.PriorityFilterFixed = 0
Set objList = objFilter.Execute
Do While Not objList.EOF
Set objAlarm = objList.Alarm
alarmPriority = objAlarm.Priority
If alarmPriority = 0 Then
Set objFso = CreateObject(\"Scripting.FileSystemObject\")
Set objFile = objFso.GetFile(\"C:\\Windows\\Media\\Alarm01.wav\")
objFile.Attributes = objFile.Attributes And Not (1 + 2 + 4 + 16 + 32 + 64 + 128)
Beep
End If
objList.MoveNext
Loop
Set objWinCC = Nothing
Set objData = Nothing
Set objFilter = Nothing
Set objList = Nothing
Set objAlarm = Nothing
Set objFso = Nothing
Set objFile = Nothing
此脚本通过遍历报警列表,检查每个报警的优先级是否为0,如果是,则触发声音报警,否则不做任何处理。请注意,该脚本默认使用 `C:\\Windows\\Media\\` 目录下的 `Alarm01.wav` 文件作为报警提示音,如需更改,请将文件路径和名称替换为自己所需的。
页:
[1]