WSN技术的智能仓储环境监测与智能控制系统设计与实_第1页
WSN技术的智能仓储环境监测与智能控制系统设计与实_第2页
WSN技术的智能仓储环境监测与智能控制系统设计与实_第3页
WSN技术的智能仓储环境监测与智能控制系统设计与实_第4页
WSN技术的智能仓储环境监测与智能控制系统设计与实_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

WSN技术的智能仓储环境监测与智能控制系统设计

与实

一、教学目标

1、掌握WSN网关通信的有关应用。

2、掌握WSN实现了信息的采集、信息传输与信息处理模式。

3、掌握WSN实现仓储环境监控智能化技术方法。

二、教学内容

10.1设备简介

10.1.1WSN网关

图10-1WSN网关图

供电电源:DC5V,信号获取接口:USB,上位机通信接口:以太网口,操作系统:Linux«

网关通过USB与协调器连接,并通过协调器与各Zigbee节点进行信号通讯。

10.1.2协调器

图10-2协调器图

供电方式:USB供电。该设备为网关与各传感器节点的中继,负责转发Zigbee信号。

10.1.3温湿度传感器模块

图10-3温湿度传感模块图

供电方式:DC5V,通讯协议:Zigbee。集成模块:温湿度传感器。

该节点可采集温湿度数据,并通过Zigbee协议传输到网关,上位机通过访问网关获取

温湿度数据。

10.1.4电磁继电器模块

图10-4电磁继电器模块图

供电方式:DC5V,继电器操纵路数:4路,与网关通信协议:Zigbee。

该继电器可操纵四路电源,在京胜世纪的实验台中,操纵了两路灯光、一路风扇与一路

电磁门。

10.2类的设计与实现

在本部分实训中我们要用到数据库来存储当前各个节点的信息,以面向对象的思想为例,

我们需要先编写几对数据库操作的基础类与将节点信息储存的对象类。

10.2.1DBConnection.cs类

这个类文件是要对数据库进行连接操作,登录到本地的数据库。

引用命名空间。该命名空间是SQLServer.NET数据提供者,是SQLServer专用的内置.NET

提供者,引用该命名空间后就能够获得最好的性能与对基础功能的最直接访问。

usingSystem.Data.SqlClient;

添加变量

privatestringstr;

privateSqlCommandsqlcom;

privateSqlConnectionconn;

在构造函数中写入连接数据库方法

///<summary>

///连接数据库的方法

///</summary>

publicDBConnection()

{

〃定义了要连接的数据库的位置,数据库的名称,登录帐号与密码

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();

}

上边定义了两个全局变量,分变是字符型str,变量量为数据库连接字符串内容:Server

表示正在访问的数据库服务器名称,其格式是“计算机名'实例名”,假如是本地的数据库

服务器同时使用的是SQLServer的默认实例名,则能够使用(Local)或者.来表示。DataBase

表示数据库名称,即该项目所要连接的数据库名;Uid表示数据库服务器的登录名称;Pwd

表示数据库服务器的密码。

返回数据连接方法

///〈summary〉

///返回数据连接方法

///〈/summary〉

///<returns></retums>

publicSqlConnectionGetConnection()

{

returnthis.conn;

}

10.2.2DBOperate.es类

该类的作用是对程序中的要用到的对数据库的操作进行统一,涉及到对数据库的操作

时,如对数据库的增删改操作,都能够直接调用该类,相应的方法。传入相应的参数即可。

添加引用

usingSystem.Data.SqlClient;

usingSystem.Data;

定义变量

SqlCommandsqlcom;

SqlConnectionconn;

默认构造方法

///<summary>

///构造函数

///</summary>

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

publicDBOperate(DBConnectiondbc)

(

sqlcom=newSqlCommand();

sqlcom.Connection=dbc.GetConnection();

)

编写执行方法

///<summary>

///执行sql语句

///</summary>

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

publicvoidExecuteSQL(stringsql)

