船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx

上传人:b****6 文档编号:8659444 上传时间:2023-05-12 格式:DOCX 页数:14 大小:73.16KB
下载 相关 举报
船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx_第1页
第1页 / 共14页
船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx_第2页
第2页 / 共14页
船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx_第3页
第3页 / 共14页
船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx_第4页
第4页 / 共14页
船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx_第5页
第5页 / 共14页
船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx_第6页
第6页 / 共14页
船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx_第7页
第7页 / 共14页
船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx_第8页
第8页 / 共14页
船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx_第9页
第9页 / 共14页
船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx_第10页
第10页 / 共14页
船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx_第11页
第11页 / 共14页
船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx_第12页
第12页 / 共14页
船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx_第13页
第13页 / 共14页
船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx

《船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx(14页珍藏版)》请在冰点文库上搜索。

船舶航向实验系统及航向控制器的设计与仿真课设报告Word文件下载.docx

对于熟悉Matlab而不想编写大量VC代码的科研人员来说,Matlab/GUI无疑是一个最佳选择。

它既能嵌入已有的仿真程序,又能把仿真的图形化结果以人机交互的动态方式展现给操作者,给人深刻的印象,同时仿真代码的不可见性为一些不熟悉Matlab的操作者提供了操作界面的可能。

在基于Matlab/GUI制作的软件中关键需要解决三大问题:

1、界面功能;

2、界面外观的优化;

3、不同GUI之间的调用。

因此,本课程设计给出一个利用Matlab/GUI制作的仿真控制器的实例。

此仿真控制平台是为了满足学生船舶控制实验的需要。

本课程设计在设计仿真控制平台中涉及到航向控制器的设计,航向控制器是仿真平台的基础,在航向控制器的基础之上实现仿真平台上的相关功能。

1.2图形用户界面概述

Matlab是一套高性能的数值计算和可视化软件,它作为新兴的逻辑语言和可视化工具,有着其他编程语言所不能比拟的优势,如Fortran语言是一种专门用于科学计算的语言,但其图形界面的功能比较弱,利用其开发的程序,用户界面不友好,使用起来不方便。

而VisualBasic,VisualC等可视化编辑语言开发出来的程序界面友好,但由于其不是专门用于科学计算的语言,因此其科学计算功能较弱。

由于Matlab强大的应用功能,用户越来越多。

Matlab的应用可让用户不再需要了解大量底层与开发无关的工作,极大地提高了开发效率。

Matlab为解决用户开发和客户交互的局限,提供了一个全新的GUI设计方案。

图形用户界面(GUI,GraphicalUserInterface)是提供人机交互的工具和方法。

GUI是使用图形对象(例如按钮、文本框、滚动条和菜单等)创建的用户界面,这些对象对计算机用户而言都有明确的含义,例如移动滚动条将会改变数值,按下OK按钮将完成并应用用户的设置,同时设置对话框消失。

当然用户必须保证这些不同对象间能够协调地工作。

Matlab用一个包含多种不同风格的图形窗口代表用户界面。

Matlab的GUI为开发者提供了一个不脱离Matlab的开发环境,更有益与Matlab程序的GUI集成。

在Matlab6.5中,图形用户界面是一种包含多种图形对象的界面,典型的图形界面包括图形显示区域、功能按钮空间以及用户自定义的功能菜单等。

为了让界面实现各种功能,需要对各个图形对象进行布局和编程。

这样,当用户激活对应的GUI对象时,就能执行相应的行为。

最后,必须保存自己创建的GUI,使得用户可以应用GUI对象。

在Matlab中,所有对象都可以使用M文件进行编写。

GUI也是一种Matlab对象,因此,可以使用M文件来创建GUI。

使用M文件创建GUI的方法也是最基础的,使用其他方法创建GUI图形界面时,实现图形控件的各种功能时,也需要编写相应的程序代码。

