项目十 基于WSN技术的智能仓储环境监测与智能控制系统设计与实现总结.docx

上传人:b****5 文档编号:29467197 上传时间:2023-07-23 格式:DOCX 页数:103 大小:290.66KB
下载 相关 举报
项目十 基于WSN技术的智能仓储环境监测与智能控制系统设计与实现总结.docx_第1页
第1页 / 共103页
项目十 基于WSN技术的智能仓储环境监测与智能控制系统设计与实现总结.docx_第2页
第2页 / 共103页
项目十 基于WSN技术的智能仓储环境监测与智能控制系统设计与实现总结.docx_第3页
第3页 / 共103页
项目十 基于WSN技术的智能仓储环境监测与智能控制系统设计与实现总结.docx_第4页
第4页 / 共103页
项目十 基于WSN技术的智能仓储环境监测与智能控制系统设计与实现总结.docx_第5页
第5页 / 共103页
点击查看更多>>
下载资源
资源描述

项目十 基于WSN技术的智能仓储环境监测与智能控制系统设计与实现总结.docx

《项目十 基于WSN技术的智能仓储环境监测与智能控制系统设计与实现总结.docx》由会员分享,可在线阅读,更多相关《项目十 基于WSN技术的智能仓储环境监测与智能控制系统设计与实现总结.docx(103页珍藏版)》请在冰豆网上搜索。

项目十 基于WSN技术的智能仓储环境监测与智能控制系统设计与实现总结.docx

项目十基于WSN技术的智能仓储环境监测与智能控制系统设计与实现总结

项目十基于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;

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

///

///连接数据库的方法

///

publicDBConnection()

{

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

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

this.conn=newSqlConnection(str);

this.sqlcom=newSqlCommand();

this.sqlcom.Connection=this.conn;

this.conn.Open();

}

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

Server表示正在访问的数据库服务器名称,其格式是“计算机名\实例名”,如果是本地的数据库服务器并且使用的是SQLServer的默认实例名,则可以使用(Local)或.来表示。

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

返回数据连接方法

///

///返回数据连接方法

///

///

publicSqlConnectionGetConnection()

{

returnthis.conn;

}

10.2.2DBOperate.cs类

该类的作用是对程序中的要用到的对数据库的操作进行统一,涉及到对数据库的操作时,如对数据库的增删改操作,都可以直接调用该类,相应的方法。

传入相应的参数即可。

添加引用

usingSystem.Data.SqlClient;

usingSystem.Data;

定义变量

SqlCommandsqlcom;

SqlConnectionconn;

默认构造方法

///

///构造函数

///

///

publicDBOperate(DBConnectiondbc)

{

sqlcom=newSqlCommand();

sqlcom.Connection=dbc.GetConnection();

}

编写执行方法

///

///执行sql语句

///

///

publicvoidExecuteSQL(stringsql)

{

this.sqlcom.CommandText=sql;

try

{

this.sqlcom.ExecuteNonQuery();

}

catch{}

}

///

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

///

///

///sql语句

publicDataTableGetDataTable(stringsql)

{

this.sqlcom.CommandText=sql;

SqlDataAdaptersda=newSqlDataAdapter(this.sqlcom);

DataSetds=newDataSet();

DataTabledt=newDataTable();

try

{

sda.Fill(ds);

dt=ds.Tables[0];

}

catch{}

returndt;

}

///

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

///

///SQL语句

///获取到的string类型数据

publicstringGetString(stringsql)

{

stringresultStr="";

this.sqlcom.CommandText=sql;

try

{

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

}

catch(SqlExceptione)

{}

finally

{

this.sqlcom.Dispose();

}

returnresultStr;

}

publicintGetInt(stringsql)

{

intresultInt=0;

this.sqlcom.CommandText=sql;

try

{

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

}

catch(SqlExceptione)

{

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

}

finally

{

this.sqlcom.Dispose();

}

returnresultInt;

}

本资源是基于SQLServer开发的,所以可以使用using指令可以引用SQLServer专用的.NET数据库提供者:

usingSystem.Data.SqlClient;

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

1)连接数据源

2)打开连接

3)发出一个SQL查询命令

4)执行命令语句

SqlConnection是一个用于SQL.NET数据提供者的连接对象名称,表示SQLServer数据库的一个打开的连接。

SqlConnection对象表示与SQLServer数据源的一个唯一的会话。

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

SqlConnection与SqlDataAdapter和SqlCommand一起使用,可以在连接MicrosoftSQLServer数据库时提高性能。

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

Server=localost,表示正在访问的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("selectCargo,IEEEAddress,ShortAddress,NodeTypefromCargoNodewhereCargo='{0}'",this.cargo));

DataRowrow=dtb.Rows[0];

this.cargo=Convert.ToInt32(row["Cargo"].ToString());

this.iEEEAddress=row["IEEEAddress"].ToString();

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

this.nodeType=Convert.ToInt32(row["NodeType"].ToString());

}

属性

publicintCargo

{

get

{

returnthis.cargo;

}

}

publicstringIEEEAddress

{

get

{

returnthis.iEEEAddress;

}

}

publicstringShortAddress