(

try

(

this.sqlcom.ExecuteNonQueryO;

}

catch{}

}

///<summary>

///获取数据表格的方法

///</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>

///执行SQL语句,获取string类型数据

///〈/summary〉

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

///〈returns〉获取到的string类型数据〈/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开发的,因此能够使用using指令能够引用SQLServer专用

的.NET数据库提供者:usingSystem.Data.SqlClient;

提取数据库中数据的4步:

1)连接数据源

2)打开连接

3)发出一个SQL查询命令

4)执行命令语句

541(2011慎8211是一个用于5(314£T数据提供者的连接对象名称,表示SQLServer数据

库的一个打开的连接。SqlConnection对象表示与SQLServer数据源的一个唯一的会话。

关于客户端/服务器数据库系统,它等效于到服务器的网络连接。SqlConnection与

SqlDataAdapter与SqlCommand一起使用,能够在连接MicrosoftSQLServer数据库时提

高性能。

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

Server=locak)st,表示正在访问的SQLServer名称,其格式是“计,算机名'实例名计算机名

(localhost)是一个非常方便的SQLServer简短名称,它表示运行在当前机器上的服务器实

例。DataBase=AccessControl,指定数据库的名称。uid=sa;pwd=123,表示登录数据库的用户

名与密码,这是SQLServer与Windows的标准内置安全。

this.conn.Open();打开数据库的连接。CommandText属性获取或者设置要对数据源执行的

SQL语句或者存储过程。ExecuteNonQuery()方法,对连接执行SQL语句并返回受影响的

行数。SqlDataAdapter类表示用于填充DataSet与更新SQLServer数据库的一组数据命令

与一个数据库连接。SqlDataAdapter是DataSet与SQLServer之间的桥接器,用于检索与

储存数据。DataSet是ADO.NET结构的要紧组件,它是从数据源中检索到的数据在内存中

的缓存。DataSet由一组DataTable对象构成。

try-catch语句由一个try块后跟一个或者多个catch子句构成,这些子句指定不一致的

特殊处理程序。

try块包含可能导致特殊的保护代码。该块一直执行到引发特殊或者成功完成为止。比

如,下列强制转换null对象的尝试引发NullReferenceException特殊:

objecto2=null;

try

(

inti2=(int)o2;〃错误

}

10.2.3ObjCargoNode.cs类

该类是对节点信息与数据库中的进行操作进行的修改。节点加入网络后,段地址会存储

到数据库中。对当前节点的识别也需要读取数据库中已输入的节点信息。

添加命名空间

usingSystem.Data;

定义变量

privateintcargo;

privatestringiEEEAddress;

privatestringshortAddress;

privateintnodeType;

构造函数

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功能设计与实现

该部分实训内容要紧是通过程序与wsn的网关进行通信,这里我们需要学习关于wsn

网关通信的有关应用。该模块程序中的代码,在后面会分解出来应用。

向窗体中添加一个TabControl控件,在TabPages属性添加6个成员。

控件Name属性Text属性UseVisualStyleBac

kColor属性

TabPagetpConnect建立连接True

TabPagetpPingPing指令True

TabPagetpConfigReadConfigRead指令True

TabPagetpConfigWriteConfig_Write指令True

TabPagetpSensorReadSensor_Read指令True

TabPagetpSensorWriteSensor_Write指令True

10.3.1创建建立连接

1、建立连接TabPage窗体属性,窗体如图10-5所示。

TextBox

控化

更掾

2、设置窗体属性

StartPositionMaximizeBoxMinimizeBoxFormBorderStyle

窗体Text属性

属性属性属性属性

Zigbee节

frmGoodsOutCenterParentFalseFalseFixedSingle点连接实

3、设置Labie控件属性

控件Name属性Text属性

T1通道Socket

LableIbllPAddressTlIP地址

LableIblPortTl端口号

LableIblAppIDTlAppID

LableIblPasswordTlPassword

T2通道Socket

LablelblIPAddressT2IP地址

LablelblPortT2端口号

LablelblAppIDT2AppID

LablelblPasswordT2Password

4、设置TextBox属性

控件Name属性Text属性

TextBoxtxtIPAddressTI192.168.1.230

TextBoxtxtPortTl4000

TextBoxtxtAppIDTl1001

TextBoxtxtPasswordTlKingvcSzigvine

TextBoxtxtIPAddressT2192.168.1.230

TextBoxtxtPortT24000

TextBoxtxtAppIDT21001

TextBoxtxtPasswordT2KingvcSzigvine

5、设置显示]言息内容的TextBox属性

