资源描述:
《vc++数据库与串口编程在设备控制中的应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VC++数据库与串口编程在设备控制中的应用计算机时代2007年第2期?29?VC++数据库与串口编程在设备控制中的应用★汪华琴.谈国新'(1.华中师范大学教育信息技术工程研究中心,湖北武汉430079;2.华中师范大学计算机系)摘要:为了解决设备重启后的重新设置问题,提出了一种实现设备控制设置的存储和回调功能的方法.该方法采用vc++中的ADO数据库编程技术,将已发送的设备控制命令保存在数据源文件中,然后根据需要进行存取.实践证明,该方法简单,灵活,对设备的控制更加方便,提高了工作效率.关键词:串口;数据库;控制命令;设备控制0引言在实际应用中往往需要使用PC机通过串口来
2、控制设备,但是在设备控制过程中会出现这样的问题,当设备出现故障或者是关闭后重新启动,将会恢复到默认的初始状态,这就需要重新对设备进行设置.例如,通过串口发送背景视频信号输出命令使抠像机输出背景视频信号,重新启动后,抠像机的输出将是默认的抠像合成输出信号.如果把发送的控制命令实时保存起来,当设备重启后,则能够恢复到重启之前的设置.由于这些设备控制命令数据量大且要求回调数据,如果所有的数据只在内存中处理,必须设置较大的动态数组,这会占用较大的系统资源,有可能导致程序崩溃,而利用数据库则可以很好地解决这个问题.vc++提供了多种数据库访问技术,例如ODBC,API,OLEDB,
3、ADO等.其中ADO技术是基于OLEDB的访问接口,它继承了OLEDB技术的优点,并且ADO对OLEDB的接口作了封装,定义了ADO对象,使程序开发得到简化.ADO建立在Microsoft的COM基础上,包括一组COM组件程序,组件与组件之间或者组件与客户程序之间通过标准的COM接口进行通讯.又由于ADO具有运作的自动化特性,所以ADO的应用场合非常广泛.基于ADO技术的应用程序可以通过一致的接口来访问各种各样的数据,而不管数据驻留在何处,也不需要进行数据转移,复制和转换,在实现分布式的同时也带来了高效率….本文以DatavideoDVK一100抠像机为实验设备,利用Vc
4、++中的ADO数据库编程技术将发送的设备控制命令实时保存到数据库中,从而实现设备控制设置的保存和回调.1工作流程计算机控制过程中实现设备控制设置的保存和回调的具体工作流程(如图1)如下:首先启动设备,然后打开设备控制软件,从数据库中读取上次使用设备时对设备发送的控制命令,将命令通过串I:1发送给设备,从而使设备的状态恢复到上次使用时的设置.该工作流程中采用了Vc++中串口通信编程技术和ADO数据库编程技术.下面以抠像机为实验设备,给出这两个关键技术具体实现过程(所用到的参数可从DatavideoDVK一100抠像机的技术手册上获得).启动设备和控制软件从数据库读取上次向设
5、备发出的控制命令通过串口向设备发出从库中取出的控制命令重新向设备发送控制命令?/设备重新启动图l设备控制设置的存储和回调的工作流程2利用WindowsAPl进行串口通信编程串行端口实际上是作为CPU和串行设备间的编码转换器.Windows环境下,串口是系统资源的一部分.当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位;在接收数据时,串行的位被转换为字节数据.应用程序要使用串I:1进行通信,必须设置通讯的串口地址,波特率,奇偶校验,数据位和停止位,在使用之前向操作系统提出资源申请要求(打开串I:1),通信完成后必须释放资源(关闭串口).本文使用Windows系
6、统提供的应用程序接I:1(API)来完成计算机与DatavideoDVK-I~抠像机的串口通信,其中该抠像机遵循RS-232协议.2.1打开串口串口的打开,关闭,读取,写入所用到的函数与文件操作所用到的函数相同.串El通信程序以调用CreatFile0函数开始,该函数的返回值是一个旬柄,在随后的其他端I:1操作中使用.函数的描述如下:hCom=CreateFile(szDevice,fdwAccess,fdwShareMode.Ipsa,fdwCreate,fdwAttrsAndFlags,hTemplateF);一旦当端口处于打开状态,就可以自动分配一个发送,接收缓冲区
7、,当然也可以调SetCommO函数改变发送,接收缓冲区的大小.在这里,程序采用此函数将发送,接收缓冲区都设置基金项目:武汉市科技攻关计划项目(20051101013);教育部高等学校创新工程重大项目培育基金项目(705038)?30?ComputerEraNo.22007为1024个字节,SetComm(hCom,1024,1024).本文假设抠像机通过端口COM1与计算机相连接,打开端口COM1的代码如下:hCom=CreateFile("COM1".//指向端口名的PointerGENERIC_READIGENERIC_W