{

get

{

returnthis.shortAddress;

}

set

{

this.shortAddress=value;

}

}

publicintNodeType

{

get

{

returnthis.nodeType;

}

}

方法

publicvoidInsert()

{

Program.dbo.ExecuteSQL(string.Format("updateCargoNodesetShortAddress='{0}'whereIEEEAddress='{1}'",this.shortAddress,this.iEEEAddress));

}

10.3功能设计与实现

该部分实训内容主要是通过程序和wsn的网关进行通信,这里我们需要学习关于wsn网关通信的相关应用。

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

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

控件

Name属性

Text属性

UseVisualStyleBackColor属性

TabPage

tpConnect

建立连接

True

TabPage

tpPing

Ping指令

True

TabPage

tpConfigRead

Config_Read指令

True

TabPage

tpConfigWrite

Config_Write指令

True

TabPage

tpSensorRead

Sensor_Read指令

True

TabPage

tpSensorWrite

Sensor_Write指令

True

10.3.1创建建立连接

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

 

图10-5Zigbee节点连接实验图

向窗体添加1个SplitContainer控件,2个GroudBox控件,8个Label控件,9个TextBox控件,4个Button控件。

更改窗体和控件属性:

2、设置窗体属性

窗体

StartPosition属性

MaximizeBox属性

MinimizeBox属性

FormBorderStyle属性

Text属性

frmGoodsOut

CenterParent

False

False

FixedSingle

Zigbee节点连接实验

3、设置Lable控件属性

控件

Name属性

Text属性

T1通道Socket

Lable

lblIPAddressT1

IP地址

Lable

lblPortT1

端口号

Lable

lblAppIDT1

AppID

Lable

lblPasswordT1

Password

T2通道Socket

Lable

lblIPAddressT2

IP地址

Lable

lblPortT2

端口号

Lable

lblAppIDT2

AppID

Lable

lblPasswordT2

Password

4、设置TextBox属性

控件

Name属性

Text属性

TextBox

txtIPAddressT1

192.168.1.230

TextBox

txtPortT1

4000

TextBox

txtAppIDT1

1001

TextBox

txtPasswordT1

Kingvc@zigvine

TextBox

txtIPAddressT2

192.168.1.230

TextBox

txtPortT2

4000

TextBox

txtAppIDT2

1001

TextBox

txtPasswordT2

Kingvc@zigvine

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

控件

Name属性

Dock属性

Multiline属性

ReadOnle属性

ScorllBars属性

TextBox

txtMessageConnect

Fill

True

True

Vertical

6、设置GroupBox控件属性

控件

Name属性

Text属性

GroupBox

gbSocket_T1

T1通道Socket

GroupBox

gbSocket_T2

T2通道Socket

7、设置Button按钮事件

控件

Name属性

Text属性

UseVisualStyleBackColor属性

Button

btnConnectSocketT1

SocketT1连接

True

Button

btnConnectT1

T1通道连接

True

Button

btnConnectSocketT2

SocketT2连接

True

Button

btnConnectT2

T2通道连接

True

8、窗体后台代码:

1)定义变量

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

privatedelegatevoidShowMessageDel(TextBoxtxt,stringmsg);

privatedelegatevoidShowMessageDelOfTempLabel(Labellbl,stringvalue);

//实例化T1数据包消息类

privateGRIP_MessagemessageT1=newGRIP_Message();

//实例化T2数据包消息类

privateGRIP_MessagemessageT2=newGRIP_Message();

//定义T1Socket通讯接口

privateSocketsocketT1;

//定义T2Socket通讯接口

privateSocketsocketT2;

//定义T1通道流水号

privateUInt16sequenceIDT1;

//定义T2通道流水号

privateUInt16sequenceIDT2;

privateinttime;

//定义一个线程

privateThreadthread;

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

privatestringsessionID="";

2)构造函数

///

///构造函数

///

publicfrmZigBee()

{

InitializeComponent();

}

3)编写方法

Socket发送消息方法

///

///Socket发送消息方法

///

///要发送的字节数组

///Socket实例

///已发送的长度

privatevoidSendMsg(byte[]msgSend,Socketsocket,intlenSend)

{

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

while(lenSend

{

lenSend+=socket.Send(msgSend,lenSend,msgSend.Length-lenSend,SocketFlags.None);

}

}

Socket接收信息的方法

///

///Socket接收消息方法

///

///要接收的字节数组

///Socket实例

///已接收的长度

privatevoidRecvMsg(byte[]msgRecv,Socketsocket,intlenRecv)

{

while(lenRecv

{

lenRecv+=socket.Receive(msgRecv,lenRecv,msgRecv.Length-lenRecv,SocketFlags.None);

}

}

在控件中显示信息的方法

//

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

///

///

///

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控件中显示消息的方法

///

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

///

///控件名称

///要显示的值

privatevoidShowTempValue(Labellbl,stringvalue)

{

if(lbl.InvokeRequired)

{

ShowMessageDelOfTempLabelsmd=newShowMessageDelOfTempLabel(ShowTempValue);

lbl.Invoke(smd,lbl,value);

}

else

{

lbl.Text=value;

}

}

线程方法

///

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1