ImageVerifierCode 换一换
格式:DOCX , 页数:39 ,大小:490.16KB ,
资源ID:21925368      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21925368.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(电机上位机控制及界面设计Word文档格式.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

电机上位机控制及界面设计Word文档格式.docx

1、由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输。对于那些与计算机相距不远的人机交换设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式交换数据也很普遍。同时,随着人们对车间现场设备智能化的要求的提高,越来越多的设备采用了外存储器对生产测试过程中的数据进行存储,监控人员通过定期对存储了历史数据记录的分析,可以清楚得了解到设备的动态运行情况,这些数据对设备排错和参数设置提供依据都有很高的价值。随着PC端USB接口技术的普及,以U盘作为设备外存储器存储运行数据,具有实现简单,读取方便的特点,应用也越

2、来越广泛。如何高效,方便的通过最常用的PC机来读取设备外存储器中的数据,为数据的快速分析提供了保证。因此研究计算机通过串行通信对远程车间设备的监控,读取U盘历史数据文件并显示具有一定的现实意义。1.2 任务和目标本毕业设计本着“不在现场,远离现场”的原则,为导师研制的某型号充电机产品编写PC端应用程序将充电机设备界面通过串口通信技术,与上位机界面有机的结合起来,以实现计算机的远程监控功能。按要求在上位机中打开并查看充电机设备运行过程中的存储在U盘中的历史数据文件,以便于分析测试。另外还要编写下位机微型打印机数据打印程序,为用户提供多种查看选择。我在认真分析以上设计要求之后,以C语言作为开发语言

3、,VC为开发环境,在MFC框架上编写完成一个应用程序。这个应用程序采用MSCOMM控件来实现串口通讯,以C语言文件操作实现U盘历史数据文件的读写和显示操作。并且在此基础上,我还对上位机软件的界面进行了美化和优化,还添加了现场测试数据自动生成WORD文档,使得软件更人性化和操作更简单。2 总体设计方案2.1 系统总体结构 系统总体结构如下图所示,下位机是一台试用在变电所等电力部门的充电机设备,采用工控机作为核心处理器。PC机端的应用程序通过RS232串口与设备实现通讯。充电机设备带有USB接口,用于接入U盘存储充电机历史数据。当用户需要查看历史记录数据时,将U盘从设备中拔下,接入PC端可以利用应

4、用程序通过文件操作打开查看。图1.系统总体结构图另外,该充电机设备通过工控机打印口连接一台微型打印机用于运行参数和测试数据的即时打印,供用户查看。2.2 上位机用户操作界面结构图2.软件组织结构3 上位机用户操作界面的建立3.1 编程语言及编程环境3.1.1 C+语言介绍C+是脱胎自C语言的一种中级语言。从计算机角度看, 它可以嵌入ASM等低端语言; 从面向对象的程序设计角度看, 它有具备OOP的三个基本特征抽象, 封装和继承。C语言是结构化和模块化的语言,它是面向过程的。C+保留了C语言原有的所有优点,增加了面向对象的机制。C+与C完全兼容。C+是对C的扩充,是C的超集。它既可用于结构化程序

5、设计,又可用于面向对象的程序设计,功能强大。C+性能良好,因为它被编译为机器代码。对于VBScript和Java等语言,代码在运行时由程序解释,而且每次运行程序时都要将代码转换为机器码,这样做效率比较低,不仅仅是已编译过的C+程序运行得较快,而且微软C+编译器已存在多年。这意味着微软的编译器程序员已经把许多优点集中到编译器上,以致于它能产生非常高效的机器码。因为C+是编译语言,而且非常自然,比VB更接近机器代码,所以由C+编译器产生的代码一定比VB的编译代码效率更高。C+是一种编译语言,即C+代码在执行之前已转换为机器码。只要此代码不依赖于外部的动态链接库(DLL),C+就可以在不需要安装额外

6、程序的情况下移动到运行同样操作系统的其他机器和微处理器上,而移动Java程序时需要先安装Java运行期库。因此,使用C+语言相比其他语言具有最小的依赖性由于C和C+已经存在许多年了,现在有许多可利用的代码,我们的服务器组件可以使用现有的C/C+代码或库。鉴于上述特点,我在本设计中选择C+作为主要编程语言。3.3.2 Visual C+6.0编程环境介绍本次设计中使用的Visual C+6.0是一个基于C+语言,基于Windows操作系统的功能强大的可视化软件开发工具。这不仅表现出在应用程序界面编辑和代码的编写中,还表现为数据处理上的高可视化和高面向对象性。Visual C+6.0不仅是一个C+

7、编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。它由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。另外,Visual C+6.0还提供了一个无所不包的应用框架MFC,并且可以非常方便的使用MSCcomm控件进行串口编程。使用Visual C+6.0的向导可以生成大量的使用代码,而不必人工地编写代码。从编写程序的难易程度和程序的性能综合考虑,这些特点完全能够满

8、足我在本次课题设计中的各种需求。3.3.3 MFC程序框架介绍MFC就是一个程序的框架。这个框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法。使用者只要通过预定义的接口把具体应用程序特有的东西填入这个轮廓就可以了。在它基础上来建立Windows下的应用程序,相对SDK来说更为简单。Visual C+6.0提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口; ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。在本设计中要求通过编写代码来建立必要的用户界面,控制并

9、定制其外观。同时还要响应用户的操作行为。例如,如果用户单击了现场测试按钮,就需要有代码来响应这一动作。而使用MFC框架,则会自动添按钮的响应消息,只需在对应位置添加事件处理动作就能完成控制任务。为此采用了Visual C+6.0的MFC单文档程序框架作为上位机软件的基本框架。3.4 基本界面的建立3.4.1单文档一个典型的应用程序应该活动在称为“框架窗口”中。一个框架窗口是一个全功能的主窗口,用户可以改变尺寸、最小化、最大化等。本设计方案中主要涉及单文档窗口,和对话框窗口。整个上位机界面的底层是单文档,而上层使用的使对话框,并在对话框上添加主要控件,从而构成了完整的界面外观。图3.单文档结构图

10、使用MFC的向导即可生成如上所示的单文档窗口。这是整个界面的基础框架部分。3.4.1对话框在基础的单文档框架上面添加了两个无(标题栏)对话框将单文档窗体分为两部分。上一部Dialog1分为工具条按钮,下一部分Dialog2为具体功能显示区。此两部分窗口均为非模态化对话框。首先在资源里插入新建对话框,修改其属性;然后添加相应的类,如CUDiskDlg;再使用以下代码分别创建模态化对话框和非模态化对话框。CUDiskDlg m_CUDiskDlg; /定义对象m_UDHisDlg.Create(IDD_UDISKHIS,this); /创建非模态化对话框m_UDHisDlg.ShowWindow(

11、TRUE); /显示对话框m_UDHisDlg.DoModal(); /创建模态化对话框3.4.1控件介绍Button控件:Button控件是按钮控件,可以响应单击(BN_KLICKED)和双击(BN_DUBLEKLICKED)事件。其使用方法是:在资源标签的相应窗体下,从Controls对话框中将Button控件拖至对话框的相应位置,修改属性及ID号后,在其对应的事件处理函数中添加事件代码即可。在本设计中使用颇多,如U盘历史数据查询按钮,现场测试按钮等。Edit控件:Edit控件是文本编辑控件,在本设计中主要用于U盘查询界面中详细数据的参数显示,和现场测试中参数设置部分的数据输入和测试结果表

12、格中的数据显示及测试结论、处理意见的输入。将Edit控件在类向导中与一变量(如m_edit8)以value的形式相关联。当用于数据显示时,使用语句m_edit8 =str;将值赋予变量m_edit8,再用语句UpdateData(FALSE);将变量内容显示。当用于数据输入时,应用语句UpdateData(TRUE);将控件中的数据读入赋予相关变量。ListContrl控件:ListContrl控件主要用于显示列表式的数据显示。在本设计中,历史信息,详细数据,现场测试数据的显示均使用了ListContrl控件。该控件使用前需进行风格设置。即通过以下语句获得原有风格:DWORD dwStyle

13、= :GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE);dwStyle &= (LVS_TYPEMASK); dwStyle &= (LVS_EDITLABELS);通过以下语句置新风格:SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE,dwStyle,|LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS); 通过以下语句设置扩展风格DWORD styles =LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES; ListV

