最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

手把手教你基于C#開發(fā)WinCC語音報(bào)警插件「附源代碼」

2020-07-23 16:25 作者:新閣教育  | 我要投稿


寫在前面

眾所周知,WinCC本身是可以利用C腳本或者VBS腳本來做語音報(bào)警,但是這種方式的本質(zhì)是調(diào)用已存在的音頻文件,想要實(shí)現(xiàn)實(shí)時(shí)播報(bào)報(bào)警信息是不行的,靈活性還不夠,本文主要介紹基于C#/.NET開發(fā)報(bào)警插件,集成到WinCC中,實(shí)現(xiàn)更加靈活的語音報(bào)警功能。

公眾號(hào)dotNet工控上位機(jī):thinger_swj】

對(duì)于WinCC,我相信很多人都比較熟悉,WinCC自帶報(bào)警控件,可以實(shí)現(xiàn)報(bào)警的監(jiān)測(cè)及顯示。在之前做的一個(gè)比較大的項(xiàng)目中,項(xiàng)目已經(jīng)使用WinCC開發(fā)并調(diào)試完畢,但是客戶提出系統(tǒng)有報(bào)警時(shí),需要語音播報(bào)的需求,因?yàn)楫?dāng)時(shí)沒做過這樣的,所以便查找資料,找了很多也無法通過WinCC實(shí)現(xiàn),最后決定通過C#開發(fā)一個(gè)語音播報(bào)控件,集成到WinCC中,經(jīng)過2天的研究測(cè)試(當(dāng)時(shí)剛開始學(xué)習(xí)C#),終于實(shí)現(xiàn)了所有的功能,并且也得到了客戶的認(rèn)可。

現(xiàn)在有時(shí)候想起這個(gè)事,仍然心有余悸,如果當(dāng)初沒有提前學(xué)習(xí)C#,也許這個(gè)項(xiàng)目就沒法完美交差,客戶也會(huì)不滿意,后續(xù)也不會(huì)有更多的業(yè)務(wù)合作,所以我始終堅(jiān)信一句話:凡事預(yù)則立,不預(yù)則廢。轉(zhuǎn)型學(xué)習(xí)上位機(jī)也是一樣,從今天開始,也許明天就會(huì)不一樣。之所以會(huì)提及這個(gè)事情,最近有位學(xué)員一直在研究這個(gè),所以我就稍微做了一下整理,把這個(gè)案例分享給大家。

1 開發(fā)思路

如果想實(shí)現(xiàn)C#開發(fā)語音報(bào)警控件,植入到WinCC中,需要解決以下幾個(gè)技術(shù)要求:WinCC支持.NET控件、C#可以實(shí)現(xiàn)語音播報(bào)功能、報(bào)警邏輯要清晰。

  • 對(duì)于WinCC支持.NET控件, WinCC 從V7.0開始支持.NET自定義控件。

  • 其次,C#可以實(shí)現(xiàn)語音播報(bào)功能,可以通過調(diào)用系統(tǒng)自帶的語音類庫(kù)文件,實(shí)現(xiàn)語音播報(bào)。

  • 而對(duì)于報(bào)警邏輯,主要是對(duì)沿信號(hào)的檢測(cè),包括上升沿及下降沿。

2 開發(fā)流程

  • 首先通過 VS2019 創(chuàng)建一個(gè)Windows窗體應(yīng)用,這里的窗體主要是用于測(cè)試,然后在此基礎(chǔ)上,創(chuàng)建一個(gè)類庫(kù)項(xiàng)目:

  • 在類庫(kù)的基礎(chǔ)上,右擊添加新建項(xiàng),項(xiàng)目類型選擇自定義控件,取名為AlarmVoiceBroadcast:


  • 經(jīng)過前期的分析,這個(gè)語音報(bào)警控件應(yīng)該包含以下內(nèi)容:報(bào)警助手啟用禁用、語音播報(bào)啟用禁用、報(bào)警檢測(cè)上升沿下降沿選擇、報(bào)警播報(bào)方式單次或循環(huán)、系統(tǒng)實(shí)時(shí)報(bào)警顯示、系統(tǒng)報(bào)警日志顯示。因此,語音報(bào)警助手界面設(shè)計(jì)如下圖所示:

  • 開發(fā)過程中,以下幾個(gè)問題需要思考:

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

