版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.:.;工程十 基于WSN技术的智能仓储环境监测与智能控制系统设计与实现一、教学目的掌握WSN网关通讯的相关运用。掌握WSN实现了信息的采集、信息传输和信息处置方式。掌握WSN实现仓储环境监控智能化技术方法。二、教学内容10.1设备简介10.1.1 WSN网关图10-1 WSN网关图 供电电源:DC5V,信号获取接口:USB,上位机通讯接口:以太网口,操作系统:Linux。网关经过USB与协调器衔接,并经过协调器与各Zigbee节点进展信号通讯。10.1.2协调器图10-2 协调器图供电方式:USB供电。该设备为网关与各传感器节点的中继,担任转发Zigbee信号。10.1.3温湿度传感器模块图
2、10-3 温湿度传感模块图供电方式:DC5V,通讯协议:Zigbee。集成模块:温湿度传感器。该节点可采集温湿度数据,并经过Zigbee协议传输到网关,上位机经过访问网关获取温湿度数据。10.1.4电磁继电器模块图10-4电磁继电器模块图供电方式:DC5V,继电器控制路数:4路,与网关通讯协议:Zigbee。该继电器可控制四路电源,在京胜世纪的实验台中,控制了两路灯光、一路风扇和一路电磁门。10.2类的设计与实现在本部分实训中我们要用到数据库来存储当前各个节点的信息,以面向对象的思想为例,我们需求先编写几对数据库操作的根底类和将节点信息保管的对象类。10.2.1 DBConnection.cs
3、类这个类文件是要对数据库进展衔接操作,登录到本地的数据库。援用命名空间。该命名空间是SQL Server.NET数据提供者,是SQL Server公用的内置.NET提供者,援用该命名空间后就可以获得最好的性能和对根底功能的最直接访问。using System.Data.SqlClient; 添加变量 private string str; private SqlCommand sqlcom; private SqlConnection conn;在构造函数中写入衔接数据库方法/ / 衔接数据库的方法 / public DBConnection() /定义了要衔接的数据库的位置,数据库的称号,登
4、录帐号和密码 this.str = Server=localhost;DataBase=SmartShelfD;uid=sa;pwd=123; this.conn = new SqlConnection(str); this.sqlcom = new SqlCommand(); this.sqlcom.Connection = this.conn; this.conn.Open(); 上边定义了两个全局变量,分变是字符型str,变量量为数据库衔接字符串内容:Server表示正在访问的数据库效力器称号,其格式是“计算机名实例名,假设是本地的数据库效力器并且运用的是SQL Server的默许实例名
5、,那么可以运用Local或.来表示。DataBase表示数据库称号,即该工程所要衔接的数据库名;Uid表示数据库效力器的登录称号;Pwd表示数据库效力器的密码。前往数据衔接方法/ / 前往数据衔接方法 / / public SqlConnection GetConnection() return this.conn; 10.2.2 DBOperate.cs类该类的作用是对程序中的要用到的对数据库的操作进展一致,涉及到对数据库的操作时,如对数据库的增删改操作,都可以直接调用该类,相应的方法。传入相应的参数即可。添加援用using System.Data.SqlClient;using Syste
6、m.Data;定义变量SqlCommand sqlcom;SqlConnection conn;默许构造方法 / / 构造函数 / / public DBOperate(DBConnection dbc) sqlcom = new SqlCommand(); sqlcom.Connection = dbc.GetConnection(); 编写执行方法/ / 执行sql语句 / / public void ExecuteSQL(string sql) this.sqlcommandText = sql; try this.sqlcom.ExecuteNonQuery(); catch / /
7、获取数据表格的方法 / / / sql语句 public DataTable GetDataTable(string sql) this.sqlcommandText = sql; SqlDataAdapter sda = new SqlDataAdapter(this.sqlcom); DataSet ds = new DataSet(); DataTable dt = new DataTable(); try sda.Fill(ds); dt = ds.Tables0; catch return dt; / / 执行SQL语句,获取string类型数据 / / SQL语句 / 获取到的st
8、ring类型数据 public string GetString(string sql) string resultStr = ; this.sqlcommandText = sql; try resultStr = this.sqlcom.ExecuteScalar().ToString(); catch (SqlException e) finally this.sqlcom.Dispose(); return resultStr; public int GetInt(string sql) int resultInt = 0; this.sqlcommandText = sql; try
9、 resultInt = Convert.ToInt32(this.sqlcom.ExecuteScalar().ToString(); catch (SqlException e) System.Windows.Forms.MessageBox.Show(e.Message); finally this.sqlcom.Dispose(); return resultInt; 本资源是基于SQL Server开发的,所以可以运用using指令可以援用SQL Server 公用的.NET数据库提供者:using System.Data.SqlClient;提取数据库中数据的4步:衔接数据源翻开衔
10、接发出一个SQL查询命令执行命令语句SqlConnection是一个用于SQL .NET数据提供者的衔接对象称号,表示 SQL Server 数据库的一个翻开的衔接。SqlConnection 对象表示与 SQL Server 数据源的一个独一的会话。对于客户端/效力器数据库系统,它等效于到效力器的网络衔接。SqlConnection 与 SqlDataAdapter 和 SqlCommand 一同运用,可以在衔接 Microsoft SQL Server 数据库时提高性能。Server=localhost;DataBase=AccessControl;uid=sa;pwd=123Server
11、=localost,表示正在访问的SQL Server称号,其格式是“计算机名实例名。计算机名localhost是一个非常方便的SQL Server简短称号,它表示运转在当前机器上的效力器实例。DataBase=AccessControl,指定数据库的称号。uid=sa;pwd=123,表示登录数据库的用户名和密码,这是SQL Server和Windows的规范内置平安。this.conn.Open();翻开数据库的衔接。CommandText属性获取或设置要对数据源执行的 SQL 语句或存储过程。ExecuteNonQuery ()方法,对衔接执行 SQL 语句并前往受影响的行数。SqlDa
12、taAdapter 类表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库衔接。SqlDataAdapter 是 DataSet 和 SQL Server 之间的桥接器,用于检索和保管数据。DataSet 是 ADO.NET 构造的主要组件,它是从数据源中检索到的数据在内存中的缓存。DataSet 由一组 DataTable 对象组成。try-catch 语句由一个 try 块后跟一个或多个 catch 子句构成,这些子句指定不同的异常处置程序。try 块包含能够导致异常的维护代码。该块不断执行到引发异常或胜利完成为止。例如,以下强迫转换 null 对象
13、的尝试引发 NullReferenceException 异常:object o2 = null;try int i2 = (int)o2; /错误10.2.3 ObjCargoNode.cs类该类是对节点信息与数据库中的进展操作进展的修正。节点参与网络后,段地址会存储到数据库中。对当前节点的识别也需求读取数据库中已输入的节点信息。添加命名空间using System.Data;定义变量private int cargo; private string iEEEAddress; private string shortAddress; private int nodeType;构造函数 pub
14、lic ObjCargoNode() public ObjCargoNode(int cargo) this.cargo = cargo; DataTable dtb = Program.dbo.GetDataTable(string.Format(select Cargo,IEEEAddress,ShortAddress,NodeType from CargoNode where Cargo=0 , this.cargo); DataRow row = dtb.Rows0; this.cargo = Convert.ToInt32(rowCargo.ToString(); this.iEEE
15、Address = rowIEEEAddress.ToString(); this.shortAddress = rowShortAddress.ToString(); this.nodeType = Convert.ToInt32(rowNodeType.ToString(); 属性public int Cargo get return this.cargo; public string IEEEAddress get return this.iEEEAddress; public string ShortAddress get return this.shortAddress; set t
16、his.shortAddress = value; public int NodeType get return this.nodeType; 方法public void Insert() Program.dbo.ExecuteSQL(string.Format(update CargoNode set ShortAddress=0 where IEEEAddress=1, this.shortAddress, this.iEEEAddress); 10.3功能设计与实现该部分实训内容主要是经过程序和wsn的网关进展通讯,这里我们需求学习关于wsn网关通讯的相关运用。该模块程序中的代码,在后面
17、会分解出来运用。向窗体中添加一个TabControl控件,在TabPages属性添加6个成员。控件Name属性Text属性UseVisualStyleBackColor属性TabPagetpConnect建立衔接TrueTabPagetpPingPing指令TrueTabPagetpConfigReadConfig_Read指令TrueTabPagetpConfigWriteConfig_Write指令TrueTabPagetpSensorReadSensor_Read指令TrueTabPagetpSensorWriteSensor_Write指令True10.3.1创建建立衔接1、建立衔接T
18、abPage窗体属性,窗体如图10-5所示。 图10-5 Zigbee节点衔接实验图向窗体添加1个SplitContainer控件,2个GroudBox控件,8个Label控件,9个TextBox控件,4个Button控件。更改窗体和控件属性:2、设置窗体属性窗体StartPosition属性MaximizeBox属性MinimizeBox属性FormBorderStyle属性Text属性frmGoodsOutCenterParentFalseFalseFixedSingleZigbee节点衔接实验3、设置Lable控件属性控件Name属性Text属性T1通道SocketLablelblIPA
19、ddressT1IP地址LablelblPortT1端口号LablelblAppIDT1AppIDLablelblPasswordT1PasswordT2通道SocketLablelblIPAddressT2IP地址LablelblPortT2端口号LablelblAppIDT2AppIDLablelblPasswordT2Password4、设置TextBox属性控件Name属性Text属性TextBoxtxtIPAddressT130TextBoxtxtPortT14000TextBoxtxtAppIDT11001TextBoxtxtPasswordT1Kingvcz
20、igvineTextBoxtxtIPAddressT230TextBoxtxtPortT24000TextBoxtxtAppIDT21001TextBoxtxtPasswordT2Kingvczigvine5、设置显示信息内容的TextBox属性控件Name属性Dock属性Multiline属性ReadOnle属性ScorllBars属性TextBoxtxtMessageConnectFillTrueTrueVertical6、设置GroupBox控件属性控件Name属性Text属性GroupBoxgbSocket_T1T1通道SocketGroupBoxgbSocket
21、_T2T2通道Socket7、设置Button按钮事件控件Name属性Text属性UseVisualStyleBackColor属性ButtonbtnConnectSocketT1SocketT1衔接TrueButtonbtnConnectT1T1通道衔接TrueButtonbtnConnectSocketT2SocketT2衔接TrueButtonbtnConnectT2T2通道衔接True8、窗体后台代码:定义变量 /定义一个函数构造的委托 private delegate void ShowMessageDel(TextBox txt, string msg); private dele
22、gate void ShowMessageDelOfTempLabel(Label lbl, string value); /实例化T1数据包音讯类 private GRIP_Message messageT1 = new GRIP_Message(); /实例化T2数据包音讯类 private GRIP_Message messageT2 = new GRIP_Message(); /定义T1Socket通讯接口 private Socket socketT1; /定义T2Socket通讯接口 private Socket socketT2; /定义T1通道流水号 private UInt1
23、6 sequenceIDT1; /定义T2通道流水号 private UInt16 sequenceIDT2; private int time; /定义一个线程 private Thread thread; /sessionID为衔接后网关随机分配的一个标识ID private string sessionID = ; 构造函数/ / 构造函数 / public frmZigBee() InitializeComponent(); 编写方法Socket发送音讯方法 / / Socket发送音讯方法 / / 要发送的字节数组 / Socket实例 / 已发送的长度 private void S
24、endMsg(byte msgSend, Socket socket, int lenSend) /需对发送的字节长度有明确认识,发送一段字节后需求加上该段字节的长度 while (lenSend msgSend.Length) lenSend += socket.Send(msgSend, lenSend, msgSend.Length - lenSend, SocketFlags.None); Socket接纳信息的方法 / / Socket接纳音讯方法 / / 要接纳的字节数组 / Socket实例 / 已接纳的长度 private void RecvMsg(byte msgRecv,
25、Socket socket, int lenRecv) while (lenRecv msgRecv.Length) lenRecv += socket.Receive(msgRecv, lenRecv, msgRecv.Length - lenRecv, SocketFlags.None); 在控件中显示信息的方法/ / 在控件中显示音讯的方法 / / / private void ShowMessage(TextBox txt, string msg) if (txt.InvokeRequired) ShowMessageDel smd = new ShowMessageDel(ShowM
26、essage); txt.Invoke(smd, txt, msg); else txt.Text += rn【 + DateTime.Now.ToString(yyyy-MM-dd hh-mm-ss) + 】 + msg; 在Label控件中显示音讯的方法 / / 在Label控件中显示音讯的方法 / / 控件称号 / 要显示的值 private void ShowTempValue(Label lbl, string value) if (lbl.InvokeRequired) ShowMessageDelOfTempLabel smd = new ShowMessageDelOfTemp
27、Label(ShowTempValue); lbl.Invoke(smd, lbl, value); else lbl.Text = value; 线程方法/ / T2通道线程执行方法 / private void Run() try while (true) #region 解析音讯头 /定义一个byte类型的6位数组 byte msgRecvHeadBytes = new byte6; /接纳到的音讯头的长度 int lenRecv = 0; /Socket接纳音讯的方法 RecvMsg(msgRecvHeadBytes, this.socketT2, lenRecv); /实例化一个音讯
28、头类 GRIP_MessageHead msgHeadRecv = new GRIP_MessageHead(); /对接纳到的音讯头进展转换 msgHeadRecv.GetHeadBytesOfRecive(msgRecvHeadBytes, 0, 6); #endregion #region 心跳包 if (msgHeadRecv.MessageCommand = (UInt16)GRIP_Message_CommandID.NWM_HEARTBEAT) try /音讯的长度为16位无符号整数 UInt16 messageLength = 0; /心跳报音讯体信息为空 UInt16 mes
29、sageCommand = (UInt16)GRIP_Message_CommandID.NWM_HEARTBEAT_RESP; /获取获取流水号 UInt16 sequenceID = msgHeadRecv.SequenceID; /实例化一个音讯头类 GRIP_MessageHead msgHeadSend = new GRIP_MessageHead(messageLength, messageCommand, sequenceID); /按照本地字节转换发送的信息 byte msgSend = msgHeadSend.GetHeadBytesOfSend(); /发送信息方法 Sen
30、dMsg(msgSend, this.socketT2, 0); /MessageBox.Show(【T2通道心跳包】发送胜利); catch (Exception ex) MessageBox.Show(【T2通道心跳包】错误:+ ex.Message); #endregion #region Status_Report /判别音讯头前往命令字能否正确 if (msgHeadRecv.MessageCommand = (UInt16)GRIP_Message_CommandID.NWM_STATUS_REPORT) try /定义一个音讯头字节长度的byte数组 byte msgBodyRe
31、cvBytes = new bytemsgHeadRecv.MessageLength; /定义音讯体长度变量 int lenBodyRecv = 0; /Socket接纳信息方法接纳信息 RecvMsg(msgBodyRecvBytes, this.socketT2, lenBodyRecv); /实例化节点报告命令 GRIP_MessageBody_Status_Report msgBodyRecv = new GRIP_MessageBody_Status_Report(); /按照本地字节和网络字节的顺序转换接纳到的音讯体 msgBodyRecv.ConvertReciveBytes(
32、msgBodyRecvBytes); UInt16 status = 0; /实例化节点报告命令呼应 GRIP_MessageBody_Status_Report_Resp msgBodySend = new GRIP_MessageBody_Status_Report_Resp(status); /实例化音讯头类,并将呼应参数传入 GRIP_MessageHead msgHeadSend = new GRIP_MessageHead(msgBodySend.BodyLength, (UInt16)GRIP_Message_CommandID.NWM_STATUS_REPORT_RESP, m
33、sgHeadRecv.SequenceID); /获取发送的数据包的byte数组 byte msgSend = this.messageT2.GetSendMessage(msgHeadSend, msgBodySend); int lenSend = 0; /发送音讯 SendMsg(msgSend, this.socketT2, lenSend); if (this.sessionID = msgBodyRecv.SessionID) this.ShowMessage(this.txtMessagePing, rn); this.ShowMessage(this.txtMessagePin
34、g, 【Status_Report】指令胜利); this.ShowMessage(this.txtMessagePing, 【Status_Report】IEEEAddress: + msgBodyRecv.Node.IEEEAddress); this.ShowMessage(this.txtMessagePing, 【Status_Report】ShortAddress: + msgBodyRecv.Node.ShortAddress.ToString(X4); this.ShowMessage(this.txtMessagePing, 【?Status_Report】Cause: +
35、msgBodyRecv.Cause); this.ShowMessage(this.txtMessagePing, 【Status_Report】SessionID: + msgBodyRecv.SessionID); this.ShowMessage(this.txtMessagePing, 【Status_Report】DeviceName: + msgBodyRecv.DeviceName); this.ShowMessage(this.txtMessagePing, 【Status_Report】DeviceType: + msgBodyRecv.DeviceType); this.S
36、howMessage(this.txtMessagePing, 【Status_Report】Status: + msgBodyRecv.Status); this.ShowMessage(this.txtMessagePing, 【Status_Report】PanID: + msgBodyRecv.PanID + + msgBodyRecv.PanID.ToString(X4); this.ShowMessage(this.txtMessagePing, 【Status_Report】ParentIEEEAddress: + msgBodyRecv.ParentNode.IEEEAddre
37、ss); this.ShowMessage(this.txtMessagePing, 【Status_Report】ParentShortAddress: + msgBodyRecv.ParentNode.ShortAddress.ToString(X4); this.ShowMessage(this.txtMessagePing, 【Status_Report】SensorEnable: + msgBodyRecv.SensorEnable); this.ShowMessage(this.txtMessagePing, 【Status_Report】SensorClass: + msgBod
38、yRecv.SensorClass); this.ShowMessage(this.txtMessagePing, 【Status_Report】SensorType: + msgBodyRecv.SensorType.ToString(X4); this.ShowMessage(this.txtMessagePing, rn); this.ShowMessage(this.txtMessagePing, 【Status_Report_Resp】指令胜利); catch (Exception ex) this.ShowMessage(this.txtMessagePing, 【Status_R
39、eport】指令失败错误: + ex.Message); #endregion #region Sensor_Report if (msgHeadRecv.MessageCommand = (UInt16)GRIP_Message_CommandID.NWM_SENSOR_REPORT) try /定义一个音讯体长度的byte数组 byte msgBodyRecvBytes = new bytemsgHeadRecv.MessageLength; /接纳音讯体的长度变量 int lenBodyRecv = 0; /接纳音讯体 RecvMsg(msgBodyRecvBytes, this.soc
40、ketT2, lenBodyRecv); /实例化节点报告命令 GRIP_MessageBody_Sensor_Report msgBodyRecv = new GRIP_MessageBody_Sensor_Report(); /将音讯体按照本地字节和网络字节的顺序转换 msgBodyRecv.ConvertReciveBytes(msgBodyRecvBytes); UInt16 status = 0; /实例化节点报告命令的呼应 GRIP_MessageBody_Sensor_Report_Resp msgBodySend = new GRIP_MessageBody_Sensor_Re
41、port_Resp(status); /实例化并获得音讯头 GRIP_MessageHead msgHeadSend = new GRIP_MessageHead(msgBodySend.BodyLength, (UInt16)GRIP_Message_CommandID.NWM_SENSOR_REPORT_RESP, msgHeadRecv.SequenceID); /获取发送的数据包的byte数组 byte msgSend = this.messageT2.GetSendMessage(msgHeadSend, msgBodySend); int lenSend = 0; /发送音讯 Se
42、ndMsg(msgSend, this.socketT2, lenSend); /判别会话ID能否一样 if (this.sessionID = msgBodyRecv.SessionID) this.ShowMessage(this.txtMessagePing, rn); this.ShowMessage(this.txtMessagePing, 【Sensor_Report】指令胜利); this.ShowMessage(this.txtMessagePing, 【Sensor_Report】IEEEAddress: + msgBodyRecv.Node.IEEEAddress); th
43、is.ShowMessage(this.txtMessagePing, 【Sensor_Report】ShortAddress: + msgBodyRecv.Node.ShortAddress.ToString(X4); this.ShowMessage(this.txtMessagePing, 【Sensor_Report】Cause: + msgBodyRecv.Cause); this.ShowMessage(this.txtMessagePing, 【Sensor_Report】SessionID: + msgBodyRecv.SessionID); this.ShowMessage(
44、this.txtMessagePing, 【Sensor_Report】DataType: + msgBodyRecv.DataType); #region Sensor_Read引y发 /判别节点数据采集能否胜利 if (msgBodyRecv.DataType = 0 x01) this.ShowMessage(this.txtMessagePing, 【Sensor_Report(SensorData)】SensorClass: + (GRIP_SensorData)msgBodyRecv.Data).SensorClass); this.ShowMessage(this.txtMess
45、agePing, 【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 (
46、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.S
47、howMessage(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: + (GRIP_SensorData)msgBodyRecv.Data).Humi_H); this.ShowMessage(th
48、is.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
49、, (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.
50、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, 【Sen
51、sor_Report(SensorData)】Value: + (GRIP_SensorData)msgBodyRecv.Data).Time); #endregion #endregion #region Config_Read引发 /判别节点配置数据采集能否胜利 if (msgBodyRecv.DataType = 0 x02) this.ShowMessage(this.txtMessageConfigRead, 【Sensor_Report(ConfigInfo)】DeviceCountFlag: + (GRIP_NodeConfigInfo)msgBodyRecv.Data).Dev
52、iceConfigFlag); this.ShowMessage(this.txtMessageConfigRead, 【Sensor_Report(ConfigInfo)】DeviceName: + (GRIP_NodeConfigInfo)msgBodyRecv.Data).DeviceName); this.ShowMessage(this.txtMessageConfigRead, 【Sensor_Report(ConfigInfo)】NetWorkKey: + (GRIP_NodeConfigInfo)msgBodyRecv.Data).NetWorkKey); this.ShowM
53、essage(this.txtMessageConfigRead, 【Sensor_Report(ConfigInfo)】PanID: + (GRIP_NodeConfigInfo)msgBodyRecv.Data).PanID + + (GRIP_NodeConfigInfo)msgBodyRecv.Data).PanID.ToString(X4); this.ShowMessage(this.txtMessageConfigRead, 【Sensor_Report(ConfigInfo)】SensorEnable: + (GRIP_NodeConfigInfo)msgBodyRecv.Da
54、ta).SensorEnable); this.ShowMessage(this.txtMessageConfigRead, 【Sensor_Report(ConfigInfo)】SensorClass: + (GRIP_NodeConfigInfo)msgBodyRecv.Data).SensorClass); this.ShowMessage(this.txtMessageConfigRead, 【Sensor_Report(ConfigInfo)】SensorType: + (GRIP_NodeConfigInfo)msgBodyRecv.Data).SensorType.ToStrin
55、g(X4); this.ShowMessage(this.txtMessageConfigRead, 【Sensor_Report(ConfigInfo)】SensorReportPeriod: + (GRIP_NodeConfigInfo)msgBodyRecv.Data).SensorReprotPeriod); this.ShowMessage(this.txtMessageConfigRead, 【Sensor_Report(ConfigInfo)】SensorConfigDataLength: + (GRIP_NodeConfigInfo)msgBodyRecv.Data).Sens
56、orConfigDataLength); this.ShowMessage(this.txtMessageConfigRead, 【Sensor_Report(ConfigInfo)】SensorConfigData: + BitConverter.ToString(GRIP_NodeConfigInfo)msgBodyRecv.Data).SensorConfigData); #endregion else #region Sensor_Read引发 if (msgBodyRecv.DataType = 0 x01) this.ShowMessage(this.txtMessageSenso
57、rRead, 【Sensor_Report(SensorData)】SensorClass: + (GRIP_SensorData)msgBodyRecv.Data).SensorClass); this.ShowMessage(this.txtMessageSensorRead, 【Sensor_Report(SensorData)】SensorType: + (GRIP_SensorData)msgBodyRecv.Data).SensorType.ToString(X4); this.ShowMessage(this.txtMessageSensorRead, 【Sensor_Repor
58、t(SensorData)】SensorDataLength: + (GRIP_SensorData)msgBodyRecv.Data).SensorDataLength); #region 温湿度传感器 if (GRIP_SensorData)msgBodyRecv.Data).SensorDataLength = 4) this.ShowMessage(this.txtMessageSensorRead, 【Sensor_Report(SensorData)】Temp_H: + (GRIP_SensorData)msgBodyRecv.Data).Temp_H); this.ShowMes
59、sage(this.txtMessageSensorRead, 【Sensor_Report(SensorData)】Temp_L: + (GRIP_SensorData)msgBodyRecv.Data).Temp_L); this.ShowMessage(this.txtMessageSensorRead, 【Sensor_Report(SensorData)】当前温度: + (GRIP_SensorData)msgBodyRecv.Data).Temp_H + . + (GRIP_SensorData)msgBodyRecv.Data).Temp_L + ); this.ShowMess
60、age(this.txtMessageSensorRead, 【Sensor_Report(SensorData)】Humi_H: + (GRIP_SensorData)msgBodyRecv.Data).Humi_H); this.ShowMessage(this.txtMessageSensorRead, 【Sensor_Report(SensorData)】Humi_L: + (GRIP_SensorData)msgBodyRecv.Data).Humi_L); this.ShowMessage(this.txtMessageSensorRead, 【Sensor_Report(Sens
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度变更离婚协议书后子女探望权安排合同
- 2024年度技术开发合同:新能源动力装置的研发与技术共享协议
- 04版技术研发与转让合同:某科研机构与科技公司之间的合同
- 2024年度教育培训服务与课程定制合同
- 2024年度新能源发电设备采购与安装合同
- 脚踏车支架市场发展现状调查及供需格局分析预测报告
- 2024年度医疗设备购买与维护服务合同
- 掷环游戏用铁圈市场发展现状调查及供需格局分析预测报告
- 2024年度物业服务合同服务质量保证
- 贵金属及其合金制塑像市场需求与消费特点分析
- 2022农房设计和建设技术导则
- 发豆芽实验报告范文
- 苏教版四年级上册竖式计算400题及答案
- 2024年河南省研学旅行(高职) 技能大赛参考试题库(含答案)
- 商品学(慕课版)教案汇总-教学设计 1.1走近商品 -6.2品类管理
- 小学未成年保护应急预案
- 新能源汽车保险与理赔
- 消毒供应中心(CSSD)感染防控指引
- 下肢动脉闭塞症的护理
- 单位职工酒驾检讨书范文
- 中医治疗肾病的
评论
0/150
提交评论