版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目十四智能电子商务配送系统功能扩
展与实现
一、教学目标
1、掌握物联网综合实践开发技巧。
2、掌握物联网综合实践开发流程。
3、掌握物联网工程集成技术。
二、教学内容
14.1智能电子商务仓储配送系统项目任务单
项目名称智能电子商务仓储物流配送系统开发
任务1:企业一卡通系统及出厂商品登记功能开发;
任务2:智能电子商务物流仓储拣货、备货、出库;
任务内容任务3:智能电子商务仓储环境参数监控功能开发;
任务4:货物在途跟踪与数据监测;
任务5:货到签收及动态盘点功能开发。
1、电子商务订货下达订单,订单中的货物在货架上显示标记。同时在大学城职教新
干线相应的板块上加以展示。
2、仓库拣货提醒、备货、出库扫描等,出库时对接物流公共信息平台的综合配货系
统,将该条货源数据发布到物流公共信息平台上,同时在大学城职教新干线相应的板
块上加以展示。
3、仓库环境参数监测,包括仓库温度、湿度、烟传感、视频监控等。仓管员可以通
任务说明过智能手机通过WIFI或3G网络获取仓库内相应的环境参数数据。同时在大学城职
教新干线相应的板块上加以展示。
4、物流配送货物在途跟踪,对接物流公共信息平台的GPSOne定位系统,GPS系统
可查相应订单信息。货主或用户可通过PC端或智能手机通过WIFI或3G网络获取货
物在途的相应环境参数数据。同时在大学城职教新干线相应的板块上加以展示。
5、货到签收,采用客户手机签收方案。对电子商务系统智能仓库进行动态盘点,同
时在大学城职教新干线相应的板块上加以展示。
物联网应用开发实验台1套(包含主要设备:高频RFID读写器1台、多路复用器1
使用设备及台、高频RFID小天线8个、WSN工业级网关1台、温湿度传感器节点1个、Zigbee
材料数码显示模块1个、串口通信数码管8个、高频RFID电子标签若干、智能仓储管理
系统配套开发教学资源包1套),PC电脑1套,实验桌椅1套,智能手机8台。
刘洋(主讲、北京京胜世纪物联网事业部部门经理),杨晓峰(助讲、湖南省物流公
指导教师
共信息平台有限公司技术总监),班主任
时间4天
1、实训报告:
提交资料
2、设计文档。
14.2智能电子商务仓储配送系统需求概述
《智能电子商务仓储配送系统》当前的仓储配送系统借助于传统的人工管理方法和手
段,数据的采集和录入一直都是手工操作,效率低下、差错率高,且资产实物信息与管理系
统信息无法实时同步。RFID技术作为物理世界与现有IT系统的桥梁,可将资产日常管理活
动与资产管理系统有效的整合在一起,从而达到实物信息与系统信息的实时同步一致。
通过RFID这项新技术实现远程、动态、实时的设备资产数据采集,替换传统资产管理
方式的前台人工数据采集,更好的与后台计算机数据库结合,
实现对日常管理中的资产新增、调拨和盘点等信息进行实时监控、记录和自动更新,同
时采集人员信息,从而避免因人为因素造成的信息失真引起管理效能的下降,为单位领导、
网络规划投资与设计等部门提供更准确、实时的网络资产实物信息,提高资产使用效率,有
效降低和控制日常管理和生产成本,从而创造良好的社会及经济效益。
图14-1智能电子商务仓储配送系统框架图
14.3智能电子商务仓储配送系统开发环境准备
(1)安装SQLSever2005(省略);
(2)安装VisualStudio2010(省略);
(3)安装PowerDesigner(省略)<.
14.4智能电子商务仓储配送系统功能设计
主要包括出厂商品登记、环境参数监控、商品入库、商品出库、入库/拣货提醒、商品
监控和动态盘点。
出厂商品登记:
>针对于桌面读写器对RFID多卡的操作。
>实现对多卡卡号的读取。
>同时对多卡进行信息的写入。
>根据实际情况对写入信息进行校验。
>环境参数监控:
>通过WSN无线传感网络的温湿度节点获取当前环境的温度和湿度,并在程序界面
上显示。
商品入库:
>通过桌面读写器进行商品入库操作。
>自动生成入库单号以“i”开头,最初的入库单号为100000000001"为13位。
>通过桌面读写器进行多卡识别并进行绑定内容包括一级分类、二级分类、商品名称、
规格型号、商品编码、单位、货位。
>自动为入库商品分配货位。
>显示入库商品数量。
>打印入库单,入库单内容包括商品名称、所分配货架、商品数量。
>在入库单右下角显示条形码,在条码下方显示条码值。
商品出库:
>通过复用读写器进行出库操作。
>自动生成出库单号以“o”开头,最初的出库单号为“o100000000001”为13位。
>可选择商品名称、所在货位、出库数量。
>对出库商品进行绑定包括商品卡号、商品名称、数量、所在货位编号。
>打印出库单,出库单内容包括商品名称、所在货位、商品数量。
>在出库单右下角显示条形码,在条码下方显示条码值。
入库/拣货提醒:
>通过入库单或出库单对货架进行操作实现智能出库或入库。
>通过条码枪扫描打印好的出库单或入库单判断出库还是入库。
>对出库或入库商品进行绑定显示并显示数量,对要操作的货位使其指示灯亮起。
>出库或入库完成后指示灯熄灭。
商品监控:
>对货架的整体监控。
>对货架进行整体实时监控。
>绑定每个货位的商品信息,包括商品卡号和名称,并绑定数量。
>当货架上的商品数量与库存数量不同时,指示灯亮起。
动态盘点:
>对货架的盘点操作。
>绑定商品的名称、库存数量和实际数量。
>对比库存数量和实际数量。
>显示盘点结果。
14.5智能电子商务仓储配送系统数据库设计
节点信息表
货位int
长地址nvarchar(50)
短地址nvarchar(50)
节点型号int
节点类型int
状态标奏int
货物数置int
最大货物数星int
库存明细表
int<nk>
商
卡号
品
nvarchar(20)
商
品
名称nvarchar(50)
一
如
分类nvarchar(50)
二
汇
分类(
格
规nvarchar50)
型号
品nvarchar(50)
商
编码
位nvarchar(50)
单
货位
在
所nvarchar(30)
状态
品
商int
ini
图14-2数据库表结构汇总展示
14.6智能电子商务仓储配送系统程序设计
注:因为给合实践项目所涉及的程序代码比较多,以下只将关键代码信息列出来,关于
变量定义、串口打开与关闭、构造函数、一些操作事件都在教学资源中提供。
1、出厂商品登记
(1)界面设计
图14-3出厂商品登记界面
(2)窗体属性设置
向控件中添加2个groupbox控件,6个标签,6个textbox,4个按钮和1个添加滚动条
的textbox控件。
控件名称NameText
groupboxgbCardsID商品标签
groupboxgbGoodsInfb商品信息
控件名称NameText
LabelIblCategory一级分类
LabelIblType二级分类
LabelIblName商品名称
LabelIblSpecification规格型号
LabelIblCode商品编码
LabelIblUnit单位
控件名称NameText
TextboxIblCategory
TextboxIblType
TextboxIblName
TextboxIblSpecification
TextboxIblCode
TextboxIblUnit
控件名称NameScrollBars
TexttxtCardsIDVertical
控件名称NameText
ButtonbtnReadCardsID读卡ID
ButtonbtnClearCardsID清空(商品标签中)
ButtonbtnWriteCard写卡
ButtonbtnClearlnfo清空(商品信息中)
(3)编写后台代码
获取读取到的卡号的泛型集合。
III<summary>
///获取ID的泛型集合方法
III</summary>
privatevoidGetID()
(
//VCPOGetCardNumberMultiple()读写器读取多卡卡号方法
cardNo=this.rfid.VCPOGelCardNumberMultiple();
)
校验方法,对写入信息进行校验。
///<summary>
///写入信息校验
III</summary>
///<returns></returns>
privateboolChecklnput()
(
if(this.txtCategory.Text==
(
MessageBox.Show("一级分类不能为空!”);
returnfalse;
)
elseif(this.txtType.Text==
(
MessageBox.Show(“二级分类不能为空!");
returnfalse;
)
elseif(this.txtName.Text=="")
(
MessageBox.Show("商品名称不能为空!");
returnfalse;
)
elseif(this.txtSpecification.Text==
(
MessageBox.Show("规格型号不能为空!u);
returnfalse;
)
elseif(this.txtCode.Text=='H,)
(
MessageBox.Show("商品编码不能为空!”);
returnfalse;
}
elseif(this.txtUnit.Text==
(
MessageBox.Show("单位不能为空!”);
returnfalse;
)
else
(
returntrue;
)
)
窗体载入事件,打开读写器连接串口。
III<summary>
/〃窗体载入事件
///</summary>
///<paramname=,,sender',></param>
///<paramname="enx/param>
privatevoidfrmlnitReg_Load(objectsender,EventArgse)
OpenRFIDO;
读卡按钮事件,每条卡号分别占一行,所以在添加是后要跟“\r\n”换行。
III<summary>
///读卡按钮事件
///</summary>
///<paramname="senderux/param>
///<paramname="enx/param>
privatevoidbtnReadCardsID_Click(objectsender,EventArgse)
{
txtCardsID.Text=,M,;
GetID();
for(inti=0;i<cardNo.Count;i++)
txtCardsID.Text+=cardNo[i]+"\r\n";
商品标签清空按钮事件
///<summary>
///清空ID按钮事件
///</summary>
///<paramname=usendern></param>
///<paramname=',e,'x/param>
privatevoidbtnClearCardsID_Click(objectsender,EventArgse)
txtCardsID.Text=
写卡按钮事件
///<summary>
///写卡按钮事件
///</summary>
///<paramname=usender"></param>
///<paramname=uenx/param>
privatevoidbtnWriteCard_Click(objectsender,EventArgse)
if(Checklnput())
for(inti=0;i<cardNo.Count;i++)
stringinformation=txtCategory.Text++txtType.Text+
+txtName.Text+"♦"+txtSpecification.Text+“♦"+txtCode.Text+"♦"+txtUnit.Text;
this.rfid.Write(cardNo[i],information);
)
MessageBox.Show("写入成功!”);
)
)
商品信息清空按钮
///<summary>
///清空信息按钮事件
///</summary>
///<paramname=usenderu></param>
///<paramname="enx/param>
privatevoidbtnClearInfo_Click(objectsender,EventArgse)
(
foreach(Controlcinthis.gbGoodsInfo.Controls)
(
if(cisTextBox)
(
c.Text=
)
)
)
2、环境参数监控
(1)界面设计
图14-4环境参数监控界面
(2)窗体属性设置
窗体StartPositionMaximizeBoxMinimizeBoxFormBorderStyleText属性
属T组属性属,性属性
frmGoodsOulCenterParentFalseFalseFixedSingle环境参数监
设置Lable控件属性
控件Name属性Text属性
Lable1biTemperature温度:
LableLabel1温度:
LableIblHumidity湿度:
LableLabel2湿度:
LableIblEnvrionmentValue0
LableIblEnvrionmentValue10
LableIblHumidityValue0
LableIblHumidityValue10
设置GroupBox控件属性
控件Name属性Text属性
GroupBoxgbEnvironmentParam环境参数
(3)编写后台代码:
获取节点的基本信息,向对应的节点发送了信息后,节点会返回信息。即可获取节点的
基本信息。
///<summary>
IIISensor_Read指令
///</summary>
///<paramname="senderux/param>
///<paramname=uenx/param>
privatevoidSensorRead()
{
DataTabledtb=Program.dbo.GetDataTable(string.Format("select
IEEEAddress,ShortAddress,NodeType,NodeClassfromCargoNodewhereNodeType-{0}u,,6));
for(inti=0;i<dtb.Rows.Count;i++)
(
try
(
this.time=0;
this.timerl.StopO;
〃获取流水号
this,sequencelD_T1=this.messageTl.GetSequenceID();
〃实例化节点泛型
List<GRIP_Node>nodeList=newList<GRIP_Node>();
〃实例化节点
GRIP_Nodenode=newGRIP_Node();
〃获取节点编号
node.IEEEAddress=dtb.Rows[i][uIEEEAddressu].ToString();
〃获取节点地址
//node.ShortAddress=Convert.ToUInt16("102550,16);
node.ShortAddress=
Convert.ToUIntl6(dtb.Rows[il[',ShortAddress',].ToString(),16);
〃将节点信息添加到节点泛型中
nodeList.Add(node);
〃将节点数量转换成byte类型
bytedeviceCount=Convert.ToByte(nodeList.Count);
〃将节点类型转换成byte类型
bytesensorClass=Convert.ToByte(dtb.Rows[i][nNodeClass"]);
〃将节点型号转换成byte类型
UIntl6sensorType=
Convert.ToUIntieCdtb.RowstiK^odeType'l.ToStringO,16);
〃读取数据
GRIP_MessageBody_Sensor_ReadmsgBodySend=new
GRIP_MessageBody_Sensor_Read(deviceCount,sensorClass,sensorType,nodeList);
〃获取发送的消息
GRIP_MessageHeadmsgHeadSend=new
GRIP_MessageHead(msgBodySend.BodyLength,
(UIntl6)GRIP_Message_CommandID.NWM_SENSOR_READ,this.sequenceID_Tl);
〃获取发送的数据包的byte数组
byte[]msgSend=this.messageT1.GetSendMessage(msgHeadSend,
msgBodySend);
intlenSend=0;
//Socket发送消息
SendMsg(this.socket_T1,msgSend,nSensor_Report_Respn);
〃接收消息的长度的byte数组
byte[]msgRecv=new
bytel(int)GRIP_MessageBody_Length.HEADLENGTH+
(int)GRIP_MessageBody_Length.SENSOR_READ_RESP_LENGTH];
intlenRecv=0;
//Socket接收消息
RecvMsg(this.socket_Tl,msgRecv,"Sensor_ReportH);
〃实例化接收的消息头
GRIP_MessageHeadmsgHeadRecv=newGRIP_MessageHead();
〃实例化接收的消息体
GRIP_MessageBody_Sensor_Read_RespmsgBodyRecv=new
GRIP_MessageBody_Sensor_Read_Resp();
msgHeadRecv,
msgBodyRecv);
〃判断消息体长度和流水号
if(msgHeadRecv.MessageLength==
(UIntl6)GRIP_MessageBody_Length.SENSOR_READ_RESP_LENGTH&&
this.sequenceID_Tl==msgHeadRecv.SequencelD)
{
//在控件中显示数据信息
if(msgBodyRecv.Status==0)
(
GRIP_MessageBody_Sensor_Read_RespmsgBodyRecv1
=newGRIP_MessageBody_Sensor_Read_Resp();
this.sessionlD=msgBodyRecv.SessionlD;
this.timerl.Start();
)
else
(
this.timerl.StartO;
)
)
)
catch(Exceptionex)
(
MessageBox.Show(uSensor_Read指令错误:"+ex.Message);
)
)
)
编写线程方法,实时监控的线程方法,在该线程中使用的是对温湿度节点实时的读取并
获取温湿度信息。
#regionT2_Thread
privatevoidRun()
(
while(true)
(
try
(
#regionT2_Head
GRIP_MessageHeadmsgHeadRecv=newGRIP_MessageHead();
byte[]msgRecv_Head=newbyte[6];
RecvMsg(this.socket_T2,msgRecv_Head,
uT2_Thread_Head_Recvu);
msgHeadRecv.GetHeadBytesOfRecive(msgRecv_Head,0,6);
UIntl6messageLength=msgHeadRecv.MessageLength;
UIntl6messageCommand=msgHeadRecv.MessageCommand;
UIntl6sequencelD=msgHeadRecv.SequencelD;
#endregion
#regionT2_HeartBeat
if(messageCommand==
(UIntl6)GRIP_Message_CommandID.NWM_HEARTBEAT)
GRIP_MessageHeadmsgHeadSend=new
GRIP_MessageHead(O,(Ulntl6)GRIP_Message_CommandID.NWM_HEARTBEAT_RESP,
sequencelD);
byte[]msgSend=msgHeadSend.GetHeadBytesOfSend();
SendMsg(this.socket_T2,msgSend,nT2_HeartBeatn);
)
#endregion
#regionT2_Status_Report
if(messageCommand==
(Ulntl6)GRIP_Message_CommandID.NWM_STATUS_REPORT)
(
GRIP_MessageBody_Status_ReportmsgBodyRecv=new
GRIP_MessageBody_Status_Report();
byte[]msgRecv_Body=new
bytelmsgHeadRecv.MessageLength];
RecvMsg(this.socket_T2,msgRecv_Body,"Status_Report");
msgBodyRecv.ConvertReciveBytes(msgRecv_Body);
GRIP_MessageBody_Status_Report_RespmsgBodySend=
newGRIP_MessageBody_Status_Report_Resp(0);
GRIP_MessageHeadmsgHeadSend=new
GRIP_MessageHead(msgBodySend.BodyLength,
(Ulntl6)GRIP_Message_CommandID.NWM_STATUS_REPORT_RESP,sequencelD);
byte[lmsgSend=
this.msg_T2.GetSendMessage(msgHeadSend,msgBodySend);
SendMsg(this.socket_T2,msgSend,nStatus_Report_Respu);
if(msgBodyRecv.SessionlD==this.sessionlD)
(
boolisExist=false;
if(msgBodyRecv.SensorClass==3||
msgBodyRecv.SensorClass==5)
intflag=Program.dbo.GetInt(string.Format("select
FlagfromCargoNodewhereIEEEAddress=,{0}H,,msgBodyRecv.Node.IEEEAddress));
if(flag==2)
(
isExist=true;
)
else
isExist=false;
if(!isExist)
(
ShelfNodeshelfNode=newShelfNode();
stringiEEEAddress=
Program.dbo.GetString(string.Format(uselectIEEEAddressfromCargoNodewhere
IEEEAddress=,{0}"',msgBodyRecv.Node.IEEEAddress));
if(msgBodyRecv.Node.IEEEAddress==
iEEEAddress)
(
bytesensorClass=
msgBodyRecv.SensorClass;
UIntl6sensorType=
msgBodyRecv.SensorType;
stringshortAddrss=
msgBodyRecv.Node.ShortAddress.ToString(MX4");
Program.dbo.ExecuteSQL(string.Format(MupdateCargoNodeset
ShortAddress-{0}\NodeType-{1}\NodeClass-{2}',Flag-21whereIEEEAddress='{3},H,
shortAddrss,sensorType,sensorClass,iEEEAddress));
count+=1;
#endregion
#regionT2_Sensor_Report
if(messageCommand
(UIntl6)GRIP_Message_CommandID.NWM_SENSOR_REPORT)
GRIP_MessageBody_Sensor_ReportmsgBodyRecv=new
GRIP_MessageBody_Sensor_Report();
byte[JmsgRecv_Body=newbyte[messageLengthJ;
RecvMsg(this.socket_T2,msgRecv_Body,nSensor_Reportu);
msgBodyRecv.ConvertReciveBytes(msgRecv_Body);
GRIP_MessageBody_Sensor_Report_RespmsgBodySend=
newGRIP_MessageBody_Sensor_Report_Resp(0);
GRIP_MessageHeadmsgHeadSend=new
GRIP_MessageHead(msgBodySend.BodyLength,
(int)GRIP_Message_CommandID.NWM_SENSOR_REPORT_RESP,sequencelD);
byte[]msgSend=
this.msg_T2.GetSendMessage(msgHeadSend,msgBodySend);
SendMsg(this.socket_T2,msgSend,nSensor_Report_Respn);
if(this.sessionlD==msgBodyRecv.SessionlD)
(
List<string>iEEEAddress=newList<string>();
iEEEAddress.Add(Program.dbo.GetString(string.Format(nselectIEEEAddressfrom
CargoNode")));
for(inti=0;i<iEEEAddress.Count;i++)
(
if(iEEEAddress[i]==
msgBodyRecv.Node.IEEEAddress)
(
ObjClass.ObjCargoNodeocn=new
ObjClass.ObjCargoNode();
ocn.Insert();
)
)
)
DataTabledtbAddress=
Program.dbo.GetDataTable(string.Format(nselectIEEEAddress,ShortAddressfromCargoNode
whereNodeType-{0}"\6));
for(intk=0;k<dtbAddress.Rows.Count;k++)
(
if(msgBodyRecv.Node.IEEEAddress==
dtbAddress.Rows[k][MIEEEAddress,,].ToString())
(
if(k<1)
(
ShowLabelMessage(this.lblEnvrionmentValue,
((GRIP_SensorData)msgBodyRecv.Data).Temp_H.ToString()++
((GRIP_SensorData)msgBodyRecv.Data).Temp_L.ToString()+"℃?");
ShowLabelMessage(this.lblHumidityValue,
((GRIP_SensorData)msgBodyRecv.Data).Humi_H.ToString()++
((GRIP_SensorData)msgBodyRecv.Data).Humi_L.ToString()+"%");
)
else
ShowLabelMessage(this.lblEnvrionmentValue1,
((GRIP_SensorData)msgBodyRecv.Data).Temp_H.ToString()++
((GRIP_SensorData)msgBodyRecv.Data).Temp_L.ToString()+"℃?u);
ShowLabelMessage(this.lblHumidityValuel,
((GRIP_SensorData)msgBodyRecv.Data).Humi_H.ToString()++
((GRIP_SensorData)msgBodyRecv.Data).Humi_L.ToString()+"%”);
)
break;
#endregion
#regionT2_Event_Report
if(messageCommand==
(UIntl6)GRIP_Message_CommandID.NWM_EVENT_REPORT)
(
GRIP_MessageBody_Event_ReportmsgBodyRecv=new
GRIP_MessageBody_Event_Report();
bytel]msgRecv=newbyte[messageLength];
RecvMsg(this.socket_T2,msgRecv,nT2_Evenl_Reportn);
msgBodyRecv.ConvertReciveBytes(msgRecv);
GRIP_MessageBody_Event_Report_RespmsgBodySend=
newGRIP_MessageBody_Event_Report_Resp(0);
GRIP_MessageHeadmsgHeadSend=new
GRIP_MessageHead(msgBodySend.BodyLength,
(UIntl6)GRIP_Message_CommandID.NWM_EVENT_REPORT_RESP,sequencelD);
byte[]msgSend=
this.msg_T2.GetSendMessage(msgHeadSend,msgBodySend);
SendMsg(this.socket_T2,msgSend,
"T2_Event_Report_Resp");
MessageBox.Show("EventID:H+
msgBodyRecv.EventID.ToStringO);
MessageBox.Show(',EventNum:M+
msgBodyRecv.ErrorNum.ToStringO);
#endregion
}
catch(Exceptionex)
(
MessageBox.Show("Thread_T2_Error!"+ex);
)
)
)
心跳包方法,为了防止在没有通信的时候网关将连接的用户踢出连接,在40秒时发送
一个空的心跳包。并接收返回信息。
#regionTl_HeartBeat
privatevoidtimer1_Tick(objectsender,EventArgse)
{
this.second++;
if(this.second==5)
(
〃这里是为了将放回的温湿度节点的信息显示,每隔5秒将程序界面的信息进行更新。
重新显示温湿度信息。
this.Refresh();
)
if(this.second==40)
(
try
{
this.sequenceID_Tl=this.msg_Tl.GetSequenceID();
GRIP_MessageHeadmsgHeadSend=newGRIP_MessageHead(O,
(int)GRIP_Message_CommandID.NWM_HEARTBEAT,this.sequenceID_T1);
byte[]msgSend=msgHeadSend.GetHeadBytesOfSend();
SendMsg(this.socket_Tl,msgSend,"Tl-HeartBeat");
GRIP_MessageHeadmsgHeadRecv=newGRIP_MessageHead();
byte[]msgRecv=newbyte[6];
RecvMsg(this.socket_T1,msgRecv,"Tl_HeartBeat_Resp");
msgHeadRecv.GetHeadBytesOl'Recive(msgRecv,0,6);
if(msgHeadRecv.SequencelD==this.sequenceID_T1)
(
this.second=0;
)
else
MessageBox.Show("Tl_HeartBeat_Resp_SequenceID_Error!n);
catch(Exceptionex)
(
MessageBox.Show(nTl_HeartBeat_Error!"+ex.Message);
)
#endregion
3、商品入库
在商品入库的操作前,我们需要编写一个类来将要处理的对象进行封装。如:入库单,
每个货物的信息等。
(1)界面设计
图14-5商品入库界面
(2)修改控件属性设置
控件名称
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年中国政府资源规划系统行业投资前景及策略咨询研究报告
- 2024至2030年组合卤钨灯杯项目投资价值分析报告
- 2024至2030年溶剂型纳米氧化铝溶液项目投资价值分析报告
- 2024至2030年气管卷筒项目投资价值分析报告
- 2024至2030年旋压劈开轮项目投资价值分析报告
- 2024至2030年承重型工程塑料拖链项目投资价值分析报告
- 2024至2030年中国刺绳网行业投资前景及策略咨询研究报告
- 2024至2030年内胎硫化胶水项目投资价值分析报告
- 2024至2030年上斜举重机项目投资价值分析报告
- 2024年中国香叶木素市场调查研究报告
- 第九版内科学糖尿病
- 2024年度高速公路扩建工程合同3篇
- 2023年中国艺术科技研究所招聘笔试真题
- 北师大版(2024新版)七年级上册数学第四章 基本平面图形 单元检测试卷(含答案)
- 金属非金属矿山安全生产实务注册安全工程师考试(初级)试题与参考答案
- 抗菌药物分级管理在临床中的应用
- 高尿酸血症与痛风
- 高速公路工程投标文件施工组织设计(技术标)
- 教师资格考试高中语文面试试题及答案指导(2025年)
- 2024新信息科技七年级《第二单元 直播网络我来建》大单元整体教学设计2022课标
- 2024-2030年中国抗血栓药行业销售动态及需求趋势预测报告
评论
0/150
提交评论