PLC在工業自動化領域是常用的控制器,一般在和上位機界面通訊時,經常使用組態軟件。以西門子PLC為例,上位機可以使用西門子的WINCC。但是,當面對需求比較多樣化的需求時,WINCC難以勝任。而且,作為量產的標準化產品,WINCC授權的費用一筆不小的成本。S7.Net .dll 是應用在 .NET平臺上和西門子PLC通訊的一個動態庫。大家可以到GitHub中直接去下載,或者直接搜索“S7.Net .dll”也可以找到下載的鏈接。文章Zui后也會給出鏈接。
目前該動態庫支持的西門子PLC類型有S7-200,S7-300,S7-400,S7-1200,S7-1500,基本涵蓋了西門子所有的PLC產品。該庫可以直接讀寫PLC中的全局DB塊,作為通訊的接口。下面對需要的一些函數以及數據類型做簡單說明。
構造函數:cpu 為枚舉類型,代表PLC類型。ip 為PLC地址,需要和PLC組態的地址一致,同時,和通訊的PC IP地址應在同一局域網段。rack 為導軌號,slot 為插槽號,均可在TIA PLC 硬件組態處獲得。
如下圖,ip=“192.168.0.5”。
如下圖,rack為0,slot為1。
獲取是否連接成功:
連接PLC:
該類庫提供了兩個用于PLC連接的函數,區別在于第二個為異步連接,在請求連接的過程中,不會導致線程阻塞。我個人比較喜歡第二種方式。
按位寫操作:參數db代表訪問的DB塊編號,如下圖所示UISendInt編號為3,UIReadInt編號為4。
startByteAdr是在數據塊內以字節為單位的起始地址,可以傳入0。bitAdr 為需要操作的位的偏移地址(以startByteAdr為基準),value 為寫入的值。
dataType為枚舉類型,我們操作的是數據塊,傳入DataBlock。
按字節讀:count代表讀的字節數量。在進行按字節讀寫時,對于8位的單字節變量來說沒有任何問題。但是對于多字節比如在PLC中16位I的INT類型,需要注意大小端問題。在西門子PLC中以大端模式存儲數據,但是在Intel的X86架構的PC上,確是以小端模式。所以,在從PLC讀取一個INT類型的變量,需要將讀取回來的字節數組高低字節調換,后面C#程序中會有詳細的實現代碼。
按字節寫:value代表將要傳輸的數據轉換成的字節數組,如果要操作一個INT變量,需要提前將高低字節調換,后面C#程序中會有詳細的實現代碼。
PLC設置
實現外部程序可以訪問操作DB塊,需要對PLC部分做一些設置。首先對于要讀取或者訪問的DB塊,要將優化的塊訪問取消,默認為勾選的,選中塊右擊選擇屬性。
同時還要在硬件組態中,設置防護與安全中的連接機制。將“允許來自遠程對象的PUT/GET訪問”勾選。如下圖:
C#程序
在C#上位機軟件中,對通訊類庫的函數做一個簡單的包裝,以方便我們使用。首先新建一個類S7,在項目中需要引用S7.NET,并在該類中包含命名空間。
定義一個Plc類型變量plc,并定義該類的構造函數和析構函數:
定義連接函數以及關閉函數:
定義讀寫函數:之所以加lock,是因為在應用中數據通訊很有可能在不同的線程去操作,比如單獨開一個線程定時從PLC更新數據。
定義字節和Int16類型之間的轉換函數(需要進行高低字節轉換):
- 變頻器與PLC通訊的幾種連接方式 2024-12-04
- 【教程】西門子S7-1200 PLC通信大全 2024-12-04
- 學PLC?你會這16個PLC入門基礎知識 2024-12-04
- 西門子PLC的幾種通信方式介紹 2024-12-04
- 教你PLC MODBUS通訊協議的應用及編程 2024-12-04
- RS485與Modbus通信協議匯總,你想要的都在這里! 2024-12-04
- 各類電氣控制接線圖,非常全面!(三) 2024-12-04
- 各類電氣控制接線圖,非常全面!(二) 2024-12-04
- 各類電氣控制接線圖,非常全面!(一) 2024-12-04
- 三菱PLC的通訊與編程,附實際案例 2024-12-04
- 零基礎學習西門子PLC,高手路過就好了 2024-12-04
- 【實例】如何用串口軟件調試變頻器? 2024-12-04
- 三菱PLC與西門子PLC有什么區別? 2024-12-04
- 詳解西門子PLC與觸摸屏的RS485通信! 2024-12-04
- 項目總結,30個PLC編程實例 2024-12-04
聯系方式
- 電 話:13922889745
- 經理:向小姐
- 手 機:18475208684
- 微 信:18475208684