- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于VC++的制瓶机微机控制系统的串口通信
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单片机,以进行数据采集的具体方法。该方法同时会对通讯出错或通讯堵塞现象进行处理。实践证明,该方法可提高定时的精确性,从而提高产品的质量和产量。
(苏义鑫,苏明霞,张清勇 武汉理工大学自动化学院)
来源:维库开发网