除了使用M文件来创建GUI对象之外,Matlab还为用户开发图形界面提供了一个方便高效的集成开发环境:

Matlab图形用户界面开发环境(Matlabgraphicaluserinterfacedevelopmentenvironment)简称GUIDE,其主要是一个界面设计工具集。

Matlab6.5将所有GUI所支持的用户控件都集成起来,同时提供界面外观、属性和行为响应方法的设置方法。

除了可以使用GUIDE创建GUI之外,还可以将设计好的GUI界面保存为一个FIG资源文件,自动生成对应的M文件。

该M文件包含了GUI初始化代码和组建界面布局的控制代码。

使用GUIDE创建GUI对象执行效率高,可以交互式地进行组件布局,还能生成保存和发布GUI的对应文件。

本课程设计选择用Matlab的图形用户界面设计是因为不需要编写大量的代码,它既能嵌入已有的仿真程序,又能与仿真环境相结合。

第二章GUI的创建

从MatlabS.X版本开始,为了方便用户制作图形界面Matlab提供了一个交互式的设计工具GUIDE。

但是从Matlab6.X以来,GUIDE的设计界面己经发生变化,本论文采用的是Matlab6.5的GUIDE。

GUIDE实际上是一套Matlab的工具集,它由版面设计工具、属性编辑器、菜单编辑器、调整工具、对象浏览器、TAB次序编辑器六部分组成。

2.1GUI设计概述

在GUI设计程序前,首先考虑设计对象的结构和开发流程。

不同的要求设计出来的GUI也不同。

一个优秀的界面基本符合易用性、统一性、规范性和合理性的标准。

为了高效率的开发一个GUI,必须按照一定的开发步骤,下面给出一般步骤图(如图2.1):

图2.1GUI设计步骤图

2.2GUI实现

GUI编程实现主要分为三大块:

组件的布局、属性的编辑和回调函数的编辑。

1、组件的布局

在GUIDE的界面设计区添加组件的方法很简单,只要用鼠标从组件面板里点击并拖拉组件即可实现。

添加菜单有专门的菜单编辑器来完成。

完成添加后可使用GUIDE的特征工具调整组件的位置和使用TAB次序编辑器调整TAB次序达到最优化配置,来完成布局。

2、属性编辑

通过属性编辑可以改变当前组件的属性值,在菜单编辑里可改变菜单的属性值。

当改变组件属性值时,可能会影响到界面的整体效果,因此在改完属性值滞后还要对组件的布局进行优化。

GUI实现的关键还在于回调函数的处理。

3、回调函数

在Matlab6.5里回调函数直接在M文件中编辑,这样的事件管理模式,便于用户的理解和编辑。

当一个图形对象发生特殊事件时,GUI传递要执行的子函数名到M文件中,该子函数称为回调函数(也称callback函数)。

用户对控件操作(如鼠标单击、双击或移动、键盘输入等)的时候,控件对该操作进行响应,指定执行的函数,就是该控件的回调函数。

该函数不会主动运行,只在用户对控件执行特定操作时执行。

2.3采用GUIDE创建GUI

采用GUIDE创建一个完整的GUI图形界面,步骤如下:

1,GUI对象布局

2、设置对象的相应属性

3、编写回调函数

2.3.1GUI组件介绍

1、触控按钮(PushButton)

在PushButton双击,调用属性查看器,可以设置PushButton的属性。

2、静态文本(StaticText)

StaticText通常用于显示其他对象的数值、状态等。

3、可编辑文本框(EditText)

EditText允许用户修改文本内容,用于数据的输入显示。

4、单选按钮(RadioButton)

RadioButton用于显示一组互斥的状态。

其对象之多只有一个的value值为l。

5、坐标轴(Axes)

Axes用于数据的可视化,即显示图形或者图像。

Axes是核心图形对象的容器,它包含下列GUI核心图形对象:

image,light,lint,patche,rectangle,surface和text对象。

