999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2017-04-23 03:27:16尹大宇
電子技術(shù)與軟件工程 2017年5期
關(guān)鍵詞:定義語言

尹大宇

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

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

隨著Internet/ Intranet的發(fā)展,以太網(wǎng)已滲透到各個角落,今天的控制系統(tǒ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平臺簡介

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

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

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

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

Microsoft中間語言與Java字節(jié)代碼共享一種理念:它們都是低級語言,語法很簡單(使用數(shù)字代碼,而不是文本代碼),可以快速地轉(zhuǎn)換為內(nèi)部機(jī)器碼。對于代碼來說,這種精心設(shè)計的通用語法有很重要的優(yōu)點:平臺無關(guān)性、提高性能和語言的互操作性。因此,基于.NET平臺開發(fā)的應(yīng)用程序具有更好的移植性,也是跨平臺應(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ù)來實現(xiàn)傳輸?shù)目煽啃浴榱颂岣邤?shù)據(jù)的有效性,本文使用該通訊方式。

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

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

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

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

2.2 參數(shù)定義

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

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

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

它包括一個CPU317-2DP,一個CP343-1通訊模塊等,已組態(tài)CP343-1的IP地址為172.20.100.10,硬件組態(tài)如圖2所示。用于編程實現(xiàn)通訊的PC機(jī)為帶以太網(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)//連接前判斷是否為重復(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)//連接錯誤則輸出報警信息{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存儲區(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運行平臺擴(kuò)展至Linux和Mac OS,讓開發(fā)者能夠使用.NET在Windows、Mac和Linux三大平臺上開發(fā)應(yīng)用。基于.NET平臺的開發(fā)的通訊程序幾乎不需要修改任何代碼就可以很好的移植到任何支持.NET的平臺之上。因此,本文的研究對于跨平臺西門子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.

猜你喜歡
定義語言
永遠(yuǎn)不要用“起點”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
定義“風(fēng)格”
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
讓語言描寫搖曳多姿
多向度交往對語言磨蝕的補(bǔ)正之道
累積動態(tài)分析下的同聲傳譯語言壓縮
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
我有我語言
論語言的“得體”
語文知識(2014年10期)2014-02-28 22:00:56
修辭學(xué)的重大定義
主站蜘蛛池模板: 亚洲av日韩综合一区尤物| av一区二区三区在线观看| 综合网天天| 亚洲免费三区| 伊人色综合久久天天| 国产尤物视频网址导航| av午夜福利一片免费看| 国产亚洲欧美日韩在线一区| 欧美在线国产| 国产成人综合亚洲网址| 亚洲Aⅴ无码专区在线观看q| 日韩无码一二三区| 青草视频在线观看国产| 久久国产亚洲欧美日韩精品| 国产免费高清无需播放器| 欧美国产在线看| 亚洲大尺度在线| 欧美国产日韩在线| 精品久久蜜桃| 久久久久久久久久国产精品| 自偷自拍三级全三级视频 | 亚洲三级色| 国产日韩欧美中文| 免费在线不卡视频| 欧美日韩福利| 精品剧情v国产在线观看| 日韩精品成人在线| 亚洲午夜18| AV网站中文| 亚洲国模精品一区| 日韩成人在线网站| 亚洲综合18p| 国产成人AV大片大片在线播放 | 国产视频你懂得| 亚洲一本大道在线| 福利在线一区| 久久人午夜亚洲精品无码区| 乱人伦99久久| 福利片91| 欧美日韩国产在线观看一区二区三区| 日本国产精品一区久久久| 精品国产自在现线看久久| av免费在线观看美女叉开腿| 国产一级视频久久| 欧美成a人片在线观看| 国产一区二区在线视频观看| 丝袜亚洲综合| 国产精品自在在线午夜| 91毛片网| 亚洲成人手机在线| 亚洲欧美激情小说另类| 亚洲欧洲日韩综合色天使| 欧美人人干| 欧美不卡在线视频| 色婷婷在线播放| 色综合成人| 欧美不卡视频在线观看| 一区二区三区成人| 亚洲精品天堂自在久久77| 久久人妻xunleige无码| 无码内射在线| 亚洲天堂在线免费| 成人在线综合| 黄色网站不卡无码| 毛片久久久| 日本免费一级视频| 久久综合伊人77777| 亚洲人成在线免费观看| 欧美成人一级| 国产成人精品一区二区三在线观看| 成人精品午夜福利在线播放| 午夜丁香婷婷| 亚洲国产天堂在线观看| 在线亚洲精品自拍| 99人妻碰碰碰久久久久禁片| 2024av在线无码中文最新| 天天婬欲婬香婬色婬视频播放| 中国美女**毛片录像在线| 91午夜福利在线观看| 在线欧美一区| 在线观看国产精品第一区免费 | 国产伦精品一区二区三区视频优播 |