安徽工业大学《物联网工程实习报告书》专业班级物联网131班学号139074366139074384139074386139074390姓名程少锋邱禹涵孙明明杨春指导教师张学锋,陆勤等1实习地点:安徽祥云科技有限公司,逸夫楼机房实验室2实习内容:【1】参观马钢云计算实验室,了解运作流程,熟悉液态冷凝塔等作用,并实地探查锅炉温度监控区域,分析相关原理图;由相关技术人员指导上机进行公司架设系统的操作运行等。【2】逸夫楼机房实验室进行系统开发课程设计,包括计时系统,校园一卡通系统等。计时系统校园一卡通系统【1】简介:校园一卡通系统是学校内部管理人员提供具有开放性、灵活性、面向校园的应用服务管理平台。一方面,学生和教职员工可以通过一张卡片,方便的使用校内的各种应用;另一方面,学校也可以通过一卡通系统,实现更加方便、高效的校园管理。同时,校园一卡通系统提供了一个统一、简便、快捷的平台,进而可以与学校的各种管理信息系统无缝连接,作为信息化系统的纽带促进“数字化校园”的建设。【2】需求分析:2-1用户分析一卡通系统的用户分为三类:1管理员:管理并授权2消费人员:持卡消费3学生和教职工:持卡使用授权服务2-2需求架构校园一卡通系统核心是所有现金、票证或需要识别身份的场合均可采用卡来完成。从功能上来看,主要分为服务授权和消费两大功能。2-3服务授权需求管理员具有制卡等终端权限,开放四大功能给学生和教职工使用。2-4消费管理需求消费管理模块是系统的核心模块,它提供各种消费服务功能。其模块用例模型如下:将卡片信息删除,被删卡将不能使用。在本模块中,其用例模型如下:2-5实施环境需求软件环境:开发软件MicrosoftVisualStudio11.0、SQLServerManagementStudio。校园一卡通系统服务授权消费管理发卡充值挂失(解挂)退卡各类消费管理员发卡充值挂失(解挂)退卡学生和教职员工校园一卡通系统工作人员各种消费学生和教职员工校园一卡通系统硬件环境:ISO/IEC14443A标准卡、13.56MHzISO/IEC14444A/BRFID读写器、串口线等。2-6接口需求本系统需与13.56MHzISO/IEC14444A/BRFID读写器连接,需要添加ISO1443DLL。【3】硬件系统构成在IVS京胜世纪物联网仿真平台上选用14443读写器和标签,配好电源并打开串口,这里使用COM101端口:【4】软件系统开发4-1发卡功能输入合法的个人信息,保存至数据库,要获得管理员的授权示例示范:4-2消费功能学生和教职员工消费时进行刷卡,工作人员输入消费的金额,扣除的金额保存至数据库。4-3充值功能持卡人缴费,更改数据库中对应的金额4—4数据库设计表结构设计4—5串口调试4—6主界面初稿:【5】主要源代码:1连接数据库:namespaceUtils{///summary///数据库操作工具///Date:2016-09-29///Author:Y.T.He////summaryclassDbUtil{privatestaticstringconStr;//保存数据库连接字符串staticDbUtil(){///使用App.config中的连接字符串信息进行配置foreach(ConnectionStringSettingscsinConfigurationManager.ConnectionStrings){if(cs.Name.Equals(db)){conStr=cs.ConnectionString;break;}}}publicDataTableQuery(stringsql,paramsobject[]value){SqlConnectionconn=GetConnection();SqlCommandcmd=newSqlCommand(sql,conn);string[]paramNames=GetParameterNames(sql);if(paramNames!=null){for(inti=0;iparamNames.Length;i++){cmd.Parameters.AddWithValue(paramNames[i],value[i]);}}SqlDataAdapteradapter=newSqlDataAdapter(cmd);DataSetdataSet=newDataSet();DataTabletable=newDataTable();try{adapter.Fill(dataSet);table=dataSet.Tables[0];}catch(SqlExceptionex){MessageBox.Show(ex.Message);}finally{cmd.Dispose();conn.Close();}returntable;}publicintUpdate(stringsql,paramsobject[]value){SqlConnectionconn=GetConnection();SqlCommandcmd=newSqlCommand(sql,conn);string[]paramNames=GetParameterNames(sql);if(paramNames!=null){for(inti=0;iparamNames.Length;i++){cmd.Parameters.AddWithValue(paramNames[i],value[i]);}}introwCount=0;try{rowCount=cmd.ExecuteNonQuery();}catch(Exceptione){MessageBox.Show(写数据库时出错,e.Message);}finally{conn.Close();}returnrowCount;}///summary///连接数据库////summaryprivateSqlConnectionGetConnection(){SqlConnectionsc=newSqlConnection(conStr);try{sc.Open();//MessageBox.Show(已经打开数据库连接!);returnsc;}catch(Exceptionex){MessageBox.Show(string.Format(SqlConn:{0},ex.Message));returnnull;}}///summary///取得sql语句中的参数名称////summary///paramname=sql/param///returns返回所有参数的名称/returnsprivatestring[]GetParameterNames(stringsql){if(string.IsNullOrWhiteSpace(sql)){returnnull;}stringpattern=@@(\w+);Regexreg=newRegex(pattern);MatchCollectionmatches=reg.Matches(sql);if(matches.Count==0){returnnull;}string[]rs=newstring[matches.Count];inti=0;foreach(Matchminmatches){rs[i++]=m.Value.Trim();}returnrs;}}}//byte[]bytes=System.Text.Encoding.UTF8.GetBytes(str);//string[]strArr=newstring[bytes.Length];//for(intk=0;kbytes.Length;k++)//{//strArr[k]=bytes[k].ToString(x);//strNum=strNum+strArr[k].ToString().Trim();//}returnmyArr;}publicstringToChina(stringstr){byte[]bytes;//需要将hex转换成byte数组。bytes=newbyte[str.Length/2];for(inti=0;ibytes.Length;i++){//每两个字符是一个byte。bytes[i]=byte.Parse(str.Substring(i*2,2),System.Globalization.NumberStyles.HexNumber);}//获得GB2312,ChineseSimplified。System.Text.Encodingchs=System.Text.Encoding.GetEncoding(UTF-8);returnchs.GetString(bytes);}}}2串口类:namespaceCampusOneCard.Tools{classRFID{#region打开串口方法///summary///打开串口方法////summary///paramname=portName串口编号/parampublicvoidOpenPort(stringportName){//if(portNames.Count()1)//{//MessageBox.Show(请选择串口。);//}//打开串口if(FR102.OpenSerialPort(portName)!=FR102.StatusCode.AllDone){MessageBox.Show(String.Format(串口{0}打开失败!,portName.Trim()));}MessageBox.Show(String.Format(串口{0}打开成功!,portName.Trim()));//检测并连接设备if(FR102.TestReader()!=FR102.StatusCode.AllDone)//Reader.TestReader()!=0x00){MessageBox.Show(String.Format(没有检测到连接到串口{0}的设备,请检查与设备连接的串口!,portName.Trim()));if(FR102.CloseSerialPort()==0x00){MessageBox.Show(String.Format(串口{0}关闭成功!,portName.Trim()));}return;}if(FR102.RestartReader()!=FR102.StatusCode.AllDone){MessageBox.Show(设备启动失败!);return;}//设置波特率方法默认为9600if(FR102.ChangeBaudRate(Int32.Parse(9600))!=0x00){MessageBox.Show(修改串口波特率失败!);return;}}3卡片信息类:classCardInf{publicstringCardID{get;set;}publicstringStudentID{get;set;}publicstringName{get;set;}publicstringGender{get;set;}publicintAge{get;set;}publicintMoney{get;set;}publicstringState{get;set;}publicstaticCardInfGetCardInf(stringcardID){stringsql=selectCardID,StudentID,Name,Gender,Age,Money,StatefromStudentwhereCardID=@cardID;DataTabletable=newDbUtil().Query(sql,cardID);if(table.Rows.Count0)//卡号对应的数据存在{CardInfci=newCardInf(){CardID=table.Rows[0][cardID].ToSt