(2)對(duì)于檢測(cè)到某個(gè)變量發(fā)生了報(bào)警,語音播報(bào)的內(nèi)容應(yīng)該是什么?我這里針對(duì)每個(gè)報(bào)警創(chuàng)建了一個(gè)報(bào)警說明屬性,因此也相應(yīng)地創(chuàng)建了20個(gè)字符串變量,通過索引與報(bào)警變量一一對(duì)應(yīng)。

(3)由于需要實(shí)時(shí)檢測(cè),因此需要循環(huán)執(zhí)行。C#中循環(huán)執(zhí)行一般有兩種方式,一種是定時(shí)器,一種是多線程,經(jīng)過測(cè)試發(fā)現(xiàn),多線程的形式無法實(shí)現(xiàn),似乎是WinCC不支持,最終采用的是定時(shí)器的方式。

(4)循環(huán)檢測(cè)實(shí)現(xiàn)思路:針對(duì)上升沿:循環(huán)針對(duì)每個(gè)報(bào)警變量,將當(dāng)前值與緩存值做對(duì)比,如果當(dāng)前值為True,緩存值為False,則表示報(bào)警觸發(fā),如果當(dāng)前值為False,緩存值為True,則表示報(bào)警消除。針對(duì)下降沿:循環(huán)針對(duì)每個(gè)報(bào)警變量,將當(dāng)前值與緩存值做對(duì)比,如果當(dāng)前值為False,緩存值為True,則表示報(bào)警觸發(fā),如果當(dāng)前值為True,緩存值為False,則表示報(bào)警消除。

  • 語音相關(guān)控制,語音控制包括播報(bào)音量、播報(bào)語速、播報(bào)性別及年齡。

3 控件應(yīng)用

  • 控件開發(fā)完成后,最終生成的是一個(gè)dll動(dòng)態(tài)鏈接庫(kù)文件,將該dll復(fù)制到WinCC項(xiàng)目中,通過控件欄中的.NET控件右擊添加這個(gè)dll。

  • 將該控件拖放到WinCC界面中,并創(chuàng)建一些用于測(cè)試的按鈕功能,效果如下圖所示:


  • 創(chuàng)建一些內(nèi)部變量,包括3個(gè)布爾變量(Alarm1、Alarm2、Alarm3)以及3個(gè)模擬量變量(Pressure1、Pressure2、Pressure3)。

  • 控件屬性綁定,對(duì)于Toogle按鈕及輸入輸出域,直接綁定對(duì)應(yīng)的變量即可,對(duì)于語音報(bào)警控件,需要設(shè)置Alarm1-Alarm6,其中Alarm1-Alarm3直接綁定內(nèi)部變量Alarm1-Alarm3,對(duì)于Alarm4-Alarm6,由于是模擬量,需要通過動(dòng)態(tài)對(duì)話框進(jìn)行設(shè)置,如下圖所示:


  • 對(duì)于報(bào)警播報(bào)的內(nèi)容提示,根據(jù)實(shí)際情況填寫即可:

如果需要控件源碼,可以掃描下方二維碼,添加下方助教小姐姐微信,并注明來自B站:



手把手教你基于C#開發(fā)WinCC語音報(bào)警插件「附源代碼」的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
资中县| 剑川县| 石棉县| 赞皇县| 新兴县| 伽师县| 崇阳县| 宜黄县| 鄂伦春自治旗| 大田县| 沙田区| 西安市| 朝阳县| 同仁县| 陵水| 舒兰市| 五家渠市| 新郑市| 泾川县| 肃宁县| 伊吾县| 通山县| 手游| 屏南县| 龙川县| 株洲县| 和静县| 芒康县| 龙江县| 太湖县| 社旗县| 柳河县| 海伦市| 五华县| 吴堡县| 巴楚县| 秭归县| 烟台市| 安吉县| 阿合奇县| 邯郸市|