C#聯合WINCC之資料通訊
【公眾號dotNet工控上位機:thinger_swj】
在工控領域中,WINCC仍然佔有很大的市場份額。很多時候我們說學習C#開發上位機可以取代傳統的組態軟體,兩者就像冤家一樣,然而,即使是冤家,也會有聯合的時候。當我們的專案已經採用WINCC落地之後,已經學會C#的我們,還能做哪些事情呢?今天跟大家分享一下如何使用C#,與WINCC聯合實現資料通訊。
1. 環境搭建
眾所周知,WINCC作為西門子家族的一款組態軟體,主要是用來和PLC(主要是西門子PLC)通訊,因此我們選擇的硬體就是一款西門子S7-1200 PLC。軟體方面,使用的是WINCC V7.4(其他版本待測試),以及宇宙第一IDE——VS 2019。
這裡有個問題提醒一下,當我安裝好WINCC V7.4,通過新增驅動和S7-1200 PLC通訊時,怎麼都連線不上,最後發現應該是WINCC的S7-1200 PLC的驅動有點BUG,缺少一些元件,通過安裝TIA博圖之後,最終解決。
如果想通過C#聯合WINCC訪問到PLC裡的變數,前提是WINCC專案已經開發好,並且處於執行狀態,操作步驟如下:
首先建立一個S7連線,並建立4個變數分別為data1、data2、data3、data4,地址對應DB100.DBD0、DB100.DBD4、DB100.DBD8、DB100.DBD12。
接著建立一個畫面,拖入4個顯示控制元件,分別繫結這4個變數,通過博圖將4個變數的值分別設定為50.5、60.5、70.5、80.5,
然後執行WINCC畫面。
接下來我們要做的是通過編寫一個簡單的Winform程式來讀取WINCC中這4個變數的值並顯示,這裡有兩種方式可以實現這樣的效果,一種是通過直接訪問WINCC變數進行讀取,另一種是通過訪問WINCC畫面中的控制元件。
2. 訪問WINCC變數
1、首先建立一個新的Windows窗體應用,再從WINCC安裝目錄中找到兩個dll,分別是CCHMIRuntime.dll和CCHMITags.dll,位置預設處於C:\Program Files (x86)\Common Files\Siemens\Bin,將這兩個dll複製到debug根目錄下並手動新增引用。
2、Windows窗體介面設計如下圖所示:
3、編寫讀取程式碼
4、編寫寫入程式碼
5、讀取結果:
6、寫入結果
3. 訪問WINCC控制元件
1、重新新建一個窗體,窗體內容和佈局與之前一致:
2、讀取程式碼
3、寫入程式碼
4、讀取結果
5、寫入結果
這裡值得注意的是,通過訪問控制元件實現的寫入並沒有真正寫入PLC,所以這種方式僅限於讀取資料,但可以通過這種方式來設定控制元件的其他屬性,比如樣式、背景、文字等。
本文主要以學習研究為主,針對C#與WINCC之間的資料通訊做了較為詳盡的描述,相信對於很多電氣工程師,尤其是以西門子PLC為主的電氣工程師來說,會有很大幫助。也許這種情形目前用途不那麼廣泛,但是出現這種需求時,就會變得很有用。
我一直堅信因為努力才會有結果,而不是因為看到結果,才想著去努力,而是就像學習C#和上位機一樣,你如果不學習,這些內容對你來說可能就是天方夜譚,但是如果你提前學習了,你會發現其實很簡單。
近幾年隨著人工智慧、物聯網的普及,工控行業發生了很大的變化,每一位電氣工程師都應該及時作出調整,至少學習一門高階程式語言,未雨綢繆,以更好的姿態來應對即將到來的智慧製造2025。