wincc 语音报警功能实现

Wincc项目
在始终显示的报警控件上,利用列表更新事件获取报警文本,然后利用微软文字转语音功能,自动获取文字利用音响进行报警提示,解决了中控室现场不方便连接报警指示灯的问题。
可设定报警模式 alarmsoundmode 1=一直报警 0=不报警 2=仅一次。

1, 在全局画面放置alarmcontrol控件

报警画面必须保持显示状态,

2, 添加变量

Alarmstring 报警字符
Alarmtimer 报警间隔
alarmsoundmode 1=一直报警 0=不报警 2=仅一次。

3, 设置控件属性为降序排序,使最新的报警优先显示出来

4, 设置alarmcontrol的事件 获取报警内容 可以根据需要填充报警字符串,此处只语音提示第一行的报警

Sub OnMessageListChanged(Byval Item,  Byval lMessageCount,  Byref strDetails)                          
Dim  count  ,str,i,str1  
count=item.GetRowCollection.Count 
HMIRuntime.Trace " count="&count&vbCrLf
    HMIRuntime.Tags("alarmtimer").Write 0 ,1
    timer1=HMIRuntime.Tags("alarmtimer").Read(1)
    HMIRuntime.Trace " trigeralarmtimer="&timer1&vbCrLf 
If count>0  Then 
 For i = 1 To count
str=    item.GetRow(i).CellText(7),'需要根据实际的设定进行修改
    HMIRuntime.Trace " row= "&i&"  "&str&vbCrLf 
    If i=1 Then
    str1="共"&count&"项报警 "&str       
    End  If 
Next

HMIRuntime.Tags("alarmstring").Write str1
  
End If


End Sub

5, 添加模式按钮 可以更改模式

image.png
Sub OnClick(Byval Item)            

Dim mode

'alarmsoundmode 1=一直报警 0=不报警 2=仅一次。
mode=HMIRuntime.Tags("alarmsoundmode").Read
mode=mode+1

If mode=3 Then 
mode=0
End If

HMIRuntime.Tags("alarmsoundmode").Write mode

 

End Sub

6, 利用 模式按钮的文字事件一秒更新一次将报警内容转成语音

Function Text_Trigger(Byval Item)
Dim mode  ,time1 ,timer1
Dim speaker, alarmText,remainder
'alarmsoundmode 1=一直报警 0=不报警 2=仅一次。
mode=HMIRuntime.Tags("alarmsoundmode").Read
    timer1=HMIRuntime.Tags("alarmtimer").Read(1)


remainder= Timer Mod 10  '报警间隔可以自行设定
HMIRuntime.Trace " alarmtimer=  "&"  "&timer1&vbCrLf
Select Case mode
    Case 0
        Item.Text= "禁止报警"
        timer1=0
    Case 1
        Item.Text= "一直报警"&vbCrLf&remainder  
        timer1=timer1+1
    Case 2
        Item.Text= "一次报警"&vbCrLf&remainder  
        timer1=timer1+1
    Case Else 
       Item.Text= "错误选择"
       timer1=0
End Select 


    HMIRuntime.Trace " mode=  "&mode&vbCrLf
If ( mode=2 And timer1=1) Or (mode=1 And remainder=1) Then
 
 alarmText=HMIRuntime.Tags("alarmstring").Read
    HMIRuntime.Trace " alarmstringSAPI= "&timer1&"  "&alarmText&vbCrLf
If  alarmText<>"" Then
'使用的发音库可在控制面板->语音识别->文本到语音转换 里面设置
'objVoice.Voice  设置语音库
'objVoice.GetVoices 获取语音库
Set speaker = CreateObject("SAPI.SpVoice")

speaker.rate = 0 '语速 -10~10
speaker.volume = 100 '音量 0-100
 
speaker.Speak alarmText
Set speaker = Nothing

End If

 End If
 
 


HMIRuntime.Tags("alarmtimer").Write timer1,1

 


End Function

版权声明:
作者:dingding
链接:https://www.techfm.club/p/205531.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>