自动将现场10台试验台的紧急阀和主阀信息采集存人数据库;较实时地监视工控机与各试验台的通信状态和通信内容;并可设置com口;配置待通信的试验台;编排试验员姓名与其编号的对应序列。通信部分的运行界面如图2所示。
该系统采用host link通信协议,上位机与plc组成1:n的host link通信系统。host link采用总线式通信方式,通信的主动权在上位机一方,上位机启动通信;首先向plc发出fins命令,plc收到后会自动识别并加以执行,然后将执行结果返回上位机,上位机以帧的形式发送命令(命令码),plc也以帧的形式回送执行结果(响应码)。在通信时,plc与上位机的通信参数(如节点地址、通信波特率、数据格式)应设为一致。上位机的通信设置在对应的vc编写的程序中进行,plc的通信设置在其对应的系统设定区进行。fins命令具体格式可在omron cjcs通信手册中查找。
上位机通过串口与plc相连,故使用vc的串口通信控件 mscomm,完成对串口的读写工作。在使用mscomm控件进行读写前,必须先初始化该控件的一些属性,串口初始化代码如下:
该程序中使用事件驱动(event-driven)的方法来接收数据,当串口接收缓冲区中有字符到达时,mscomm控件的oncomm事件处理函数捕获到相关的通信事件,并被自动调用,在oncomm函数中加入自己的处理代码,即可把plc中传来的数据进行处理、存储等;通过mscomm控件的setrthreshold函数设置产生oncomm事件之前要接收的字符数,在oncomm函数中用switch语句,即可实现对不同的响应码的不同处理。
通过定时函数和循环控制函数,周期地依次向各个plc发送读写plc的fins命令码,再在oncomm函数中加入对不同plc响应码的处理函数,就可实时地完成对plc数据的采集。同时根据响应码的内容监视plc的运行状态。plc自动将检验的产品性能数据连续存入d存储区中,当存储区满时自动从头循环覆盖存放,上位机定时将plc的d存储区的产品数据读入、处理并存人数据库。该系统中上位机1 min内可依次读完10台plc的各自1条产品性能信息,而plc检验完1个产品需15 min左右,故可满足相对的实时性。为保证上位机完整且不重复地读取plc的所有产品性能数据,在各台plc中对每种产品都定义了a,b两个存储单元,a单元存放上位机读取过的最后一条信息地址,当上位机每读完1条信息,就由上位机对此单元的内容更新;b单元存放最新的产品信息存放地址,当plc每产生1条新信息时,就由plc更改该单元内容;上位机在读取产品信息前,先对比a,b单元的内容,决定是否进行数据读取和读取哪个地址的数据。这样即使上位机与plc断开一定时间后,当重新连接上,也可将以前没读到的信息读入。程序流程图如图3所示。
在上位机中向plc发送命令码时,必须加相应的fcs校验码。该校验码是8位的二进制数转换成的2位ascii字符。这8位数据是将1帧中校验码前所有字符的ascii码按位连续异或的结果,转换为字符时,按照2位16进制数转换成对应的数字字符。同时,当接收到plc自动发回的响应码时,为确保接收数据的正确性,也必须用响应码中的fcs进行校验。系统中的发送命令码、接收响应码、生成命令码和检验响应码的代码如下:
(1)发送命令码
3.1.4 设置com口、配置试验台、编排试验员的实现程序
设置com口、配置试验台、编排试验员的实现程序还需有以下功能:设置通信的com口;配置实验台,根据plc的工作状态,选择需进行通信的plc;编排试验员,由于plc中存放的是试验人员的工号,故需在程序中建立一张表将工号对应为姓名,再将该姓名存入数据库。
以上功能的实现,是通过在程序中写配置文件,将配置信息存入硬盘,程序启动时再从硬盘读取相应的配置信息。vc中用getprivateprofileint和writepri-vateprofilestring函数实现配置文件的读写。
3.2 查询打印部分的实现
用户登陆后,可对从plc中采集到数据库中的数据进行查询、打印、删除、修改、备份,并将数据导出到excel等,系统管理员可对一般用户进行相应的管理。查询部分的界面如图4所示。
3.2.1 vc与sql server 2000的连接
该系统中vc通过ado访问数据库,ado是最新的数据库访问技术,由3个主要对象connection,command,recordset和几个辅助对象组成。con-nection对象提供ole/db数据源和对话对象之间的关联;command对象封装了数据源可以解释的命令;recordset用于表示从数据源中返回的表格数据;为了方便地在程序中访问数据库,需要进行适当的封装,该系统中定义了一个类adoconn封装了对数据库的基本操作,在此后的数据库访问中可以方便地用adoconn类的对象进行操作。
利用sql servet 2000的企业管理器,在数据库中为plc上的各种产品的检验报告各建立一张表,以存储plc上传来的各项信息,此外还需建立一张用户表来管理用户的帐号和密码。然后在vc程序中对每张表定义一个类,类的成员变量对应表的列,类的成员函数是对成员变量和表的操作,以方便程序对这些表的操作。
3.2.2 各功能在vc中的实现
查询、修改、添加功能是在连接上数据库后通过执行相应的delete,insert,update语句来实现的;可在sql server2000的企业管理企中设置备份调度来实现备份,也可在程序中写backup database命令来实现备份;vc中实现数据库数据与excel表格数据的互导,可以充分利用exeel处理数据的强大功能,增强程序的数据处理能力和与外部数据的交互性,程序中采用这种方式来导出产品数据汇总表,以便存档、复制和打印,具体的实现代码较长,读者可参照相关vc资料来实现。
vc中实现打印功能的方法有:将数据导入到excel,world中进行打印;安装第三方的打印控件(如水晶报表)实现;若是基于单/多文档的程序可通过其封装的打印功能实现。该系统中,通过将数据导入到excel中的方式来打印汇总表,而各个产品的报告单则通过编写基于对话框的打印程序来打印,其方法是通过cprintdialog类的getprinterdc函数得到打印机的设备环境,再通过cdc类的startdoc,drawtext,selec-tobject等函数绘制打印的图表并打印输出。系统中用cdc类的开始打印新页函数startpage和结束当前打印页函数endpage来实现连续打印多张报告单。
4 结 语
windows环境下的应用程序编程是目前的主要趋势,plc与上位机的通信是目前工业自动化发展方向之一。利用visual c++6.o和sql server 2000,在windows xp环境下开发了omron plc的数据采集、存储和查询软件,其投资少,可靠性高,具有强大的数据库功能,现已成功运用于某厂的产品检验车间。若需要控制各plc的设备,只需修改相应的命令码即可实现。