0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在VC++下实现数据的实时采集设计制瓶机微机控制系统

电子设计 来源:郭婷 作者:电子设计 2019-01-08 09:09 次阅读

引言

制瓶机微机控制系统的基本功能是控制制瓶机的各个机械动作,使其按照设定程序进行工作。为了实现主机与下位机之间的控制操作和数据管理,需要通过串口连接具有数据采集和自动控制功能的下位机,然后由操作员通过操作上位机管理软件将操作命令传递给下位机来完成各种控制和管理工作,因此,串口通信技术是制瓶机微机控制系统开发的关键技术之一。

在VC环境下的制瓶机微机控制系统中,对于PC上位机的通信程序来说,其串口通信编程方法主要有三种:使用VC++提供的MSComm控件实现串口通信、基于某个串口通信C++类、基于API的串口通信。对于简单的串行口操作来说,前两种实现起来相对容易,使用也较方便、控制简单。但是,对于较为复杂的串行口操作,它则不够灵活。而基于API的串口编程方法则功能强大,控制手段更为自由灵活,可以编写出高效、功能强大的通信程序。对下位机来说,由于存储量有限,如果要存储大量数据必定会产生丢失现象,而将数据存储到上位机的数据库中,则可以弥补这个问题。因为VC++提供了多种数据库访问技术,例如ODBC、OLEDB、ADO等,其中ADO技术是基于OLEDB的访问接口,它继承了OLEDB技术的优点,并对OLEDB的接口作了封装,且定义了ADO对象,故可使程序开发得到简化,且基于ADO技术的应用程序可以通过一致的接口来访问各种各样的数据,同时也有利于程序的移植和扩充。

基于以上分析考虑,论述了在VC++下如何使用API函数和ADO数据库编程技术来实现数据的实时采集,同时将数据实时保存到数据库中,从而完成制瓶机微机控制系统的主机与下位机间数据的实时操作与显示的具体方法。

利用WindowsAPI函数实现串口通信

在Windows环境下,串口是系统资源的一部分,当数据从CPU经过串行端口发送出去时,字节数据将转换为串行位;在接收数据时,串行的位又将被转换为字节数据。应用程序要使用串口进行通信,就必须在使用之前向操作系统提出资源申请(打开串口),还要设置通讯的串口地址、波特率、奇偶校验、数据位和停止位等相关配置,通信完成后,还必须释放资源(关闭串口)。

打开串口

串口通信程序以调用CreatFile()函数开始,该函数的返回值是一个句柄。可在随后的其它端口操作中使用。一旦端口处于打开状态,就可以自动分配一个发送/接收缓冲区,当然,也可以通过调SetComm()函数来改变发送/接收缓冲区的大小。

1.2配置串口

串口打开成功后。接着应进行串口的初始化,以配置串口的通信参数,如波特率、数据位数、停止位、校验位等。修改这些参数可使用设备控制块DCB(Device Control Block)。DCB是个复杂的结构,有近30个数据成员;但是,对于采用3线方式的串行通信来说,DCB结构中的大部分参数可以不用,只需要设置如波特率、数据位数、停止位、校验位等几个关键的参数就可以正常工作了。同时Windows提供有GetCommState()函数以获取串行接口的当前配置,故可使用SetCommState ()来重新配置串行接口的各个参数。

1.3串口的读/写操作

通过程序可以使用Win32API中ReadFile()函数从串口中读取数据,或使用WriteFile()函数向串口写入数据。如在串行接口通信中发生错误(如发生终端出错、奇偶校验等错误),I/O操作将会终止。此时,如果程序要进一步执行串行接口的I/O操作,则必须调用ClearCommError()函数来对串行接口进行恢复。

ClearCommError ()函数有两个作用:第一是清除错误条件;第二是确定串行接口通信状态。另外,对于串行接口,系统为其提供有一组通信事件及其相应的处理函数。Windows系统可在进程中监视发生在串行接口中的这组事件,因此,应用程序在不检查端口状态的情况下就可以知道某些条件何时发生。通过使用这些事件,应用程序就无需为接收字节而连续不断地检测端口,从而节省CPU时间。

关闭串口

在程序执行完毕后,退回Windows环境时,通常应关闭串口,以便其它程序使用。可以利用函数C10seHandle(Handle hObject)来停止一切串口的输入输出,参数hObject是CreateFile函数返回时,标志串口的通信句柄。

2 VC++中的ADO数据库使用

初始化OLE/COM库环境

创建一个标准的MFC AppWizard(exe)应用程序后,还要在应用程序类的InitInstance函数中初始化OLE/COM库(因为ADO库是一个COMDLL库),其代码如下:

如何在VC++下实现数据的实时采集设计制瓶机微机控制系统

引入ADO库文件

使用ADO前,必须在工程的stdafx.h文件里直接引入符号#import来引AADO库文件,以使编译器能正确编译。其代码如下:

如何在VC++下实现数据的实时采集设计制瓶机微机控制系统



2.3 利用智能指针进行数据库操作

ADO库包含有3个智能指针:_ConnectionPtr、_CommandPtr、_RecordsetPtr。其中_ConnectionPtr通常用来打开、关闭一个库连接。为进行库连接,可先创建一个实例指针,再用Open打开一个库连接。下面以连接数据库db.mdb为例来加以说明:

_ConnectionPtr connectPtr;

connectPtr.CreateInstance("ADODB.Connection");//创建一个实例指针

connectPtr->Open("Provider=Microsoft.Jet.OLE.DB.4.0;DataSource="db.mdb"," "," ",

adModeUnKnown);//用Open打开一个库连接

_RecordsetPtr通常会返回一个记录集,以提供一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,可以用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。_RecordsetPtr可以用来打开库内数据表,并对表内的记录、字段进行操作。也可以先创建一个指针,再用Open打开一个记录集,然后对记录集内的记录、字段进行各种操作,包括添加、删除、修改等等。

3制瓶机控制系统的串口通信

制瓶机控制系统的下位机由四个段控板和一个机控板组成,段控板的职责是控制制瓶机一段的所有动作,一般通过20路输出驱动20个电磁阀来实现;机控板的职责是根据现场机器的状态,为其它4个段控板提供基准信号和制瓶机的状态信息。通过上位机可设定不同段控板的电磁阀开闭值和产生基准信号所需要设定的值。制瓶机控制不同产品所对应的设定值也不相同。为了确保下位机运作的准确性,往往需要监控下位机当前状态和控制下位机不同段控板的单个电磁阀的起停。本系统的段控和机控板的主控芯片选用PIC24FJ64GA008,而上位机与下位机之间的通讯则遵循RS-232协议。

3.1 独立串口通信类的创建

创建独立的串口通信类的方法主要是在应用程序框架下,点击主菜单中的insert菜单下的NewClass项,并在弹出的对话框中的Class type中选择Generic Class。这是一种建立没有继承的类的方法。创建独立的串口通信类对串口操作的封装可以很好地实现各种自定义通信协议下的串口通信,而且符合面向对象的程序设计思想。本系统对串口的打开、初始化、读写、上位机发数据到下位机、下位机读数据到上位机、关闭等相关操作,都封装在windowsAPI函数写的独立串口类CcomPort中。当在每个要用到串口通信的窗体类中引用这个串口类后,就可以方便的使用。本系统是将PIC单片机通过端口COM1与计算机相连接,打开端口COM1的代码如下:

如何在VC++下实现数据的实时采集设计制瓶机微机控制系统

上位机与下位机之间可以2400 bps/秒的通讯速率传输数据,且无奇偶校验,包括八位数据位和一位停止位。可通过下面的参数来设置DCB参数,从而初始化串口。其具体代码如下:

DCB dcb;

dcb.BaudRate=CBR_2400;//波特率

deb.fParity=FALSE;//禁止奇偶校验

dcb.ByteSize=8;

dcb.Parity=NOPARITY;//无校验

dcb.StopBits=ONESTOPBIT;//一个停止位

3.2 存取串口命令数据

当上位机与PIC24FJ64GA单片机通过一系列应答联络后,单片机将开始向上位机发送存在EEPROM中的数据,从而将按照设定的协议组成的每帧11个字节由上位机一帧一帧地接收,并按字段存人数据库的相应表中,直到数据通信结束。在数据传输过程中,可通过一个循环结构并以查询方式从串口读取数据。为了避免因线路不通或通信过程中断而造成死机,程序中可加入自动退出机制,即在1秒钟之内没收到数据,程序自动提示没有接到数据。在设定好数据库db.mdb后,可由ADO访问数据库来进行串口数据的存取。具体步骤如下:

(1)在窗体类中引用串口类

在窗体类中引用串口类时,如果本窗体类是第一次引用,则定义CcomPort Obj_Commpon;如果在其它的窗口类已经定义过,则定义为extern CCommPort obj_Commport。调用串口类的函数可进行串口的初始化。

(2)发送控制命令给下位机

按照通讯协议发送控制命令给下位机,可告知下位机要跟上位机传送数据。下位机收到上位机的控制命令数据后,先进行校验,以检测上位机的命令是否正确。如果接到的数据是正确的。则返回正确的电磁阀开闭值;如果不正确,下位机则返回控制命令给上位机,告知上位机发送的数据不正确,此后上位机会再次发送控制命令给下位机,如果仍然不正确,则提示通讯出错,退出本次通信,然后再发送下一个命令。

(3)打开数据库并进行数据存取

首先打开数据库的连接。若m_pConnection在程序初始化中已经打开,则可在窗体类中直接调用,然后进行数据的存储。代码如下:

如何在VC++下实现数据的实时采集设计制瓶机微机控制系统

