PLC上位机监控系统的设计 江永富 廖晓梅 一、前言 随着硫化机自动控制水平的不断提高,硫化机的温度压力数据采集记录方法经历了圆盘记录仪、打点式记录仪、智能化无纸记录仪乃至目前较先进的上位机监控系统。上位机监控系统界面友好、控制安全可靠、精度高、数据存储量大,可以根椐用户要求开发不同的人机界面、灵活性好,相对前几种记录方式大大节约了成本,不仅省去了天天换记录纸的烦恼,又降低了系统的维修费用,且存在功能多、使用方便简洁。因此,上位机监控系统已越来越受用户青睐,作为企业节能降耗、提高控制水平的突破口。笔者采用电阻式触摸平板电脑作为上位机,把现场数据通过传感器采集经PLC处理后送入上位机,组成一个监控系统。上位机丰富的资源可以对采集到的数据进行分析、存盘、运算、打印、报警、进行各种相应的显示,并可通过数据传送对PLC进行控制。 二、监控系统构成 整个监控系统由A/D模块、D/A模块、CPU、传感器、电气转换器、平板电脑组成,如图1所示。 A/D模块的功能是将通过传感器采集到的数据转换成数字量,以便CPU进行处理。 CPU的功能是处理各种信息,对A/D模块的数据进行PID处理。 D/A 模块的功能是将PID处理后的输出数字量转换成模拟量。 上位机对数据进行分析、存盘、综合处理、打印、报警、图形显示、人机对话,并可通过数据传送对PLC进行控制。 三、监控软件的设计 1、窗体设计 在软件的编程过程中,人机界面(MMI)非常重要,因为它直接与操作员产生信息交流,友好的人机界面要求能真实再现控制设备的状态以及准确的采集所需参数的数据,这主要依靠VB6.0的控件组合及原代码完成。整个人机界面包括硫化状态画面(主画面)、实时曲线画面、数据查看画面、历史曲线画面、工艺编辑画面、报警画面、口令画面、开关状态画面,各画面间可以相互切换.当然也可根据用户习惯编辑不同的人机界面,具有很好的灵活性。 主画面如图2所示,它实时采集硫化机温度压力信号,并将其保存在以日期为名称的数据库里。显示每锅轮胎硫化的时间、步序参数数据,产量、胶囊计数、本机目前的信息也一目了然,棒图控件能动态表明每条轮胎的硫化进程,并有百分数提醒操作员。如果某一阀门打开,主画面中相应阀门名称的颜色变化,管路里就会有液体流动的动画,形象再现了阀门状态的变化,这可以在Picture控件中应用API函数实现.清零菜单可分别对左右计数和产量进行清零.单击“通讯”按钮通过串口与PLC通信,进行数据交换,数据采集频率可在Timer控件中设定.插入公司的商标,与其它控件协调组合,整个主画面就相当xx了。主画面为监控系统的窗口,基本上所有操作员需要了解的数据都集中在这里,其画面的友好程度及功能的完整性直接影响人机界面成功与否。 实时曲线画面实时跟踪硫化机的温度压力参数,可分为圆盘型和直线型。圆盘型尊重原有圆盘记录仪的习惯,以{yt}为单位,实时记录每一时间的数值,在实时数据与上一时间数据间画圆弧,这样能准确显示数值的变化情况。直线型以一小时(一般轮胎硫化时间在一小时内)为单位显示,如果采集完一个小时数据,则实时曲线以采集频率从右向左漂移,这时在Picture控件最右端显示当前数值对应的曲线,这种动态漂移效果可由WINDOWS API函数实现。这两种曲线方式各有千秋,前者可以直观了解当天所有轮胎的曲线情况,但上位机的显示屏显示{yt}数据,图形就显得小,分辨率不高。后者清晰度高,但只能显示当前一段时间的曲线,如果需要更长时间的曲线,得从历史画面中查看。一般来讲,两者兼顾应用,相得益彰。 每天采集的数据都存放在当天的数据库里,要查看哪天的曲线只要打开该天的数据库就可以画出该天的历史曲线。 口令画面限制操作员的访问权限,确保工艺的保密性,防止不必要的误操作。口令可以在输入正确口令后修改。 开关状态画面显示PLC的I/O状态,将硫化机所有开关的I/O对应相应控件,控件颜色的改变映射相应的I/O状态改变,操作员从画面中能判断硫化机的运行状态。同时,也方便维修。 画面组态后,需用代码将控件联系起来,以便达到理想效果。 2、上位机与PLC间的通信 在上位机链接通信中,上位机多是以主态同PLC进行通信, 命令一般从上位机发至PLC,任何数据都能从PLC发送至上位机.两者间的通信通过上位机的串口与PLC串口连接实现,并遵循RS-232协议.其命令格式为: 用VB6.0编写通信程序时,要用通讯控件(Mscomm)。将通讯控件调入后,还需编通信代码。 如PLC采集的内温、内压、外温、外压存放在数据区DM0000~DM0003,主画面的内温、内压、外温、外压分别显示在Label1(0)~Label1(3)中。 则 在VB6.0下建立的通信代码如下: Private Sub Timer1_Timer() Form1.MSComm1.CommPort = 1 '使用COM1端口 Form1.MSComm1.Settings = "9600,e,7,2" '设置通信条件 Form1.MSComm1.PortOpen = True '打开串口 R$="@00RD00000004"读PLCDM0000~DM0003的内容 RD$=R$ + fcs(R$) Form1.MSComm1.InBufferCount = 0 Form1.MSComm1.Output = RD$ + Chr$(13)'发送命令 Do Dummy = DoEvents() Loop Until Form1.MSComm1.InBufferCount >= 27 instring$ = Form1.MSComm1.Input'接收数据 Label1(0).caption=MID$( instring$,8,4) Label1(1).caption=MID$( instring$,12,4) Label1(2).caption=MID$( instring$,16,4) Label1(3).caption=MID$( instring$,20,4) Form1.MSComm1.PortOpen = False End Sub 数据是以帧为单位发送的,每次接受一帧时计算FCS并将结果与包含在帧中的FCS比较使之能检查帧中的数据错误.FCS是转换成2个ASCII字符的8位数据,这8位数据是对帧开始数据直到此帧正文结束的数据进行异或运算的结果.VB6.0下的FCS函数代码如下: Function fcs(O$) Dim B%, I%, II%, FF$ B%=0 II%=Len(O$) For I%=1 To II% B%=B% Xor Asc(Mid(O$, I%, 1)) Next I% FF$=Hex$(B%) If Len(FF$)=1 Then FF$="0" + FF$ End If fcs=FF$ + "*" End Function 四、结束语 本例已成功地应用于硫化机自动控制系统中,控制精度高,操作方便,可靠性高,具有良好的性能价格比.因此深得用户喜爱.现已批量应用于橡胶机械控制中。 |