C#開發WinCC語音報警插件


-Begin-

前言

眾所周知,WinCC本身是可以利用C腳本或者VBS腳本來做語音報警,但是這種方式的本質是調用已存在的音頻文件,想要實現實時播報報警信息是不行的,靈活性還不夠,本文主要介紹基於C#開發語音報警插件,集成到WinCC中,實現更加靈活的語音報警功能。

開發思路

如果想實現C#開發語音報警控件,植入到WinCC中,需要解決以下幾個技術要求:WinCC支持.NET控件、C#可以實現語音播報功能、報警邏輯要清晰。

對於WinCC支持.NET控件, WinCC 從V7.0開始支持.NET自定義控件。其次,C#可以實現語音播報功能,可以通過調用系統自帶的語音類庫文件,實現語音播報。而對於報警邏輯,主要是對沿信號的檢測,包括上升沿及下降沿。

開發流程

1、首先通過 VS2019 創建一個Windows窗體應用,這里的窗體主要是用於測試,然后在此基礎上,創建一個類庫項目:

 

 2、在類庫的基礎上,右擊添加新建項,項目類型選擇自定義控件,取名為AlarmVoiceBroadcast:

 

 3、經過分析,這個語音報警控件應該包含以下內容:報警助手啟用禁用、語音播報啟用禁用、報警檢測上升沿下降沿選擇、報警播報方式單次或循環、系統實時報警顯示、系統報警日志顯示。因此,語音報警助手界面設計如下圖所示:

 

 

4、開發過程中,以下幾個問題需要思考:

(1)整個控件的思想,就是通過檢測N個變量的實時狀態(這里都是布爾變量),結合上升沿/下降沿,當發現某個變量報警時,進行語音播報,並將報警狀態顯示到實時報警及報警日志中。經過測試發現,這里如果將報警變量設置為數組或者集合,WinCC均不支持,因此沒法將監測報警變量的數量動態化,只能按照單個布爾類型,我這里是根據實際需求創建了20個布爾變量,如果大家有更好的方法實現動態化,可以反饋給我。

(2)對於檢測到某個變量發生了報警,語音播報的內容應該是什么?我這里針對每個報警創建了一個報警說明屬性,因此也相應地創建了20個字符串變量,通過索引與報警變量一一對應。

(3)由於需要實時檢測,因此需要循環執行。C#中循環執行一般有兩種方式,一種是定時器,一種是多線程,經過測試發現,多線程的形式無法實現,似乎是WinCC不支持,最終采用的是定時器的方式。

(4)循環檢測實現思路:針對上升沿:循環針對每個報警變量,將當前值與緩存值做對比,如果當前值為True,緩存值為False,則表示報警觸發,如果當前值為False,緩存值為True,則表示報警消除。針對下降沿:循環針對每個報警變量,將當前值與緩存值做對比,如果當前值為False,緩存值為True,則表示報警觸發,如果當前值為True,緩存值為False,則表示報警消除。

5、語音相關控制,語音控制包括播報音量、播報語速、播報性別及年齡。

 

 

控件應用

1、控件開發完成后,最終生成的是一個dll動態鏈接庫文件,將該dll復制到WinCC項目中,通過控件欄中的.NET控件右擊添加這個dll。

 

 2、將該控件拖放到WinCC界面中,並創建一些用於測試的按鈕功能,效果如下圖所示:

 

 3、創建一些內部變量,包括3個布爾變量(Alarm1、Alarm2、Alarm3)以及3個模擬量變量(Pressure1、Pressure2、Pressure3)。

 

 4、控件屬性綁定,對於Toogle按鈕及輸入輸出域,直接綁定對應的變量即可,對於語音報警控件,需要設置Alarm1-Alarm6,其中Alarm1-Alarm3直接綁定內部變量Alarm1-Alarm3,對於Alarm4-Alarm6,由於是模擬量,需要通過動態對話框進行設置,如下圖所示:

 

 5、對於報警播報的內容提示,根據實際情況填寫即可:

 

大家可以自行試一下

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM