WSN技術(shù)的智能倉儲環(huán)境監(jiān)測與智能控制系統(tǒng)設(shè)計(jì)與實(shí)_第1頁
WSN技術(shù)的智能倉儲環(huán)境監(jiān)測與智能控制系統(tǒng)設(shè)計(jì)與實(shí)_第2頁
WSN技術(shù)的智能倉儲環(huán)境監(jiān)測與智能控制系統(tǒng)設(shè)計(jì)與實(shí)_第3頁
WSN技術(shù)的智能倉儲環(huán)境監(jiān)測與智能控制系統(tǒng)設(shè)計(jì)與實(shí)_第4頁
WSN技術(shù)的智能倉儲環(huán)境監(jiān)測與智能控制系統(tǒng)設(shè)計(jì)與實(shí)_第5頁
已閱讀5頁,還剩62頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

WSN技術(shù)的智能倉儲環(huán)境監(jiān)測與智能控制系統(tǒng)設(shè)計(jì)

與實(shí)

一、教學(xué)目標(biāo)

1、掌握WSN網(wǎng)關(guān)通信的有關(guān)應(yīng)用。

2、掌握WSN實(shí)現(xiàn)了信息的采集、信息傳輸與信息處理模式。

3、掌握WSN實(shí)現(xiàn)倉儲環(huán)境監(jiān)控智能化技術(shù)方法。

二、教學(xué)內(nèi)容

10.1設(shè)備簡介

10.1.1WSN網(wǎng)關(guān)

圖10-1WSN網(wǎng)關(guān)圖

供電電源:DC5V,信號獲取接口:USB,上位機(jī)通信接口:以太網(wǎng)口,操作系統(tǒng):Linux?

網(wǎng)關(guān)通過USB與協(xié)調(diào)器連接,并通過協(xié)調(diào)器與各Zigbee節(jié)點(diǎn)進(jìn)行信號通訊。

10.1.2協(xié)調(diào)器

圖10-2協(xié)調(diào)器圖

供電方式:USB供電。該設(shè)備為網(wǎng)關(guān)與各傳感器節(jié)點(diǎn)的中繼,負(fù)責(zé)轉(zhuǎn)發(fā)Zigbee信號。

10.1.3溫濕度傳感器模塊

圖10-3溫濕度傳感模塊圖

供電方式:DC5V,通訊協(xié)議:Zigbee。集成模塊:溫濕度傳感器。

該節(jié)點(diǎn)可采集溫濕度數(shù)據(jù),并通過Zigbee協(xié)議傳輸?shù)骄W(wǎng)關(guān),上位機(jī)通過訪問網(wǎng)關(guān)獲取

溫濕度數(shù)據(jù)。

10.1.4電磁繼電器模塊

圖10-4電磁繼電器模塊圖

供電方式:DC5V,繼電器操縱路數(shù):4路,與網(wǎng)關(guān)通信協(xié)議:Zigbee。

該繼電器可操縱四路電源,在京勝世紀(jì)的實(shí)驗(yàn)臺中,操縱了兩路燈光、一路風(fēng)扇與一路

電磁門。

10.2類的設(shè)計(jì)與實(shí)現(xiàn)

在本部分實(shí)訓(xùn)中我們要用到數(shù)據(jù)庫來存儲當(dāng)前各個(gè)節(jié)點(diǎn)的信息,以面向?qū)ο蟮乃枷霝槔?

我們需要先編寫幾對數(shù)據(jù)庫操作的基礎(chǔ)類與將節(jié)點(diǎn)信息儲存的對象類。

10.2.1DBConnection.cs類

這個(gè)類文件是要對數(shù)據(jù)庫進(jìn)行連接操作,登錄到本地的數(shù)據(jù)庫。

引用命名空間。該命名空間是SQLServer.NET數(shù)據(jù)提供者,是SQLServer專用的內(nèi)置.NET

提供者,引用該命名空間后就能夠獲得最好的性能與對基礎(chǔ)功能的最直接訪問。

usingSystem.Data.SqlClient;

添加變量

privatestringstr;

privateSqlCommandsqlcom;

privateSqlConnectionconn;

在構(gòu)造函數(shù)中寫入連接數(shù)據(jù)庫方法

///<summary>

///連接數(shù)據(jù)庫的方法

///</summary>

publicDBConnection()

{

〃定義了要連接的數(shù)據(jù)庫的位置,數(shù)據(jù)庫的名稱,登錄帳號與密碼

this.str=,,Server=localhost;DataBase=SmartShelfD;uid=sa;pwd=123n;

this.conn=newSqlConnection(str);

this.sqlcom=newSqlCommand();

this.sqlcom.Connection=this.conn;

this.conn.Open();

}

上邊定義了兩個(gè)全局變量,分變是字符型str,變量量為數(shù)據(jù)庫連接字符串內(nèi)容:Server

表示正在訪問的數(shù)據(jù)庫服務(wù)器名稱,其格式是“計(jì)算機(jī)名'實(shí)例名”,假如是本地的數(shù)據(jù)庫

服務(wù)器同時(shí)使用的是SQLServer的默認(rèn)實(shí)例名,則能夠使用(Local)或者.來表示。DataBase

表示數(shù)據(jù)庫名稱,即該項(xiàng)目所要連接的數(shù)據(jù)庫名;Uid表示數(shù)據(jù)庫服務(wù)器的登錄名稱;Pwd

表示數(shù)據(jù)庫服務(wù)器的密碼。

返回?cái)?shù)據(jù)連接方法

///〈summary〉

///返回?cái)?shù)據(jù)連接方法

///〈/summary〉

///<returns></retums>

publicSqlConnectionGetConnection()

{

returnthis.conn;

}

10.2.2DBOperate.es類

該類的作用是對程序中的要用到的對數(shù)據(jù)庫的操作進(jìn)行統(tǒng)一,涉及到對數(shù)據(jù)庫的操作

時(shí),如對數(shù)據(jù)庫的增刪改操作,都能夠直接調(diào)用該類,相應(yīng)的方法。傳入相應(yīng)的參數(shù)即可。

添加引用

usingSystem.Data.SqlClient;

usingSystem.Data;

定義變量

SqlCommandsqlcom;

SqlConnectionconn;

默認(rèn)構(gòu)造方法

///<summary>

///構(gòu)造函數(shù)

///</summary>

///<paramname=,'dbcH></param>

publicDBOperate(DBConnectiondbc)

(

sqlcom=newSqlCommand();

sqlcom.Connection=dbc.GetConnection();

)

編寫執(zhí)行方法

///<summary>

///執(zhí)行sql語句

///</summary>

///<paramname="sqr'x/param>

publicvoidExecuteSQL(stringsql)

(

try

(

this.sqlcom.ExecuteNonQueryO;

}

catch{}

}

///<summary>

///獲取數(shù)據(jù)表格的方法

///</summary>

///<paramname="sqln></param>

///<returns>sql語句〈/returns〉

publicDataTableGetDataTable(stringsql)

(

SqlDataAdaptersda=newSqlDataAdapter(this.sqlcom);

DataSetds=newDataSet();

DataTabledt=newDataTable();

try

(

sda.Fill(ds);

dt=ds.Tables[O];

}

catch{}

returndt;

///<summary>

///執(zhí)行SQL語句,獲取string類型數(shù)據(jù)

///〈/summary〉

///<paramname二“sql”>SQL語句</param>

///〈returns〉獲取到的string類型數(shù)據(jù)〈/returns〉

publicstringGetString(stringsql)

(

stringresultStr="u;

try

(

resultStr=this.sqlcom.ExecuteScalar().ToString();

}

catch(SqlExceptione)

{)

finally

(

this.sqlcom.Dispose();

)

returnresultStr;

)

publicintGetlnt(stringsql)

(

intresultlnt=0;

try

(

resultlnt=Convert.ToInt32(this.sqlcom.ExecuteScalar().ToString());

)

catch(SqlExceptione)

(

System.Windows.Forms.MessageBox.Show(e.Message);

}

finally

(

this.sqlcom.Dispose();

)

returnresultlnt;

}

本資源是基于SQLServer開發(fā)的,因此能夠使用using指令能夠引用SQLServer專用

的.NET數(shù)據(jù)庫提供者:usingSystem.Data.SqlClient;

提取數(shù)據(jù)庫中數(shù)據(jù)的4步:

1)連接數(shù)據(jù)源