14、iew_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles,styles );。进行风格设置后,先插入列头,后才可以逐行添加数据信息。插入列头时,应用InsertColum方法,而逐行添加信息时,第一列的信息应该用InsertItem方法,而后几列则应用SetItem方法。ListContrl控件也可以响应双击事件,其函数为OnDblclkListHis(NMHDR* pNMHDR, LRESULT* pResult)。并且能获得双击时鼠标所在的Item号。由此来实现双击历史信息记录后,显示对应的详细数据。Picture控件:Picture

15、控件是一个静态控件,用于插入图片等功能。而图片的插入,有静态插入和动态插入两种方法。静态插入是指,直接在Picture控件属性中,将将“类型”选项改为Bitmap,然后再在“图像”选项中选择合适的位图即可。动态插入是指,在程序中定义HBITMAP类型变量m_Brown_h1,用语句m_Brown_h1=:LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BROWN_H1)将变量m_Brown_h1与位图资源IDB_BROWN_H1关联起来。然后再将Picture控件与变量m_h1关联,再通过语句m_h1.SetBitmap(m_Blue

16、_h1);就可以将图片动态插入。3.5 历史数据察看功能3.5.1历史数据察看功能介绍历史数据察看功能主要是用于察看直接通过下位机,以文件形式存储在USB可移动存储设备上的历史检测数据纪录的。该纪录由历史信息和历史信息对应的详细数据信息两部分。每条历史信息包括序号、日期、时间、整定电压(在放电测试项目中无该纪录)、整定电流、已放容量(只在放电测试项目中有该纪录)五项内容;每条历史信息对应得详细数据信息有各自不同的几项内容。各项测试的详细数据信息如下:放电参数测试包括序号、时、分、端电压、放电电流五项;电压稳定精度测试包括输入电压、电压最大值、电压最小值、稳压精度、纹波系数五项;电流稳定精度测试

