时间:2022-06-21 01:36:06
摘 要:文章介绍了一种基于VB的监控系统,符合大电流直流电源的控制要求,能实现直流电压、电流的实时监控,移相脉冲模拟显示,历史数据查询以及异常报警等功能,为电源的实时监视和智能控制提供了很大的方便。
关键词: Visual Basic;实时监控;直流电源
中图分类号:TP277 文献标识码:A
The Real-time Monitoring System of High-Current DC Power Supply Based on VB
LI Yi, LI Hong, YANG Bin, HE Xiao-liang
(Xi'an Shiyou University, Xi'an Shaanxi 710065, China)
Abstract: his paper introduces a monitoring system based on VB, which meets the control requirements of the high-current DC power supply. It can monitor the real-time DC voltage and current, display phase shifting pulse, keep the historical data and raise exceptions. It provides a big convenient to the real-time monitoring and intelligent control of the power supply.
Keywords: visual basic; real-time monitoring; DC power supply
引 言
大电流直流电源是冶金、化工及有色加工行业必不可少的供电电源,电源输出电压、电流的稳定性往往决定着整个公司产品的产量。以真空自耗炉为例,电流波动大,小则浪费一整炉的材料,大则烧掉整个定子,给公司带来很大的经济损失。可见对电源运行状况进行实时监控是很有必要的,但是目前大多数此类电源缺少有效的监控,或者使用价格昂贵的组态软件来进行监控。本文介绍了一种基于VB(Visual Basic)的监控系统,能有效解决以上不足,实现直流电压、电流的实时监控,移相角的直观显示,以及异常报警等,为电源的实时监视和智能控制提供很大的方便。
1 系统构成及原理分析
该系统上位机是由VB编程语言编写的实时监控界面(如图1所示),下位机采用STC11F32单片机。其监控原理为:下位机与上位机进行数据通信,发送电源电压、电流、移相角数据;上位机接收数据,监控界面以动态曲线和动画的形式给予直观显示;上位机也可以发送命令给下位机,完成合闸、分闸和封脉冲等动作,从而实现对电源的实时监控。
1.1 上位机与下位机通信模块
上位机串口经MAX232电平转换连接单片机,构成RS-232全双工串行通信形式,监控界面中添加Microsoft Communication Control(简称MSComm)的通信控件,MSComm一般有两种处理串行通信的方法:一是事件驱动方法,二是查询法。此系统采用事件驱动的方法,当串口接收到或发送完指定数量的数据时,或当状态发生改变时,MSComm控件都将触发OnComm事件,该事件也可以捕获通信中的错误。当应用程序捕获到这些事件后,可通过检查MSComm控件的CommEvent属性的值来获知所发生的事件或错误,从而执行相应的处理。具体实现如下:
(1) 初始化MSComm控件
mPort = 1 '选用串行口1
MSComm1.settings= "9600,n,8,1" '设置波特率9600,无奇偶校验,8位数据,1位停止位
MSComm1.InputLen = 0 '读入整个缓冲区
MSCom m1.InBufferSize = 1024 '设置接收缓冲区长度
MSComm1.InBufferCount = 0 '清除接收缓冲区数据
MSComm1.OutBufferCount = 0 '清除发送缓冲区数据
MSComm1.RThreshold = 3 '接收3个字符后引发OnComm事件
MSComm1.InputMode = comInputModeBinary '接收二进制格式的数据
(2) OnComm事件处理
Private Sub MSComm1_OnComm()
Select Case mEvent
Case comEventRxOver
MsgBox “接收缓冲区溢出”
Case comEvReceive
Rec_BuF=MSComm1.Input
Rec_byte=Rec_BuF(0)
Select Case Rec_byte
Case &H01
……
Case &H02
……
End Select
End Select
End Sub
1.2 实时曲线模块
实时曲线的绘制使用Timer控件,定期将串口接收到的数据送往PictureBox,再采用PictureBox的Line方法绘制曲线。具体实现如下:
(1) 重新建立坐标原点
因为PictureBox默认的坐标原点在左上角,与平时习惯不同,也不利于绘制曲线,所以需要重新建立坐标原点,使坐标原点(0,0)在PictureBox的左下角:
Private Sub PicScale(picX As PictureBox) '调整图像框的坐标系
picX.Scale (0, picX.ScaleHeight)-(picX.ScaleWidth, -picX.ScaleHeight)
End Sub
(2) 数值转换和绘图
由于监控的是电压和电流,传感器将其转换为0~10V的电压信号,经12位A/D转换为0~212-1的值,上位机需将12位二进制转换为十进制,再显示在0~Height的PictureBox里,其间必须有一一对应的关系,才能实现正确的监控显示。所以需要将串口传入的数据进行数值转换,再使用Line函数绘制曲线,x轴为时间,y轴为电压和电流。
转换程序如下:
For i = 1 To 8
s1 = s1 + 2 ^ (12 - i) * Val(Mid(Data_U1, i, 1)) '高字节电压数据
Next i
For i = 1 To 8
s2 = s2 + 2 ^ (8 - i) * Val(Mid(Data_U2, i, 1)) '低字节电压数据
Next i
Data_U = s1 + s2
绘图程序如下:
Private Sub Timer1_Timer()
TimeCount = TimeCount + 1
Picture1.DrawWidth = 2
PicScale Picture1 '调整图像框的坐标系
Picture1.Line ((TimeCount - 1) * 200 + 500, Data_U(TimeCount - 1) / (2 ^ 12 - 1) * picture.ScaleHeight) -((TimeCount) * 200 + 500, Data_U(TimeCount) / (2 ^ 12 - 1) *picture.ScaleHeight), vbWhite'实时电压曲线
Picture1.Line ((TimeCount - 1) * 200 + 500, Data_I(TimeCount - 1) / (2 ^ 12 - 1) * picture.ScaleHeight)-((TimeCount) * 200 + 500, Data_I(TimeCount) / (2 ^ 12 - 1) * picture.ScaleHeight), vbRed '实时电流曲线
End Sub
1.3 动画显示模块
此系统包括模拟移相动画、合闸分闸动画和报警动画。移相角动画模拟示波器显示移相触发脉冲,将触发器送来的脉冲相位在相对正弦曲线的位置显示,既直观又形象。合闸分闸动画模拟的是实际的空气开关闭合和分离的状态,易于操作的同时也给人以危险警示。报警动画以闪动的红灯和报警类型字样组成,当发生异常情况时,运行状态由绿色的“运行正常”变为红色闪动的动画,显示报警类型,并发出声音警报。
1.4 数据查询模块
历史数据的保存和查询,系统可以每天自行建立一个Excel文档,以对应的年月日命名,将实时的电压、电流值保存,并将异常情况单独列出,查询时可一目了然。另外,对标题行进行了冻结处理,方便查询(如图3所示)。具体实现如下:
Workbooks.Add
ActiveWorkbook.SaveAs FileName:=App.Path & "\" & Format(Now(), "yyyy-MM-dd") & ".xls" '新建Excel文档
On Error Resume Next
Set xlBook = xlApp.Workbooks.Open(App.Path & "\" & Format(Now(), "yyyy-MM-dd") & ".xls") '打开Excel
xlApp.Visible = False
Set xlSheet = xlBook.Sheets("sheet1")
xlBook.RunAutoMacros (xlAutoOpen)
xlSheet.Select
xlSheet.Columns("A:F").AutoFit
xlSheet.Range("A1:C1").Interior.ColorIndex =4
xlSheet.Range("A2").Activate
ActiveWindow.FreezePanes = True
Do While xlSheet.Cells(I + 1, 1) ""
I = I + 1
Loop
xlSheet.Cells(I + 1, 1) = TimeSerial(Hour(Now()), Minute(Now()), Second(Now()))
xlSheet.Cells(I + 1, 2) = Data_U(TimeCount) '添加电压数据
xlSheet.Cells(I + 1, 3) = Data_I(TimeCount) '添加电流数据
xlBook.Save '保存Excel文档
1.5 下位机模块
下位机为STC11F32单片机,通过MAX232芯片与上位机连接,接收上位机命令和发送实时数据,程序流程图如图4所示。
2 系统运行结果
运行系统,设置好通信参数、系统参数和电流电压设定值,点击“连接下位机”,建立与下位机的通信连接,然后分别点击合闸、解脉冲,给下位机发送数据,电源即开始工作。系统运行正常时,主界面上显示各个数据和曲线(如图5所示)。
当电源异常运行时,如过电流、过电压、缺相和外部报警状态,系统将自动封锁脉冲,动画报警,显示报警类型,同时发出声音警报。
另外,此监控系统还设有了多个锁定:
报警状况下,封脉冲的锁定,此时无法解锁脉冲
解脉冲状况下,合闸锁定,此时无法合闸
各种锁定有效确保了电源安全和控制人员的人生安全。
3 结 论
本文介绍的实时监控系统直观性强,操作方便,下位机可以是单片机,也可以是PLC,适应目前大电流直流电源的智能化、模块化的发展趋势。
参考文献
[1] 罗朝盛. Visual Basic 6.0程序设计基础教程[M]. 北京:人民邮电出版社,2007.
[2] 卢胜利. 单片机原理与应用技术实践[M]. 北京:机械工业出版社,2009.省略。