项目十四物联网技术综合实践.docx

上传人:小飞机 文档编号:1719392 上传时间:2022-12-16 格式:DOCX 页数:51 大小:363.42KB
返回 下载 相关 举报
项目十四物联网技术综合实践.docx_第1页
第1页 / 共51页
项目十四物联网技术综合实践.docx_第2页
第2页 / 共51页
项目十四物联网技术综合实践.docx_第3页
第3页 / 共51页
项目十四物联网技术综合实践.docx_第4页
第4页 / 共51页
项目十四物联网技术综合实践.docx_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《项目十四物联网技术综合实践.docx》由会员分享,可在线阅读,更多相关《项目十四物联网技术综合实践.docx(51页珍藏版)》请在三一办公上搜索。

1、项目十四 智能电子商务配送系统功能扩展与实现一、教学目标1、掌握物联网综合实践开发技巧。2、掌握物联网综合实践开发流程。3、掌握物联网工程集成技术。二、教学内容14.1 智能电子商务仓储配送系统项目任务单项目名称智能电子商务仓储物流配送系统开发任务内容任务1:企业一卡通系统及出厂商品登记功能开发;任务2:智能电子商务物流仓储拣货、备货、出库;任务3:智能电子商务仓储环境参数监控功能开发;任务4:货物在途跟踪与数据监测;任务5:货到签收及动态盘点功能开发。任务说明1、电子商务订货下达订单,订单中的货物在货架上显示标记。同时在大学城职教新干线相应的板块上加以展示。2、仓库拣货提醒、备货、出库扫描等

2、,出库时对接物流公共信息平台的综合配货系统,将该条货源数据发布到物流公共信息平台上,同时在大学城职教新干线相应的板块上加以展示。3、仓库环境参数监测,包括仓库温度、湿度、烟传感、视频监控等。仓管员可以通过智能手机通过WIFI或3G网络获取仓库内相应的环境参数数据。同时在大学城职教新干线相应的板块上加以展示。4、物流配送货物在途跟踪,对接物流公共信息平台的GPS One定位系统,GPS系统可查相应订单信息。货主或用户可通过PC端或智能手机通过WIFI或3G网络获取货物在途的相应环境参数数据。同时在大学城职教新干线相应的板块上加以展示。5、货到签收,采用客户手机签收方案。对电子商务系统智能仓库进行

3、动态盘点,同时在大学城职教新干线相应的板块上加以展示。使用设备及材料物联网应用开发实验台1套(包含主要设备:高频RFID读写器1台、多路复用器1台、高频RFID小天线8个、WSN工业级网关1台、温湿度传感器节点1个、Zigbee数码显示模块1个、串口通信数码管8个、高频RFID电子标签 若干、智能仓储管理系统配套开发教学资源包 1套),PC电脑1套,实验桌椅1套,智能手机8台。指导教师刘洋(主讲、北京京胜世纪物联网事业部部门经理),杨晓峰(助讲、湖南省物流公共信息平台有限公司技术总监),班主任时间4天提交资料1、实训报告;2、设计文档。14.2 智能电子商务仓储配送系统需求概述智能电子商务仓储

4、配送系统当前的仓储配送系统借助于传统的人工管理方法和手段,数据的采集和录入一直都是手工操作,效率低下、差错率高,且资产实物信息与管理系统信息无法实时同步。RFID技术作为物理世界与现有IT系统的桥梁,可将资产日常管理活动与资产管理系统有效的整合在一起,从而达到实物信息与系统信息的实时同步一致。通过RFID这项新技术实现远程、动态、实时的设备资产数据采集,替换传统资产管理方式的前台人工数据采集,更好的与后台计算机数据库结合,实现对日常管理中的资产新增、调拨和盘点等信息进行实时监控、记录和自动更新,同时采集人员信息,从而避免因人为因素造成的信息失真引起管理效能的下降,为单位领导、网络规划投资与设计

5、等部门提供更准确、实时的网络资产实物信息,提高资产使用效率,有效降低和控制日常管理和生产成本,从而创造良好的社会及经济效益。图14-1 智能电子商务仓储配送系统框架图14.3 智能电子商务仓储配送系统开发环境准备(1)安装SQL Sever 2005(省略);(2)安装Visual Studio 2010(省略);(3)安装PowerDesigner(省略)。14.4 智能电子商务仓储配送系统功能设计主要包括出厂商品登记、环境参数监控、商品入库、商品出库、入库/拣货提醒、商品监控和动态盘点。出厂商品登记: 针对于桌面读写器对RFID多卡的操作。 实现对多卡卡号的读取。 同时对多卡进行信息的写入