2.3.2菜单编辑器

菜单编辑器生成可以为每个菜单选项生成空回调函数的子函数,包括菜单名,其主要用于建立菜单栏(MenuBar)和右键菜单(ContextMenus。

若窗口的MenuBar属性值为none,则只显示用户设计的菜单;

若MenuBar属性值为Figure则用户设计的菜单出现在标准菜单之后。

2.3.3创建GUI模型

图2.3为GUI模型图。

图2.3GUI模型图

界面有两个发送单元,分别为航令和航向发送,航令为控制船舶转速的大小,航向为设定的角度,输入相应的数值,点击发送,则船舶模型会相应的转动。

建立一个GUI模型之后,相应的会出现源程序代码,以下为其中的发送接收程序:

functionpushbutton1_Callback(hObject,eventdata,handles)

globalcount;

count=0;

s=serial('

COM1'

)%建立串口

s.BytesAvailableFcnMode='

terminator'

%'

byte'

s.BytesAvailableFcnCount=22

s.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.TransferStatu

while(state

(1)~='

i'

state=s.TransferStatus

end

while(count<

10)

pause(0.25);

end

stopasync(s);

fclose('

all'

delete(s);

clearall;

functionrxd_mycallback(hObject,event)%接收中断程序

count=count+1;

在实现控制的过程中,串口时常会堵塞,所以需要不时的清零一下串口,需要用到一下程序:

functionscom_cls

%s.BaudRate=9600

fopen(s);

fprintf(s,'

test'

'

第三章控制器的设计

3.1串口的基本操作

实物仿真需要将计算机与船舶模型连接,它们之间的连接是通过串口通信完成的。

因此需要在Matlab下进行串口编程。

用户要与连接到串口上的设备通信时,基本步骤:

(1)创建串口并设置串口属性

一般情况下创建串口对象时应配置以下属性:

通信参数配置:

BaudRate,DataBits,Parity,StopBits和Terminator。

回调参数配置:

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实物仿真框图

图4.19中Step为设定航向,其与实际航向的差值作为PID控制器的输入,通过控制器后得到输出,即舵令,将设定航向和舵令通过串口发送给船舶模型,船舶模型接收到便进行相应的运动,在运动时模型有实际的航向,通过串口不断的将实际航向发送到上微机,与设定航向运算,将运算结果作为PID控制器的输入。

3.3S-FUNCTION函数

s-function也就是system-function的缩写。

说得简单,s-function就是用MATLAB所提供的模型不能完全满足用户,而提供给用户自己编写程序来满足自己要求模型的接口,建立自己的simulink仿真模块。

simulink的仿真有两个阶段:

第一个为初始化,这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、采样时间等;

第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、计算连续状态等等,这个阶段需要反复运行,直至结束。

在matlab的workspace里打editsfuntmpl,就会出现matlab自己提供的s函数模板了。

本课程设计所封装的实验程序(S-Function)如下:

function[sys,x0,str,ts]=scom_1(t,x,u,flag)

switchflag,

case0,

[sys,x0,str,ts]=mdlInitializeSizes;

case1,

sys=mdlDerivatives(t,x,u);

case2,

sys=mdlUpdate(t,x,u);

case3,

sys=mdlOutputs(t,x,u);

case4,

sys=mdlGetTimeOfNextVarHit(t,x,u);

case9,

sys=mdlTerminate(t,x,u);

otherwise

error(['

Unhandledflag='

num2str(flag)]);

function[sys,x0,str,ts]=mdlInitializeSizes

globalst;

sizes=simsizes;

sizes.NumContStates=0;

sizes.NumDiscStates=0;

sizes.NumOutputs=2;

sizes.NumInputs=2;

sizes.DirFeedthrough=1;

sizes.NumSampleTimes=1;

%atleastonesampletimeisneeded

sys=simsizes(sizes);

x0=[];

str=[];

ts=[00];

st=serial('

st.BaudRate=9600;

st.DataBits=8;

st.Stopbits=1;

st.Parity='

none'

st.Terminator='

LF'

%'

CR'

'

st.InputBufferSize=1024;

st.OutputBufferSize=2048;

s.Timeout=1;

s.ReadAsyncMode='

continuous'

manual'

functionsys=mdlDerivatives(t,x,u)

sys=[];

functionsys=mdlUpdate(t,x,u)

functionsys=mdlOutputs(t,x,u)

globalst;

fopen(st);

if(u

(2)>

32)u

(2)=32;

if(u

(2)<

-32)u

(2)=-32;

u

(1)=u

(1)+0.001;

u

(2)=u

(2)+0.001;

if(u

(1)<

=-10)a='

$AGHSC,04,'

b=num2str(u

(1));

b=b(1:

5);

elseif(u

(1)<

0)a='

$AGHSC,04,-0'

u

(1)=-u

(1);

3);

elseif(u

(1)==0)a='

b='

00.0'

=10)a='

$AGHSC,04,+0'

elsea='

$AGHSC,04,+'

4);

=-10)e='

S,'

d=num2str(u

(2));

d=d(1:

elseif(u

(2)<

0)e='

S,-0'

u

(2)=-u

(2);

elseif(u

(2)==0)e='

d='

=10)e='

S,+0'

elsee='

S,+'

c='

*HH'

AGHSC=strcat(e,strcat(d,c));

AGHSC=strcat(a,strcat(b,AGHSC));

AGHSC(27)=13;

AGHSC(28)=0;

AGHSC

fprintf(st,AGHSC,'

state=st.TransferStatus;

[out,ak]=fscanf(st,'

uint8'

if(ak==36)

sys

(1)=str2double(out(11:

15));

sys

(2)=str2double(out(27:

31));

else

[out,ak]=fscanf(st,'

stopasync(st);

fclose(st);

functionsys=mdlGetTimeOfNextVarHit(t,x,u)

sampleTime=1;

%Example,setthenexthittobeonesecondlater.

sys=t+sampleTime;

functionsys=mdlTerminate(t,x,u)

delete(st);

clearst;

结果

本课程设计所设计的船舶航行控制器填补了学生缺少船舶控制实验课所需要的具有针对性的教学工具的空缺,此船舶航向控制器操作方便、可开发性强、满足船舶控制课时的需要。

船舶航向控制器能满足以下功能:

1、基于Matlab-Simulink环境的船舶航向保持控制仿真;

在Matlab-Simulink环境下建立仿真图,分析仿真结果。

改变船舶参数进行相同的仿真实验,观察不同船舶间的仿真结果有何不同,并分析原因。

2、基于Matlab-Simulink环境的实物船舶的航向保持控制。

通过实验验证,以上功能均已实现。

本文中基于Matlab/GUI的串口通信功能的编程实现表明利用MatlabGUI可以进行包含一般界面元素的界面开发,在此基础上,加入串口通信功能,实现数据的实时采集与分析处理,并进行图形化显示。

文中设计基于PID自整定的船舶航向控制器,为船舶航向控制提供了一种有效方法。

仿真研究的结果表明,自整定PID控制可以有效的调整PID参数,且控制系统的响应速度快,具有良好的稳定性。

参考文献

[1]MATLAB接口技术程序设计实例教程.赵书兰主编.化学工业出版社.2009

[2]MATLAB仿真技术与实例应用教程.张淼张正亮编著.机械工业出版社.2004

[3]基于Matlab/GUI的新型界面开发方式.邱金蕙主编.河北工业科技.2008

[4]MATLABN个实用技巧.刘焕进王辉李鹏编著.北京航空航天大学出版社.2011

致谢

在这次课程设计过程中,我及小组同学得到了许多人的帮助。

首先,我要感谢我的老师颜德文老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。

在此期间,我不仅学到

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2