当前位置:文档之家› 西门子PLC的以太网通讯及OPC通讯介绍

西门子PLC的以太网通讯及OPC通讯介绍

西門子PLC的以太網通訊及OPC通訊介紹1.以太網通訊CAL有很多地方用到以太網通訊,L2,焊機與PLC間通訊等,表檢的成像原理為:在金屬板帶表面沒有缺陷時,反射的光在明視場下很強,而在暗視場的散射光很弱;如有缺陷,則明視場的光強減弱,而暗視場的光強增加。

根據這個原理,通過檢測攝像頭裡光強的變化,可檢測出材料表面上的一些物理缺陷。

CAL 僅僅用到了它的檢測破孔這一個功能。

下面再來看西門子的以太網通訊,使用以太網通訊處理器可能的連接方式:我們可以看到不同的通訊方式在PLC裏面需要調用不同的功能塊。

像S7-Connection方式連接的,需要調用SFB12/FB12等來讀取發送數據息,而TCP等連接的,需要FC5等來讀取發送數據。

下面簡單介紹下每種連接特點:Send/receive: iso 連接:ISO傳輸服務通過組態連接提供SEND/REVEICE interface服務在以太網上傳輸數據,此時服務使用的是ISO協議。

此通訊速度較快,可是不能實現網絡路由,只能用於局域網通訊。

Send/receive: iso-On-TCP 連接:突破了局域網的限制,可以路由到公網上去;數據重發功能和基於第2層的CRC校驗保證了數據傳輸的完整性和可靠性。

Send/receive: TCP 連接:TCP/IP提供面向連接的數據通訊,數據並不會被打包因而並沒有數據包確認位,在這TCP服務提供了統一的sccket接口到每一個終端,因而數據塊可以整體發送,這裡區別於iso-On-TCP 連接。

Send/receive: UDP連接:UDP提供簡單數據傳輸,無需確認,與TCP同屬第4層協議。

與TCP相比,UDP屬於無連接的協議,數據報文無需確認。

S7通信:S7協議是西門子S7家族的標準通信協議,使用S7應用接口的通信不依賴特定的總線系統(Ethernet,PROFIBUS,MPI)。

接口位於ISO-OSI參考模型的第7層,下面圖模型各層的通信方式。

那麼根據表檢的通訊協議規定:Transmission mode:TCP protocol (not S7), PLC will always be the client , Gauge will always be the server.Byte order: use PLC Byte Order ( not x86 byte order ).我們建立通訊就需選擇send/receive中的TCP連接。

因此,在PLC中做如下配置:1.打開硬件配置->點擊網絡組態:2. 選擇需要組態網絡的CPU ,右擊選擇插入新連接,選擇TCP Connection ,當前CAL 是出口的PLC 用於和表檢通訊:3. 參數設置,只需在Address 一欄設置,其他選項默認:表檢的端口號根據協議設置,它有三個端口號,因此我們需要配置三條連接和PLC 通訊:1. Coil information (Gauge Port 6201)2. Real-time information (Gauge Port 6202)3. Real-time defect (Gauge Port 6203)建立完連接如下:三路連接區別在與Port 號,其他都是一樣的。

此時網絡配置完成,我們需此處默認值IP 任意,只要不和其他局域網內電腦衝突。

Port 有協議規定要記下每路連接的ID和地址,在建立的連接屬性中可看到:這個是第一路連接的配置:ID:3地址:16進制3FF6其他2路ID分別為4和5,地址都是3FF6對網絡配置完成後,就需要對程序進行編寫,因為西門下PLC本身支持以太網通訊,因此可以直接使用它本身的功能塊。

第一路連接,端口號6201,通訊協議如下:這是PLC發送給表檢的數據,規定了8字節的報頭,20字節的鋼卷號,4字節鋼卷寬度,4字節鋼卷厚度,4字節鋼卷長度。

其中,報頭格式如下:此處我們需要處理counter及length,其他兩個可以不用管。

Counter是發送依次累加1,length是固定值40(因為共發送40個字節)。

在西門子PLC中,可以直接調用發送數據功能塊:此處就是上面提到的第一路的ID和地址數據起始位數據長度具體定義我們可以按“F1”會彈出幫助信息如下,詳細說明每個引腳如何使用:幫助信息中功能塊的引腳定義及使用說明上面我們知道第一路連接需要發送40個字節,我們是把它放在DB380這個數據塊中,因此DB380中需要定義如下:DB380裏面內容完全根據表檢協議來定義,此處不一一例舉。

接下來只需要把數據傳送到DB380就可以了。

數據長度:DB380.DBW6每發送依次加1:DB380.DBW4 鋼卷的信息的傳送現在是在9#BR標誌未處發出下一卷的鋼卷信息:鋼卷寬度:DB380.DBD28鋼卷厚度:DB380.DBD32字符串的複製功能塊:把從DB1255的DBB240開始的20個字節複製到DB380的DBB8開始的20個字節。

由於CAL之前的程序鋼卷號是定義的字符串string,現在定義的是字符char,本來應該是DB1255.DBX238.0 BYTE 22,但是string類型前面2個字節不是真正的數據,因此需從DB1255.DBX240.0開始接下來第二路連接,端口號6202,協議定義數據格式如下:報頭同上,此處需發送焊縫過焊縫檢測後的長度,CAL離表檢最近的焊縫偵測器是4#,因此在4#處把長度清零,然後一直累加發送:累加長度是根據9號張力輥編碼器計算得來,程序如下:過4#焊縫偵測器清零過4#偵測器累加長度計算同樣的,只需調用西門子PLC自帶的發送功能塊就可以,此處不列舉,區別只在於引腳“send”是從DB380.DBX100.0開始,引腳“length”是16。

