制瓶机微机控制系统的基本功能是控制制瓶机的各个机械动作,使其按照设定程序进行工作。为了实现主机与下位机之间的控制操作和数据管理,需要通过串口连接具有数据采集和自动控制功能的下位机,然后由操作员通过操作上位机管理软件将操作命令传递给下位机来完成各种控制和管理工作,因此,串口通信技术是制瓶机微机控制系统开发的关键技术之一。
在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库),其代码如下:
引入ADO库文件
使用ADO前,必须在工程的stdafx.h文件里直接引入符号#import来引AADO库文件,以使编译器能正确编译。其代码如下:
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的代码如下:
上位机与下位机之间可以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在程序初始化中已经打开,则可在窗体类中直接调用,然后进行数据的存储。代码如下:
保存数据后,上位机再发控制命令给下位机,并开始接收下一条下位机传递过来的数据。上位机给下位机发送数据的过程与下位机给上位机发送数据的过程和步骤一样。退出程序时,关闭串口即可。
4 结束语
串行通信具有实现简单、使用灵活方便、数据传输可靠等优点,因而在工业监控、数据采集和实时控制系统中得到了广泛应用。本文讲述在制瓶机控制系统中,在VC++环境下利用windows-API函数的串口编程技术和ADO数据库编程技术来实现和控制PIC单片机,以进行数据采集的具体方法。该方法同时会对通讯出错或通讯堵塞现象进行处理。实践证明,该方法可提高定时的精确性,从而提高产品的质量和产量。
采用VC++的制瓶机微机控制系统的串口通信
- VC++(26001)
- 串口通信(54799)
相关推荐
采用LabVIEW与PLC实现串级控制系统设计
摘 要:详细介绍了采用RS232串口完成LabVIEW与PLC之间通讯,并利用该方法,设计了一种基于LabVIEW与PLC的串级控制系统。实验结果表明:控制系统已达到了预期的设计效果。 关键词
2019-05-07 09:40:03
CH365代码用VC++平台的,但CH432里面的参考例程是C语言的,如何转成VC++?
有点小白,CH365代码用VC++平台的,但CH432里面的参考例程是C语言的,如何转成VC++?
2022-10-10 09:44:06
【NanoPi M2申请】水泥搅拌站自动化控制系统
申请理由:传统的水泥搅拌站控制系统通常采用工控机+数字I/O板卡的形式,通过VC++及数字I/O板卡驱动程序实现。随着数字化、智能化车间从概念提出,到逐步实施阶段,传统的控制方法已无法很好的满足设备
2016-04-27 16:16:42
【云智易申请】基于STM32智能家居远程控制系统研究
对各家电的控制;3、PC机作为远程终端,通过以太网实现对开发板的控制;4、采用VC++编写远程控制和环境检测界面。
2015-07-24 17:18:31
一种基于微机和单片机的步进电机控制系统
单片机的迅速发展和普及,为设计功能强、价格低的步进电机控制系统提供了先进的技术和充足的资源。本文主要介绍一种基于微机和单片机的步进电机控制系统,可以简便地控制步进电机运行。
2011-03-04 14:37:24
一种新型的电梯门机控制系统
一种新型的电梯门机控制系统电梯的开关门过程是一个变速运动过程 ,需要对电梯门系统的驱动电机进行调速控制;本文提出了一种以高性能单片微机87C196MC 为核心的电梯门机变频调速控制系统,功率驱动电路
2009-10-06 08:59:56
上位机VC与下位机单片机之间串口通信Proteus仿真
使用上位机软件VC++编写串口通信小软件,实现与下位机单片机之间的串口通信,采用proteus软件进行仿真,熟悉串口通信数据指令常采用的方法
2014-01-07 18:48:59
介绍一种基于FPGA的电机控制系统
日益成为系统的关键部件。本文介绍一种基于FPGA的电机控制系统,用于控制三坐标测量机电机运行。1:控制系统概述系统主要由PC控制电路驱动器和电机组成。系统结构图见图1.其中PC,由VC++实现用户界面,发...
2022-02-17 06:22:51
单片机温度控制系统的设计
单片机温度控制系统的设计用89C51单片机系统进行温度实时采集与控制是本设计的主要内容。本设计介绍的单片机温度自动控制系统的主要内容包括:系统方案、理论分析、硬件设计、系统调试及主要技术性
2009-09-08 00:48:12
喷油泵试验台微机控制系统的设计与实现
该系统由可以完全独立工作的2个部分组成:微机和单片机结合的显示控制系统(以下简称联合控制系统)及单片机显示控制系统。它可以在不同档位下对电机的转速、油泵的喷油量、油温进行测量和显示,并根据用户设定值
2011-03-04 14:47:23
如何采用VC++ 6.0开发一款基于串口通讯的PROFIBUS性能分析诊断软件?
本文就是在对PROFIBUS-DP报文进行详尽分析的基础上,采用VC++ 6.0开发了一款基于串口通讯的PROFIBUS性能分析诊断软件。
2021-06-07 06:40:42
如何使用vc++制作51单片机的上位机?
我想实现用VC++程序来控制51单片机的各个接口,同时也能读取单片机的中断。目前市面上单片机都是使用CH340来连接电脑,通过相应程序传给串口调试助手。现在我想把串口助手换成vc++,这样单片机的数据不就可以用PC来计算了吗,从而提高计算能力。不知道我的最终想法能不能实现?请前辈、大师们指点
2023-11-10 06:51:25
用VC实现PC机与单片机的通信
用VC实现PC机与单片机的通信介绍了Windows98环境下利用Visual C++ 6.0的MSComm控件实现微机与微机及微机与单片机通信程序设计方法,并完整给出了微机、单片机的通信程序实例。
2009-12-05 09:15:50
用VB,VC++写串口通信上位机程序时,出现8020读comms设备错误
刚开始,为了解决这个问题,从VB换到VC++,还是不行。后来从网上下载了一个串口调试助手的源码,并且运行后,发现跟我之前的错误一模一样,于是我就换了同学的一个电脑,把下载的源码在他的电脑上编译运行后
2014-11-02 19:49:16
超精密双面抛光机控制系统的研究
超精密双面抛光机控制系统的研究介绍了超精密双面抛光机的控制系统,对其实现方法进行了研究,分析了控制系统的组成,提出并建立了基于微机统一控制系统的解决方案。采用Windows软件平台, 图形化界面功能
2009-08-08 09:46:54
用VC++实现ABB工业控制系统与上位机的通信
介绍了串口通信以及ABB Master EXCOM通信协议,阐述了外部计算机通过EXCOM访问MasterPiece200/1主机数据库的方法以及两者之间的数据传输方式和消息格式。使用VC++编程实现了上位机和ABB工
2009-03-15 02:44:1339
采用VC++和IMAQ Vision开发进网许可证扰码串号图
采用VC++和IMAQ Vision开发进网许可证扰码串号图像处理系统:应用领域工业自动化挑战使用成熟的技术完成正确快速的采集通信终端的进网许可证扰码串号应用方案使用NationalIns
2009-05-14 00:41:2219
基于VC++和MFC的上位机与PLC的通讯系统The Com
本文介绍了用VC++和MFC开发的上位机和PLC的通讯系统,给出了系统的通讯原理和系统的软件设计方法。实践证明整个系统运行稳定,实用性和可扩展性强。关键词:PLC;VC++;MFC;通
2009-05-26 13:13:4333
VC++在长余辉测量系统中的应用The Applicatio
基于虚拟仪器系统和微机自动控制理论,利用计算机面向对象VC++平台进行可视化编程,具有界面形象、操作方便特点完成控制测量,研究设计出一套长余辉材料发光特性的自动
2009-05-27 16:34:5718
基于VC++和MFC 的上位机与PLC 的通讯系统
本文介绍了用VC++和MFC 开发的上位机和PLC 的通讯系统,给出了系统的通讯原理和系统的软件设计方法。实践证明整个系统运行稳定,实用性和可扩展性强。关键词:PLC VC++ MFC 通讯
2009-06-04 10:49:0742
基于VC++的水闸液压启闭PLC控制系统
基于安全性、可靠性及提高自动化程度,对传统液压启闭机控制系统进行了改进,提出了一种基于VC++和PLC 技术想结合的计算机控制方案。分别从硬件和软件两方面对控制系统进行了
2009-06-15 11:05:2221
基于串口通信的实时压力控制系统设计与实现
本文介绍了一种在VC++平台下,基于串口通信的实时压力控制系统。该系统通过对串口循环采集数据,记录到数据库中,并实时的对数据进行显示。人机界面提供历史数据查询,且
2009-06-15 11:14:4128
用InTouch 、MATLAB和VC++开发工业监控系统软
本文针对工业自动控制的需要开发了基于InTouch、MATLAB 以及VC++三者混合编程的具有普通分散控制系统不具备的较完善控制功能(例如人工神经网络控制)的控制系统监控软件。本
2009-06-16 09:55:4141
制袋分切微机控制系统设计
系统用于制袋分切的纠偏控制,主要包含光电探头、微机处理和电气控制三部分。光电探头采用激光二极管作为光源,光学系统完成标志的成像,双光敏电阻检测标志线的偏移,A/D
2009-07-09 15:55:3514
锅炉微机控制系统的设计
介绍了一种锅炉微机控制系统的设计方案,包括控制原理、系统结构、硬件和软件实现等。该系统可准确控制蒸汽的生产过程,提高锅炉的运行管理水平,节约能源,减轻环境污染
2009-08-18 09:52:0418
多线程在VC++串口通信程序中的应用
本文通过一机房监控系统程序中串口通信对多线程的应用来介绍Windows 9X/NT操作系统中多线程的应用和VC++对多线程的支持。关健词: 多线程,串口通信在现代的各种实时监控系
2009-09-03 11:45:2927
基于VC++6.0的汽车点火线圈测试台的串口通信
本文针对在开发汽车点火线圈测试台软件的过程中遇到的最重点、难点问题——串口通信操作,介绍了用VC++实现串口通信的方法的有效性和
2009-09-09 08:23:1517
基于VC++语言的HP34401A串口远程控制实现
计算机与外部设备之间有多种通讯方式,串口通讯是一种经济、实用的方式。本文以HP34401A数字万用表为例,详细介绍了VC++环境下利用Windows API 函数进行串口编程的方法。
2009-09-22 10:58:0663
基于运动控制卡的控制系统的设计与实现
本文介绍了一个基于多轴运动控制卡的运动控制系统。该系统以工控计算机、通用操作系统、PCI-8134多轴运动控制卡及其功能库函数为平台,采用VC++开发的人机界面,实现了三轴(X,Y,Z轴
2010-02-11 14:20:3855
基于VC++ 6.0的高速串口通信数据采集系统
在VC++6.0中利用MSComm控件实现串口通信时实时性较差,系统资源利用不足,无法满足高速串口数据采集软件的编程要求.针对高速串口数据采集软件的设计要求,提出了基于多线程技术和自
2010-03-02 14:28:41100
基于串口的信号源与解调器微机控制系统
采用通用微机,基于串口,实现对遥感卫星地面接收系统中二次变频本振信号源和卫星下行数据高速解调器的控制,替代原有的人工设置的模式,实现了对信号源和解调器可靠、灵
2010-07-21 10:24:0322
微机控制系统的干扰及抑制措施
针对微机控制系统的工作特点,对各种干扰源进行了分析,阐述了控制系统产生干扰的主要原因,讨论了干扰产生的危害,并从控制系统的硬件和软件两个方面,介绍了微机系统应
2010-08-03 10:53:0512
基于VC的网络实时通信系统的设计与实现
采用Client/Server 模式,设计了网络实时通信系统的网络结构和运行方式,并以VC++为开发工具,通过调用Winsock,实现了服务器端和客户端之间实时数据的通信。
2010-10-27 15:31:0926
金刚石合成控制系统中多串口通信技术的设计与实现
通过多串口通信技术在金刚石合成控制系统中的应用,讨论了32位Windows操作系统下,VC多串口通信技术的设计与实现方法,并运用面向对象方法和多线程技术设计了一个比较完善的串口通信类。
2006-03-11 13:22:10780
电源控制系统中通信的设计与实现
电源控制系统中通信的设计与实现
摘要:通信是电源控制系统中的关键技术之一,较为详细地介绍了在直流电源微机控制系统中通信系统的方案设计和实现
2009-07-16 08:28:30488
基于微机控制的滤油机控制系统的设计
基于微机控制的滤油机控制系统的设计
0 引 言 系统由真空泵电动机和油泵电动机各一台组成,要求用单片机完成管道压力检测和油箱温度控制。用压
2009-11-10 10:05:45457
基于VC++的多串口通信方法
介绍了实现 多串口通信 的基本方法,采用 VC++ 6.0并结合定时器和多线程技术编写,提出了实现多串口通信的三种方法,给出了实现的方法和步骤,并对三种方法进行了比较。实践证明
2011-08-03 10:42:28165
VC串口通信的数据采集系统设计
在VC++6.0中利用MSComm控件实现串口通信时实时性较差,系统资源利用不足,无法满足高速串口数据采集软件的编程要求.针对高速串口数据采集软件的设计要求,提出了基于多线程技术和自定义
2011-11-09 15:15:591734
基于VC++设计的模拟舵机系统,可实现多种类型舵机
基于VC++的模拟舵机系统设计摘要:在无人机半物理仿真实验中,为了节约实验成本,提出用模拟舵机系统代替真实舵机的方法。基于VC++设计了模拟舵机系统。在半物理仿真系统中连入模拟舵机,并用该系统模拟
2018-06-07 09:08:001587
如何在VC++下实现数据的实时采集设计制瓶机微机控制系统
操作上位机管理软件将操作命令传递给下位机来完成各种控制和管理工作,因此,串口通信技术是制瓶机微机控制系统开发的关键技术之一。
2019-01-08 09:09:002977
vc++应用程序和使用vc++设计的MFC计时器和计算机程序免费下载
本文档的主要内容详细介绍的是vc++应用程序和使用vc++设计的MFC计时器和计算机程序免费下载。
2018-12-24 08:00:0015
VC++中DC的概念
VC++中DC的概念(新型电源技术论文)-该文档为VC++中DC的概念讲解文档,是一份还算不错的参考文档,感兴趣的可以下载看看,,,,,,,,,,,,,,,,,,
2021-09-28 09:25:448
基于8098微机的SRD电机控制系统
基于8098微机的SRD电机控制系统(唐山科为工控技术有限公司怎么样)-文档为基于8098微机的SRD电机控制系统总结文档,是一份不错的参考资料,感兴趣的可以下载看看,,,,,,,,,,,,,
2021-09-30 12:29:242
评论
查看更多