版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、电机上位机控制及界面设计 吴牛俊(自动化与电气工程学院 指导教师:周克宁)摘要:随着计算机、电子、通讯技术的飞速发展,人们对于车间现场设备的运行管理控制,可视化操作等综合水平提出了新的要求。为了满足这新的要求,本毕业设计本着“不在现场,远离现场”的原则,以C语言作为开发语言,VC为开发环境,针对某充电机产品编写了应用程序,将充电机的现场设备界面通过串口通信技术,与上位机界面有机的结合起来,以实现计算机的远程监控功能。此外,该上位机应用软件还实现了查看充电机存储在U盘中的运行记录文件的功能。在本毕业论文通过这个项目的开发过程,阐述了编程环境的选择,串口通讯实现远程测试的方法,通过文件操作读取U盘
2、数据的技巧。探讨如何在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 operation must develop too.To me
3、et 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 equipment interf
4、ace 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.Second is Seria
5、l 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 analysisKeywords:Human-machine
6、interface; Serial Communication;;Visual C+6.0;File 1 绪 论1.1 背 景随着计算机、电子、通讯技术的飞速发展,人们对于车间现场设备的运行管理控制,可视化操作等综合水平提出了新的要求。随着计算机的运算速度不断升级功能日渐强大,在车间现场测控中扮演了越来越重要的角色。利用计算机软件通过运用先进的通讯技术监控远程现场设备的运行状况和运行参数。这将大大提高生产效率,保证生产安全。出于节省人工,提高效率或者安全生产方面的考虑很多环节需要远程监控车间设备的运行情况,这就离不开通讯技术的应用。这里所说的通信是只计算机与远程设备之间的信息交换。由于串行通信
7、是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输。对于那些与计算机相距不远的人机交换设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式交换数据也很普遍。同时,随着人们对车间现场设备智能化的要求的提高,越来越多的设备采用了外存储器对生产测试过程中的数据进行存储,监控人员通过定期对存储了历史数据记录的分析,可以清楚得了解到设备的动态运行情况,这些数据对设备排错和参数设置提供依据都有很高的价值。随着PC端USB接口技术的普及,以U盘作为设备外存储器存储运行数据,具有实现简单,读取方便的特点,应用也越来越广泛。如
8、何高效,方便的通过最常用的PC机来读取设备外存储器中的数据,为数据的快速分析提供了保证。因此研究计算机通过串行通信对远程车间设备的监控,读取U盘历史数据文件并显示具有一定的现实意义。1.2 任务和目标本毕业设计本着“不在现场,远离现场”的原则,为导师研制的某型号充电机产品编写PC端应用程序将充电机设备界面通过串口通信技术,与上位机界面有机的结合起来,以实现计算机的远程监控功能。按要求在上位机中打开并查看充电机设备运行过程中的存储在U盘中的历史数据文件,以便于分析测试。另外还要编写下位机微型打印机数据打印程序,为用户提供多种查看选择。我在认真分析以上设计要求之后,以C语言作为开发语言,VC为开发
9、环境,在MFC框架上编写完成一个应用程序。这个应用程序采用MSCOMM控件来实现串口通讯,以C语言文件操作实现U盘历史数据文件的读写和显示操作。并且在此基础上,我还对上位机软件的界面进行了美化和优化,还添加了现场测试数据自动生成WORD文档,使得软件更人性化和操作更简单。在本毕业论文通过这个项目的开发过程,阐述了编程环境的选择,串口通讯实现远程测试的方法,通过文件操作读取U盘数据的技巧。探讨如何在PC平台与工控机平台间建立远程测试和历史数据读取和分析的一般方法。2 总体设计方案2.1 系统总体结构系统总体结构如下图所示,下位机是一台试用在变电所等电力部门的充电机设备,采用工控机作为核心处理器。
10、PC机端的应用程序通过RS232串口与设备实现通讯。充电机设备带有USB接口,用于接入U盘存储充电机历史数据。当用户需要查看历史记录数据时,将U盘从设备中拔下,接入PC端可以利用应用程序通过文件操作打开查看。图1. 系统总体结构图另外,该充电机设备通过工控机打印口连接一台微型打印机用于运行参数和测试数据的即时打印,供用户查看。2.2 上位机用户操作界面结构 图2. 软件组织结构3 上位机用户操作界面的建立3.1 编程语言及编程环境3.1.1 C+语言介绍C+是脱胎自C语言的一种中级语言。从计算机角度看, 它可以嵌入ASM等低端语言; 从面向对象的程序设计角度看, 它有具备OOP的三个基本特征抽
11、象, 封装和继承。C语言是结构化和模块化的语言,它是面向过程的。C+保留了C语言原有的所有优点,增加了面向对象的机制。C+与C完全兼容。C+是对C的扩充,是C的超集。它既可用于结构化程序设计,又可用于面向对象的程序设计,功能强大。C+性能良好,因为它被编译为机器代码。对于VBScript和Java等语言,代码在运行时由程序解释,而且每次运行程序时都要将代码转换为机器码,这样做效率比较低,不仅仅是已编译过的C+程序运行得较快,而且微软C+编译器已存在多年。这意味着微软的编译器程序员已经把许多优点集中到编译器上,以致于它能产生非常高效的机器码。因为C+是编译语言,而且非常自然,比VB更接近机器代码
12、,所以由C+编译器产生的代码一定比VB的编译代码效率更高。C+是一种编译语言,即C+代码在执行之前已转换为机器码。只要此代码不依赖于外部的动态链接库(DLL),C+就可以在不需要安装额外程序的情况下移动到运行同样操作系统的其他机器和微处理器上,而移动Java程序时需要先安装Java运行期库。因此,使用C+语言相比其他语言具有最小的依赖性由于C和C+已经存在许多年了,现在有许多可利用的代码,我们的服务器组件可以使用现有的C/C+代码或库。鉴于上述特点,我在本设计中选择C+作为主要编程语言。3.3.2 Visual C+6.0编程环境介绍本次设计中使用的Visual C+6.0是一个基于C+语言,
13、基于Windows操作系统的功能强大的可视化软件开发工具。这不仅表现出在应用程序界面编辑和代码的编写中,还表现为数据处理上的高可视化和高面向对象性。Visual C+6.0不仅是一个C+编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。它由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。另外,Visual C+6.0还提供了一个"无所不包"的
14、应用框架MFC,并且可以非常方便的使用MSCcomm控件进行串口编程。使用Visual C+6.0的向导可以生成大量的使用代码,而不必人工地编写代码。从编写程序的难易程度和程序的性能综合考虑,这些特点完全能够满足我在本次课题设计中的各种需求。3.3.3 MFC程序框架介绍MFC就是一个程序的框架。这个框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法。使用者只要通过预定义的接口把具体应用程序特有的东西填入这个轮廓就可以了。在它基础上来建立Windows下的应用程序,相对SDK来说更为简单。Visual C+6.0提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件
15、(代码和资源等);资源编辑器用于帮助直观地设计用户接口; ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。在本设计中要求通过编写代码来建立必要的用户界面,控制并定制其外观。同时还要响应用户的操作行为。例如,如果用户单击了现场测试按钮,就需要有代码来响应这一动作。而使用MFC框架,则会自动添按钮的响应消息,只需在对应位置添加事件处理动作就能完成控制任务。为此采用了Visual C+6.0的MFC单文档程序框架作为上位机软件的基本框架。3.4 基本界面的建立3.4.1单文档一个典型的应用程序应该活动在称为“框架窗口”中。一个框架窗口是一个全功能的主
16、窗口,用户可以改变尺寸、最小化、最大化等。本设计方案中主要涉及单文档窗口,和对话框窗口。整个上位机界面的底层是单文档,而上层使用的使对话框,并在对话框上添加主要控件,从而构成了完整的界面外观。图3. 单文档结构图使用MFC的向导即可生成如上所示的单文档窗口。这是整个界面的基础框架部分。3.4.1对话框在基础的单文档框架上面添加了两个无(标题栏)对话框将单文档窗体分为两部分。上一部Dialog1分为工具条按钮,下一部分Dialog2为具体功能显示区。此两部分窗口均为非模态化对话框。首先在资源里插入新建对话框,修改其属性;然后添加相应的类,如CUDiskDlg;再使用以下代码分别创建模态化对话框和
17、非模态化对话框。CUDiskDlg m_CUDiskDlg;/定义对象m_UDHisDlg.Create(IDD_UDISKHIS,this);/创建非模态化对话框m_UDHisDlg.ShowWindow(TRUE);/显示对话框m_UDHisDlg.DoModal();/创建模态化对话框3.4.1控件介绍Button控件:Button控件是按钮控件,可以响应单击(BN_KLICKED)和双击(BN_DUBLEKLICKED)事件。其使用方法是:在资源标签的相应窗体下,从Controls对话框中将Button控件拖至对话框的相应位置,修改属性及ID号后,在其对应的事件处理函数中添加事件代码即
18、可。在本设计中使用颇多,如U盘历史数据查询按钮,现场测试按钮等。Edit控件:Edit控件是文本编辑控件,在本设计中主要用于U盘查询界面中详细数据的参数显示,和现场测试中参数设置部分的数据输入和测试结果表格中的数据显示及测试结论、处理意见的输入。将Edit控件在类向导中与一变量(如m_edit8)以value的形式相关联。当用于数据显示时,使用语句m_edit8 =str;将值赋予变量m_edit8,再用语句UpdateData(FALSE);将变量内容显示。当用于数据输入时,应用语句UpdateData(TRUE);将控件中的数据读入赋予相关变量。ListContrl控件:ListContr
19、l控件主要用于显示列表式的数据显示。在本设计中,历史信息,详细数据,现场测试数据的显示均使用了ListContrl控件。该控件使用前需进行风格设置。即通过以下语句获得原有风格:DWORD dwStyle = :GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE);dwStyle &= (LVS_TYPEMASK); dwStyle &= (LVS_EDITLABELS);通过以下语句置新风格:SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE,dwStyle,|LVS_REPORT|LVS_NOLABELWRA
20、P|LVS_SHOWSELALWAYS); 通过以下语句设置扩展风格DWORD styles =LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES; ListView_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles,styles );。进行风格设置后,先插入列头,后才可以逐行添加数据信息。插入列头时,应用InsertColum方法,而逐行添加信息时,第一列的信息应该用InsertItem方法,而后几列则应用SetItem方法。ListContrl控件也可以响应双击事件,其函数为
21、OnDblclkListHis(NMHDR* pNMHDR, LRESULT* pResult)。并且能获得双击时鼠标所在的Item号。由此来实现双击历史信息记录后,显示对应的详细数据。Picture控件:Picture控件是一个静态控件,用于插入图片等功能。而图片的插入,有静态插入和动态插入两种方法。静态插入是指,直接在Picture控件属性中,将将“类型”选项改为Bitmap,然后再在“图像”选项中选择合适的位图即可。动态插入是指,在程序中定义HBITMAP类型变量m_Brown_h1,用语句m_Brown_h1=:LoadBitmap(AfxGetInstanceHandle(),MAK
22、EINTRESOURCE(IDB_BROWN_H1)将变量m_Brown_h1与位图资源IDB_BROWN_H1关联起来。然后再将Picture控件与变量m_h1关联,再通过语句m_h1.SetBitmap(m_Blue_h1);就可以将图片动态插入。3.5 历史数据察看功能3.5.1历史数据察看功能介绍历史数据察看功能主要是用于察看直接通过下位机,以文件形式存储在USB可移动存储设备上的历史检测数据纪录的。该纪录由历史信息和历史信息对应的详细数据信息两部分。每条历史信息包括序号、日期、时间、整定电压(在放电测试项目中无该纪录)、整定电流、已放容量(只在放电测试项目中有该纪录)五项内容;每条历
23、史信息对应得详细数据信息有各自不同的几项内容。各项测试的详细数据信息如下:放电参数测试包括序号、时、分、端电压、放电电流五项;电压稳定精度测试包括输入电压、电压最大值、电压最小值、稳压精度、纹波系数五项;电流稳定精度测试包括输入电压最大值、电流最大值、电流最小值、稳流精度四项;限流特性测试包括输入电压、-10%、100%、+10%、稳流精度五项。在用户进入该程序后,单击U盘历史查询按钮就会进入历史数据察看状态。按下各测试项目选择按钮,则进入不同的测试项目历史纪录查询状态。对应的历史信息就立刻显示在List中。双击List条目,则将对应的详细数据信息显示在List中,其参数也将显示在对应位置。
24、图4. 历史数据查询界面3.5.2历史数据察看功能实现的方法3.5.2.1盘符的确定由于每台PC的盘符划分不同,USB移动存储设备连接后所在的盘符也将不同。而对文件的操作必须指定明确的文件路径,方能正确的打开文件,读取数据。因此,如何确定USB移动存储设备的盘符是必须解决的问题。在本设计中,我采用了添加配置文件方式来解决该问题。即在可执行程序的根目录下添加一可读写的文件,用于保存指定的盘符。当用户在某一PC机上第一次使用本软件时,将提示配置USB可移动存储设备盘符。当用户输入该PC机上USB可移动存储设备所在盘符,并按配置按钮后,盘符信息将写入配置文件,并一直保存至下一次配置前。按下推出按钮,
25、则向主框架发出消息,要求其重新创建历史数据察看功能对话框,在对话框的初始化中重新装载配置文件,读入正确的盘符。其中配置文件的装载,采用函数GetCurrentDirectory(dirlen,sDir)获得可执行文件的根目录,再用函数strcat(sDir,"con_set.ini")生成完整的配置文件路径。 图5. 第一次配置文件界面生成配置文件代码如下:UpdateData();if(m_usb.GetLength()>0&&m_usb.GetLength()<2)&&(m_com.GetLength()>0)&
26、&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("配置成功!");elseMessageBox("输入的参数格式错误,无法配置!");配置文件的装载代码如下:FilePath="C:FHIST"FilePat
27、h.SetAt(0,Disk);l=FilePath.GetLength();FileName=FileName_tmp;for(r=0;r<l;r+)*(FileName+r)=FilePath.GetAt (r);*(FileName+l)=NULL;/打开文件并判断文件是否打开成功if(fp=fopen(FileName,"rb")=NULL)MessageBox("文件不存在,请检查文件位置并重新配置");return;3.5.2.2历史数据及对应的详细数据的读取和显示历史纪录在USB移动存储设备中以文件的形式存储。各项历史信息和详细数据信
28、息对应的文件名如下图:检测项目历史信息文件名详细数据文件名放电测试FHISTVDATA电压稳定精度测试UHISTUDATA电流稳定精度测试IHISTIDATA效率测试EHISTEDATA限流特性测试XHISTXDATA图6. 各项历史信息和详细数据信息实现历史信息的读取,首先从配置文件中读入盘符,获取到对应历史信息的文件路径,以二进制流形式打开对应文件,读取历史信息条数(即第一个二进制数据)到int变量mark中。由于下位是16位操作系统,一个int型占16位,而上位机是32位操作系统,一个int型占32位,一个short int型占16位。由文件存储格式可知,实际的标志位为16位数,因此需将
29、读取的二进制数强制转换为short int 型数据。然后根据各项历史信息数据的存储格式,移动指针,依次读取一条数据到数组data_tmp7中,共读取mark次。移动指针读取数据到数组data_tmp7中的代码如下:fseek(fp,(2+i*7*4),SEEK_SET);/移动指针到相应位置fread(data_tmp,4,7,fp);/详细数据的读取是当鼠标双击list1控件的某一条历史信息时,将响应list1控件的双击事件,进入的其响应函数。在该函数中,通过switch语句判断该条历史信息所属的测试项目,并由此打开相应的详细数据文件。当双击list1控件的某一条历史信息时,nItem=m_
30、listctrl.GetNextItem(-1, LVNI_FOCUSED);将获取该行索引值,即该条历史信息在全部信息中排列的序号。根据此及对应测试项详细数据存储格式,可计算出该条历史信息所对应得详细数据的第一个数据的指针。然后移动指针,读取该详细数据信息到数组tem。放电测试项详细数据读取时移动指针,读取数据到数组data_tmp7中的代码如下:fseek(fp,(2+nItem*1240),SEEK_SET);/移动指针到对应日期 的数据存储位置fread(data,4,310,fp);/读取数据流到tem,float *data 的指向tem的首地址历史信息和对应的详细数据的显示,主要
31、是edit控件的显示和listContrl控件的信息插入。以放电测试为例,历史信息数据显示的主要代码如下:for(i=0;i<mark;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;
32、m_list_his.InsertItem(&lvitem);/日期str=""itoa(int)data_tmp0,ch1,10);str=str+ch1+"."itoa(int)data_tmp1,ch1,10);str=str+ch1+"."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(j=0;j<str
33、_length;j+)*(str_data+j)=str.GetAt (j);*(str_data+str_length)=NULL;lvitem.pszText =str_data;lvitem.iSubItem=1;m_list_his.SetItem(&lvitem);/时间str=""if(data_tmp3>=10)itoa(int)data_tmp3,ch1,10);else itoa(int)data_tmp3,ch1,10);ch11=ch10;ch10='0'ch2='0'str=str+ch1+":
34、"if(data_tmp4>=10)itoa(int)data_tmp4,ch1,10);else itoa(int)data_tmp4,ch1,10);ch11=ch10;ch10='0'ch2='0'str=str+ch1+":"+"00"str_length=str.GetLength();char *str_time;char time_tem10;str_time=time_tem;for(j=0;j<str_length;j+)*(str_time+j)=str.GetAt (j);*(s
35、tr_time+str_length)=NULL;lvitem.pszText =str_time;lvitem.iSubItem=2;m_list_his.SetItem(&lvitem);/已放容量chang(data_tmp5*0.01,str_da,'h');lvitem.pszText =str_da;lvitem.iSubItem=3;m_list_his.SetItem(&lvitem);/整定电流chang_A(data_tmp6*0.01,str_da,'A');lvitem.pszText =str_da;lvitem.iSu
36、bItem=4;m_list_his.SetItem(&lvitem);以放电测试为例,详细数据显示的主要代码如下:for(i=0;i<l_mark;i+)char *ch;char pch5;ch=pch;char *data_ch;char data_c7;data_ch=data_c;int itIndex=m_list_part.GetItemCount();LV_ITEM lvitem;lvitem.mask=LVIF_TEXT;/序号lvitem.iItem=itIndex;lvitem.iSubItem=0;data_ch=itoa(int)data7+i*6+0,
37、ch,10);lvitem.pszText =data_ch;m_list_part.InsertItem(&lvitem);/时lvitem.iItem=itIndex;lvitem.iSubItem=1;data_ch=itoa(int)data7+i*6+1,ch,10);lvitem.pszText =data_ch;m_list_part.SetItem(&lvitem);/分lvitem.iItem=itIndex;lvitem.iSubItem=2;data_ch=itoa(int)data7+i*6+2,ch,10);lvitem.pszText =data_c
38、h;m_list_part.SetItem(&lvitem);/端电压lvitem.iItem=itIndex;lvitem.iSubItem=3;chang_V(data7+i*6+3*62.5,str_da,'V');lvitem.pszText =str_da;m_list_part.SetItem(&lvitem);/放电电流lvitem.iItem=itIndex;lvitem.iSubItem=4;chang_A(data7+i*6+4*10,str_da,'A');lvitem.pszText =str_da;m_list_part
39、.SetItem(&lvitem);ch0='0'/给字符串添上结束符data_ch0='0'/日期str=""itoa(int)data0,ch,10);str=str+ch+"."itoa(int)data1,ch,10);str=str+ch+"."itoa(int)data2,ch,10);str=str+ch;m_edit_u8 = str;/时间str=""if(data3>=10)itoa(int)data3,ch,10);else itoa(int)da
40、ta3,ch,10);ch1=ch0;ch0='0'ch2='0'str=str+ch+":"if(data4>=10)itoa(int)data4,ch,10);else itoa(int)data4,ch,10);ch1=ch0;ch0='0'ch2='0'str=str+ch+":"+"00"m_edit_u9 =str;/开始端电压chang_V(data5*62.5,str_da,'V');m_edit_u10 =str_da;/整定放电电
41、流chang_A(data6*0.01,str_da,'A');m_edit_u11 =str_da;/已放容量chang(data7+i*6+5,str_da,'h');m_edit_u12 =str_da ;m_edit_u13 = _T("");m_edit_u14 = _T("");UpdateData(FALSE);3.4 现场测试功能随着计算机、电子、通信技术的飞速发展,人们对于车间现场设备的运行管理控制,可视化操作等综合水平提出了新的要求。本设计中的现场测试功能就是本着“不在现场,远离现场”的原则,将充电机的
42、现场设备界面通过串口通信技术,与上位机界面有机的结合起来,以实现计算机的远程监控功能。该功能的使用,可实现在非车间场地,通过简单、人性的操作界面,对充电机测试数据的进行实时监控以及历史数据的准确查询,并且能在实际的生产任务中,最大限度的降低人工成本,提高生产效率,保证生产安全。3.4.1现场测试功能介绍本设计中的现场测试功能主要是指上位机和下位机间通过通信来实现上位机与下位机间的信息交换。将下位机检测到的数据实时上传给上位机,并在界面中显示,保存。由此实现在非车间场地,通过简单、人性的操作界面,对充电机测试数据的进行实时监控。图7. 现场测试功能界面(该图需表出参数设置部分,表格部分)上图为现
43、场测试功能界面。该界面能实现对五个测试项目的测试数据进行实时监测。要求监测到的数据包括:放电参数测试包括序号、时、分、端电压、放电电流五项及测试日期、测试时间、开始端电整定放电电流、已放容量等五个参数;电压稳定精度测试包括输入电压、电压最大值、电压最小值、稳压精度、纹波系数五项及测试日期、测试时间、直流电压、负载电流、整定电压、交流电压、纹波峰值等七个参数;电流稳定精度测试包括输入电压最大值、电流最大值、电流最小值、稳流精度四项及测试日期、测试时间、直流电流、直流电压、整定电流、交流电压、计算整定电流等七个参数;限流特性测试包括输入电压、-10%、100%、+10%、稳流精度五项及测试日期、测
44、试时间、直流电压值、交流电压、限流整定值等5个参数。当用户按下现场测试按钮后,由单文档试图创建并显示一对话框,即现场测试界面。当按下不同的现场测试项目按钮后,通过标志位flag_Face的置位及判断,进入到不同的现场测试状态。如图所示的参数设置图位置可进行各项测试的设备信息及参数设置。按下保存设置按钮,设置被禁用,并且设置的内容将被保存在测试结果表格中如图所示的表格设置。保存设置后,按准备测试按钮,则打开串口,进入通信等待状态。一但下位机向上位机发送数据,就会进入通信状态,根据预先定义的协议,进行数据通信。若要停止接收数据,则需按下停止接收数据按钮,即关闭串口。测试结束后,可在Edit1,Ed
45、it2中输入相应的测试论和意见。按保存按钮,则可以将测试结果导入word中,并保存下来。各按钮功能及相关变量如下表:按钮名称按钮功能相关变量放电测试进入放电测试功能flag_Face=1电压稳定精度测试进入电压稳定精度测试功能flag_Face=2电流稳定精度测试进入电流稳定精度测试功能flag_Face=3充电机效率测试进入充电机效率测试功能flag_Face=4限流特性测试进入限流特性测试功能flag_Face=5保存设置参数设置禁用,将设置内容保存在测试结果表格中flag_IfParSave=1修改设置参数设置可用flag_IfParSave=0准备测试判断设置是否保存,若已保存则打开串
46、口无停止接收数据若串口打开,则关闭串口无保存结果根据标志位flag_nFormWord的值,将测试结果导入对应word中无返回隐藏现场测试界面,显示信息输入界面无图8. 各按钮功能及相关变量3.4.2串行通信的建立及基本参数的设定所谓“串行通信”是指外设和计算机间使用一根数据信号线(另外需要地线,可能还需要控制线),数据在一根数据信号线上一位一位地进行传输,每一位数据都占据一个固定的时间长度。如图所示。而串行接口是微机应用系统常用的接口。在串行通信时,要求通信双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通信。目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。它被定义为
47、一种在低速率串行通信中增加通信距离的单端标准。RS-232采取不平衡传输方式,即所谓单端通信。 收、发端的数据信号是相对于信号地,如从DTE设备发出的数据在使用DB25连接器时是2脚相对7脚(信号地)的电平,DB25各引脚定义参见图1。典型的RS-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在+5+15V,负电平在-5-15V电平。当无数据传输时,线上为TTL,从开始传送数据到结束,线上电平从TTL电平到RS-232电平再返回TTL电平。接收器典型的工作电平在+3+12V与-3-12V。由于发送电平与接收电平的差仅为2V至3V左右,所以其共模抑制能力差,再加上双绞线上的分
48、布电容,其传送距离最大为约15米,最高速率为20kb/s。RS-232是为点对点(即只用一对收、发设备)通信而设计的,其驱动器负载为37k。所以RS-232适合本地设备之间的通信。图9. RS232DB25连接器引脚规定RS232RS422R485工作方式单端差分差分节点数1收、1发1发10收1发32收最大传输电缆长度50英尺400英尺400英尺最大传输速率20Kb/S10Mb/s10Mb/s最大驱动输出电压+/-25V-0.25V+6V-7V+12V驱动器输出信号电平(负载最小值)负载+/-5V+/-15V+/-2.0V+/-1.5V驱动器输出信号电平(空载最大值)空载+/-25V+/-6V
49、+/-6V驱动器负载阻抗()3K7K10054摆率(最大值)30V/sN/AN/A接收器输入电压范围+/-15V-10V+10V-7V+12V接收器输入门限+/-3V+/-200mV+/-200mV接收器输入电阻()3K7K4K(最小)12K驱动器共模电压 -3V+3V-1V+3V接收器共模电压 -7V+7V-7V+12V图10. RS-232电气参数表因此考虑到适用,经济,兼容等原因,在本设计中采用RS-232串行通信标准是较好的选择。3.4.3使用MSCcomm控件进行串口编程Windows与以往DOS下串行通信程序不同,Windows不提倡应用
50、程序直接控制硬件,而是通过Windows操作系统提供的设备驱动程序来进行数据传递。因此串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作。对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同需要的通信程序。 MSComm(Microsoft Communications Control)控件是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,通过串行端口传输和接收数据,为应用程序提供串行通信功能。选用的事件驱动方式处理通信问题。事件驱动方式是指,当串口发生事件或者错误的时候,会产生一个O
51、nComm的事件,通过对这个事件的捕捉,进行相应的处理来完成串口通信任务。而在事件驱动方式中,MSComm有一个重要属性-CommEvent属性。当串口发生事件或者错误的时候,MSComm就为它赋不同的代码,同时,产生一个OnComm事件。这时候,我们就可以针对不同的代码,进行相应的处理。这种方法的优点是程序响应及时,可靠性高。因此,在本设计中选用了MSComm控件来实现串行通信功能。 首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project -> Add to Project -> Components and Control插入即可,再将该控件
52、从工具箱中拉到对话框中。然后通过设置和监视MSComm控件的属性和事件来完成任务。打开所需串口后,使用OnComm的事件来捕捉事件,使用m_Com.GetCommEvent()函数获得CommEvent 属性值。并由此来检查其是否正确接收数据(正确接收数据时,m_Com.GetCommEvent()函数获得的值为2),否则作抛弃处理。由于该通信的目的是建立上位机和下位机间的数据交换纽带,使得上位机能够实时的显示并处理下位机检测到的数据。为了保证数据处理时间,进入OnOnCommMscomm1()串口通信中断函数后,马上使用使用m_Com.SetRThreshold(0);语句将缓冲区引发接收数
53、据的字符数设置为0,即相当于不接收缓冲区的任何数据。以确保已接收的数据由足够的处理时间。当已接收的数据处理完毕,则使用m_Com.SetRThreshold(1);语句,继续接收数据。如此往复。使用MSComm控件实现串口通信的主要代码如下:void CNTestDlg:OnOnCommMscomm1() /串口通信中断处理/ TODO: Add your control notification handler code here/原理: 进入中断后,关闭中断,逐个处理缓存中的数据,结束后再开启中断,缓存中若有新的数据,则进入中断。往复循环。m_Com.SetRThreshold(0);/关
54、闭串口中断m_list_FPar.SetFont(&m_Font);/设置字体VARIANT vResponse;char *tem_data;char str;int nEvent,DataCount;nEvent=m_Com.GetCommEvent();/nEvent是一个状态值switch(nEvent)case 2:/数据正确接收时,nEvent总为2DataCount=m_Com.GetInBufferCount();/获取缓存中的数据大小vResponse=m_Com.GetInput();/读缓存区tem_data=(char*)vResponse.parray->
55、;pvData;/将读入的数据放入数组for(int i=0;i<DataCount;i+)str=*(tem_data+i);operateData(str);/逐个对数据进行处理m_Com.SetRThreshold(1);void CNTestDlg:PortOpen()/初始化串口/在"开始"按钮按下后才初始化串口if(m_Com.GetPortOpen()m_Com.SetPortOpen(FALSE);m_Com.SetCommPort(Com-48); /选择串口号 Com 读入的数据为字符型的数字,48对应字符'0'if( !m_Com.GetPortOpen()m_Com.SetPortOpen(TRUE);/打开串口elseAfxMessageBox("cannot
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年中国阿西美辛缓释胶囊市场调查研究报告
- 2024年锥形双螺杆挤出生产线项目可行性研究报告
- 2024年液压集成块项目可行性研究报告
- 外教工合同英文版
- 油漆工程承包合同范本格式
- 蔬菜采购合同谈判要点
- 创新性咨询培训合同范本
- 家居全包装修合同
- 简单设备采购合同协议
- 酒水供应商购销合同范本
- 工匠精神第二讲工匠精神内涵课件
- 文明礼仪主题班会课件(共23张)
- 航站楼管理部《机场使用手册》实施细则
- 2022年江苏省沿海开发集团有限公司校园招聘笔试模拟试题及答案解析
- 利润及利润分配表(通用模板)
- 高效沟通与管理技能提升课件
- 消防维保方案 (详细完整版)
- 档案馆建设标准
- 大象版2022-2023五年级科学上册《3-4我是小小安全员》课件
- 静脉炎相关知识课件
- 烯烃分离装置操作规程
评论
0/150
提交评论