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

過程自動化MES系統中報文的處理方法

2019-09-09 08:14:53王崢牛盂杰張瑩李曉東
數碼世界 2019年5期

王崢 牛盂杰 張瑩 李曉東

摘要:論述了一種MES中報文的處理方法,包括報文封裝類設計,通訊接口設計,數據庫設計等內容。描述了.net框架下端口監聽及stream流傳輸的程序設計方法。

關鍵詞:mes 報文 socket 端口監聽 stream流

本文闡述了一種基于socket協議的MES二級系統報文的處理方法。報文是MES系統普遍采用的信息傳輸方式,具有組成靈活,傳輸可控,解讀方便的特點。設計報文的處理方式,是MES系統重要的組成部分。本項目是一個鍍錫線電控系統的MES二級子系統運行穩定,傳輸可靠。在此簡單闡述—下報文的處理方法。

報文處理方法包含以下幾個主要環節

1,定義鋼卷鋼種數據信息PDI,此類主要用于生成報文的各種參數。報文處理需要的元素,都封裝成類,再進行實例化調用,這樣程序的代碼重用及組裝都很方便。

public class PDI

{

public int flag{ get; set;}∥鋼種標志

public int ID{ get; set;}∥鋼種ID

public string Schedule_Code{ get; set;}∥計劃代碼

private string _coil_no一…I;∥私有變量卷號

pulolic string Coil_NO∥對私有變量的getter和setter操作

{

get

{

if (!string.IsNullOrEmpty(_coil_no》

return _coil_no.ToUpper();

else

return””:

l

set{ _coil_no - value;}

}

public string Schedule_Type{ get; set;}//,//各種鋼卷屬性的操作方法

public string RepairFlag{ get; set;)

public string Repair_Type{ get; set;}

public int IsDummy{ get; set;}

}

2,報文定義類,此處定義報文封裝類,包括各種操作屬性,比如ID,生產線代碼,請求時間,回應時間,狀態,發送目標,回答目標,報文主體內容等。此報文將進入報文池,以隊列方式,先進入池的報文,被先處理發送。

public class DBMAILBOX

{

public int ID{ get; set;}∥///報文隊列代碼

public int Plant_ID{ get; set;}

public int RequestNo{ get; set;}

public DateTime RequestDate{ get; set;}

public DateTime ReplyDate{ get; set;}

public int Status{ get; set;}

public string SendTo{ get; set;}

public string ReplyTo{ get; set;}

public int IDM{ get; set;}廠/∥報文標志代碼

public byte[l Msg{ get; set;}////報文內容

publicbyte[l MsgReply{ get; set;}

}

3,組合報文體框架,此處生成報文體對象,根據報文種類(即IDM報文標志),調用對應的報文生成方法,返回報文內容,與其他屬性構成報文主體,進入數組,形成報文隊列。

DBMAILBOX m—new DBMAILBOX();/////報文對象

m.Plant_ID -0;

m.IDM -2965;∥/∥//新生成的報文為2965

m.Msg—msg.MSG2965(p,setup);/‘∥//報文生成方法,返回報文內容

m.SendTo -”L1C”;/////////報文發送屬性

m.RequestDate - DateTime.Now;

m.Reply_Date - DateTime.Now;

m.ReplyTo -llL2Serverll;

m。Status -0:

mail.Add(m);////////把報文內容加入數組mail,形成報文隊列。

4,組合報文體,此處形成報文內容,不含其它屬性,只是整個報文.dlomailbox的msg部分,也就是向一級系統實際發送的報文內容。

public Byte[]MSG2965(int intMSGPORl, intintMSGPOR2)///////

{

this.MSG_ID - 2965;////報文ID

this.MSG_I。EN—l6;///////報文長度,第一次賦值,作用是電文體開始賦值的位置,2965電文的卷號的開始位置為16,下面的循環中,根據this.MSG_I。EN的初始值,開始給電文體賦值,MSGLEN也不斷增加

this.SetString(p.Coil_NO,20,l l,0);///////向電文體寫入string

str - DoString.toLongString(str, len,f,itype);////DoString是靜態類,將str補充到len長度(不

足時),此時str是Coil_NO卷號,保證卷號長度固定

//////以下是報文各段屬性賦值,簡略

this.SetSwapValue《Int16)intMSGPORl);/////向電文體寫入開卷機請求數據l

this. SetSwapValue《Int16)intMSGPOR2);/////向電文體寫入開卷機請求數據2

return this.GetBytes();/////加上報上報頭head(最終調用sethead0方法),形成最終報文體

}

5,socket端口監聽類。本項目采用socket方式接收和發送電文,通過不同端口進行收發,提高了報文處理速度。利用.NET框架的socket封裝類,簡化了程序代碼。采用多線程方式,對收發動作進行新建線程方式,實現并發處理。.NET框架用IPEndPoint對象來表示一個特定的IP地址和端口的組合,應用該對象的場景多是在將socket綁定到本地地址。

∥接收來自L1-級系統的報文

public class MsgFromLI:ThreadService////建立線程