6、。 根据实际情况对写入信息进行校验。 环境参数监控: 通过WSN无线传感网络的温湿度节点获取当前环境的温度和湿度,并在程序界面上显示。商品入库: 通过桌面读写器进行商品入库操作。 自动生成入库单号以“i”开头,最初的入库单号为“i100000000001”为13位。 通过桌面读写器进行多卡识别并进行绑定内容包括一级分类、二级分类、商品名称、规格型号、商品编码、单位、货位。 自动为入库商品分配货位。 显示入库商品数量。 打印入库单,入库单内容包括商品名称、所分配货架、商品数量。 在入库单右下角显示条形码,在条码下方显示条码值。商品出库: 通过复用读写器进行出库操作。 自动生成出库单号以“o”开头

7、,最初的出库单号为“o100000000001”为13位。 可选择商品名称、所在货位、出库数量。 对出库商品进行绑定包括商品卡号、商品名称、数量、所在货位编号。 打印出库单,出库单内容包括商品名称、所在货位、商品数量。 在出库单右下角显示条形码,在条码下方显示条码值。入库/拣货提醒: 通过入库单或出库单对货架进行操作实现智能出库或入库。 通过条码枪扫描打印好的出库单或入库单判断出库还是入库。 对出库或入库商品进行绑定显示并显示数量,对要操作的货位使其指示灯亮起。 出库或入库完成后指示灯熄灭。商品监控: 对货架的整体监控。 对货架进行整体实时监控。 绑定每个货位的商品信息,包括商品卡号和名称,并

8、绑定数量。 当货架上的商品数量与库存数量不同时,指示灯亮起。动态盘点: 对货架的盘点操作。 绑定商品的名称、库存数量和实际数量。 对比库存数量和实际数量。 显示盘点结果。14.5 智能电子商务仓储配送系统数据库设计图14-2数据库表结构汇总展示14.6 智能电子商务仓储配送系统程序设计注:因为给合实践项目所涉及的程序代码比较多,以下只将关键代码信息列出来,关于变量定义、串口打开与关闭、构造函数、一些操作事件都在教学资源中提供。1、出厂商品登记(1)界面设计图14-3出厂商品登记界面(2)窗体属性设置向控件中添加2个groupbox控件,6个标签,6个textbox,4个按钮和1个添加滚动条的t

9、extbox控件。控件名称NameTextgroupboxgbCardsID商品标签groupboxgbGoodsInfo商品信息控件名称NameTextLabellblCategory一级分类LabellblType二级分类LabellblName商品名称LabellblSpecification规格型号LabellblCode商品编码LabellblUnit单位控件名称NameTextTextboxlblCategoryTextboxlblTypeTextboxlblNameTextboxlblSpecificationTextboxlblCodeTextboxlblUnit控件名称Nam

10、eScrollBarsTexttxtCardsIDVertical控件名称NameTextButtonbtnReadCardsID读卡IDButtonbtnClearCardsID清空(商品标签中)ButtonbtnWriteCard写卡ButtonbtnClearInfo清空(商品信息中)(3)编写后台代码获取读取到的卡号的泛型集合。/ / 获取ID的泛型集合方法 / private void GetID() /VCPOGetCardNumberMultiple()读写器读取多卡卡号方法 cardNo = this.rfid.VCPOGetCardNumberMultiple(); 校验方法

