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。