{

public ThreadStatus status—null;

TcpListener server=null;///////定義監聽類的對象

IPEndPoint ipLocalEndPoint=null;

pulolic MsgFromLl()///構造函數,進行初始化,建立監聽通道

{

ipLocaIEndPoint - newIPEndPoint(IPAddress.Parse("10.36.1.225"), 3001);

//∥監聽一級系統PLC的ip和端口

status—new ThreadStatus();////建立線程狀態對象

public void Start0

{

status.run_flag - true;

server - new TcpListener(ipLocalEndPoint);//,//監聽類實例化

server. Start();//∥啟動監聽

status.starttime - DoDateTime.getNovrString();

TcpClient client—null;

while (status.run_flag)

{

if (client一一null』!client.Connected)

{

client - server.AcceptTcpClient();////開始接收請求

client.ReceiveBufferSize -2016;/∥//接收緩沖區長度

}

client.ReceiveBufferSize - 2016;

ByteLl bytes - new Byte[client.ReceiveBufferSizel;//接收報文的字符串初始化

NetworkStream stream — client.GetStream();/∥//建立stream流,進行傳輸

stream.Read(bytes,O,bytes.Length);////讀入stream流數據進入字符串

client. Close();

client—null;

}

}

}

6,發送報文

public void Start0

{

status.run_flag - true;

status.start_time - DoDate-Fime.getNo.nrString();

string rernoteIP~"10.36.1.135";////socket客戶端連接遠程服務器地址

int remotePort - 3003;

string localIP一"10.36.1.225";

int localPort - 2003;

MSGTcpClient client - nevr MSGTcpClient(localIP. localPort, remoteIP, remotePort);

DBMAILBOX msg—new DBMAILBOX();

while (status.run_flag)

{

if(! client. Connect(》/////client初始化要建立連接

{

Thread.Sleep(2000);

continue:

}

msg -Scan();//∥//msg存人掃描的信息結果,形成電文

msg.Status一1;∥∥/msg不為空

client.SendOnce(msg.Msg.0,2016);//,//發送電文,

∥∥/上面msg -Scan();//∥//IIlsg存入掃描的信息結果,形成電文

}

}

發送動作語句

public Boolean SendOnceCoyte[l buffer .int offset,int size)

{

stream一client.GetStream();//

∥返回用于發送和接收數據的System.Net.Sockets.NetworkStream。

stream.Write(buffer, offset.slze);//∥向stream的對端發出數據

return true;

}

主站蜘蛛池模板: 2021无码专区人妻系列日韩| 久久国产拍爱| 2021天堂在线亚洲精品专区| 国产精品妖精视频| 午夜日b视频| 22sihu国产精品视频影视资讯| 国产成人综合久久精品下载| 亚洲欧美精品在线| 久久性妇女精品免费| 国产精品无码久久久久久| 真实国产乱子伦视频| 国产高清毛片| 国产亚洲精品自在线| 欧美日韩v| 一区二区三区高清视频国产女人| 1769国产精品免费视频| 91亚瑟视频| 色偷偷av男人的天堂不卡| 日韩在线播放中文字幕| 激情成人综合网| 国产无套粉嫩白浆| 亚洲视频在线青青| 国产一级裸网站| 亚洲av无码久久无遮挡| 欧美亚洲日韩不卡在线在线观看| 久久国产精品77777| 人人91人人澡人人妻人人爽| 亚瑟天堂久久一区二区影院| 免费av一区二区三区在线| 九九热这里只有国产精品| 欧美不卡视频在线观看| 国模视频一区二区| 中文字幕永久在线看| 日韩欧美国产精品| 波多野结衣一区二区三视频| 精品少妇人妻一区二区| 国产男人天堂| 成年人午夜免费视频| 欧美日韩午夜| 亚洲欧美在线精品一区二区| 亚洲第一色网站| 欧美成人午夜视频| 欧美天堂在线| 99人妻碰碰碰久久久久禁片| 国产乱子精品一区二区在线观看| 国产清纯在线一区二区WWW| 国产精品永久不卡免费视频| 嫩草在线视频| 日本精品中文字幕在线不卡| 97色伦色在线综合视频| 香蕉久久国产超碰青草| 97国内精品久久久久不卡| v天堂中文在线| 欧美精品v欧洲精品| 无码日韩人妻精品久久蜜桃| 亚洲va视频| 成年人久久黄色网站| 白浆免费视频国产精品视频| 亚洲男人在线| 亚洲精品不卡午夜精品| 99精品国产自在现线观看| 久久婷婷六月| 国产成人乱无码视频| 亚洲精品另类| 日韩在线2020专区| 欧美色综合网站| 亚洲三级色| 香蕉久久国产精品免| 日韩欧美中文在线| 全免费a级毛片免费看不卡| 国产欧美日韩另类| 国产日韩欧美视频| 伊人久久精品无码麻豆精品| 在线国产91| 国产69精品久久| 99在线小视频| 无码一区18禁| www.亚洲一区二区三区| 97久久人人超碰国产精品| 国产午夜无码专区喷水| 日韩午夜福利在线观看| 免费一级大毛片a一观看不卡|