1、1 电机上位机控制及界面设计 吴牛俊 (自动化与电气工程学院 指导教师: 周克宁 ) 摘要: 随着计算机、电子、通讯技术的飞速发展,人们对于车间现场设备的运行管理控制,可视化操作等综合水平提出了新的要求。 为了满足这新的要求,本毕业设计本着 “不在现场,远离现场 ”的原则,以 C 语言作为开发语言, VC 为开发环境,针对某充电机产品编写了应用程序,将充电机的现场设备界面通过串口通信技术,与上位机界面有机的结合起来,以实现计算机的远程监控功能。此外,该上位机应用软件还实现 了查看充电机存储在 U盘中的运行记录文件的功能。 在本毕业论文通过这个项目的开发过程,阐述了编程环境的选择,串口通讯实现远
2、程测试的方法,通过文件操作读取 U盘数据的技巧。探讨如何在 PC 平台与工控机平台间建立远程测试和历史数据读取和分析的一般方法。 关键词: 人机界面;串口通信; Visual C+6.0;文件操作 Abstract:With the development of computer, electronics, communications technology, the people are requiring that the the operation and management of the equipment control,and the Visualization operatio
3、n must develop too. To meet these new requirements, the design of the graduates base on that “not on the scene, the scene away from the principle of“ and use the C language and VC environment programming the charger procedures. The design uses the communications technology to put the charger field e
4、quipment interface and PC interface combination.And it can be achieved RMON. In addition, the PC application software also can view the test records stored in the U disk. This paper through the project development process describes the following points.First is The choice of programming environments
5、.Second is Serial Communication remote test method.Third is the skills of reading the test records stored in the U disk.Discussion on general methods that through the PC platform with the establishment of industrial computer platform for remote testing and reading historical data and analysis Keywor
6、ds: Human-machine interface; Serial Communication;; Visual C+6.0; File 1 绪 论 1.1 背 景 随着计算机、电子、通讯技术的飞速发展,人们对于车间现场设备的运行管理控制,可视化操作等综合水平提出了新的要求。 2 随着计算机的运算速度不断升级功能日渐强大,在车间现场测控中扮演了越来越重要的角色。利用计算机软件通过运用先进的通讯技术监控远程现场设备的运行状况和运行参数。这将大大提高生产效率,保证生产安全。出于节省人工,提高效率或者安全生产方 面的考虑很多环节需要远程监控车间设备的运行情况,这就离不开通讯技术的应用。这里所说的
7、通信是只计算机与远程设备之间的信息交换。由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输。对于那些与计算机相距不远的人机交换设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式交换数据也很普遍。 同时,随着人们对车间现场设备智能化的要求的提高,越来越多的设备采用了外存储器对生产测试过程中的数据进行存储,监控人员通过定期对存储了 历史数据记录的分析,可以清楚得了解到设备的动态运行情况,这些数据对设备排错和参数设置提供依据都有很高的价值。随着 PC端 USB接口技术的普及,以 U盘作为设备外存储器存
8、储运行数据,具有实现简单,读取方便的特点,应用也越来越广泛。如何高效,方便的通过最常用的 PC 机来读取设备外存储器中的数据,为数据的快速分析提供了保证。 因此研究计算机通过串行通信对远程车间设备的监控,读取 U盘历史数据文件并显示具有一定的现实意义。 1.2 任务和目标 本毕业设计本着 “不在现场,远离现场 ”的原则,为导师研制的某型号充电机产品编写 PC 端应用程序将充电机设备界面通过串口通信技术,与上位机界面有机的结合起来,以实现计算机的远程监控功能。按要求在上位机中打开并查看充电机设备运行过程中的存储在 U盘中的历史数据文件,以便于分析测试。另外还要编写下位机微型打印机数据打印程序,为
9、用户提供多种查看选择。 我在认真分析以上设计要求之后,以 C 语言作为开发语言, VC 为开发环境,在 MFC 框架上编写完成一个应用程序。这个应用程序采用 MSCOMM 控件来实现串口通讯,以 C 语言文件操作实现 U盘历史数据文件的读写和显示操作。并且在此基础上,我还对上位机软件的界面进行了美化和优化,还添加了现场测试数据自动生成 WORD 文档,使得软件更人性化和操作更简单。 在本毕业论文通过这个项目的开发过程,阐述了编程环境的选择,串口通讯实现远程测试的3 方法,通过文件操作读取 U盘数据的技巧。探讨如何在 PC 平台与工控机平台间建立远程测试和历史数据读取和分析的一般方法。 2 总体
10、设计方案 2.1 系统总体结构 系统总体结构如下图所示,下位机是一台试用在变电所等电力部门的充电机设备,采用工控机作为核心处理器。 PC 机端的应用程序通过 RS232 串口与设备实现通讯。充电机设备带有 USB接口,用于接入 U 盘存储充电机历史数据。当用户需要查看历史记录数据时,将 U 盘从设备中拔下,接入 PC 端可以利用应用程序通过文件操作打开查看。 图 1. 系统总体结构图 另外,该充电机设备通过工控机打印口连接一台微型打印机用于运行参数和测试数据的即时打印,供用户查看。 2.2 上位机用户操作界面结构 主界面登录界面现场测试放电测试电压稳定精度测试电流稳定精度测试效率测试限流特性测
11、试历史数据查询放电测试电压稳定精度测试电流稳定精度测试效率测试限流特性测试参数设置 4 图 2. 软件组织结构 3 上位机用户操作界面的建立 3.1 编程语言及编程环境 3.1.1 C+语言介绍 C+是脱胎 自 C 语言的一种中级语言。从计算机角度看 , 它可以嵌入 ASM 等低端语言 ; 从面向对象的程序设计角度看 , 它有具备 OOP 的三个基本特征 抽象 , 封装和继承。 C 语言是结构化和模块化的语言,它是面向过程的。 C+保留了 C 语言原有的所有优点,增加了面向对象的机制。 C+与 C 完全兼容。 C+是对 C 的扩充,是 C 的超集。它既可用于结构化程序设计,又可用于面向对象的程
12、序设计,功能强大。 C+性能良好,因为它被编译为机器代码。对于 VBScript 和 Java 等语言,代码在运行时由程序解释,而且每次运行程序时都要将代码转换为 机器码,这样做效率比较低,不仅仅是已编译过的 C+程序运行得较快,而且微软 C+编译器已存在多年。这意味着微软的编译器程序员已经把许多优点集中到编译器上,以致于它能产生非常高效的机器码。因为 C+是编译语言,而且非常自然,比 VB 更接近机器代码,所以由 C+编译器产生的代码一定比 VB的编译代码效率更高。 C+是一种编译语言,即 C+代码在执行之前已转换为机器码。只要此代码不依赖于外部的动态链接库 (DLL), C+就可以在不需要
13、安装额外程序的情况下移动到运行同样操作系统的其他机器和微处理器上,而移动 Java 程 序时需要先安装 Java 运行期库。因此,使用 C+语言相比其他语言具有最小的依赖性 由于 C 和 C+已经存在许多年了,现在有许多可利用的代码,我们的服务器组件可以使用现有的 C/C+代码或库。 鉴于上述特点,我在本设计中选择 C+作为主要编程语言。 3.3.2 Visual C+6.0 编程环境介绍 本次设计中使用的 Visual C+6.0 是一个基于 C+语言,基于 Windows 操作系统的功能强大的可视化软件开发工具。这不仅表现出在应用程序界面编辑和代码的编写中,还表现为数据处理上的高可视化和高
14、面向对象性。 Visual C+6.0 不仅是一个 C+编译器,而且是一个基于 Windows操作系统的可视化集成开发环境( integrated development environment,IDE)。它由许多组件组成,5 包括编辑器、调试器以及程序向导 AppWizard、类向导 Class Wizard 等开发工具。 这些组件通过一个名为 Developer Studio 的组件集成为和谐的开发环境。另外, Visual C+6.0 还提供了一个 “无所不包 “的应用框架 MFC,并且可以非常方便的使用 MSCcomm 控件进行串口编程。使用 Visual C+6.0 的向导可以生成大
15、量的使用代码,而不必人工地编写代码。 从编写程序的难易程度和程序的性能综合考虑,这些特点完全能够满足我在本次课题设计中的各种需求。 3.3.3 MFC 程序框架介绍 MFC 就是一个程序的框架。这个框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法。使用者只要通过预定义的接口把具体应用程序特有的东西填入这个轮廓就可以了。在它基础上来建立 Windows 下的应用程序,相对 SDK来说更为简单。 Visual C+6.0 提供了相应的工具来完成这个工作: AppWizard 可以 用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口; ClassWizard 用来协
16、助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。 在本设计中要求通过编写代码来建立必要的用户界面,控制并定制其外观。同时还要响应用户的操作行为。例如,如果用户单击了现场测试按钮,就需要有代码来响应这一动作。而使用MFC 框架,则会自动添按钮的响应消息,只需在对应位置添加事件处理动作就能完成控制任务。为此采用了 Visual C+6.0 的 MFC 单文档程序框架作为上位机软件的基本框架。 3.4 基本界面的建立 3.4.1 单文档 一个典型的应用程序应该活动在称为 “框架窗口 ”中。一个框架窗口是一个全功能的主窗口,用户可以改变尺寸、最小化、最大化等。本设计方案中主要涉及
17、单文档窗口,和对话框窗口。 整个上位机界面的底层是单文档,而上层使用的使对话框,并在对话框上添加主要控件,从而构成了完整的界面外观。 6 图 3. 单文档结构图 使用 MFC 的向导即可生成如上所示的单文档窗口。这是整个界面的基础框架部分。 3.4.1 对话框 在基础的单文档框架上面添加了两个无(标题栏)对话框将单文档窗体分为两部分。上一部Dialog1 分为工具条按钮,下一部分 Dialog2 为具体功能显示区。此两部分窗口均为非模态化对话框。 首先在资源里插入新建对话框,修改其属性;然后添加相应的类,如 CUDiskDlg;再使用以下代码分别创建模态化对话框和非模态化对话框。 CUDisk
18、Dlg m_CUDiskDlg; /定义对象 m_UDHisDlg.Create(IDD_UDISKHIS,this); /创建非模态化对话框 m_UDHisDlg.ShowWindow(TRUE); /显示对话框 m_UDHisDlg.DoModal(); /创建模态化对话框 7 3.4.1 控件介绍 Button 控件: Button 控件是按钮控件,可以响应单击( BN_KLICKED )和双击( BN_DUBLEKLICKED)事件。其使用方法是:在资源标签的相应窗体下,从 Controls 对话框中将 Button 控件拖至对话框的相应位置,修改属性及 ID 号后,在其对应的事件处理
19、函数中添加事件代码即可。在本设计中使用颇多,如 U盘历史数据查询按钮,现场测试按钮等。 Edit 控件: Edit 控件是文本编辑控件,在本设计中主要用于 U盘查询界面中详细数据的参数显示 ,和现场测试中参数设置部分的数据输入和测试结果表格中的数据显示及测试结论、处理意见的输入。将 Edit 控件在类向导中与一变量(如 m_edit8)以 value 的形式相关联。当用于数据显示时,使用语句 m_edit8 =str;将值赋予变量 m_edit8,再用语句 UpdateData( FALSE);将变量内容显示。当用于数据输入时,应用语句 UpdateData( TRUE);将控件中的数据读入赋
20、予相关变量。 ListContrl 控件: ListContrl 控件主要用于显示列表式的数据显示。在本设计中,历史信息,详细数据 ,现场测试数据的显示均使用了 ListContrl 控件。该控件使用前需进行风格设置。 即通过以下语句获得原有风格: DWORD dwStyle = :GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE); dwStyle dwStyle 通过以下语句置新风格: SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE,dwStyle,|LVS_REPORT|LVS_NOLABELWRAP|LVS_SH
21、OWSELALWAYS); 通过以下语句设置扩展风格 DWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES; ListView_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles,styles );。 进行风格设置后,先插入列头,后才可以逐行添加数据信息。插入列头时,应用 InsertColum方法,而逐行添加信息时,第一列的信息 应该用 InsertItem 方法,而后几列则应用 SetItem 方法。 ListContrl 控件也可以响应双击事件,其
22、函数为 OnDblclkListHis(NMHDR* pNMHDR, LRESULT* pResult)。并且能获得双击时鼠标所在的 Item 号。由此来实现双击历史信息记录后,显示对应的详细数据。 8 Picture 控件: Picture 控件是一个静态控件,用于插入图片等功能。而图片的插入,有静态插入和动态插入两种方法。静态插入是指,直接在 Picture 控件属性中,将将 “类型 ”选项改为 Bitmap,然后再 在 “图像 ”选项中选择合适的位图即可。 动 态 插 入是 指 ,在 程 序中 定 义 HBITMAP 类型变量 m_Brown_h1 ,用 语 句m_Brown_h1=:L
23、oadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BROWN_H1) 将变量 m_Brown_h1 与位图资源 IDB_BROWN_H1 关联起来。然后再将 Picture 控件与变量 m_h1关联,再通过语句 m_h1.SetBitmap(m_Blue_h1);就可以将图片动态插入。 3.5 历史数据察看功能 3.5.1 历史 数据察看功能介绍 历史数据察看功能主要是用于察看直接通过下位机,以文件形式存储在 USB 可移动存储设备上的历史检测数据纪录的。该纪录由历史信息和历史信息对应的详细数据信息两部分。每条历史信息包括序号、日期、时间
24、、整定电压(在放电测试项目中无该纪录)、整定电流、已放容量(只在放电测试项目中有该纪录)五项内容;每条历史信息对应得详细数据信息有各自不同的几项内容。各项测试的详细数据信息如下:放电参数测试包括序号、时、分、端电压、放电电流五项;电压稳定精度测试包括输入电压、电压最大值、电压最小值、稳压精度、纹波系数五 项;电流稳定精度测试包括输入电压最大值、电流最大值、电流最小值、稳流精度四项;限流特性测试包括输入电压、 -10%、 100%、 +10%、稳流精度五项。 在用户进入该程序后,单击 U盘历史查询按钮就会进入历史数据察看状态。按下各测试项目选择按钮,则进入不同的测试项目历史纪录查询状态。对应的历
25、史信息就立刻显示在 List 中。双击 List 条目,则将对应的详细数据信息显示在 List 中,其参数也将显示在对应位置。 9 图 4. 历史数据查询界面 3.5.2 历史数据察看功能实现的方 法 3.5.2.1盘符的确定 由于每台 PC 的盘符划分不同, USB移动存储设备连接后所在的盘符也将不同。而对文件的操作必须指定明确的文件路径,方能正确的打开文件,读取数据。因此,如何确定 USB 移动存储设备的盘符是必须解决的问题。 在本设计中,我采用了添加配置文件方式来解决该问题。即在可执行程序的根目录下添加一可读写的文件,用于保存指定的盘符。当用户在某一 PC 机上第一次使用本软件时,将提示
26、配置USB 可移动存储设备盘符。当用户输入该 PC 机上 USB 可移动存储设备所在盘符,并按配置按钮后,盘符信息将写入配置文件,并一 直保存至下一次配置前。按下推出按钮,则向主框架发出消息,要求其重新创建历史数据察看功能对话框,在对话框的初始化中重新装载配置文件,读入正确的盘符。其中配置文件的装载,采用函数 GetCurrentDirectory(dirlen,sDir)获得可执行文件的根目录,再用函数 strcat(sDir,“con_set.ini“)生成完整的配置文件路径。 10 图 5. 第一次配置文件界面 生成配置文件代码如下: UpdateData(); if(m_usb.GetLength()0 fp=fopen(“con_set.ini“,“wb“); char Disk,Com; Disk=m_usb.GetAt(0); Com=m_com.GetAt(0); fputc(Disk,fp); fputc(Com,fp); fclose(fp); MessageBox(“配置成功! “); else MessageBox(“输入的参数格式错误,无法配置! “); 配置文件的装载代码如下: FilePath=“C:FHIST“;