控件Name属性Dock属性MultilineReadOnle属ScorllBars

属性性属性

TextBoxtxtMessageConnectFillTrueTrueVertical

6、设置GroupBox控件属性

控件Name属性Text属性

GroupBoxgbSocket_TlT1通道Socket

GroupBoxgbSocket_T2T2通道Socket

7、设置Button按钮事件

控件Name属性Text属性UseVisualStyleBackColor

属性

ButtonbtnConnectSocketTlSocketTl连接True

ButtonbtnConnectTlT1通道连接True

ButtonbtnConnectSocketT2SocketT2连接True

ButtonbtnConnectT2T2通道连接True

8、窗体后台代码:

1)定义变量

〃定义一个函数结构的委托

privatedelegatevoidShowMessageDel(TextBoxtxt,stringmsg);

privatedelegatevoidShowMessageDelOfTempLabel(LabelIbl,stringvalue);

〃实例化T1数据包消息类

privateGRIP_MessagemessageTl=newGRIP_Message();

〃实例化T2数据包消息类

privateGRIP_MessagemessageT2=newGRIP_Message();

//定义TISocket通讯接口

privateSocketsocketTl;

//定义T2soeket通讯接口

privateSocketsocketT2;

〃定义T1通道流水号

privateUIntl6sequencelDTl;

〃定义T2通道流水号

privateUIntl6sequenceIDT2;

privateinttime;

〃定义一个线程

privateThreadthread;

//sessionlD为连接后网关随机分配的一个标识ID

privatestringsessionlD=

2)构造函数

///<summary>

///构造函数

///</summary>

publicfrmZigBee()

{

InitializeComponent();

)

3)编写方法

Socket发送消息方法

///<summary>

///Socket发送消息方法

///</summary>

///<paramname="msgSencT>要发送的字节数组v/param>

///<paramname="socket”>Socket实例</param>

///<paramname="1enSend”>已发送的长度</param>

privatevoidSendMsg(byte[]msgSend,Socketsocket,intlenSend)

(

//需对发送的字节长度有明确认识,发送一段字节后需要加上该段字节的长度

while(lenSend<msgSend.Length)

(

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

SocketFlags.None);

)

)

Socket接收信息的方法

///<summary>

///Socket接收消息方法

///</summary>

///<paramname="msgRecv”>要接收的字节数组</param>

///<paramname="socket”>Socket实例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通道线程执行方法

///</summary>

privatevoidRun()

