基于视窗平台的UPS产品质量检测系统开发
2018-04-20俞潇强陈家新胡晨阳齐亚滨
俞潇强,陈家新,胡晨阳,陈 革,齐亚滨
(1.东华大学 机械工程学院,上海 201620; 2.中国纺织机械工业协会 ,北京 100028)
0 引言
随着电力电子技术和信息技术的飞速发展,UPS(Uninterruptible power system)电源系统的应用也越来越广泛。它广泛地应用于各类计算机应急电源中,如纺织装备的中央监控室、银行清算中心、通信网管中心、互联网数据交换中心、证券交易中心等领域[1]。为了保障对这些用电设备提供一种无中断时间且抗干扰能力强的供电电源,则需要UPS电源供电系统提供高质量稳定的电源。而UPS电源本身质量则是一项影响高效稳定用电的关键因素,因此其出厂前的电气性能检测也成为人们研究的重点。
国内外对于UPS电源出厂前电气性能检测和数据综合分析环节下了大量功夫。国外对于 UPS 电源电气性能测试的研究起步于 70 年代。艾默生电气公司对于产品电气性能检测技术比较成熟,在UPS电源的操作面板上可以显示输入输出电压值,用户负载也可以根据需要显示出来,美国电力转换集团在电气测试过程中不需要计算机与UPS电源通讯便可顺利地设置参数,运行过程中网络监控功能强大[2-4]。国内对于UPS电源电气性能测试研究较晚,起步于上世纪80年代后期。达通股份有限公司在电气检测环节中,在控制面板上可以显示输入输出电压、频率和负载等。广东科士达科技有限公司采用单片机为核心的电源检测设备,可以在线检测电参数,自动检测各项参数(三相电压、电流和频率等)[5-6]。
对于文献资料的分析可知UPS 电源电气性能测试技术存在的问题:①先进 UPS 电源测试仪器的缺乏[7];②UPS 电源电气测试过程难以实现全自动控制;③电气测试周期长,影响企业生产效率主要表现在人工测试耗时费力,检测精度低等。
在系统设计中上位机界面的设计可以采用多种语言工具如VB,LabVIEW,Delphi,VC++等。在用VC++开发时可采用微软提供的MFC类库[8]来编程,具有高效率和高稳定性的特点。数据串口通讯直接利用MSComm控件来实现,它是微软公司提供的简化Windows环境下串行通信编程的ActiveX控件[9],编程简单方便,功能可靠稳定。产品检测产生的大量数据则采用SQL Server数据库,它具有操作简单、功能强大的特点。
在分析文献资料和国内外研究现状的基础上,提出了一种基于MFC上位机设计、系统配置文本开发、串口通讯、SQL Server 数据库操作的UPS产品质量检测系统设计方法,可以达到自动化检测、运行简单可靠方便及低成本和通用性强的效果,对于UPS相关类似产品的检测具有较好的参考和借鉴的意义。
1 系统总体方案
1.1 系统功能分析
在对一个系统进行整体设计之前,必须先进行功能分析。由产品检测需求可知检测系统主要实现的功能如下:
设计人机交互界面,便于用户查看检测状态和执行相关操作。
建立串口通信进行检测数据的收发,设置串口通讯协议。
检测数据的操作与数据报表的打印,需要建立与后台数据库SQL Server的联系。
1.2 系统硬件结构分析
根据系统功能分析,设计UPS产品检测系统如图1所示,该系统可由3个物理层实现,分别是设备层、数据传输层和状态显示层。
图1 检测系统硬件结构图
状态显示层主要是检测项目数据与指令的显示,数据传输层则是各种数据接口与处理器,它是系统信息的实际载体,具有数据备份机制,防止数据意外破坏[10]。设备层是最底层的硬件设备,包含各种检测功能的设备以及待检测UPS产品。
1.3 系统软件结构分析
根据系统功能分析,可以设计出如图2所示的,包含检测主界面、串口设置、数据库设置、项目汇总及帮助文档等选项的软件系统。
1.4 系统流程图设计
由系统硬件结构图与系统软件结构图分析可设计出系统流程图,其中包括业务流程图、控制流程图及数据流程图三大流程图。
图2 检测系统软件结构图
图3业务流程图主要表明了在检测过程中每个环节的任务,使检测的每个环节功能明确化,把需要检测的项目都安排合理有序。
图3 业务流程图
图4控制流程图则细化到每一个环节的操作指令,从“做什么”转化到“怎么做”,方便操作人员完成检测工作。图5数据流程图则反映了在这个检测系统中数据流的走向,当有错误数据产生时能够及时发现并解除筛选出错误,从而进一步排除系统错误。通过系统流程图的设计,开发研究人员可以明确具体的系统功能,可以精简系统的流程环节避免不必要的冗余给系统的运作带来不必要的阻碍。
图4 控制流程图
图5 数据流程图
2 系统人机交互界面设计
2.1 概述
一个用户界面(User Interface)的设计,不仅仅能够完成对命令和数据的输入和输出,还应该符合人性化的操作。有时使用者不具备相关专业知识技能,但是可以通过系统的指令也能够完成相应的操作。
2.2 编程平台与语言
编程平台使用的是Microsoft Visual studio 2013集成开发环境,编程语言采用C++,运用特定的微软MFC库来编程设计界面。
2.3 方案设计
产品检测界面主要运用对话框来设计,由检测系统软件模块总体框架可知,包括检测主界面、串口设置、数据库设置、项目汇总、帮助文档等选项。在对话框设计过程中则运用到:List Control Picture Control、ActiveX Control(Shockwave Flash Object、Microsoft Communication Control) 等关键控件。如图6所示,以检测主界面为例:考虑到显示器的大小和检测布局的需要,除了最上方的菜单栏选项外,将产品检测的主要界面分为四个大致区域:左上方区域主要用于检测数据的记录,右上角区域用于检测电路图和动画的操作演示,左下方主要是用于数据库的连接和数据的打印等,右下方区域主要是各种操作指令的按钮,控制系统运作。
2.4 方案实现与案例演示
在界面编程过程中涉及按钮的事件响应函数、父窗口与子窗口的通信、窗口消息、动画演示、图片自适应算法等研究。因为有时图片与Picture Control区域大小不匹配,所以需要进行图片的自适应显示。图片自适应算法原理:先计算得到电路原理图的长和宽,将这两个值存入到两个变量中;再计算获得Picture Control 区域的长和宽;通过区域的长度和宽度与原理图长和宽比较得到比例值,最后再将原来原理图的长和宽乘以这个比例值就可以得到适合区域的图片大小。图片自适应算法的部分关键代码如下:int height, width;
height = pic.GetHeight();//获得图片的高度
width = pic.GetWidth();//获得图片宽度
if (width <= theApp.picControlRect.Width() && height <= theApp.picControlRect.Width())
//图片控件区域能够放置图片,无需缩放
{
theApp.picRect = CRect
(theApp.picControlRect.TopLeft(), CSize(width, height));
pic.StretchBlt(theApp.pDc->m_hDC, theApp.picRect, SRCCOPY);
//将图片显示到图片控件表示的矩形区域
}
else
{
float xScale = (float)theApp.picControlRect.Width() / (float)width;
//获得宽度比例值
float yScale = (float)theApp.picControlRect.Height() / (float)height;
//获得高度比例值
float ScaleIndex = ((xScale >= yScale) ? yScale : xScale);//选取宽和高两者中的较小比例值,不会导致图片的溢出从而在图片控件区域显示不完全
theApp.picRect = CRect(theApp.picControlRect.TopLeft(), CSize((int)width*ScaleIndex, (int)height*ScaleIndex));
pic.StretchBlt(theApp.pDc->m_hDC, theApp.picRect, SRCCOPY);
//将重新缩放后的图片显示到Picture Control区域
}
如图7所示,当一个产品的所有检测项目全部完成后,会将检测信息放置在项目汇总界面,在项目汇总界面会包含检测环境的显示、检测技术要求和类型显示、每个检测项目检测信息的显示。除此之外还能够查看该项目的操作演示过程包含图片与动画的演示。
图6 检测主界面
图7 项目汇总界面
2.5 数据文档打印模块
有时为了对检测数据的纸质备份,需要将报表数据通过外部打印设备打印出来,为此设计了数据报表的打印功能,打印效果如图8所示,部分关键代码如下:
int count = m_list.GetItemCount();//得到报表行数
int row = m_list.GetHeaderCtrl()->GetItemCount();//得到报表列数
//先打印表头
CDC dc;
CRect rc(200, 200, 1700, 1000);
LVCOLUMN lvcol;
wchar_t str[256];
lvcol.mask = LVCF_TEXT;//屏蔽位的组合,表明哪些成员是有效的
lvcol.pszText = str;//指向存放列表头标题正文的缓冲区
lvcol.cchTextMax = 256;//标题正文缓冲区的长度
for (int i = 0; i { //获取表头数据 m_list.GetColumn(i, &lvcol); CString szMsg; szMsg.Format(_T("%s"), lvcol.pszText); pDC->DrawText(szMsg, &tempRect, DT_LEFT | DT_TOP | DT_SINGLELINE);//绘制表头内容 //tempRect = tempRect + CPoint(1800, 0); tempRect = tempRect + CPoint(950, 0); } //以下打印报表里的内容 tempRect = tempRect + CPoint(0, 300); tempRect = tempRect - CPoint(4750, 0); for (int i = 0; i < count; i++)//循环报表的行与列遍历式打印数据 { for (int j = 0; j < row; j++) { CString currentText; currentText = m_list.GetItemText(i, j); pDC->DrawText(currentText, &tempRect, DT_LEFT | DT_TOP | DT_SINGLELINE);//将文字绘出来 tempRect = tempRect + CPoint(950, 0); pDC->MoveTo(DrawRect.left, DrawRect.top + (DrawRect.bottom - DrawRect.top) / 20 + 300 * j); pDC->LineTo(DrawRect.right, DrawRect.top + (DrawRect.bottom - DrawRect.top) / 20 + 300 * j); } tempRect = tempRect - CPoint(row * 950, 0); tempRect = tempRect + CPoint(0, 300); pDC->MoveTo(DrawRect.left, DrawRect.top + (DrawRect.bottom - DrawRect.top) / 20 + 300 * i); pDC->LineTo(DrawRect.right, DrawRect.top + (DrawRect.bottom - DrawRect.top) / 20 + 300 * i); } 项目编号检测时间检测项目检测数据备注信息12017-07-0315:29:06输入电压可变范围180v~250v相电压22017-07-0315:29:09输入电压可变范围312~433v线电压32017-07-0315:29:13输入功率因数0.9842017-07-0315:29:18输入电流谐波成分3%2~39次谐波52017-07-0315:29:21输入频率变化范围49Hz~51Hz62017-07-0315:29:25频率跟踪范围48Hz~52Hz72017-07-0315:29:29频率跟踪速率1Hz82017-07-0315:29:34输出电压稳定精度1%92017-07-0315:29:37输出预率51Hz电池逆变方式102017-07-0315:29:40输出波形失真度1%阻性负载112017-07-0315:29:44输出波形失真度2%非线性负载122017-07-0315:29:48输出电压不平衡度3%132017-07-0315:29:51动态电压瞬变范圈-2%~+2%142017-07-0315:29:56轮胎质量检测系统10ms152017-07-0315:30:00输出电压相位偏差1?182017-07-0315:30:03市电与电池转换时间0ms172017-07-0315:30:08旁路逆变转换时间0.5ms>3kVA182017-07-0315:30:11旁路逆变转换时间0.5ms≤3kVA192017-07-0315:30:14效率85%额定输出功率 图8数据报表打印效果图 图9 检测系统配置文件图 该检测系统的设计除了可以为UPS产品检测还可以拓展为类似的横向产品检测如轮胎、手机等。在系统设计时增加了windows系统配置文件的设置如图9所示,在操作界面上选择打开配置文件选项,即可打开后缀为.ini配置文件更改其中的检测产品名称和检测项目及可延伸到其他产品的项目检测。如将产品检测名称更改为“轮胎质量检测”,将原来的UPS检测项目名称更改为轮胎的检测项目,即可将原有的检测系统拓展到新的产品检测中来。 在现代的实时检测系统和工业化领域中,串口通信技术是一种重要的数据传输手段。RS-232C标准的全称是EIA-RS-232C标准,其中EIA代表美国电子工业协会,RS代表推荐标准,232是标识号,C代表RS232最新一次修改,在这之前还有RS232A,RS232B协议[11]。 上位机编程平台使用的仍是Microsoft Visual studio 2013集成开发环境,编程语言采用C++,硬件微处理器采用dsPIC30f4011,微处理器是UPS的核心,在整个UPS中起到了控制的作用,是整个系统的控制中心。数据传输采用USB转RS232数据线,ICD2调试盒,图10是实验硬件平台,驱动程序采用MAPLAB编译环境,C语言编写代码。 图10 实验硬件平台 在串口通信测试窗口中,主要运用MSCOMM32.OCX控件,可以为MSCOMM32.OCX控件添加事件处理函数,包括波特率和传输协议的设置。串口打开后,其属性被设置为默认值,根据具体需要,通过调用GetCommState (COMFile, &dcb)读取当前串口设备控制块DCB(Device Control Block)设置,修改后通过SetCommState (COMFile, &dcb)将其写入。检测数据可以通过串口传输到上位机界面上显示出来。 以选择COM3串口和设置波特率为9600为例,部分代码如下: if (m_mscomm.get_PortOpen()) { m_mscomm.put_PortOpen(FALSE); } m_mscomm.put_CommPort(3); //选择COM3 m_mscomm.put_InBufferSize(1024); //接收缓冲区 m_mscomm.put_OutBufferSize(1024);//发送缓冲区 m_mscomm.put_InputLen(0);//设置当前接收区数据长度为0,表示全部读取 m_mscomm.put_InputMode(1);//以二进制方式读写数据 m_mscomm.put_RThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm m_mscomm.put_Settings(_T("9600,n,8,1"));//波特率9600无检验位,8个数据位,1个停止位 SQL Server是微软推出的大型数据库管理系统,VC++提供了多种数据库开发技术和编程规范,主要包括ODBC API,MFC ODBC,DAO,OLE DB和ADO[12]。鉴于上位机界面设计采用MFC完成,所以在数据库访问上选取MFC ODBC技术。 编程平台使用的仍是Microsoft Visual studio 2013集成开发环境,编程语言采用C++,数据库采用微软的SQL Server。 为了完成检测系统与数据库的连接,需要配置ODBC数据源,包含DSN数据源名称、UID数据库用户名、PWD数据库用户密码的设置。完成ODBC数据源的配置之后,就可以在上位机软件程序中编写相应的连接数据库,部分代码如下: UpdateData(1); TRY{ m_db.OpenEx(_T("DSN=YUSQL;UID=PC-20160619NDEA;PWD="), CDatabase::noOdbcDialog); }//配置DSN数据源名称,UID数据库用户名,PWD密码这里设为空 CATCH(CDBException, ex)//由数据库类引起的异常报错 { AfxMessageBox(ex->m_strError); AfxMessageBox(ex->m_strStateNativeOrigin); } AND_CATCH(CMemoryException, pEx)//由内存溢出引起的异常报错 { pEx->ReportError(); MessageBox(_T("memory exception")); } AND_CATCH(CException, e)//由微软基类库异常引起的报错 { TCHAR szError[100]; e->GetErrorMessage(szError, 100); AfxMessageBox(szError); } END_CATCH MessageBox(_T("数据库连接成功!")); 当一个产品的所有检测项目完成后,可以将数据列表中的检测数据保存到数据库,之后还可以完成数据的筛选、排序等后续操作。检测数据可以用如图11的数据库表直观的显示出来。 图11 数据库检测数据显示 按照国家通信行业标准,选取在线式UPS作为系统检测的代表。登录操作系统进入检测界面,进入串口设置选项选择好串口和波特率,完成上下位机的通讯;进入数据库设置选择完成后台数据库的连接。按照国家标准YD/T1095-2008,开始对UPS的每个项目逐个进行检验,检测指令通过操作面板的按钮完成,检测状态通过下位机的指示灯来显示。检验数据从下位机经过RS232转USB传输到上位机的数据列表中。检测数据可以通过报表打印的形式输出,方便检测人员的检查与记录备份;还可以保存到后台数据库为后续的查询、修改等做准备。经过实验表明,该系统可以自动化地完成对UPS产品项目的检测,操作过程简单方便,检测过程稳定可靠,达到了系统设计初的预期效果。 这个系统的设计研究涵盖了VC++的界面编程、系统文件配置、串口通信编程、数据库操作等技术。经过实验检验,产品检测系统运行良好,自动化程度较高,操作过程简单方便,解决了传统过程中人工检测带来的效率低下、精度低和成本高的问题。按照国家标准进行检验更好地保障了检验后产品更高的合格率,避免一些厂商只针对几个重要项目检测而导致的后续故障。为了增加检测系统的通用性,系统配置文件的更改可以方便地拓展到其他产品项目的检测,对于类似的检测系统具有较好的参考借鉴意义。该系统还存在需要完善的地方,该产品质量检测系统每次只能对一个UPS电源进行检测,对于批量同时检测电气性能还有待进一步研究。可以参考应用多串口与多线程技术来完善解决方案。总的来说,该检测系统应用前景比较广泛、技术可移植性较高。 [参考文献] [1] 黄金霖. UPS电源电气测试技术与性能分析研究[D].南昌:江西理工大学,2013. [2] Hirachik, Nakaokam. UPS circuit configuration incorporation incorporating buck-boost chopper circuit with two magnetically coupled coils[J].Electronics Letters,2008,39(18):1345-1346. [3] E Varkarraki,N Lymberopoulos,E Zoulias,et al. Hydrogen-based uninterruptible power supply[J]. International Journal of Hydrogen Energy, 2007,32(10):1589-1596. [4] Kattakayam T A,Srinivasan K. Uninterrupted power supply for autonomous small refrigerators[J]. Fuel and Energy Abstracts, 2005, 1(39):57-63. [5] 张博. 电气参数测试理论及其自动测试系统的研究[D].西安:西北工业大学,2002. [6]卜树坡,曹建东,章雯. 总线型感应电动机全电式综合测试系统[J]. 自动化仪表,2011(12): 58-60,64. [7] Wang J,Liu H K, Dou S X, et al. Enhanced performance of VRLA batteries with a novel spirally wound electrode design[J]. Journal of Power Source, 2003, 113:224-241. [8] 晁永生,樊军,申晓萍,等. 浅谈Visual C++串口通信编程[J]. 科技广场,2007(1): 71-73. [9] 张海良. 光伏电站远程监控系统的设计和研究[D].秦皇岛:燕山大学,2006. [10] 李丽,吉武俊,武照云,等.基于工艺流程图的车间生产管理系统设计与开发[J].组合机床与自动化加工技术,2017(1):149-150. [11] 潘方.RS232串口通信在PC机与单片机通信中的应用[J].现代电子技术,2012,35(13):69-71. [12] 李涛,刘凯奎,王永皎.Visual C++ + SQL Server 数据库开发与实例[M].北京:清华大学出版社,2006. (编辑李秀敏)2.6 通用拓展模块
3 数据通讯系统设计
3.1 概述
3.2 编程平台与硬件设备
3.3 方案设计与实现
4 数据库系统设计
4.1 概述
4.2 编程工具
4.3 方案设计
5 实验结果与分析
6 结论