保存数据后,上位机再发控制命令给下位机,并开始接收下一条下位机传递过来的数据。上位机给下位机发送数据的过程与下位机给上位机发送数据的过程和步骤一样。退出程序时,关闭串口即可。

4结束语

串行通信具有实现简单、使用灵活方便、数据传输可靠等优点,因而在工业监控、数据采集和实时控制系统中得到了广泛应用。本文讲述在制瓶机控制系统中,在VC++环境下利用windows-API函数的串口编程技术和ADO数据库编程技术来实现和控制PIC单片机,以进行数据采集的具体方法。该方法同时会对通讯出错或通讯堵塞现象进行处理。实践证明,该方法可提高定时的精确性,从而提高产品的质量和产量。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制系统
    +关注

    关注

    41

    文章

    6523

    浏览量

    110407
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10816

    浏览量

    210943
  • 串口通信
    +关注

    关注

    34

    文章

    1607

    浏览量

    55389
收藏 人收藏

    评论

    相关推荐

    内燃机台架试验数据采集处理及控制系统研究

    内燃机台架试验数据采集处理及控制系统研究没有先进的测量方法和装置以及现代测试技术,就不可能实现内燃大规模试验的自动化。只有使用精确的测量方法和仪器,以及先进的
    发表于 04-16 13:36

    单片温度控制系统的设计

    单片温度控制系统的设计用89C51单片系统进行温度实时采集
    发表于 09-08 00:48

    喷油泵试验台微机控制系统的设计与实现

    系统由可以完全独立工作的2个部分组成:微机和单片结合的显示控制系统(以下简称联合控制系统)及单片
    发表于 03-04 14:47

    如何使用vc++制作51单片的上位

    我想实现VC++程序来控制51单片的各个接口,同时也能读取单片的中断。目前市面上单片都是
    发表于 11-10 06:51

    VC++实现ABB工业控制系统与上位的通信

    介绍了串口通信以及ABB Master EXCOM通信协议,阐述了外部计算机通过EXCOM访问MasterPiece200/1主机数据库的方法以及两者之间的数据传输方式和消息格式。使用VC++编程
    发表于 03-15 02:44 39次下载

    基于VC++的水闸液压启闭PLC控制系统

    基于安全性、可靠性及提高自动化程度,对传统液压启闭控制系统进行了改进,提出了一种基于VC++和PLC 技术想结合的计算机控制方案。分别从硬件和软件两方面对
    发表于 06-15 11:05 21次下载

    基于串口通信的实时压力控制系统设计与实现

    本文介绍了一种在VC++平台下,基于串口通信的实时压力控制系统。该系统通过对串口循环采集数据,记录到数据
    发表于 06-15 11:14 28次下载

    基于VC++数据监视系统

    结合实际应用介绍如何用VC++编写一个远程数据采集监视程序。首先介绍基于凌阳单片SPCE061A 的数据采集及无线传输系统,然后重点说明
    发表于 08-28 09:22 64次下载

    VC++实现PC与单片的串行通讯

    要:应用VC++中的MSComm控件实现了在工业控制领域中常用的PC与单片的异步串行通讯。使用M~omm控件编程简单,能够满足串行通讯的
    发表于 11-27 16:04 102次下载

    VC++环境实现的GPIB通讯设计

    本文介绍了一种在VC++环境编程实现GPIB 通讯控制的设计。在设计中使用了CEC 公司的PCI-GPIB 接口卡,结合其软件库进行编程,简化了与GPIB 总线通讯的设计,并给出了对
    发表于 01-18 14:13 89次下载

    基于VC++ 6.0的高速串口通信数据采集系统

    VC++6.0中利用MSComm控件实现串口通信时实时性较差,系统资源利用不足,无法满足高速串口数据采集软件的编程要求.针对高速串口
    发表于 03-02 14:28 100次下载

    基于VC的网络实时通信系统的设计与实现

    采用Client/Server 模式,设计了网络实时通信系统的网络结构和运行方式,并以VC++为开发工具,通过调用Winsock,实现了服务器端和客户端之间
    发表于 10-27 15:31 26次下载

    采用VC++的制微机控制系统的串口通信

    采用VC++的制微机控制系统的串口通信 制
    发表于 05-05 10:42 809次阅读
    采用<b class='flag-5'>VC++</b>的制<b class='flag-5'>瓶</b><b class='flag-5'>机</b><b class='flag-5'>微机</b><b class='flag-5'>控制系统</b>的串口通信

    基于VC++数据采集监控系统设计

    本内容介绍了基于VC++数据采集监控系统设计
    发表于 06-09 17:53 56次下载
    基于<b class='flag-5'>VC++</b>的<b class='flag-5'>数据采集</b>监控<b class='flag-5'>系统</b>设计

    基于VC++的指纹识别系统的设计与实现

    基于VC++的指纹识别系统的设计与实现
    发表于 02-07 18:01 23次下载