




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘 要本论文以停车场的管理为主题,该系统软件是使用WINDOWS操作平台和SQL Server 2000开发的。本系统是一个功能比较完备的停车场系统,通过实现串口通信,使用SQL Server数据库处理图像等技术,使之具有Checkin、Checkout和计费等主要功能,并在这些功能支持下,停车场管理人员可以监视出门的车辆是否和进门的车辆是同一辆,收款人员可以通过电子显示屏、语音等多种方式告诉顾客应付的金额,停车场的管理人员可以通过后台的数据库,得知收益状况和对历史交易记录进行查询。关键字:串口通信,捕捉图像,动画播放,视频ABSTRACTThis thesis set the topic of Park System,and the system bases on WINDOWS operating system and SQL Server 2000 database.This park system has mature functions,it communicates the interface and uses SQL Server managing the image which get from the vidicon,so this system has the functions of Checkin,Checkout,charging and so on.Having this functions,the manager can check if the car was the same car when it putting off,and tell the chauffeur how much must pay for which via the LED,voice and so on.The manger can know the income and inquire about the historical business record from the background database.KEYWORDS:communication port,catch image,cartoon play,video frequency目 录第一章 引言3 1.1本课题研究的目的及意义3 1.2本课题的研究目标与预期达到的结果3第二章 串口通信概述及其实现32.1串口通信概述32.2串口通信实现42.2.1用控件的方法实现串口通信42.2.2文件的方法实现串口通信6第三章 主要功能简述93.1打印凭据93.2抓拍图像93.3扫描条码103.4收费10第四章 系统分析与设计104.1数据库设计104.2系统配置信息114.3实现功能的主界面13第五章 重点功能实现及其代码135.1串口通信13 5.1.1初始化串口16 5.1.2发送数据205.1.3接收数据235.1.4工作现程函数265.2视频功能的实现31第六章 自定义动画播放36致谢38参考文献38第一章引言1.1本课题研究的目的及意义随着社会经济的发展,汽车越来越多走进家庭,开发一个具有凭票泊车、车辆拍照、语音报价、电子屏显示费用、交费等一套完整的停车场的业务逻辑功能的停车场管理系统也就越来越有价值,因此,停车场的管理显得越来越重要。:进入21世纪,信息处理技术有着突飞猛进的发展,各类数据、信息急剧增长,大家对信息处理技术的利用已渗透到各行各业的各个环节中,而此同时我国汽车的产量和销量也逐年增长,故对停车场的需求也逐年增加,而对停车场更需要有较好的管理,主要是实现对停车场的智能管理,实现给人们一个安全合理的服务,为人们省去很多麻烦,让人们更关注其他重要的事。1.2本课题的研究目标与预期达到的结果本课题的研究目标是建立一个功能比较完备的停车场系统。通过实现串口通信,使用SQL Server数据库处理图像等技术,使之具有Checkin、Checkout和计费等主要功能,并在这些功能支持下,停车场管理人员可以监视出门的车辆是否和进门的车辆是同一辆,收款人员可以通过电子显示屏、语音等多种方式告诉顾客应付的金额,停车场的管理人员可以通过后台的数据库,得知收益状况和对历史交易记录进行查询。第二章串口通信概述及其实现2.1串口通信概述计算机进行数据传送的方式通常有两种:一种是并行,一种是串行。并行数据传送是指数据在多条并行、1位宽的传输线上,同时由发送方传送到接收方的数据传送方式。串行数据传送则是指数据在单条1位宽的传输线上,一位接一位地按顺序分时传送的数据传送方式。并行数据通信的距离通常很短,串行数据通信的距离可以很长,从几百米到几千公里均可;并行数据通信的速度比串行数据通信快。(1)串口通信的连接方式按照数据在传输线上的传输方向的不同,可以将串口通信分为:单工方式、半双工方式和全双工方式。(2)串口通信协议为了使通信双方顺利地进行通信,那么发送方和接收方必须共同遵守一些基本的通信规则,比如双方的同步方式、差错校验方式、数据传输的速度、通信报文的格式及控制字符的定义与含义。这些通信规则也可以称为通信协议,通常用到的协议有异步通信和同步通信两种。2.2串口通信的实现 使用Visual C+实现串口通信的方法有三种:一种是使用微软提供的MsComm控件的方法;一种是使用Visual C+提供的标准通信函数的方法;一种是使用API的方法,也就是使用文件的方法,串口也是文件。2.2.1用控件的方法实现串口通信:微软公司提供了MSComm32控件,这个组件专门用于串口通信,因此,我们可以使用该组件进行串口通信程序的编写。(1)属性MSComm32控件提供了许多属性,不过常用的并不是很多,下面是几个常用的属性:CommPort:设置/取得串口号;Settings:设置/取得串口通信的波特率、奇偶校验、数据位、停止位4个通信特征,这是一个字符串;PortOpen:打开/关闭串口,TRUE为串口打开,FALSE为串口关闭。Input:从串口接收缓冲区中读取数据。Output:向串口发送缓冲区写入数据。(2)方法当这个控件加入到Visual C+的工程后,会产生针对于这个控件的类,默认情况下类的名称为CMSComm。当然,我们可以进行修改,这个类中提供了大量的方法,其中针对于上面提到的属性操作的方法有:void SetCommPort(short nNew Value);这个函数用来设置串口号,即CommPort属性。short GetCommPort()这个函数用来获取当前操作的串口号。void SetInBufferSize(short nNew Value);这个函数用来设置输入缓冲区的大小。short GetInBufferSize();这个函数用来获取输入缓冲区的大小。void SetOutBufferSize(short nNew Value);这个函数用来设置输出缓冲区的大小。short GetOutBufferSize();这个函数用来获取输出缓冲区的大小。Void SetPortOpen(BOOL bNewValue);这个函数通过bNewValue的值来打开/关闭串口,TRUE表示打开串口,FALSE表示关闭串口。BOOL GetPortOpen();这个函数用来取得当前串口的状态,是打开还是关闭。Void SetOutput(const VARIANT&new Value);这个函数用来向串口中写入数据,或者称为发送数据。VARIANT GetInput();这个函数用来从串口读取数据,或者称为接收数据。Void SetSetting(LPCTSTR lpszNewValue);这个函数用来设置Setting属性,参数lpszNewValue是一个包含波特率、奇偶校验、数据位、停止位信息的字符串。CString GetSettings();这个函数用来获取串口的属性,并返回到一个字符串中。void SetCommEvent(short nNewValue);这个函数用来设置串口事件,对于这些已经设置了的事件发生后,系统将会自动进行响应,响应函数为OnComm。在Visual C+中可以对这个函数进行重载,然后再在这个事件响应函数中,使用下面的short GetCommEvent()函数对发生的事件进行分析,作出不同的动作。void SetRThreshold(short nNewValue);这个函数用来设置接收数据事件发生的时间,当接收缓冲区中有大于或等于参数nNewValue时,将发生接收数据事件,从而导致事件响应函数OnComm的执行。(3)响应串口事件介绍MSComm32控件提供了两种响应串口事件的方式:事件驱动方式:当串口事件(接收缓冲区中有数据、串口状态发生了改变、串口操作发生错误等)发生后,会导致OnComm事件响应函数的运行,因此可以在应用程序中获取发生的事件,并经过分析,针对不同的事件采取不同的操作。这种方法有程序响应及时,可靠性比较高的优点。查询方式:通过不断地查看CommEvent属性来得知当前串口事件的发生情况。这种方法显然没有事件驱动方式对串口事件的响应及时,比如当查看程序的一次查看刚刚结束,事件就发生了,可是响应事件要等到下一次查看发现后,才能进行响应。(4)使用Visual C+中,使用MSComm控件方法进行串口通信程序的编写时,一般情况是将MSComm控件放入某个对话框中,然后在对话框类中定义这个控件对应的控件类型的数据成员,之后再使用这个数据成员对串口进行操作即可。对话框资源编辑环境中,默认情况下是没有MSComm控件的,我们可以首先将控件加入到工程中,这时会产生一个默认名称为CMsComm的类,而且,对话框资源编辑环境中将会出现该控件的小图标,只要将这个控件拖到对话框中即可。2.2.2文件的方法实现串口通信 在16位的Windows中,有提供了一些关于串口通信的函数,有OpenComm、WriteComm、ReadComm、CloseComm等,还提供了WM_COMMNOTIFY消息。在Win32系统中,除了一般意义上的文件外,还有许多设备也被当作文件进行操作。下面介绍在32位Windows平台下,使用Visual C+中的文件方法实现串口通信:(1)打开串口串口在Win32中作为文件处理,它的打开函数是CreateFile。函数原型 HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);第一个参数lpFileName:指定要打开的文件的文件名。第二个参数dwDesiredAccess:访问模式。第三个参数dwShareMode:共享模式,对于串口来说,这个参数必须给定为0,也就是说,串口不能象一般的文件那样共享,它属于独占设备。第四个参数lpSecurityAttributes:安全属性,指向一个SECURITY_ATTRIBUTES结构体,可以通过它来设定设备文件的关联内核对象的安全属性,以及设备文件句柄能否被继承,一般给值为NULL,表示创建的文件句柄不能被继承。第五个参数dwCreationDisposition:创建方式,对于串口来说,此参数必须设定为OPEN_EXISTING属性,表示打开的是已经存在的文件,如果文件(串口)不存在,则CreateFile函数失败。因此不能设定为CREATE_NEW、CREATE_ALWAYS、OPEN_ALWAY、STRUNCATE_EXISTING值。第六个参数dwFlagsAndAttributes:表示新创建文件的属性和标志,对于串口来说,如果设定了FILE_FLAG_OVERLAPPED,则表示串口通信方式是重叠式的也就是异步的,并且对串口进行读写时必须定义OVERLAPPED结构体。如果没有设定FILE_FLAG_OVERLAPPED,也就是缺省情况,表示串口通信是非重叠式的也就是说是同步的。在MS_DOS和16位的Windows下,许多程序员习惯使用同步方式,比如对文件进行读操作时,程序会处于等待状态,一直等到文件的读操作结束返回后,程序才继续执行,用网络的话来说就是阻塞。第七个参数hTemplateFile:临时文件的句柄,必须给NULL值。其返回值:成功:返回文件或设备的句柄,表示函数成功地创建或打开了一个文件或设备。失败:返回INVALID_HANDLE_VALUE。(2)设置串口状态 打开串口后,接下来的事情应该是进行串口通信,也就是进行数据的读写。可是,我们发现串口通信程序出现问题的原因,往往是没有对串口的属性进行正确的设置。因此,在进行串口数据读写之前,应该进行串口属性的设置,这些属性包括波特率、是否允许奇偶校验、奇偶校验的方式、每个字符的数据位数、接收发送缓冲区情况和停止位数等,在Windows中,把这些属性包装在一个称为DCB的结构体中。(3)串口的读写 Win32中使用ReadFile()和WriteFile()函数代替ReadComm()、WriteComm()函数来进行串口的读写。(4)异步串口通信对于异步操作方式的串口通信来说,当调用了ReadFile函数或者WriteFile函数后,调用者会立刻返回继续做别的事情。Win32中使用线程同步内核对象得知读写是否返回,可以通过SetCommMask函数来设置串口的事件掩码,然后使用WaitCommEvent函数等待已经设置的某个或某些串口事件的发生。SetCommMask函数:BOOL SetCommMask(HANDLE hFile,DWORD dwEvtMask event);hFile参数:表示文件句柄。Events:事件掩码事件掩码可以是如下值的组合:EV_BREAK:检测到一个输入中断;EV_CTS:CTS信号改变状态;EV_DSR:DSR(数据设置就绪)信号改变状态;EV_ERR:发生了线路状态错误;EV_RING:检测到振铃信号;EV_RXCHAR:输入缓冲区接收到新字符,并把这个字符放入输入缓冲区;EV_RXFLAG:输入缓冲区接收到事件字符(属于DCB 结构体的EvtChar数据成员);EV_TXEMPTY:出缓冲区的最后一个字符被发送出去;(5)串口的超时设置对于串口通信来说,可以通过设置它的超时值来影响读写操作函数的返回,简单地说,就是当读写操作超过设置的时间段时返回。设置时,首先定义一个COMMTIMEOUTS结构体变量,然后通过SetCommmTimeouts函数进行设置即可。COMMTIMEOUTS结构体定义如下:Typedef struct_COMMTIMEOUTSDWORD ReadIntervalTimeout;DWORD ReadTotalTimeoutMultiplier;DWORD ReadTotalTimeoutConstant;DWORD WriteTotalTimeoutMultiplier;DWORD WriteTotalTimeoutConstant;COMMTIMEOUTS,*LPCOMMTIMEOUTS;ReadIntervalTimeout:指的是读取两个字符的间隔超时指标,当一个字符读取结束后,开始计时,如果已经超过了这个间隔,那么ReadFile函数将返回。ReadTotalTimeoutMultiplier,WriteTotalTimeoutMultiplier:用来计算总超时的乘法器。ReadTotalTimeoutConstant,WriteTotalTimeoutConstant:这个值加上ReadTotalTimeoutMultiplier与需要读取的字符数的乘积就是总超时。具体计算公式就是(其中的bytes指的是要读取或写入的字节数):读总超时值=( ReadTotalTimeoutMultiplier*bytes)+ ReadTotalTimeoutConstant写总超时值=( WriteTotalTimeoutMultiplier*bytes)+ WriteTotalTimeoutConstant(6)关闭串口当不再使用串口后,应该使用CloseHandle函数将串口句柄关闭,CloseHandle函数原型;BOOL CloseHandle(HANDLE hobject);hObject:对于串口来说,指的是使用CreatFile函数打开串口时得到的句柄。其返回值:TRUE:表示成功关闭;FALSE:表示关闭失败;第三章主要功能简述3.1打印凭据汽车到达停车场入口时,入口处的挡车器处于关闭状态。管理员点击“出票”按钮后,系统打印一张印有当前时间和凭据号的纸票。司机拿到此票据后,管理员打开挡车器,汽车进入停车场。 在系统内部要保存这个票号和它相关的数据,为随后汽车从出口驶出做准备。3.2抓拍图像在打印凭据的时候,系统同时要抓拍一张在进口处的汽车的图像,目的是为了在汽车驶出的时候进行校验。由于有上述的用法,所以要求本图像一定要保存在数据库中,在日后可以对停车场曾经服务过的车辆进行跟踪。图像格式要求采用JPEG方式,大小270像素200像素左右。3.3扫描条码在汽车驶出前司机要进行交费,交费的时候司机要提供纸票。纸票上的号码通过条形码识别仪读入到系统中。3.4收费在本系统中使用统一的费率标准:2元/小时。计费的准确性至少精确到秒。当司机开车要离开停车场,在出口处出示凭据进行扫描或者是人工输入号码,系统读出车辆的停泊时间,根据费率计算司机应付的钱款。司机交费后,管理员打开挡车器对车辆放行。汽车在数据库中的记录要备份下来,其中包括使用的凭据的号码、进入时间、离开时间、进入时候的图像和交费。第四章系统分析与设计 4.1数据库设计本系统使用SQL Server数据库VicAly,程序使用ODBC操作数据。下面介绍在VicAly数据库中的各个数据表。在正式工作之前,管理员或者是收款员要输入系统的帐号和口令才能进入。因此要设计操作员表,如图所示:SQL语句为:CREATE TABLE dbo.TAB_OPERATER (OPERATER varchar (50) NOT NULL ,PASSWORD varchar (50) NULL ) ON PRIMARY汽车进入停车场,系统立刻记录下当时的时间和司机所持的卡号还有当时的汽车的图像,所以TAB_COUNTTIME数据表的设计如图所示:CARD_ID条形码的,也就是司机所持的凭据上的条形码的含义。IN_TIME是汽车进入时间。CARD_IMAGE是在汽车进入停车场之前,由系统拍摄得到的照片。SQL语句为:CREATE TABLE dbo.TAB_COUNTTIME (CARD_ID varchar (50) NOT NULL ,IN_TIME datetime NULL ,CAR_IMAGE image NULL )系统的需求中要保存每个车辆进入车场的历史记录,包括进入时所持卡的号码、进入时间、出门时间、收费情况和当时进门时的图像。根据上面的要求设计表TAB_HISTORY_CARD,字段说明如图所示:CARD_ID表示纸卡的卡号,也就是打印到凭据上的条形码。IN_TIME汽车进入的时间OUT_TIME汽车驶出的时间PAY_AMOUNT司机所交的费用CAR_IMAGE汽车进入时的图片SQL语句为:CREATE TABLE dbo.TAB_HISTORY_CARD (CARD_ID varchar (50) NULL ,IN_TIME datetime NULL ,OUT_TIME datetime NULL ,PAY_AMOUNT money NULL ,CAR_IMAGE image NULL ) ON PRIMARY TEXTIMAGE_ON PRIMARY4.2系统配置信息(主要配置ODBC数据库)打开配置对话框,配置名为DSN_VicAly,驱程为SQL Server的数据源:并改变默认数据库名为VicAly:4.3实现功能的主界面第五章重点功能实现及其代码5.1串口通信 在本系统中实现串口通信的类为CSerialPort,它是一个开发源码的类,作者为Remon Spekreijse. 类的定义:【代码示例】CSerialPort类定义(串口通信类)/*FILENAMECSerialPort.h*PURPOSEThis class can read, write and watch one serial port.*It sends messages to its owner when something happends on the port* The class creates a thread for reading and writing so the main* program is not blocked.*AUTHORRemon Spekreijse*/#ifndef _SERIALPORT_H_#define _SERIALPORT_H_#define WM_COMM_BREAK_DETECTEDWM_USER+1/ A break was detected on input.#define WM_COMM_CTS_DETECTEDWM_USER+2/ The CTS (clear-to-send) signal changed state. #define WM_COMM_DSR_DETECTEDWM_USER+3/ The DSR (data-set-ready) signal changed state. #define WM_COMM_ERR_DETECTEDWM_USER+4/ A line-status error occurred. Line-status errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY. #define WM_COMM_RING_DETECTEDWM_USER+5/ A ring indicator was detected. #define WM_COMM_RLSD_DETECTEDWM_USER+6/ The RLSD (receive-line-signal-detect) signal changed state. #define WM_COMM_RXCHARWM_USER+7/ A character was received and placed in the input buffer. #define WM_COMM_RXFLAG_DETECTEDWM_USER+8/ The event character was received and placed in the input buffer. #define WM_COMM_TXEMPTY_DETECTEDWM_USER+9/ The last character in the output buffer was sent. class CSerialPort public:BOOL ClearRXBuffer();/ contruction and destructionCSerialPort();virtualCSerialPort();/ port initialisationBOOLInitPort(CWnd* pPortOwner, UINT portnr = 3, UINT baud = 1200, char parity = E, UINT databits = 8, UINT stopsbits = 1, DWORD dwCommEvents = EV_RXCHAR | EV_CTS, UINT nBufferSize = 512);/ start/stop comm watchingBOOLStartMonitoring();BOOLRestartMonitoring();BOOLStopMonitoring();DWORDGetWriteBufferSize();DWORDGetCommEvents();DCBGetDCB();voidWriteToPort(char* string);protected:/ protected memberfunctionsvoidProcessErrorMessage(char* ErrorText);static UINTCommThread(LPVOID pParam);static voidReceiveChar(CSerialPort* port, COMSTAT comstat);static voidWriteChar(CSerialPort* port);/ threadCWinThread*m_Thread;/ synchronisation objectsCRITICAL_SECTIONm_csCommunicationSync;BOOLm_bThreadAlive;/ handlesHANDLEm_hShutdownEvent;HANDLEm_hComm;HANDLEm_hWriteEvent;/ Event array. / One element is used for each event. There are two event handles for each port./ A Write event and a receive character event which is located in the overlapped structure (m_ov.hEvent)./ There is a general shutdown when the port is closed. HANDLEm_hEventArray3;/ structuresOVERLAPPEDm_ov;COMMTIMEOUTSm_CommTimeouts;DCBm_dcb;/ owner windowCWnd*m_pOwner;/ miscUINTm_nPortNr;char*m_szWriteBuffer;DWORDm_dwCommEvents;DWORDm_nWriteBufferSize;#endif _SERIALPORT_H_/*(1) 初始化串口【代码示例】初始化串口(CSerialPort:InitPort函数)/*/*FILENAMECSerialPort.cpp/ Initialize the port. This can be port 1 to 4./BOOL CSerialPort:InitPort(CWnd* pPortOwner,/ the owner (CWnd) of the port (receives message) UINT portnr,/ portnumber (3.6) UINT baud,/ baudrate char parity,/ parity UINT databits,/ databits UINT stopbits,/ stopbits DWORD dwCommEvents,/ EV_RXCHAR, EV_CTS etc UINT writebuffersize)/ size to the writebuffer/assert(portnr 2 & portnr m_hWriteEvent);/ Gain ownership of the critical sectionEnterCriticalSection(&port-m_csCommunicationSync);if (bWrite)/ Initailize variablesport-m_ov.Offset = 0;port-m_ov.OffsetHigh = 0;/ Clear bufferPurgeComm(port-m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);bResult = WriteFile(port-m_hComm,/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全生产警示教育考试试题及答案
- 2025年物理流体题目及答案
- 2025艺人经纪合同(对个人)
- 2025年红领巾答辩题目及答案
- 资料分析真题及答案
- nr考试复习测试附答案
- 2024脱盐水练习卷附答案
- IT客服素养题库及答案
- 2025年浙江冰雹地理题目及答案
- 2025年秋西师大版四年级上册数学教学计划
- saas货运管理办法
- 2025新疆生产建设兵团草湖项目区公安局面向社会招聘警务辅助人员考试参考试题及答案解析
- 2026届广东省广州市高三上学期8月调研考试语文试题(含答案)
- 江苏省南通市如皋市2025-2026学年高三上学期开学考试数学试卷
- 2025年高一语文开学第一课指导课件
- 2025年事业单位工勤技能-河北-河北计算机操作员二级(技师)历年参考题库含答案解析(5套)
- 社会资本测量方法-洞察及研究
- 无菌GMP基础知识培训课件
- 2025年江西省公安机关人民警察特殊职位招录考试(网络安全)历年参考题库含答案详解(5卷)
- 医院副高职称评审汇报
- 肿瘤放疗并发症综合防治
评论
0/150
提交评论