1、课 程 设 计 报 告船舶航向实验系统及航向控制器的设计与仿真姓 名: XXX 专业班级: 学 号: 指导老师: 颜德文 2012 年 12 月 21 日摘 要本课程设计利用 Matlab 环境中的 Simulink 仿真工具箱和友好的 GUI 界面,设计了船舶航向实验系统所需的航向控制器。该航向控制器通过实物仿真,帮助学生更直观地理解航向控制的过程,增强感性认识,培养学生的研究能力、综合应用能力和创新能力;同时本课程设计所设计的船舶航向控制器是一个开放的平台,有兴趣的同学可以根据需要添加相应的程序来实现所需功能。文中基于 Matlab /GUI 的串口通信功能的编程实现表明利用 Matlab
2、/ GUI 可以进行包含一般界面元素的界面开发,在此基础上,加入串口通信功能,实现数据的实时采集与分析处理,并进行图形化显示。在实物仿真中通过串口将计算机与船舶模型连接构成闭环船舶航向控制系统,利用 Simulink 中的控制器控制船舶模型,此控制器可直接使用工具箱中的控制器和也可使用设计好的控制器,更换方便,操作简单,易于实现。图形用户界面(Graphical User Interface,简称 GUI )是提供人机交互的工具和方法。Matlab 用一个包含多种不同风格用户控件对象的图形窗口代表用户界面。用户必须对每一个对象进行编程,使用户在 GUI 中的行为能够达到相应的目的。Matlab
3、/GUI 是一种新型的图形用户界面开发方式,特别适合能够熟练运用 Matlab 语言进行仿真但是对 VC 界面开发了解不够深入的科技工作者。本课程设计所设计航向控制器为 PID 自整定控制器,控制器部分是利用 Matlab 逻辑工具箱进行设计,此方法设计步骤简单,易于实现,可直接与 Simulink 工具箱连接进行仿真,并且以该控制器为核心的仿真图也可与仿真实验平台进行完美的连接,因此可以通过仿真实验平台验证控制器的性能。关键词:GUI 航向控制 PID 实物仿真目 录第一章 概论 .11.1 引言 .11.2 图形用户界面概述 .1第二章 GUI 的创建 .32.1 GUI 设计概述 .32
4、.2 GUI 实现 .32.3 采用 GUIDE 创建 GUI.42.3.1 GUI 组件介绍 .42.3.2 菜单编辑器 .42.3.3 创建 GUI 模型 .4第三章 控制器的设计 .73.1 串口的基本操作 .73.2 实物仿真 .73.3 S-FUNCTION 函数 .8结 果 .11参考文献 .12致 谢 .13-1-第一章 概论1.1 引言本课程设计所设计的船舶航向控制器采用 Matl ab 环境中的 Simulink 仿真工具箱和GUI 界面。Matlab 是 Mathworks 公司推出的一款功能强大的数学软件。它集数值分析、矩阵计算、信号处理和图形显示于一身,包含大量高度集成
5、的函数可供调用,命令语句功能强大为科学研究,工程设计及众多学科领域提供一种简洁、高效的编程工具,并在图像处理、控制设计、信号检测、金融建模设计等领域得到广泛应用。因此在制作各种教学软件或信号处理软件时,在 Matlab 提供的 GUI( GraphicalUser Interface)上利用 Matlab 语言编写核心代码并构建框架是一种不错的选择这不但减少了代码编写的工程量而且制作出的软件同时具有界面友好和能够方便进行各种数据处理及图像分析等特点。随着信息社会的不断推进,具有不同功能的应用软件已成为人们生活、学习及工作中不可缺少的一部分。比如,工作中经常用到的文字处理软件、图形图像软件等,对
6、于这些软件的设计,程序员大多习惯于选择 VC、Java、VB 等高级编程语言编写代码,因为这些编程语言制作出的软件界面友好,功能强大。然而在对大量数据进行各种复杂分析和处理时,相比于 Matlab 编程语言而言,这些高级语言则处于明显的劣势。Matlab 不仅具有强大的科学计算功能,还具有界面设计开发功能。Matlab 图形用户界面是有别于 VC 界面和 Java 界面的是一种新型界面开发方式。对于熟悉 Matlab 而不想编写大量 VC 代码的科研人员来说,Matlab/GUI 无疑是一个最佳选择。它既能嵌入已有的仿真程序,又能把仿真的图形化结果以人机交互的动态方式展现给操作者,给人深刻的印
7、象,同时仿真代码的不可见性为一些不熟悉 Matlab 的操作者提供了操作界面的可能。在基于 Matlab/ GUI 制作的软件中关键需要解决三大问题:1、界面功能;2、界面外观的优化;3、不同 GUI 之间的调用。因此,本课程设计给出一个利用 Matlab/GUI 制作的仿真控制器的实例。此仿真控制平台是为了满足学生船舶控制实验的需要。本课程设计在设计仿真控制平台中涉及到航向控制器的设计,航向控制器是仿真平台的基础,在航向控制器的基础之上实现仿真平台上的相关功能。1.2 图形用户界面概述Matlab 是一套高性能的数值计算和可视化软件,它作为新兴的逻辑语言和可视化工具,有着其他编程语言所不能比
8、拟的优势,如 Fortran 语言是一种专门用于科学计算的语言,但其图形界面的功能比较弱,利用其开发的程序,用户界面不友好,使用起来不方便。而Visual Basic, Visual C 等可视化编辑语言开发出来的程序界面友好,但由于其不是专门用于科学计算的语言,因此其科学计算功能较弱。由于 Matlab 强大的应用功能,用户越来越多。Matlab 的应用可让用户不再需要了解大量底层与开发无关的工作,极大地提高了开发效率。Matlab 为解决用户开发和客户交互的局限,提供了一个全新的 GUI 设计方案。-2-图形用户界面(GUI, Graphical User Interface)是提供人机交
9、互的工具和方法。GUI是使用图形对象(例如按钮、文本框、滚动条和菜单等)创建的用户界面,这些对象对计算机用户而言都有明确的含义,例如移动滚动条将会改变数值,按下 OK 按钮将完成并应用用户的设置,同时设置对话框消失。当然用户必须保证这些不同对象间能够协调地工作。Matlab 用一个包含多种不同风格的图形窗口代表用户界面。用户必须对每一个对象进行编程,使用户在 GUI 中的行为能够达到相应的目的。Matlab 的 GUI 为开发者提供了一个不脱离 Matlab 的开发环境,更有益与 Matlab 程序的 GUI 集成。在 Matlab6.5 中,图形用户界面是一种包含多种图形对象的界面,典型的图
10、形界面包括图形显示区域、功能按钮空间以及用户自定义的功能菜单等。为了让界面实现各种功能,需要对各个图形对象进行布局和编程。这样,当用户激活对应的 GUI 对象时,就能执行相应的行为。最后,必须保存自己创建的 GUI,使得用户可以应用 GUI 对象。在 Matlab 中,所有对象都可以使用 M 文件进行编写。GUI 也是一种 Matlab 对象,因此,可以使用 M 文件来创建 GUI。使用 M 文件创建 GUI 的方法也是最基础的,使用其他方法创建 GUI 图形界面时,实现图形控件的各种功能时,也需要编写相应的程序代码。除了使用 M 文件来创建 GUI 对象之外,Matlab 还为用户开发图形界
11、面提供了一个方便高效的集成开发环境:Matlab 图形用户界面开发环境(Matlab graphicaluser interface development environment)简称 GUIDE,其主要是一个界面设计工具集。Matlab6.5 将所有GUI 所支持的用户控件都集成起来,同时提供界面外观、属性和行为响应方法的设置方法。除了可以使用 GUIDE 创建 GUI 之外,还可以将设计好的 GUI 界面保存为一个 FIG 资源文件,自动生成对应的 M 文件。该 M 文件包含了 GUI 初始化代码和组建界面布局的控制代码。使用 GUIDE 创建 GUI 对象执行效率高,可以交互式地进行组
12、件布局,还能生成保存和发布 GUI 的对应文件。本课程设计选择用 Matlab 的图形用户界面设计是因为不需要编写大量的代码,它既能嵌入已有的仿真程序,又能与仿真环境相结合。-3-第二章 GUI 的创建从 MatlabS.X 版本开始,为了方便用户制作图形界面 Matlab 提供了一个交互式的设计工具 GUIDE。但是从 Matlab6.X 以来,GUIDE 的设计界面己经发生变化,本论文采用的是Matlab6.5 的 GUIDE。GUIDE 实际上是一套 Matlab 的工具集,它由版面设计工具、属性编辑器、菜单编辑器、调整工具、对象浏览器、TAB 次序编辑器六部分组成。2.1 GUI 设计
13、概述在 GUI 设计程序前,首先考虑设计对象的结构和开发流程。不同的要求设计出来的GUI 也不同。一个优秀的界面基本符合易用性、统一性、规范性和合理性的标准。为了高效率的开发一个 GUI,必须按照一定的开发步骤,下面给出一般步骤图(如图2.1): 图 2.1 GUI 设计步骤图2.2 GUI 实现GUI 编程实现主要分为三大块:组件的布局、属性的编辑和回调函数的编辑。1、组件的布局在 GUIDE 的界面设计区添加组件的方法很简单,只要用鼠标从组件面板里点击并拖拉组件即可实现。添加菜单有专门的菜单编辑器来完成。完成添加后可使用 GUIDE 的特征工具调整组件的位置和使用 TAB 次序编辑器调整
14、TAB 次序达到最优化配置,来完成布局。2、属性编辑通过属性编辑可以改变当前组件的属性值,在菜单编辑里可改变菜单的属性值。当改变组件属性值时,可能会影响到界面的整体效果,因此在改完属性值滞后还要对组件的布局进行优化。GUI 实现的关键还在于回调函数的处理。3、回调函数在 Matlab6.5 里回调函数直接在 M 文件中编辑,这样的事件管理模式,便于用户的理解和编辑。-4-当一个图形对象发生特殊事件时,GUI 传递要执行的子函数名到 M 文件中,该子函数称为回调函数(也称 callback 函数)。用户对控件操作(如鼠标单击、双击或移动、键盘输入等)的时候,控件对该操作进行响应,指定执行的函数,
15、就是该控件的回调函数。该函数不会主动运行,只在用户对控件执行特定操作时执行。2.3 采用 GUIDE 创建 GUI采用 GUIDE 创建一个完整的 GUI 图形界面,步骤如下:1, GUI 对象布局2、设置对象的相应属性3、编写回调函数2.3.1 GUI 组件介绍1、触控按钮(Push Button)在 Push Button 双击,调用属性查看器,可以设置 Push Button 的属性。2、静态文本(Static Text)Static Text 通常用于显示其他对象的数值、状态等。3、可编辑文本框(Edit Text)Edit Text 允许用户修改文本内容,用于数据的输入显示。4、单选
16、按钮(Radio Button)Radio Button 用于显示一组互斥的状态。其对象之多只有一个的 value 值为 l。5、坐标轴(Axes)Axes 用于数据的可视化,即显示图形或者图像。Axes 是核心图形对象的容器,它包含下列 GUI 核心图形对象:image, light, lint, patche, rectangle, surface 和 text 对象。2.3.2 菜单编辑器菜单编辑器生成可以为每个菜单选项生成空回调函数的子函数,包括菜单名,其主要用于建立菜单栏(Menu Bar)和右键菜单(Context Menus。若窗口的 MenuBar 属性值为none,则只显示用
17、户设计的菜单;若 MenuBar 属性值为 Figure 则用户设计的菜单出现在标准菜单之后。2.3.3 创建 GUI 模型图 2.3 为 GUI 模型图。-5-图 2.3 GUI 模型图界面有两个发送单元,分别为航令和航向发送,航令为控制船舶转速的大小,航向为设定的角度,输入相应的数值,点击发送,则船舶模型会相应的转动。建立一个 GUI 模型之后,相应的会出现源程序代码,以下为其中的发送接收程序:function pushbutton1_Callback(hObject, eventdata, handles)global count;count=0;s=serial(COM1) %建立串口
18、s.BytesAvailableFcnMode=terminator; % byte s.BytesAvailableFcnCount=22s.BytesAvailableFcn=rxd_mycallback; %mycallback;fopen(s); %打开串口a=get(handles.edit1,String);b=strcat($AGHSC,01,a);AGHSC=strcat(b,S*HH);AGHSC(20)=13; AGHSC(21)=0;fprintf(s,AGHSC,async); state=s.TransferStatuwhile(state(1)=i)state=s.
19、TransferStatusendwhile(count10) pause(0.25);-6-endstopasync(s);fclose(all);delete(s);clear all;function rxd_mycallback(hObject, event) %接收中断程序global count;count=count+1;在实现控制的过程中,串口时常会堵塞,所以需要不时的清零一下串口,需要用到一下程序:function scom_clss=serial(COM1)% s.BaudRate=9600fopen(s);fprintf(s,test,async); state=s.Tr
20、ansferStatuswhile(state(1)=i)state=s.TransferStatusendstopasync(s);fclose(all);delete(s);clear all;-7-第三章 控制器的设计3.1 串口的基本操作实物仿真需要将计算机与船舶模型连接,它们之间的连接是通过串口通信完成的。因此需要在 Matlab 下进行串口编程。用户要与连接到串口上的设备通信时,基本步骤:(1)创建串口并设置串口属性一般情况下创建串口对象时应配置以下属性:通信参数配置:BaudRate, DataBits, Parity, StopBits 和 Terminator 。回调参数配置
21、:TimerFcn 和 TimerPeriod。(2)连接串口对象与外围设备用 fopen 函数打开串口,命令:fopen(scom);(3)串口读写数据用印 rintf 或 fwrite 函数写数据到设备中,用 fgets, fread 或 readasync 函数读取数据到串口。(4)断开串口连接和清除串口对象当不再使用串口时要使用 fclose 函数断开串口与设备的连接,命令:fclose(scorn);检查串口对象是否连接可查看其 status 属性。将串口对象从内存中清除用 delete 函数。最后可使用 clear 函数从 Matlab 工作空间将其清除。3.2 实物仿真图 4.19 中所示为仿真框图。在闭环实物仿真时,船舶模型是包含在下载到单片机的程序中的,通过串口与上微机的控制器连接,构成闭环的航向控制系统。图 4.19 实物仿真框图