最後,是PLC接收表檢發過來的數據,也就是第三路連接,端口號6203,數據協議定義如下:此處之前由於PLTCM是有9中缺陷,表檢共發送給PLC 414個字節,連退這邊僅僅只需要破孔信號,詢問了下廠商,我們只需對Defect Count或者Defect Name Code做處理,name code=2就代表破孔,count來一個缺陷信號累加1次,這一塊由於破孔信息還沒有完全收集,很多其他缺陷都會報出來,最多同時會有9處,等圖像收集完成後,我們只要判斷count數值,每累加1次就說明有一個破孔。

接收數據也就用的西門子的功能塊,同發送數據功能塊一樣,引腳定義按F1就可以看到詳細信息,此處不列舉。

接收到的破孔信號做如下處理:最後當觸發報警時,在Wincc上調用生成的wav語音文件就可以,在此也不做介紹了。

2.OPC通訊OPC全稱是Object Linking and Embedding(OLE)for Process Control,它的出現為基於Windows的應用程式和現場程序控制應用建立了橋樑。

在過去,為了存取現場設備的資料資訊,每一個應用軟體發展商都需要編寫專用的介面函數。

由於現場設備的種類繁多,且產品的不斷升級,往往給用戶和軟體發展商帶來了巨大的工作負擔。

通常這樣也不能滿足工作的實際需要,系統集成商和開發商急切需要一種具有高效性、可靠性、開放性、可互通性的隨插即用的設備驅動程式。

在這情況下,OPC標準應運而生。

OPC標準以微軟公司的OLE技術為基礎,它的制定是通過提供一套標準的OLE/COM介面完成的,在OPC技術中使用的是OLE 2技術,OLE標準允許多台微機之間交換文檔、圖形等物件。

下圖是OPC前後對比:如上所說,西門子PLC是支持OPC通訊的,像在CAL其實也用到過,產線速度的採集和IBA焊接機數據的採集都是通過OPC來實現的。

通俗的說當上位機軟件不支援直接訪問西門子plc時,就需要simaticnet了。

simaticnet相當於一個opc,它起連接上位機與下位機的作用。

例如:siemens 公司對自己的plc與wincc的通訊協定一般都可以用mpi等,所以用不到;但當plc與上位機之間沒有通訊協定,連不上時,就要借助opc了。

即simatic在pc 平臺實現與s7,s5plc系統通訊的驅動產品集就是simaticnet。

通訊包括profibus,ie,mpi,冗餘通訊等。

一般情況下,當實現應用中所用產品都是西門子的可以不配simaticnet。

因此,當時想實現IBA在異常時的報警就需和IBA實現通訊,那在電腦上裝了Simatient net軟件後,我們會發現有一個OPC Scout這個軟件,利用它在IBA 電腦上打開會發現IBA也是可以作為OPC服務器的,那麼接下來我們只需編寫OPC的客戶端實現和服務器通信來處理報警信息就可以了。

OPC服務器支持自動化及自定義訪問接口,本例使用自定義接口,在C#中引用的庫為OpcNetApiChs.dll。

界面如下,模擬了一個OPC 服務器(DSXPOPCSimulator軟件),然後用自己編寫的OPC客戶端連接,正常情況下,能讀取到測點值以及質量值,若與服務器連接失敗,則產生報警。

實際只要把服務器選擇為IBA就可以了,測試可用。

由於代碼有點長,此處只列出主函數部分,如下:列出了所有點,選取任意一個讀取數據,當服務器出現問題時,數據會讀取不到,質量代碼會異常,此例以質量代碼來判斷主函數:private void opc_read() //線程---讀取OPC服務器數據{while (true){try{OPCItemState rslt;OPCDATASOURCE dsrc = OPCDATASOURCE.OPC_DS_DEVICE;int rtc = mySyncIOGroup.Read(dsrc, ItemData, out rslt);if (flag == 1){if (HRESULTS.Failed(rtc)){txtItemValue.Text = string.Empty;txtItemQuality.Text = string.Empty;txtTimeStamp.Text = string.Empty;tsslStatus.Text = mySyncIOGroup.GetErrorString(rtc);flag = 0;return;}if (rslt != null){if (HRESULTS.Succeeded(rslt.Error)){txtItemValue.Text = rslt.DataValue.ToString();tsslStatus.Text = string.Empty;}else{txtItemValue.Text = string.Empty;tsslStatus.Text =mySyncIOGroup.GetErrorString(rslt.Error);}txtItemQuality.Text =mySyncIOGroup.GetQualityString(rslt.Quality);DateTime dt = DateTime.FromFileTime(rslt.TimeStamp); //顯示時間txtTimeStamp.Text = dt.ToString(); //顯示當前值/****************IBA不抓取數據使執行******************/if (txtItemQuality.Text.ToString().ToUpper() != "GOOD"){flag = 0; //標誌位置0}}Thread.Sleep(1000);}else if(flag==0) //当標誌位為0時,執行語音報警{player.Play();//調用語音文件Thread.Sleep(2000);}}catch (Exception err) //若IBA進程出錯,也執行語音報警 {player.Play();Thread.Sleep(2000);}}}。

相关主题