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


 

618來啦編程

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

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

2.點擊「支持」,記得得到免費課程,還有紅包相送框架

3.助力成功後能夠邀請親朋好友,共同窗習。編程語言

 

感謝支持學習

 

據某份數據不徹底統計,目前中國市場十大國際PLC品牌以下(避免爭議,排名不分前後):測試

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

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

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

當代電氣工程師之因此這麼厲害(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通訊仿真環境    搭建好仿真環境後,只須要注意如下幾個地方:     

  1、PLC配置中,必須勾選容許來自遠程對象的PUT/GET通訊訪問。

 

圖表 1容許Put Get訪問

    2、若是須要訪問DB塊,必須將DB塊屬性中的優化的塊訪問勾選去除。

圖表 2 DB塊去優化訪問

3、若是是經過PLCSIM-Advanced搭建的仿真環境,必須將整個解決方案的屬性中,保護欄裏的塊編譯時支持仿真勾選上。

圖表 3塊編譯支持仿真

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

    以M存儲區爲例,通常M區最大字節是8192個,若是你讀取MD9000,必定是讀不到的。

    以DB存儲區爲例,若是你還沒有建立DB1,你讀取DB1.DBD0,必定也是讀不到的。

    以DB存儲區爲例,若是你DB1只有200個字節範圍,你讀取DB1.DBD200,也是讀不到的。

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

 

N0.02  PLC基礎通訊

本節中提到的基礎通訊,主要是指針對PLC的地址進行單個或者多個連續的進行讀取及寫入,下面直接利用剛剛搭建好的仿真環境來作測試,固然,使用實際PLC也是徹底沒問題的。前提先將博途中的DB1.DBD0、DB1.DBD四、DB1.DBD八、DB1.DBD12分別改爲1.二、3.四、5.六、7.8,並將DB.DBS344開始的100個字節字符串改爲「今晚有上位機免費公開課」,用於測試讀取:

圖表 4 DB1變量數值

圖表 5 DB1字符串數據

第一步:單個變量的讀取

經過C#調用通訊庫xktComm.dll(Nuget搜索xktComm下載安裝),實現對PLC單個變量的讀取,結果以下圖所示:

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

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

圖表 6 PLC單個讀取

圖表 7 PLC單個字符串讀取

第二步:單個變量的寫入

對於單個變量的寫入,也很是方便,直接輸入地址、類型及寫入值便可,下面分別將這4個地址寫入1.0、2.0、3.0、4.0,結果以下圖所示:

 

圖表 8 PLC單個寫入

圖表 9 PLC單個字符串寫入

第三步:多個變量的讀取

對於多個變量的讀取,須要填寫讀取長度,下面經過將讀取長度改爲4,一次性將DB1.DB0-DB1.DBD12讀取出來,結果以下圖所示:

圖表 10 PLC多個讀取

第四步:多個變量的寫入

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

圖表 11 PLC多個寫入

 

N0.03  PLC高級通訊

若是PLC基礎通訊就能知足你們的項目需求的話,那麼PLC高級通訊必定可讓你們喜出望外。

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

在下圖中,鏈接上PLC後,經過輸入變量地址及變量類型,而後點擊添加至讀取區,會將想要讀取的變量加載到右邊的讀取區中,讀取區以JSON形式進行顯示,右側顯示耗時時間,添加完成後,經過點擊讀取數據,會將想要讀取的數據展現在日誌框中,這些變量是能夠不連續的變量。

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

圖表 12 PLC多變量同時讀取

圖表 13 PLC監控表

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

在上一步讀取的基礎上,分別將MD十、MD100、MD200、DB1.DBD0、DB1.DBD8寫入1.0、2.0、3.0、4.0、5.0,仍然採用一樣的方式,填寫變量地址、變量類型及寫入值,點擊添加至寫入區,最後點擊寫入數據,判斷是否能夠將這些數據同時寫入,測試結果以下圖所示:

圖表 14 PLC多變量同時寫入

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

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

N0.04  總體總結

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

 

 

 

 

今日直播課

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

課程時間:今天14:30

主講人:付老師

長按掃碼進入直播↓



● WinForm通用自動更新AutoUpdater項目實戰

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

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

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

● 基於S7-PLCSIM Advanced搭建S7通訊仿真環境

● 基於C#實現本地數據上傳至雲服務器

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

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

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

● 上位機開發之單片機通訊實踐

相關文章
相關標籤/搜索