【精講版】上位機C#/.NET與西門子PLC通訊

常哥說程式設計發表於2020-06-18


【精講版】上位機C#/.NET與西門子PLC通訊

 

618來啦

親們,騰訊課堂101機構打榜了,快來助力《新閣教育》,《免費贈送課程》!

1.手機QQ(微信請也來一遍)掃下方二維碼↓,找到《新閣教育

2.點選“支援”,記得獲得免費課程,還有紅包相送

3.助力成功後可以邀請親朋好友,共同學習。

 

【精講版】上位機C#/.NET與西門子PLC通訊感謝支援

 

【精講版】上位機C#/.NET與西門子PLC通訊

【精講版】上位機C#/.NET與西門子PLC通訊

據某份資料不完全統計,目前中國市場十大國際PLC品牌如下(避免爭議,排名不分先後):

西門子、施耐德、歐姆龍、三菱、羅克韋爾、松下、ABB、倍福、艾默生、GE

再盤點一下中國市場十大國內PLC品牌:

和利時、臺達、匯川、信捷、永巨集、豐煒、南大傲拓、廈門海為、黃石科威、上海正航

當代電氣工程師之所以這麼厲害(Ku Bi),一部分原因大概就是PLC品牌太多了,終其一生,可能都學不完!

以上均為有感而發,不作為今天的主題,今天的主題主要是跟大家介紹一下,如何站在電氣工程師的角度上,實現C#/.NET與西門子PLC之間的通訊。

 

N0.01  準備工作

如果想實現C#/.NET與西門子PLC之間的通訊,首先要對西門子PLC有一定的瞭解,西門子PLC目前市場上主要使用的PLC型號包括:S7-200、S7-200Smart、S7-300、S7-400、S7-1200、S7-1500,西門子PLC的主要儲存區包括V區(在通訊協議裡V區即DB1)、M區、I區、Q區、DB區,其他的C區和T區,由於用得比較少,而且可以通過程式中轉,暫不涉及。

當然,如果我們手頭有PLC實際硬體,當然非常方便,可以直接測試,但是對於如果沒有PLC的同學來說,我們也給大家提前準備好了解決方案:戳↓

基於S7-PLCSIMAdvanced搭建S7通訊模擬環境    搭建好模擬環境後,只需要注意以下幾個地方:     

  一、PLC配置中,必須勾選允許來自遠端物件的PUT/GET通訊訪問。

 

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 1允許Put Get訪問

    二、如果需要訪問DB塊,必須將DB塊屬性中的優化的塊訪問勾選去除。

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 2 DB塊去優化訪問

三、如果是通過PLCSIM-Advanced搭建的模擬環境,必須將整個解決方案的屬性中,保護欄裡的塊編譯時支援模擬勾選上。

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 3塊編譯支援模擬

       四、對於讀取的地址,一定要是PLC中存在的地址:

    以M儲存區為例,一般M區最大位元組是8192個,如果你讀取MD9000,一定是讀不到的。

    以DB儲存區為例,如果你尚未建立DB1,你讀取DB1.DBD0,一定也是讀不到的。

    以DB儲存區為例,如果你DB1只有200個位元組範圍,你讀取DB1.DBD200,也是讀不到的。

    只要遵從以上四個原則,西門子PLC通訊基本上就不存在硬體或者配置上的問題了。

 

N0.02  PLC基礎通訊

本節中提到的基礎通訊,主要是指標對PLC的地址進行單個或者多個連續的進行讀取及寫入,下面直接利用剛剛搭建好的模擬環境來做測試,當然,使用實際PLC也是完全沒問題的。前提先將博途中的DB1.DBD0、DB1.DBD4、DB1.DBD8、DB1.DBD12分別改成1.2、3.4、5.6、7.8,並將DB.DBS344開始的100個位元組字串改成“今晚有上位機免費公開課”,用於測試讀取:

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 4 DB1變數數值

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 5 DB1字串資料

第一步:單個變數的讀取

通過C#呼叫通訊庫xktComm.dll(Nuget搜尋xktComm下載安裝),實現對PLC單個變數的讀取,結果如下圖所示:

說明:西門子PLC通訊只需要IP地址和CPU型別即可,不需要埠號,因為S7協議的埠號是固定值102,之所以要選擇CPU型別,是因為不同型號的CPU,握手報文是不一樣的,對於西門子PLC的報文抓取及剖析,之前也寫過一篇專門的文章進行了說明:戳↓

