版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年版销售代表合同合同模板版B版
- 2024年私人车位租赁协议书
- 《无线体域网动态口令认证协议的安全性研究》
- 《海印地产信托受益权资产证券化案例分析》
- 2025餐饮经营承包合同
- 2025公司跟法人的借款合同标准模板
- 2024年电子病历系统开发合同
- 2025道路施工承包合同模板
- 2024年离婚协议书起草与审查专业服务合同3篇
- 2024年度跨境电商物流居间服务合同6篇
- 仓储管理练习题及答案
- 污水处理厂的工艺流程设计
- 危险品运输车辆租赁合同
- 急性呼吸衰竭的急救(病案查房)
- 2025年日历有农历有周数周一开始(A4纸可编辑可直接打印)
- 2006年度银行业金融机构信息科技风险评价审计要点
- 基于PLC的校园照明智能控制系统设计毕业设计论文
- 现浇梁钢管柱+贝雷片支架验收表
- 2022年中考物理真题选及参考答案-电学计算题
- 车间现场安全培训内容课件参考
- 全员安全生产责任制培训
评论
0/150
提交评论