{

try

(

while(true)

(

#region解析消息头

〃定义一个byte类型的6位数组

bytelJmsgRecvHeadBytes=newbyte[61;

〃接收到的消息头的长度

intlenRecv=0;

//Socket接收消息的方法

RecvMsg(msgRecvHeadBytes,this.socketT2,lenRecv);

〃实例化一个消息头类

GRIP_MessageHeadmsgHeadRecv=newGRIP_MessageHead();

〃对接收到的消息头进行转换

msgHeadRecv.GetHeadBytesOfKecive(msgRecvHeadBytes,0,6);

#endregion

#region心跳包

if(msgHeadRecv.MessageCommand==

(UIntl6)GRIP_Message_CommandID.NWM_HEARTBEAT)

(

try

(

〃消息的长度为16位无符号整数

UIntl6messageLength=0;

〃心跳报消息体「信息为空

UIntl6messageCommand=

(UIntl6)GRIP_Message_CommandID.NWM_HEARTBEAT_RESP;

〃获取获取流水号

UIntl6sequencelD=msgHeadRecv.SequencelD;

〃实例化一个消息头类

GRIP_MessageHeadmsgHeadSend=new

GRIP_MessageHead(messageLength,messageCommand,sequencelD);

〃按照本地字节转换发送的信息

byte[]msgSend=msgHeadSend.GetHeadBytesOfSend();

〃发送信息方法

SendMsg(msgSend,this.socketT2,0);

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

)

catch(Exceptionex)

{

MessageBox.Show("【T2通道心跳包】错误:"+ex.Message);

}

)

#endregion

#regionStatus_Report

〃推断消息头返回命令字是否正确

if(msgHeadRecv.MessageCommand==

(Ulntl6)GRIP_Message_CommandlD.NWM_STATUS_REPORT)

(

try

(

〃定义一个消息头字节长度的byte数组

byte[JmsgBodyRecvBytes=new

bytefmsgHeadRecv.MessageLength];

〃定义消息体长度变量

intlenBodyRecv=0;

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

RecvMsg(msgBodyRecvBytes,this.socketT2,lenBodyRecv);

〃实例化节点报告命令

GRIP_MessageBody_Status_ReportmsgBodyRecv=new

GRIP_MessageBody_Status_Report();

//按照本地字节与网络字节的顺序转换接收到的消息体

msgBodyRecv.ConvertReciveBytes(msgBodyRecvBytes);

UIntl6status=0;

〃实例化节点报告命令响应

GRIP_MessageBody_Status_Report_RespmsgBodySend=

newGRIP_MessageBody_Status_Report_Resp(status);

//实例化消息头类,并将响应参数传入

GRIP_MessageHeadmsgHeadSend=new

GRIP_MessageHead(msgBodySend.BodyLength,

(UIntl6)GRIP_Message_CommandID.NWM_STATUS_REPORT_RESP,

msgHeadRecv.SequencelD);

〃获取发送的数据包的byte数组

byte[]msgSend=

this.messageT2.GetSendMessage(msgHeadSend,msgBodySend);

intlenSend=0;

〃发送消息

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]指

令失败错误:"+ex.Message);

#endregion

#regionSensor_Report

if(msgHeadRecv.MessageCommand==

(UIntl6)GRIP_Message_CommandID.NWM_SENSOR_REPORT)

(

try

(

〃定义一个消息体长度的byte数组

byte[JmsgBodyRecvBytes=new

bytefmsgHeadRecv.MessageLength];

〃接收消息体的长度变量

intlenBodyRecv=0;

〃接收消息体

RecvMsg(msgBodyRecvBytes,this.socketT2,lenBodyRecv);

〃实例化节点报告命令

GRIP_MessageBody_Sensor_ReportmsgBodyRecv=new

GRIP_MessageBody_Sensor_Report();

//将消息体按照本地字节与网络字节的顺序转换

msgBodyRecv.ConvertReciveBytes(msgBodyRecvBytes);

UIntl6status=0;

〃实例化节点报告命令的响应

GRIP_MessageBody_Sensor_Report_RespmsgBodySend=

newGRIP_MessageBody_Sensor_Report_Resp(status);

//实例化并获得消息头

GRIP_MessageHeadmsgHeadSend=new

GRIP_MessageHead(msgBodySend.BodyLength,

(UIntl6)GRIP_Message_CommandID.NWM_SENSOR_REPORT_RESP,

msgHeadRecv.SequencelD);

〃获取发送的数据包的byte数组

byte[]msgSend=

this.messageT2.GetSendMessage(msgHeadSend,msgBodySend);

intlenSend=0;

〃发送消息

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发巧6

//推断节点数据采集是否成功

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温湿度传感器

〃推断温湿度传感器节点的数据长度是否正确同

时在窗口中显示温湿度

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)】当前温度:”+((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)]当前湿度:"+((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数码管节点

〃推断数码管节点数据长度是否正确

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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论