西門子S7通訊協議底層原理及抓包分析

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 6 PLC單個讀取

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 7 PLC單個字串讀取

第二步:單個變數的寫入

對於單個變數的寫入,也非常方便,直接輸入地址、型別及寫入值即可,下面分別將這4個地址寫入1.0、2.0、3.0、4.0,結果如下圖所示:

 

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 8 PLC單個寫入

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 9 PLC單個字串寫入

第三步:多個變數的讀取

對於多個變數的讀取,需要填寫讀取長度,下面通過將讀取長度改成4,一次性將DB1.DB0-DB1.DBD12讀取出來,結果如下圖所示:

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 10 PLC多個讀取

第四步:多個變數的寫入

對於多個變數的寫入,則不需要填寫讀取長度,直接在寫入數值中,用空格分隔,寫入相應的數值,下面以將DB1.DBD0-DB1.DBD12改成1.2、3.4、5.6、7.8為例,將寫入數值改成1.2  3.4  5.6  7.8,結果如下圖所示:

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 11 PLC多個寫入

 

N0.03  PLC高階通訊

如果PLC基礎通訊就能滿足大家的專案需求的話,那麼PLC高階通訊一定可以讓大家喜出望外。

PLC高階通訊主要應用場合是對於多個不連續的儲存區或者多個不連續的變數進行一次性讀取和寫入,這一點,似乎只有西門子S7協議支援,其他品牌PLC均不支援。第一步:多個不連續變數讀取

在下圖中,連線上PLC後,通過輸入變數地址及變數型別,然後點選新增至讀取區,會將想要讀取的變數載入到右邊的讀取區中,讀取區以JSON形式進行顯示,右側顯示耗時時間,新增完成後,通過點選讀取資料,會將想要讀取的資料展示在日誌框中,這些變數是可以不連續的變數。

下面以讀取MD10、MD100、MD200、DB1.DBD0、DB1.DBD8為例,進行測試,測試結果如下圖所示:

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 12 PLC多變數同時讀取

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 13 PLC監控表

第二步:寫入個不連續變數讀取

在上一步讀取的基礎上,分別將MD10、MD100、MD200、DB1.DBD0、DB1.DBD8寫入1.0、2.0、3.0、4.0、5.0,仍然採用同樣的方式,填寫變數地址、變數型別及寫入值,點選新增至寫入區,最後點選寫入資料,判斷是否可以將這些資料同時寫入,測試結果如下圖所示:

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 14 PLC多變數同時寫入

【精講版】上位機C#/.NET與西門子PLC通訊

圖表 15 PLC多變數寫入結果對比

通過反饋結果及PLC資料對比,實測證明可以一次將多個變數同時寫入PLC,並且通過判斷耗時僅11ms,說明報文是一次性寫入的。總而言之,PLC高階通訊的合理應用會大大提高上位機的通訊效率。

N0.04  整體總結

本文主要針對C#與西門子PLC通訊做了較為詳細的描述,相信對於很多電氣工程師,尤其是以西門子PLC為主的電氣工程師來說,會有很大幫助。近幾年隨著人工智慧、物聯網的流程,工控行業發生了很大的變化,每一位電氣工程師都應該及時作出調整,至少學習一門高階程式語言,未雨綢繆,以更好的姿態來應對即將到來的智慧製造2025。

 

 

 

 

今日直播課

課程內容:基於GDI+開發工業LED指示燈控制元件

課程時間:今天14:30

主講人:付老師

長按掃碼進入直播↓

【精講版】上位機C#/.NET與西門子PLC通訊



● WinForm通用自動更新AutoUpdater專案實戰

● 上位機開發之西門子PLC-S7通訊實踐 

● 基於GDI+技術開發工業儀表盤控制元件

● 上位機C#通過OPCUA和西門子PLC通訊

● 基於S7-PLCSIM Advanced搭建S7通訊模擬環境

● 基於C#實現本地資料上傳至雲伺服器

● OPCUA+MQTT構建物聯網通用框架

● 上位機開發之三菱Q系列PLC通訊實踐

● 深度剖析西門子PLC的開放式TCP通訊

● 上位機開發之微控制器通訊實踐

 

相關文章