• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于.Net平臺的西門子S7_300PLC通訊的實現(xiàn)

    2017-04-23 03:27:16尹大宇
    電子技術與軟件工程 2017年5期
    關鍵詞:西門子字節(jié)以太網(wǎng)

    尹大宇

    摘 要 介紹了PC與西門子S7-300PLC在.Net平臺下用TCP/IP協(xié)議實現(xiàn)通訊的方法。

    【關鍵詞】S7-300 PLC TCP/IP套接字 .Net

    隨著Internet/ Intranet的發(fā)展,以太網(wǎng)已滲透到各個角落,今天的控制系統(tǒng)和工廠自動化系統(tǒng),以太網(wǎng)的應用幾乎已經(jīng)和PLC一樣普及。以太網(wǎng)相對于其他通訊方式(如Profibus/Mpi)有許多優(yōu)勢:

    (1)速度更快。西門子CP 1543-1的通訊帶寬已經(jīng)可達1000Mbps。

    (2)診斷更加方便快捷。簡單的ping操作就可以診斷大部分通訊問題。

    (3)成本低。不再需要使用特殊的適配器來連接到PLC,只需普通的網(wǎng)線。

    因此,本文的研究將基于以太網(wǎng)的TCP/IP協(xié)議進行討論。

    1 .NET平臺簡介

    .NET Framework的核心是其運行庫的執(zhí)行環(huán)境,稱為公共語言運行庫(CLR)或.NET運行庫。在CLR執(zhí)行編寫好的源代碼之前,需要編譯它們(在C#中或其他語言中)。在.NET中,編譯分為兩個階段:

    (1)把源代碼編譯為Microsoft中間語言(IL)。

    (2)CLR把IL編譯為平臺專用的代碼。

    這個兩階段的編譯過程非常重要,因為Microsoft中間語言(托管代碼)是提供.NET的許多優(yōu)點的關鍵。

    Microsoft中間語言與Java字節(jié)代碼共享一種理念:它們都是低級語言,語法很簡單(使用數(shù)字代碼,而不是文本代碼),可以快速地轉換為內(nèi)部機器碼。對于代碼來說,這種精心設計的通用語法有很重要的優(yōu)點:平臺無關性、提高性能和語言的互操作性。因此,基于.NET平臺開發(fā)的應用程序具有更好的移植性,也是跨平臺應用程序開發(fā)的很好選擇。

    2 PLC與PC的TCP/IP通訊協(xié)議

    基于以太網(wǎng)TCP/IP協(xié)議有兩種通訊方式:面向對象的通訊協(xié)議(TCP)和面向無連接的通訊協(xié)議(UDP)。TCP提供的是一種可靠的數(shù)據(jù)流服務,采用“帶重傳的肯定確認”技術來實現(xiàn)傳輸?shù)目煽啃?。為了提高?shù)據(jù)的有效性,本文使用該通訊方式。

    西門子通訊協(xié)議是西門子PLC通訊的基礎,它按照確定的方式來進行定義,然后將定義完成的報文依賴于TCP協(xié)議來進行傳輸。每一條通訊報文都包含著一條指令(例如讀取、寫入)或者明確的回復。協(xié)議的封裝如圖1所示。

    西門子通訊協(xié)議被封裝在S7 PDU中,一條標準的通訊報文由幾個基本的部分組成(本文以讀取DB存儲區(qū)(DB300.DBW29)變量的請求為例進行說明):

    2.1 數(shù)據(jù)頭

    聲明請求目的為讀?。?x32 0x01)。數(shù)據(jù)流(16進制)如表1所示。

    2.2 參數(shù)定義

    聲明請求為讀?。?x04),變量個數(shù)(0x01代表只讀取一個變量),標準頭(0x12 0x0a 0x10),變量的類型(0x02代表Byte),長度(“0x00 0x02”長度為2字節(jié)),對象(0x84代表DB存儲區(qū)),地址(“0x01 0x2c”代表DB300,“0x00 0x00 0xe8”代表地址偏移位29,在這里是DBW29)。數(shù)據(jù)流(16進制)如表2所示。

    3 PC與PLC通訊方法的實現(xiàn)

    3.1 本文的研究內(nèi)容是基于下圖硬件基礎來實現(xiàn)的

    它包括一個CPU317-2DP,一個CP343-1通訊模塊等,已組態(tài)CP343-1的IP地址為172.20.100.10,硬件組態(tài)如圖2所示。用于編程實現(xiàn)通訊的PC機為帶以太網(wǎng)口的普通筆記本電腦,IP地址為172.20.100.222,測試讀取的變量為DB300.DBW29。

    3.2 通訊的主要過程

    整個通訊程序在Visual Studio 2015開發(fā)平臺下用C#語言實現(xiàn),通訊的主要過程包括如下幾個步驟。

    (1)建立一個套接字連接到PLC。注意程序必須包含System.Net.Sockets名稱空間。部分代碼如下:

    int result;/*定義返回值*/bool temp = false; //定義狀態(tài)變量

    Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//創(chuàng)建一個套接字

    (2)連接套接字:

    if (sock.Connected==true)//連接前判斷是否為重復連接

    {result = 1;//是則返回值1,已經(jīng)建立連接 }else{try

    {sock.Connect(host, port);//連接套接字

    //這里host為CP的IP地址“172.20.100.10”,port為整數(shù)102(默認)

    temp = true;/*代表已經(jīng)連接上*/result = 1;}

    catch (SocketException e)//連接錯誤則輸出報警信息{errorStr = e.Message + " . Error code:" + e.ErrorCode;result = 0;temp = false;}

    (3)與PLC建立握手連接:

    if (temp == true)//如果套接字連接正常,則進行握手連接

    {try{isSize8 = FControlPDUDC.IniTSAP(rack, slot, ConnectionType);

    IniPDU();/*連接請求PDU初始化*/ byte[] byteRecv = new byte[240];

    byte[] PDUmsg = StructToBytes(FControlPDUDC);

    /*初始化完成后,PDUmsg[]字節(jié)數(shù)組為:

    [0x03 0x00 0x00 0x16 0x11 0xe0 0x00 0x00 0x00 0x01 0x00 0xc0 0x01 0x0a 0xc1 0x02 0x01 0x00 0xc2 0x02 0x01 0x02]*/

    int bytesSent = sock.Send(PDUmsg);int bytesRec = sock.Receive(byteRecv);byte[] byteRecv = new byte[240];

    ……//初始化NegMsg

    /*初始化完成后用于再次握手的NegMsg[]字節(jié)數(shù)組為:

    [0x03 0x00 0x000x190x02 0xf0 0x80 0x32 0x01 0x00 0x00 0x03 0x00 0x00 0x08 0x00 0x00 0xF0 0x00 0x00 0x01 0x00 0x01 0x01 0xe0]*/

    int NegSent = sock.Send(NegMsg);int NegbytesRec = sock.Receive(NegbyteRecv);result = 1;}catch (SocketException e)

    {result = 0;errorStr = e.Message + ". Error code:" + e.ErrorCode;}}

    (4)讀取DB存儲區(qū)變量測試:

    int result = 0;if (sock.Connected==true)

    {…… /準備讀取變量PDU,初始化 PDUSend

    /*初始化完成后,PDUSend[]字節(jié)數(shù)組為:

    [0x03 0x00 0x00 0x1f 0x02 0xf0 0x80 0x32 0x01 0x00 0x00 0x04 0x00 0x00 0xe0 0x00 0x00 0x04 0x01 0x12 0x0a 0x10 0x02 0x00 0x0a 0x01 0x2c 0x84 0x00 0x00 0xe8]*/

    try{int i = sock.Send(PDUSend);sock.Receive(DataRecv);

    receiveBuffer = new byte[totalNum];

    ……/*處理PLC返回的字節(jié)*/

    result = 1;}catch (SocketException e)//異常處理

    {errorStr = e.Message + ". Error code:" + e.ErrorCode;result = 0;}}

    else{result = 0;}return result;

    4 結論

    隨著微軟宣布將全部.NET服務器端框架開源,將.NET運行平臺擴展至Linux和Mac OS,讓開發(fā)者能夠使用.NET在Windows、Mac和Linux三大平臺上開發(fā)應用。基于.NET平臺的開發(fā)的通訊程序幾乎不需要修改任何代碼就可以很好的移植到任何支持.NET的平臺之上。因此,本文的研究對于跨平臺西門子S7_300PLC通訊的開發(fā)也具有指導意義。

    參考文獻

    [1]Nagel C,Evjen B,Glynn J,et al. Professional C# 4.0 and.NET 4[J]. Wiley John + Sons,2010.

    [2]賈濤.西門子S7-200以太網(wǎng)通訊協(xié)議研究[J].電子技術與軟件工程,2014(24):30-32.

    猜你喜歡
    西門子字節(jié)以太網(wǎng)
    No.8 字節(jié)跳動將推出獨立出口電商APP
    基于1500以太網(wǎng)養(yǎng)豬場的智能飼喂控制系統(tǒng)的設計與實現(xiàn)
    No.10 “字節(jié)跳動手機”要來了?
    西門子重型燃機出海
    能源(2017年7期)2018-01-19 05:05:05
    簡談MC7字節(jié)碼
    談實時以太網(wǎng)EtherCAT技術在變電站自動化中的應用
    電子制作(2017年24期)2017-02-02 07:14:44
    一種90W高功率以太網(wǎng)供電系統(tǒng)的設計
    電源技術(2015年7期)2015-08-22 08:48:48
    西門子亮相CIIF201
    淺談EPON與工業(yè)以太網(wǎng)在貴遵高速公路中的應用
    西門子 分布式I/O Simatic ET 200AL
    大石桥市| 明光市| 海宁市| 芜湖市| 孟连| 曲麻莱县| 东方市| 日照市| 威信县| 阳江市| 河曲县| 德清县| 巩义市| 苍溪县| 鸡西市| 同仁县| 获嘉县| 富民县| 鄂托克旗| 漾濞| 新干县| 民乐县| 买车| 晋城| 明星| 乐至县| 乌海市| 乌拉特中旗| 德江县| 牡丹江市| 周宁县| 凤城市| 杭锦后旗| 寿宁县| 龙里县| 柳河县| 普格县| 德庆县| 武义县| 淮安市| 洪雅县|