1、计算机控制工程大型实验位置监控系统实验一 位置监控系统一. 实验目的 通过本实验了解GPS位置监控的工作原理,了解GIS相关知识,掌握并应用数据库以及WEB相关知识,熟练运用VC+串口通信。二. 实验内容1. 开发虚拟GPS接受/发送机; 2. 在数据库中存储位置信息; 3. 设计串口程序接受并解析GPS信息; 4. 在监控界面显示GPS信息的位置。三. 实验环境1. Microsoft Visual C+ 6.0;2. VSPD 6.9虚拟串口软件;3. MySQL或者Sql Server数据库。4. Eclipse+JDK+Tomcat;四. 系统原理框图五. 实验步骤1. 安装mysql
2、数据库; MySQL是一个关系型数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性,在WEB应用方面 MySQL 是最好的关系数据库管理系统应用软件之一。(1)、首先单击MySQL5.5.21的安装文件,出现该数据库的安装向导界面,单击“next”继续安装,如图所示:(2)、在打开的窗口中,选择接受安装协议,单击“next”继续安装,如图所示:(3)、在出现选择安装类型的窗口中,有“typical(默认)”、“Complete(完全)”、“Custom(用户自定义)”三个选项,我们选择“Custom”,因为通过自定义可以更加的让我
3、们去熟悉它的安装过程,单击“next”继续安装,如图所示:(4)、在出现自定义安装界面中选择mysql数据库的安装路径,这里我设置的是“d:Program FileMySQL”,单击“next”继续安装,如图所示:(5)、接下来进入到准备安装的界面,首先确认一下先前的设置,如果有误,按“back”返回,没有错误,单击“Install”按钮继续安装,如图所示:(6)、单击“Install”按钮之后出现如下正在安装的界面,经过很少的时间,MySQL数据库安装完成,出现完成MySQL安装的界面,如图所示:这个界面单击“next”就行。注意要选择上边的“Launch the MySQL Instanc
4、e Configuration Wizard”选项,这是启动MySQL的配置,单击“Finish”按钮,进入到配置界面。(7)、MySQL数据库的安装十分简单,关键是安装完成之后的配置,单击完成之后出现如下的配置界面向导,单击“next”进行配置,如图所示:(8)、在打开的配置类型窗口中选择配置的方式,“Detailed Configuration(手动精确配置)”、“Standard Configuration(标准配置)”,为了熟悉过程,我们选择“Detailed Configuration(手动精确配置)”,单击“next”继续,如图所示:(9)、在出现的窗口中,选择服务器的类型,“De
5、veloper Machine(开发测试类)”、“Server Machine(服务器类型)”、“Dedicated MySQL Server Machine(专门的数据库服务器)”,我们仅仅是用来学习和测试,默认就行,单击“next”继续,如图所示:(10)、在出现的配置界面中选择mysql数据库的用途,“Multifunctional Database(通用多功能型)”、“Transactional Database Only(服务器类型)”、“Non-Transactional Database Only(非事务处理型)”,这里我选择的是第一项,通用安装,单击“next”继续配置,如图所
6、示:(11)、在出现的界面中,进行对InnoDB Tablespace进行配置,就是为InnoDB 数据库文件选择一个存储空间,如果修改了,要记住位置,重装的时候要选择一样的地方,否则可能会造成数据库损坏,当然,对数据库做个备份就没问题了,如图所示:(12)、在打开的页面中,选择mysql的访问量,同时连接的数目,“Decision Support(DSS)/OLAP(20个左右)”、“Online Transaction Processing(OLTP)(500个左右)”、“Manual Setting(手动设置,设置为15个)这里选择手动设置,单击“next”继续,如图所示:(13)、在打
7、开的页面中设置是否启用TCP/IP连接,设定端口,如果不启用,就只能在自己的机器上访问mysql数据库了,这也是连接java的操作,默认的端口是3306,并启用严格的语法设置,单击“next”继续,如图所示:(14)、在打开的字符编码的页面中,设置mysql要使用的字符编码,第一个是西文编码,第二个是多字节的通用utf8编码,第三个是手动,我们选择utf-8或者是gbk,单击“next”,继续配置,如图所示:(15)、在打开的页面中选择是否将mysql安装为windows服务,还可以指定Service Name(服务标识名称),是否将mysql的bin目录加入到Windows PATH(加入后
8、,就可以直接使用bin下的文件,而不用指出目录名,比如连接,“mysql u username p password;”就可以了,单击“next”继续配置,如图所示:(16)、在打开的页面中设置是否要修改默认root用户(超级管理员)的密码(默认为空),“New root password”,如果要修改,就在此填入新密码,并启用root远程访问的功能,不要创建匿名用户,单击“next”继续配置,如图所示:(17)、到这里所有的配置操作都已经完成,单击Execute按钮执行配置,如图所示:(18)、过了几分钟,出现如下的提示界面就代表MySQL配置已经结束了,并提示了成功的信息。(19)、在服务
9、中将mysql数据库启动,并在命令窗口中输入“mysql h localhost u root -p”,接着在出现的提示中输入用户的密码,如图所示:从图中可以看到mysql数据库在启动之后,成功的登录了,在此我们可以对数据库进行操作了。具体步骤也可参考此链接:2. 在数据库中存储模拟的GPS位置信息可以使用mysql可视化工具进行建表和存储数据(这里不做介绍),主要介绍下使用命令行进行建表和存储数据,在运行中输入cmd打开命令行;在命令窗口中输入“mysql h localhost u root -p”,接着在出现的提示中输入用户的密码,如图所示:从图中可以看到mysql数据库在启动之后,成功
10、的登录了;然后输入use mydb;使用创建的mydb数据库;输入show tables;语句,查看数据库中所有表信息;创建一张表名为GPS含有一个ID和一个GPS字段的表,如图所示:再创建一张表名为savegps,含有ID和GPS两个字段的表,如图所示:在GPS表中存入三组数据,30.2263817373,120.0299807650;29.5149540000,120.9003580000;40.0069050000,116.3350970000如图所示: 至此,模拟的GPS数据已经存入数据库中。3. 安装配置对应的mysql数据源:我们这边提供的mysql数据库版本为5.5.20,对应可
11、用的数据源为MyOBDC-3.51.11-2win1.exe;这个数据源为32位数据源;32位系统可以直接在控制面板-管理工具-ODBC数据源中配置,64位系统若在控制面板中找不到32位的ODBC数据源则在C:WindowsSysWOW64中打开odbcad32.exe进行配置;打开ODBC数据源到系统DSN中点击添加选中MySQL ODBC 3.51 Driver,再点击完成填写完对应信息后,点击ok;保存设置此时,数据源就添加完成。4. 开发模拟GPS获取发送机如图在VC6.0环境下创建对话框程序,界面设计可以参考图中所示,含有GPS获取按钮和GPS发送按钮,还有定时发送功能,还有一些串口
12、通信按钮可以参考TTY发送/接受程序,这里主要讲VC+从数据库中获取信息和把信息存储到数据库中。本例中VC+运用ADO技术实现对数据库的访问,以连接MySQL数据库为例。1) 初始化ADO在应用程序的文件stdafx.h中加入如下语句:/加入ADO支持库#import C:Program FilesCommon FilesSystemadomsado15.dll no_namespace rename(EOF,adoEOF) 2) 创建ADO与数据库源的连接 为了实现ADO与数据库的连接,我们首先要在程序APP类CGET_DATAApp的头文件GET_DATA.h中,添加如下的三个智能指针变量
13、。 _RecordsetPtr m_pRecordset; _CommandPtr m_pCommand; _ConnectionPtr m_pConnection; 然后,在应用程序类InitInstance成员函数中初始化OLE/COM库环境,创建ADO连接等操作。 m_pConnection-Open(DSN=mysql;Server=localhost;DATABASE=mydb,root,adModeUnknown); 这个语句为连接数据库的语句,内容和配置数据源时的信息对应上,DSN为数据源名,Server为服务器名,可以是IP地址(这里是本地数据库),DATABASE为关联的数据
14、库名,后面两个为用户名和密码。 在GET_DATADlg.h中添加三个指针类型的成员变量: _RecordsetPtr m_pRecordset; _CommandPtr m_pCommand; _ConnectionPtr m_pConnection;在GET_DATADlg.cpp文件中添加代码。在#endif下面添加如下代码:externCGET_DATAApptheApp;/在此引用应用类中的theApp来获取库连接指针CString DisplayGps; /两个全局变量int RT;双击获取GPS按钮,在按钮上添加以下函数: 设置定时发送按钮,首先在CGET_DATADlg类向导中
15、添加WM_TIMER函数在函数中添加代码:在定时发送和关闭定时发送按钮中添加代码:编译执行点击获取GPS按钮可以从数据库中获取GPS信息显示在编辑框中,如图所示:5. 设计制作串口通信接受程序,接受GPS信息并存储到数据库中。 设计界面供参考如图所示:ADO的基本配置如2中所述,然后在ReceiveGps.cpp中添加返回类型为_RecordsetPtr的成员变量ExcuteCommandADO(CString strSQL),编写函数代码。在串口通信函数OnOnCommMscomm()中添加一下代码void CReceiveGpsDlg:OnOnCommMscomm() / TODO: Ad
16、d your control notification handler code here int iLast = 0; / 接受字符个数 CString strDis, strTemp,GpsInfo; VARIANT input1; /定义VARIANT类型变量 BYTE rxdata2048; /定义存放二进制数据的数组 COleSafeArray safearray1; /定义COleSafeArray类的实例 UpdateData(true); switch(m_Comm.GetCommEvent() case 2: while(m_Comm.GetInBufferCount()iL
17、ast) iLast=m_Comm.GetInBufferCount(); Sleep(100); /收到iLast个字符 /读取输入缓冲区数据 input1=m_Comm.GetInput(); /将VARAIANT变量赋值给COleSafeArray类的实例 safearray1=input1; /使用COleSafeArray类的成员函数获取数据长度 long len1=safearray1.GetOneDimSize(); for(long k=0;k0) for(int i=0;iparameter.length;i+) pt.setString(i+1, parameteri);
18、int enter=0; enter=pt.executeUpdate(); if(enter=1) flag=true; catch (Exception e) / TODO: handle exception e.printStackTrace(); finally closemysql(); return flag; /* * category 数据库数据查询 * param sql String 数据库查询语句 * param parameter String 数据库查询约束条件 * return lists List返回一个List的对象 */ public List SelectD
19、ata(String sql,String parameter) List lists=new ArrayList(); try conn=DBConnection.getConnection(); pt=conn.prepareStatement(sql); if(parameter!=null¶meter.length0) for(int i=0;iparameter.length;i+) pt.setString(i+1, parameteri); rs=pt.executeQuery(); ResultSetMetaData rsm=rs.getMetaData(); whil
20、e(rs.next() Map map=new HashMap(); for(int i=0;irsm.getColumnCount();i+) map.put(i, rs.getString(i+1); lists.add(map); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); finally closemysql(); return lists; /* * category 数据库数据查询 * param sql String 数据库查询语句 * param parameter
21、String 数据库查询约束条件 * return lists List返回一个List的对象 */ public List SelectDataInt(String sql,Integer parameter) List lists=new ArrayList(); try conn=DBConnection.getConnection(); pt=conn.prepareStatement(sql); if(parameter!=null¶meter.length0) for(int i=0;iparameter.length;i+) pt.setInt(i+1, parameteri); rs=pt.executeQuery(); ResultSetMetaData rsm=rs.getMetaData(); while(rs.next() Map map=new HashMap(); for(int i=0;irsm.getColumnCount();i+) map.put(i, rs.getString(i+1); lists.add(map); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); finally closemysq
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1