17、包括输入电压最大值、电流最大值、电流最小值、稳流精度四项;限流特性测试包括输入电压、-10%、100%、+10%、稳流精度五项。在用户进入该程序后,单击U盘历史查询按钮就会进入历史数据察看状态。按下各测试项目选择按钮,则进入不同的测试项目历史纪录查询状态。对应的历史信息就立刻显示在List中。双击List条目,则将对应的详细数据信息显示在List中,其参数也将显示在对应位置。图4.历史数据查询界面3.5.2历史数据察看功能实现的方法3.5.2.1盘符的确定由于每台PC的盘符划分不同,USB移动存储设备连接后所在的盘符也将不同。而对文件的操作必须指定明确的文件路径,方能正确的打开文件,读取数据。

18、因此,如何确定USB移动存储设备的盘符是必须解决的问题。在本设计中,我采用了添加配置文件方式来解决该问题。即在可执行程序的根目录下添加一可读写的文件,用于保存指定的盘符。当用户在某一PC机上第一次使用本软件时,将提示配置USB可移动存储设备盘符。当用户输入该PC机上USB可移动存储设备所在盘符,并按配置按钮后,盘符信息将写入配置文件,并一直保存至下一次配置前。按下推出按钮,则向主框架发出消息,要求其重新创建历史数据察看功能对话框,在对话框的初始化中重新装载配置文件,读入正确的盘符。其中配置文件的装载,采用函数GetCurrentDirectory(dirlen,sDir)获得可执行文件的根目录