2)打開連接

3)發(fā)出一個(gè)SQL查詢命令

4)執(zhí)行命令語句

541(2011慎8211是一個(gè)用于5(314£T數(shù)據(jù)提供者的連接對象名稱,表示SQLServer數(shù)據(jù)

庫的一個(gè)打開的連接。SqlConnection對象表示與SQLServer數(shù)據(jù)源的一個(gè)唯一的會話。

關(guān)于客戶端/服務(wù)器數(shù)據(jù)庫系統(tǒng),它等效于到服務(wù)器的網(wǎng)絡(luò)連接。SqlConnection與

SqlDataAdapter與SqlCommand一起使用,能夠在連接MicrosoftSQLServer數(shù)據(jù)庫時(shí)提

高性能。

"Server=localhost;DataBase=AccessControl;uid=sa;pwd=123"

Server=locak)st,表示正在訪問的SQLServer名稱,其格式是“計(jì),算機(jī)名'實(shí)例名計(jì)算機(jī)名

(localhost)是一個(gè)非常方便的SQLServer簡短名稱,它表示運(yùn)行在當(dāng)前機(jī)器上的服務(wù)器實(shí)

例。DataBase=AccessControl,指定數(shù)據(jù)庫的名稱。uid=sa;pwd=123,表示登錄數(shù)據(jù)庫的用戶

名與密碼,這是SQLServer與Windows的標(biāo)準(zhǔn)內(nèi)置安全。

this.conn.Open();打開數(shù)據(jù)庫的連接。CommandText屬性獲取或者設(shè)置要對數(shù)據(jù)源執(zhí)行的

SQL語句或者存儲過程。ExecuteNonQuery()方法,對連接執(zhí)行SQL語句并返回受影響的

行數(shù)。SqlDataAdapter類表示用于填充DataSet與更新SQLServer數(shù)據(jù)庫的一組數(shù)據(jù)命令

與一個(gè)數(shù)據(jù)庫連接。SqlDataAdapter是DataSet與SQLServer之間的橋接器,用于檢索與

儲存數(shù)據(jù)。DataSet是ADO.NET結(jié)構(gòu)的要緊組件,它是從數(shù)據(jù)源中檢索到的數(shù)據(jù)在內(nèi)存中

的緩存。DataSet由一組DataTable對象構(gòu)成。

try-catch語句由一個(gè)try塊后跟一個(gè)或者多個(gè)catch子句構(gòu)成,這些子句指定不一致的

特殊處理程序。

try塊包含可能導(dǎo)致特殊的保護(hù)代碼。該塊一直執(zhí)行到引發(fā)特殊或者成功完成為止。比

如,下列強(qiáng)制轉(zhuǎn)換null對象的嘗試引發(fā)NullReferenceException特殊:

objecto2=null;

try

(

inti2=(int)o2;〃錯(cuò)誤

}

10.2.3ObjCargoNode.cs類

該類是對節(jié)點(diǎn)信息與數(shù)據(jù)庫中的進(jìn)行操作進(jìn)行的修改。節(jié)點(diǎn)加入網(wǎng)絡(luò)后,段地址會存儲

到數(shù)據(jù)庫中。對當(dāng)前節(jié)點(diǎn)的識別也需要讀取數(shù)據(jù)庫中已輸入的節(jié)點(diǎn)信息。

添加命名空間

usingSystem.Data;

定義變量

privateintcargo;

privatestringiEEEAddress;

privatestringshortAddress;

privateintnodeType;

構(gòu)造函數(shù)

publicObjCargoNode()

publicObjCargoNode(intcargo)

(

this.cargo=cargo;

DataTabledtb=Program.dbo.GetDataTable(string.Format(Hselect

Cargo,IEEEAddress,ShortAddress,NodeTypefromCargoNodewhereCargo-{0}*",this.cargo));

DataRowrow=dtb.Rows[0J;

this.cargo=Convert.ToInt32(row["CargoH].ToString0);

this.iEEEAddress=row[,'IEEEAddress"l.ToString();

this.shortAddress=row[nShortAddress"].ToString();

this.nodeType=Convert.ToInt32(row[nNodeType*'].ToString());

)

屬性

publicintCargo

{

get

(

returnthis.cargo;

)

}

publicstringlEEEAddress

(

get

(

returnthis.iEEEAddress;

)

)

publicstringShortAddress

(

get

{

returnthis.shortAddress;

)

set

this.shortAddress=value;

publicintNodeType

get

(

returnthis.nodeType;

}

}

方法

publicvoidInsert()

(

Program.dbo.ExecuteSQL(string.Format(nupdateCargoNodeset

ShortAddress="{0}'whereIEEEAddress=,{1this.shortAddress,this.iEEEAddress));

}

10.3功能設(shè)計(jì)與實(shí)現(xiàn)

該部分實(shí)訓(xùn)內(nèi)容要緊是通過程序與wsn的網(wǎng)關(guān)進(jìn)行通信,這里我們需要學(xué)習(xí)關(guān)于wsn

網(wǎng)關(guān)通信的有關(guān)應(yīng)用。該模塊程序中的代碼,在后面會分解出來應(yīng)用。

向窗體中添加一個(gè)TabControl控件,在TabPages屬性添加6個(gè)成員。

控件Name屬性Text屬性UseVisualStyleBac

kColor屬性

TabPagetpConnect建立連接True

TabPagetpPingPing指令True

TabPagetpConfigReadConfigRead指令True

TabPagetpConfigWriteConfig_Write指令True

TabPagetpSensorReadSensor_Read指令True

TabPagetpSensorWriteSensor_Write指令True

10.3.1創(chuàng)建建立連接

1、建立連接TabPage窗體屬性,窗體如圖10-5所示。

TextBox

控化

更掾

2、設(shè)置窗體屬性

StartPositionMaximizeBoxMinimizeBoxFormBorderStyle

窗體Text屬性

屬性屬性屬性屬性

Zigbee節(jié)

frmGoodsOutCenterParentFalseFalseFixedSingle點(diǎn)連接實(shí)

驗(yàn)

3、設(shè)置Labie控件屬性

控件Name屬性Text屬性

T1通道Socket

LableIbllPAddressTlIP地址

LableIblPortTl端口號

LableIblAppIDTlAppID

LableIblPasswordTlPassword

T2通道Socket

LablelblIPAddressT2IP地址

LablelblPortT2端口號

LablelblAppIDT2AppID

LablelblPasswordT2Password

4、設(shè)置TextBox屬性

控件Name屬性Text屬性

TextBoxtxtIPAddressTI192.168.1.230

TextBoxtxtPortTl4000

TextBoxtxtAppIDTl1001

TextBoxtxtPasswordTlKingvcSzigvine

TextBoxtxtIPAddressT2192.168.1.230

TextBoxtxtPortT24000

TextBoxtxtAppIDT21001

TextBoxtxtPasswordT2KingvcSzigvine

5、設(shè)置顯示]言息內(nèi)容的TextBox屬性

控件Name屬性Dock屬性MultilineReadOnle屬ScorllBars

屬性性屬性

TextBoxtxtMessageConnectFillTrueTrueVertical

6、設(shè)置GroupBox控件屬性

控件Name屬性Text屬性

GroupBoxgbSocket_TlT1通道Socket

GroupBoxgbSocket_T2T2通道Socket

7、設(shè)置Button按鈕事件

控件Name屬性Text屬性UseVisualStyleBackColor

屬性

ButtonbtnConnectSocketTlSocketTl連接True

ButtonbtnConnectTlT1通道連接True

ButtonbtnConnectSocketT2SocketT2連接True

ButtonbtnConnectT2T2通道連接True

8、窗體后臺代碼:

1)定義變量

〃定義一個(gè)函數(shù)結(jié)構(gòu)的委托

privatedelegatevoidShowMessageDel(TextBoxtxt,stringmsg);

privatedelegatevoidShowMessageDelOfTempLabel(LabelIbl,stringvalue);

〃實(shí)例化T1數(shù)據(jù)包消息類

privateGRIP_MessagemessageTl=newGRIP_Message();

〃實(shí)例化T2數(shù)據(jù)包消息類

privateGRIP_MessagemessageT2=newGRIP_Message();

//定義TISocket通訊接口

privateSocketsocketTl;

//定義T2soeket通訊接口

privateSocketsocketT2;

〃定義T1通道流水號

privateUIntl6sequencelDTl;

〃定義T2通道流水號

privateUIntl6sequenceIDT2;

privateinttime;

〃定義一個(gè)線程

privateThreadthread;

//sessionlD為連接后網(wǎng)關(guān)隨機(jī)分配的一個(gè)標(biāo)識ID

privatestringsessionlD=

2)構(gòu)造函數(shù)

///<summary>

///構(gòu)造函數(shù)

///</summary>

publicfrmZigBee()

{

InitializeComponent();

)

3)編寫方法

Socket發(fā)送消息方法

///<summary>

///Socket發(fā)送消息方法

///</summary>

///<paramname="msgSencT>要發(fā)送的字節(jié)數(shù)組v/param>

///<paramname="socket”>Socket實(shí)例</param>

///<paramname="1enSend”>已發(fā)送的長度</param>

privatevoidSendMsg(byte[]msgSend,Socketsocket,intlenSend)

(

//需對發(fā)送的字節(jié)長度有明確認(rèn)識,發(fā)送一段字節(jié)后需要加上該段字節(jié)的長度

while(lenSend<msgSend.Length)

(

lenSend+=socket.Send(msgSend,lenSend,msgSend.Length-lenSend,

SocketFlags.None);

)

)

Socket接收信息的方法

///<summary>

///Socket接收消息方法

///</summary>

///<paramname="msgRecv”>要接收的字節(jié)數(shù)組</param>

///<paramname="socket”>Socket實(shí)例v/param>

///<paramname="lenRecv”>已接收的長度v/param>

privatevoidRecvMsg(byte[]msgRecv,Socketsocket,intlenRecv)

(

while(lenRecv<msgRecv.Length)

(

lenRecv+=socket.Receive(msgRecv,lenRecv,msgRecv.Length-lenRecv,

SocketFlags.None);

)

}

在控件中顯示信息的方法

//<summary>

///在控件中顯示消息的方法

///</summary>

III<paramname=,,txt',></param>

///<paramname="msgnx/param>

privatevoidShowMessage(TextBoxtxt,stringmsg)

(

if(txt.InvokeRequired)

(

ShowMessageDelsmd=newShowMessageDel(ShowMessage);

txt.Invoke(smd,txt,msg);

)

else

txt.Text+-"\r\n["+DateTime.Now.ToString("yyyy-MM-ddhh-mm-ss")+

]"+msg;

在Label控件中顯示消息的方法

///<summary>

///在Label控件中顯示消息的方法

///</summary>

///<paramname=控件名稱v/param>

///<paramname="value”>要顯示的值</param>

privatevoidShowTempValue(LabelIbl,stringvalue)

(

if(Ibl.InvokeRequired)

(

ShowMessageDelOfTempLabelsmd=new

ShowMessageDelOfTempLabel(ShowTempValue);

lbl.Invoke(smd,Ibl,value);

)

else

{

Ibl.Text=value;

}

)

線程方法

///<summary>

〃/T2通道線程執(zhí)行方法

///</summary>

privatevoidRun()

{

try

(

while(true)

(

#region解析消息頭

〃定義一個(gè)byte類型的6位數(shù)組

bytelJmsgRecvHeadBytes=newbyte[61;

〃接收到的消息頭的長度

intlenRecv=0;

//Socket接收消息的方法

RecvMsg(msgRecvHeadBytes,this.socketT2,lenRecv);

〃實(shí)例化一個(gè)消息頭類

GRIP_MessageHeadmsgHeadRecv=newGRIP_MessageHead();

〃對接收到的消息頭進(jìn)行轉(zhuǎn)換

msgHeadRecv.GetHeadBytesOfKecive(msgRecvHeadBytes,0,6);

#endregion

#region心跳包

if(msgHeadRecv.MessageCommand==

(UIntl6)GRIP_Message_CommandID.NWM_HEARTBEAT)

(

try

(

〃消息的長度為16位無符號整數(shù)

UIntl6messageLength=0;

〃心跳報(bào)消息體「信息為空

UIntl6messageCommand=

(UIntl6)GRIP_Message_CommandID.NWM_HEARTBEAT_RESP;

〃獲取獲取流水號

UIntl6sequencelD=msgHeadRecv.SequencelD;

〃實(shí)例化一個(gè)消息頭類

GRIP_MessageHeadmsgHeadSend=new

GRIP_MessageHead(messageLength,messageCommand,sequencelD);

〃按照本地字節(jié)轉(zhuǎn)換發(fā)送的信息

byte[]msgSend=msgHeadSend.GetHeadBytesOfSend();

〃發(fā)送信息方法

SendMsg(msgSend,this.socketT2,0);

〃MessageBox.Show("【T2通道心跳包】發(fā)送成功)

)

catch(Exceptionex)

{

MessageBox.Show("【T2通道心跳包】錯(cuò)誤:"+ex.Message);

}

)

#endregion

#regionStatus_Report

〃推斷消息頭返回命令字是否正確

if(msgHeadRecv.MessageCommand==

(Ulntl6)GRIP_Message_CommandlD.NWM_STATUS_REPORT)

(

try

(

〃定義一個(gè)消息頭字節(jié)長度的byte數(shù)組

byte[JmsgBodyRecvBytes=new

bytefmsgHeadRecv.MessageLength];

〃定義消息體長度變量

intlenBodyRecv=0;

//Socket接收信息方法接收信息

RecvMsg(msgBodyRecvBytes,this.socketT2,lenBodyRecv);

〃實(shí)例化節(jié)點(diǎn)報(bào)告命令

GRIP_MessageBody_Status_ReportmsgBodyRecv=new

GRIP_MessageBody_Status_Report();

//按照本地字節(jié)與網(wǎng)絡(luò)字節(jié)的順序轉(zhuǎn)換接收到的消息體

msgBodyRecv.ConvertReciveBytes(msgBodyRecvBytes);

UIntl6status=0;

〃實(shí)例化節(jié)點(diǎn)報(bào)告命令響應(yīng)

GRIP_MessageBody_Status_Report_RespmsgBodySend=

newGRIP_MessageBody_Status_Report_Resp(status);

//實(shí)例化消息頭類,并將響應(yīng)參數(shù)傳入

GRIP_MessageHeadmsgHeadSend=new

GRIP_MessageHead(msgBodySend.BodyLength,

(UIntl6)GRIP_Message_CommandID.NWM_STATUS_REPORT_RESP,

msgHeadRecv.SequencelD);

〃獲取發(fā)送的數(shù)據(jù)包的byte數(shù)組

byte[]msgSend=

this.messageT2.GetSendMessage(msgHeadSend,msgBodySend);

intlenSend=0;

〃發(fā)送消息

SendMsg(msgSend,this.socketT2,lenSend);

if(this.sessionlD==msgBodyRecv.SessionlD)

(

this.ShowMessage(this.txtMessagePing,"\r\n");

this.ShowMessage(this.txtMessagePing,'*[Status_Report]

指令成功)

this.ShowMessage(this.txtMessagePing,u[Status_Report]

IEEEAddress:”+msgBodyRecv.Node.IEEEAddress);

this.ShowMessage(this.txtMessagePing,'IStatus_Report]

ShortAddress:"+msgBodyRecv.Node.ShortAddress.ToString(uX4n));

this.ShowMessage(this.txtMessagePing,u

[?Status_Report]Cause:n+msgBodyRecv.Cause);

lhis.ShowMessage(this.txtMessagePing,H[Status_Report]

SessionlD:”+msgBodyRecv.SessionlD);

this.ShowMessage(this.txtMessagePing,n[Status_Report]

DeviceName:"+msgBodyRecv.DeviceName);

this.ShowMessage(this.txtMessagePing,u[Status_Report]

DeviceType:"+msgBodyRecv.DeviceType);

this.ShowMessage(this.txtMessagePing,n[Status_Report]

Status:"+msgBodyRecv.Status);

this.ShowMessage(this.txtMessagePing,u[Status_Report]

PanlD:0+msgBodyRecv.PanID+”——"+msgBodyRecv.PanID.ToString(',X4,'));

this.ShowMessage(this.txtMessagePing,u[Status_Report]

ParentlEEEAddress:"+msgBodyRecv.ParentNode.IEEEAddress);

this.ShowMessage(this.txtMessagePing,u[Status_Report]

ParentShortAddress:"+msgBodyRecv.ParentNode.ShortAddress.ToString(,,X4,'));

this.ShowMessage(this.txtMessagePing,"[Status_Report]

SensorEnable:"+msgBodyRecv.SensorEnable);

this.ShowMessage(this.txtMessagePing,'IStatus_Report]

SensorClass:"+msgBodyRecv.SensorClass);

this.ShowMessage(this.txtMessagePing,'*[Status_Report]

SensorType:"+msgBodyRecv.SensorType.ToString("X4"));

this.ShowMessage(this.txtMessagePing,

this.ShowMessage(this.txtMessagePing,H

[Status_Report_Resp]指令成功");

)

)

catch(Exceptionex)

(

this.ShowMessage(this.txtMessagePing,n[Status_Report]指

令失敗錯(cuò)誤:"+ex.Message);

#endregion

#regionSensor_Report

if(msgHeadRecv.MessageCommand==

(UIntl6)GRIP_Message_CommandID.NWM_SENSOR_REPORT)

(

try

(

〃定義一個(gè)消息體長度的byte數(shù)組

byte[JmsgBodyRecvBytes=new

bytefmsgHeadRecv.MessageLength];

〃接收消息體的長度變量

intlenBodyRecv=0;

〃接收消息體

RecvMsg(msgBodyRecvBytes,this.socketT2,lenBodyRecv);

〃實(shí)例化節(jié)點(diǎn)報(bào)告命令

GRIP_MessageBody_Sensor_ReportmsgBodyRecv=new

GRIP_MessageBody_Sensor_Report();

//將消息體按照本地字節(jié)與網(wǎng)絡(luò)字節(jié)的順序轉(zhuǎn)換

msgBodyRecv.ConvertReciveBytes(msgBodyRecvBytes);

UIntl6status=0;

〃實(shí)例化節(jié)點(diǎn)報(bào)告命令的響應(yīng)

GRIP_MessageBody_Sensor_Report_RespmsgBodySend=

newGRIP_MessageBody_Sensor_Report_Resp(status);

//實(shí)例化并獲得消息頭

GRIP_MessageHeadmsgHeadSend=new

GRIP_MessageHead(msgBodySend.BodyLength,

(UIntl6)GRIP_Message_CommandID.NWM_SENSOR_REPORT_RESP,

msgHeadRecv.SequencelD);

〃獲取發(fā)送的數(shù)據(jù)包的byte數(shù)組

byte[]msgSend=

this.messageT2.GetSendMessage(msgHeadSend,msgBodySend);

intlenSend=0;

〃發(fā)送消息

SendMsg(msgSend,this.socketT2,lenSend);

〃推斷會話ID是否相同

if(this.sessionlD==msgBodyRecv.SessionlD)

(

this.ShowMessage(this.txtMessagePing,u\r\n");

this.ShowMessage(this.txtMessagePing,0

[Sensor_Report]指令成功)

this.ShowMessage(this.txtMessagePing,u

[Sensor_Report]lEEEAddress:"+msgBodyRecv.Node.IEEEAddress);

this.ShowMessage(this.txtMessagePing,u

[Sensor_Report]ShortAddress:"+msgBodyRecv.Node.ShortAddress.ToString(uX4u));

this.ShowMessage(this.txtMessagePing,u

[Sensor_Report]Cause:n+msgBodyRecv.Cause);

lhis.ShowMessage(this.txtMessagePing,H

[Sensor_Report]SessionlD:"+msgBodyRecv.SessionlD);

this.ShowMessage(this.txtMessagePing,*'

[Sensor_Report]DataType:"+msgBodyRecv.DataType);

#regionSensojRead引。y發(fā)巧6

//推斷節(jié)點(diǎn)數(shù)據(jù)采集是否成功

if(msgBodyRecv.DataType==0x01)

(

this.ShowMessage(this.txtMessagePing,"

[Sensor_Report(SensorData)]SensorClass:"+

((GRIP_SensorData)msgBodyRecv.Data).SensorClass);

this.ShowMessage(this.txtMessagePing,n

[Sensor_Report(SensorData)]SensorType:"+

((GRIP_SensorData)msgBodyRecv.Data).SensorType.ToString("X4"));

this.ShowMessage(this.txtMessagePing,"

[Sensor_Report(SensorData)]SensorDataLength:"+

((GRIP_SensorData)msgBodyRecv.Data).SensorDataLength);

#region溫濕度傳感器

〃推斷溫濕度傳感器節(jié)點(diǎn)的數(shù)據(jù)長度是否正確同

時(shí)在窗口中顯示溫濕度

if

(((GRIP_SensorData)msgBodyRecv.Data).SensorDataLength==4)

(

this.ShowMessage(this.txtMessagePing,"

[Sensor_Report(SensorData)]Temp_H:"+((GRIP_SensorData)msgBodyRecv.Data).Temp_H);

this.ShowMessage(this.txtMessagePing,"

[Sensor_Report(SensorData)]Temp_L:"+((GRIP_SensorData)msgBodyRecv.Data).Temp_L);

this.ShowMessage(this.txtMessagePing,"

【Sensor_Report(SensorData)】當(dāng)前溫度:”+((GRIP_SensorData)msgBodyRecv.Data).Temp_H

++((GRIP_SensorData)msgBodyRecv.Data).Temp_L+

this.ShowMessage(this.txtMessagePing,"

[Sensor_Report(SensorData)]Humi_H:n+((GRIP_SensorData)msgBodyRecv.Data).Humi_H);

this.ShowMessage(this.txtMessagePing,"

[Sensor_Report(SensorData)]Humi_L:”+((GRIP_SensorData)msgBodyRecv.Data).Humi_L);

this.ShowMessage(this.txtMessagePing,"

[Sensor_Report(SensorData)]當(dāng)前濕度:"+((GRIP_SensorData)msgBodyRecv.Data).Humi_H

++((GRIP_SensorData)msgBodyRecv.Data).Humi_L+"%”);

ShowTempValue(this.lblTempValue,

((GRIP_SensorData)msgBodyRecv.Data).Temp_H++

((GRIP_SensorData)msgBodyRecv.Data).Temp_L+“℃");

ShowTempValue(this.lblHumiValue,

((GRIP_SensorData)msgBodyRecv.Data).Humi_H++

((GRIP_SensorData)msgBodyRecv.Data).Humi_L+"%”);

)

#endregion

#region數(shù)碼管節(jié)點(diǎn)

〃推斷數(shù)碼管節(jié)點(diǎn)數(shù)據(jù)長度是否正確

if

(((GRIP_SensorData)msgBodyRecv.Data).SensorDataLength==5)

(

this.ShowMessage(this.txtMessagePing,"

[Sensor_Report(SensorData)]Value:"+((GRIP_SensorData)msgBodyRecv.Data).Value);

this.ShowMessage(this.txtMessagePing,"

[Sensor_Report(SensorData)]LED:"+((GRIP_SensorData)msgBodyRecv.Data).LED);

this.ShowMessage(this.txtMessagePing,"

[Sensor_Repor

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論