11、,对写入信息进行校验。/ / 写入信息校验 / / private bool CheckInput() if (this.txtCategory.Text = ) MessageBox.Show(一级分类不能为空!); return false; else if (this.txtType.Text = ) MessageBox.Show(二级分类不能为空!); return false; else if (this.txtName.Text = ) MessageBox.Show(商品名称不能为空!); return false; else if (this.txtSpecification

12、.Text = ) MessageBox.Show(规格型号不能为空!); return false; else if (this.txtCode.Text = ) MessageBox.Show(商品编码不能为空!); return false; else if (this.txtUnit.Text = ) MessageBox.Show(单位不能为空!); return false; else return true; 窗体载入事件,打开读写器连接串口。/ / 窗体载入事件 / / / private void frmInitReg_Load(object sender, EventArg

13、s e) OpenRFID(); 读卡按钮事件,每条卡号分别占一行,所以在添加是后要跟“rn”换行。/ / 读卡按钮事件 / / / private void btnReadCardsID_Click(object sender, EventArgs e) txtCardsID.Text = ; GetID(); for (int i = 0; i cardNo.Count; i+) txtCardsID.Text += cardNoi + rn; 商品标签清空按钮事件/ / 清空ID按钮事件 / / / private void btnClearCardsID_Click(object se

14、nder, EventArgs e) txtCardsID.Text = ; 写卡按钮事件/ / 写卡按钮事件 / / / private void btnWriteCard_Click(object sender, EventArgs e) if (CheckInput() for (int i = 0; i cardNo.Count; i+) string information = txtCategory.Text + + txtType.Text + + txtName.Text + + txtSpecification.Text + + txtCode.Text + + txtUni

15、t.Text; this.rfid.Write(cardNoi, information); MessageBox.Show(写入成功!); 商品信息清空按钮/ / 清空信息按钮事件 / / / private void btnClearInfo_Click(object sender, EventArgs e) foreach (Control c in this.gbGoodsInfo.Controls) if (c is TextBox) c.Text = ; 2、环境参数监控(1)界面设计图14-4环境参数监控界面(2)窗体属性设置窗体StartPosition属性MaximizeBo

16、x属性MinimizeBox属性FormBorderStyle属性Text属性frmGoodsOutCenterParentFalseFalseFixedSingle环境参数监控设置Lable控件属性控件Name属性Text属性LablelblTemperature温度:LableLabel1温度:LablelblHumidity湿度:LableLabel2湿度:LablelblEnvrionmentValue0LablelblEnvrionmentValue10LablelblHumidityValue0LablelblHumidityValue10设置GroupBox控件属性控件Name属

17、性Text属性GroupBoxgbEnvironmentParam环境参数(3)编写后台代码:获取节点的基本信息,向对应的节点发送了信息后,节点会返回信息。即可获取节点的基本信息。 / / Sensor_Read指令 / / / private void SensorRead() DataTable dtb = Program.dbo.GetDataTable(string.Format(select IEEEAddress,ShortAddress,NodeType,NodeClass from CargoNode where NodeType=0, 6); for (int i = 0;

18、i dtb.Rows.Count; i+) try this.time = 0; this.timer1.Stop(); /获取流水号 this.sequenceID_T1 = this.messageT1.GetSequenceID(); /实例化节点泛型 List nodeList = new List(); /实例化节点 GRIP_Node node = new GRIP_Node(); /获取节点编号 node.IEEEAddress = dtb.RowsiIEEEAddress.ToString(); /获取节点地址 /node.ShortAddress = Convert.ToUI

19、nt16(10255, 16); node.ShortAddress = Convert.ToUInt16(dtb.RowsiShortAddress.ToString(), 16); /将节点信息添加到节点泛型中 nodeList.Add(node); /将节点数量转换成byte类型 byte deviceCount = Convert.ToByte(nodeList.Count); /将节点类型转换成byte类型 byte sensorClass = Convert.ToByte(dtb.RowsiNodeClass); /将节点型号转换成byte类型 UInt16 sensorType

20、= Convert.ToUInt16(dtb.RowsiNodeType.ToString(), 16); /读取数据 GRIP_MessageBody_Sensor_Read msgBodySend = new GRIP_MessageBody_Sensor_Read(deviceCount, sensorClass, sensorType, nodeList); /获取发送的消息 GRIP_MessageHead msgHeadSend = new GRIP_MessageHead(msgBodySend.BodyLength, (UInt16)GRIP_Message_CommandID

21、.NWM_SENSOR_READ, this.sequenceID_T1); /获取发送的数据包的byte数组 byte msgSend = this.messageT1.GetSendMessage(msgHeadSend, msgBodySend); int lenSend = 0; /Socket发送消息 SendMsg(this.socket_T1, msgSend, Sensor_Report_Resp); /接收消息的长度的byte数组 byte msgRecv = new byte(int)GRIP_MessageBody_Length.HEADLENGTH + (int)GRI

22、P_MessageBody_Length.SENSOR_READ_RESP_LENGTH; int lenRecv = 0; /Socket接收消息 RecvMsg(this.socket_T1, msgRecv, Sensor_Report); /实例化接收的消息头 GRIP_MessageHead msgHeadRecv = new GRIP_MessageHead(); /实例化接收的消息体 GRIP_MessageBody_Sensor_Read_Resp msgBodyRecv = new GRIP_MessageBody_Sensor_Read_Resp(); /获取接收的数据包信

23、息 this.messageT1.GetReciveMessage(msgRecv, msgHeadRecv, msgBodyRecv); /判断消息体长度和流水号 if (msgHeadRecv.MessageLength = (UInt16)GRIP_MessageBody_Length.SENSOR_READ_RESP_LENGTH & this.sequenceID_T1 = msgHeadRecv.SequenceID) /在控件中显示数据信息 if (msgBodyRecv.Status = 0) GRIP_MessageBody_Sensor_Read_Resp msgBodyR

24、ecv1 = new GRIP_MessageBody_Sensor_Read_Resp(); this.sessionID = msgBodyRecv.SessionID; this.timer1.Start(); else this.timer1.Start(); catch (Exception ex) MessageBox.Show(Sensor_Read指令错误: + ex.Message); 编写线程方法,实时监控的线程方法,在该线程中使用的是对温湿度节点实时的读取并获取温湿度信息。 #region T2_Thread private void Run() while (true)

25、 try #region T2_Head GRIP_MessageHead msgHeadRecv = new GRIP_MessageHead(); byte msgRecv_Head = new byte6; RecvMsg(this.socket_T2, msgRecv_Head, T2_Thread_Head_Recv); msgHeadRecv.GetHeadBytesOfRecive(msgRecv_Head, 0, 6); UInt16 messageLength = msgHeadRecv.MessageLength; UInt16 messageCommand = msgHe

26、adRecv.MessageCommand; UInt16 sequenceID = msgHeadRecv.SequenceID; #endregion #region T2_HeartBeat if (messageCommand = (UInt16)GRIP_Message_CommandID.NWM_HEARTBEAT) GRIP_MessageHead msgHeadSend = new GRIP_MessageHead(0, (UInt16)GRIP_Message_CommandID.NWM_HEARTBEAT_RESP, sequenceID); byte msgSend =

27、msgHeadSend.GetHeadBytesOfSend(); SendMsg(this.socket_T2, msgSend, T2_HeartBeat); #endregion #region T2_Status_Report if (messageCommand = (UInt16)GRIP_Message_CommandID.NWM_STATUS_REPORT) GRIP_MessageBody_Status_Report msgBodyRecv = new GRIP_MessageBody_Status_Report(); byte msgRecv_Body = new byte

28、msgHeadRecv.MessageLength; RecvMsg(this.socket_T2, msgRecv_Body, Status_Report); msgBodyRecv.ConvertReciveBytes(msgRecv_Body); GRIP_MessageBody_Status_Report_Resp msgBodySend = new GRIP_MessageBody_Status_Report_Resp(0); GRIP_MessageHead msgHeadSend = new GRIP_MessageHead(msgBodySend.BodyLength, (UI

29、nt16)GRIP_Message_CommandID.NWM_STATUS_REPORT_RESP, sequenceID); byte msgSend = this.msg_T2.GetSendMessage(msgHeadSend, msgBodySend); SendMsg(this.socket_T2, msgSend, Status_Report_Resp); if (msgBodyRecv.SessionID = this.sessionID) bool isExist = false; if (msgBodyRecv.SensorClass = 3 | msgBodyRecv.

30、SensorClass = 5) int flag = Program.dbo.GetInt(string.Format(select Flag from CargoNode where IEEEAddress=0, msgBodyRecv.Node.IEEEAddress); if (flag = 2) isExist = true; else isExist = false; if (!isExist) ShelfNode shelfNode = new ShelfNode(); string iEEEAddress = Program.dbo.GetString(string.Format(select IEEEAddress from CargoNode where IEEEAddress=0, msgBodyRecv.Node.IEEEAddress); if (msgBodyRecv.Node.IEEEAddress = iEEEAddress) byte sensorClass = msgBodyRecv.SensorClass; UInt16 sensorType = msgBodyRecv.SensorType; string shortAddrss

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号