国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

尹大宇

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

【關(guān)鍵詞】S7-300 PLC TCP/IP套接字 .Net

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

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

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

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

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

1 .NET平臺(tái)簡介

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

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

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

這個(gè)兩階段的編譯過程非常重要,因?yàn)镸icrosoft中間語言(托管代碼)是提供.NET的許多優(yōu)點(diǎn)的關(guān)鍵。

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

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

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

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

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

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

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

2.2 參數(shù)定義

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

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

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

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

3.2 通訊的主要過程

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

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

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

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

(2)連接套接字:

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

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

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

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

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

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

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

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

{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存儲(chǔ)區(qū)變量測試:

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

{…… /準(zhǔn)備讀取變量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 結(jié)論

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

參考文獻(xiàn)

[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].電子技術(shù)與軟件工程,2014(24):30-32.

猜你喜歡
西門子字節(jié)以太網(wǎng)
No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
基于1500以太網(wǎng)養(yǎng)豬場的智能飼喂控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
No.10 “字節(jié)跳動(dòng)手機(jī)”要來了?
西門子重型燃機(jī)出海
能源(2017年7期)2018-01-19 05:05:05
簡談MC7字節(jié)碼
談實(shí)時(shí)以太網(wǎng)EtherCAT技術(shù)在變電站自動(dòng)化中的應(yīng)用
電子制作(2017年24期)2017-02-02 07:14:44
一種90W高功率以太網(wǎng)供電系統(tǒng)的設(shè)計(jì)
西門子亮相CIIF201
淺談EPON與工業(yè)以太網(wǎng)在貴遵高速公路中的應(yīng)用
西門子 分布式I/O Simatic ET 200AL
临沭县| 通许县| 噶尔县| 高雄县| 桂平市| 铁力市| 石泉县| 金门县| 岚皋县| 本溪市| 扶沟县| 文昌市| 灵武市| 迁西县| 宁陵县| 沂南县| 莱芜市| 东安县| 巴南区| 泸水县| 澄江县| 潞城市| 鲁甸县| 张家界市| 巩义市| 双鸭山市| 柳河县| 平陆县| 班玛县| 大悟县| 卓尼县| 南华县| 安福县| 崇阳县| 若羌县| 东乡县| 札达县| 革吉县| 海丰县| 武城县| 宝山区|