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通信時,怎麼都連接不上,最後發現應該是WINCCS7-1200 PLC的驅動有點BUG,缺少一些組件,通過安裝TIA博圖之後,最終解決。

如果想通過C#聯合WINCC訪問到PLC里的變量,前提是WINCC項目已經開發好,並且處於運行狀態,操作步驟如下:

首先創建一個S7連接,並創建4個變量分別為data1data2data3data4,地址對應DB100.DBD0DB100.DBD4DB100.DBD8DB100.DBD12

 

 

接着創建一個畫面,拖入4個顯示控件,分別綁定這4個變量,通過博圖將4個變量的值分別設置為50.560.570.580.5

 

 

然後運行WINCC畫面。

 

 

接下來我們要做的是通過編寫一個簡單的Winform程序來讀取WINCC中這4個變量的值並顯示,這裡有兩種方式可以實現這樣的效果,一種是通過直接訪問WINCC變量進行讀取,另一種是通過訪問WINCC畫面中的控件。

2. 訪問WINCC變量

1、首先創建一個新的Windows窗體應用,再從WINCC安裝目錄中找到兩個dll,分別是CCHMIRuntime.dllCCHMITags.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