19、,再用函数strcat(sDir,con_set.ini)生成完整的配置文件路径。图5.第一次配置文件界面生成配置文件代码如下: UpdateData(); if(m_usb.GetLength()0&m_usb.GetLength()0)&m_com.GetLength()2) FILE* fp; 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 Me

20、ssageBox(输入的参数格式错误,无法配置!配置文件的装载代码如下: FilePath=C:FHIST; FilePath.SetAt(0,Disk); l=FilePath.GetLength(); FileName=FileName_tmp; for(r=0;rl;r+) *(FileName+r)=FilePath.GetAt (r); *(FileName+l)=NULL; /打开文件并判断文件是否打开成功 if(fp=fopen(FileName,rb)=NULL) 文件不存在,请检查文件位置并重新配置return;3.5.2.2历史数据及对应的详细数据的读取和显示历史纪录在US

21、B移动存储设备中以文件的形式存储。各项历史信息和详细数据信息对应的文件名如下图:检测项目历史信息文件名详细数据文件名放电测试FHISTVDATA电压稳定精度测试UHISTUDATA电流稳定精度测试IHISTIDATA效率测试EHISTEDATA限流特性测试XHISTXDATA图6.各项历史信息和详细数据信息实现历史信息的读取,首先从配置文件中读入盘符,获取到对应历史信息的文件路径,以二进制流形式打开对应文件,读取历史信息条数(即第一个二进制数据)到int变量mark中。由于下位是16位操作系统,一个int型占16位,而上位机是32位操作系统,一个int型占32位,一个short int型占16

22、位。由文件存储格式可知,实际的标志位为16位数,因此需将读取的二进制数强制转换为short int 型数据。然后根据各项历史信息数据的存储格式,移动指针,依次读取一条数据到数组data_tmp7中,共读取mark次。移动指针读取数据到数组data_tmp7中的代码如下:fseek(fp,(2+i*7*4),SEEK_SET); /移动指针到相应位置fread(data_tmp,4,7,fp); /详细数据的读取是当鼠标双击list1控件的某一条历史信息时,将响应list1控件的双击事件,进入的其响应函数。在该函数中,通过switch语句判断该条历史信息所属的测试项目,并由此打开相应的详细数据文

23、件。当双击list1控件的某一条历史信息时,nItem=m_listctrl.GetNextItem(-1, LVNI_FOCUSED);将获取该行索引值,即该条历史信息在全部信息中排列的序号。根据此及对应测试项详细数据存储格式,可计算出该条历史信息所对应得详细数据的第一个数据的指针。然后移动指针,读取该详细数据信息到数组tem。放电测试项详细数据读取时移动指针,读取数据到数组data_tmp7中的代码如下:fseek(fp,(2+nItem*1240),SEEK_SET);/移动指针到对应日期 的数据存储位置fread(data,4,310,fp);/读取数据流到tem,float *dat

24、a 的指向tem的首地址历史信息和对应的详细数据的显示,主要是edit控件的显示和listContrl控件的信息插入。以放电测试为例,历史信息数据显示的主要代码如下: for(i=0;imark;i+) /插入数据 fseek(fp,(2+i*7*4),SEEK_SET); fread(data_tmp,4,7,fp); rewind(fp); itIndex=m_list_his.GetItemCount(); LV_ITEM lvitem; lvitem.mask=LVIF_TEXT; lvitem.iItem=itIndex; lvitem.iSubItem=0; itoa(i+1),ch1,10); lvitem.pszText =ch1; m_list_his.InsertItem(&lvitem); /日期 str= itoa(int)data_tmp0,ch1,10); str=str+ch1+. itoa(int)data_tmp1,ch1,10); itoa(int)data_tmp2,ch1,10); str=str+ch1; int str_length; str_length=str.GetLength(); char *str_data; char s_data15; str_data=s_data; for

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1