船舶电站课程设计.docx
《船舶电站课程设计.docx》由会员分享,可在线阅读,更多相关《船舶电站课程设计.docx(35页珍藏版)》请在冰点文库上搜索。
![船舶电站课程设计.docx](https://file1.bingdoc.com/fileroot1/2023-7/13/d8d260f8-6025-435f-960f-cc54b5ea1202/d8d260f8-6025-435f-960f-cc54b5ea12021.gif)
船舶电站课程设计
船舶电站
电力负荷分析及计算
一)船舶电站概念
二)船舶电站容量的确定—三类负荷法
三)MATLABGUI简介
四)软件设计电力负荷分析系统软件设计
一.船舶电站概念
船舶电站是船上重要的辅助动力装置,供给辅助机械及全船所需电力。
它是船舶电力系统的重要组成部分,是产生连续供应全船电能的设备。
船舶电站是由原动机、发电机和附属设备(组合成发电机组)及配电板组成的。
发电机组是把化学能转化为电能的装置,是船舶电站最重要的装置。
发电机组发出的电力是通过配电板来进行控制及分配。
带动发电机运转的原动机一般为柴油机、汽轮机或燃气轮机,相应的发电机组称为柴油发电机组、汽轮发电机组或燃气轮机发电机组。
蒸汽机船上的发电机组由蒸汽机驱动(有时用小型汽轮机驱动),但容量较小,以供照明电源为主。
在汽轮机船上,发电机组由汽轮机驱动,为全船电气设备提供电源。
这种汽轮发电机组大部已系列化,容量从500千瓦到2500千瓦不等,可以自由选择。
在柴油机船上,有2~3台发电机组,由单独设置的中速或高速柴油机驱动。
容量据全船电动机械设备的数量确定,普遍采用400伏三相交流电,频率有50赫兹和60赫兹两种。
为使船舶在各种不同工况下,如航行、作业、停泊、应急等情况下,都能连续、可靠、经济、合理地进行供电,船舶上常配置多种电站,主要有以下几种:
(1)主电站,正常情况下向全船供电的电站。
(2)停泊电站,在停泊状态又无岸电供应时,向停泊船舶的用电负载供电的电站。
(3)应急电站,在紧急情况下,向保证船舶安全所必需的负载供电的电站。
(4)特殊电站,如向全船无线电通讯设备(如收发报机等),各种助航设备(雷达、测向仪、测深仪等),船内通讯设备(如电话、广播等)以及信号报警系统供电的电源。
这类用电设备的特点是耗电堡不大,但对供电电源的电压、频率、稳压和稳频的性能有特殊的要求。
因此,船上有时需要设置专门的发电机组或逆变装置向全船弱电设备或专用设备供电。
二.船舶电站容量的确定—三类负荷法
1.负荷计算分类
采用三类负荷法计算全船电力负荷时,需将设备负荷在某一运行工况下按使用时间的长短分成如下三类:
第Ⅰ类负荷——连续使用类负荷
第Ⅱ类负荷——短时或重复短时使用类负荷
第Ⅲ类负荷——偶然短时使用
2.计算系数
a电动机利用系数K1
电动机的利用系数K1定义为:
机械的轴上最大功率PM与电动机的额定轴功率PN之比,即
式中PM——机械轴上最大功率;PN——电动机的额定功率。
b机械负荷系数K2
机械负荷系数K2定义为:
每一机械实际使用轴功率P2与机械最大轴功率PM之比,即:
式中P2——某状态下机械轴上实际需要率;PM——机械的最大轴功率。
c电动机负荷系数K3
在通常负荷条件下,实际机械负荷所需要电动机输出的功率,可用电动机负荷系数来描述,即用K1与K2的乘积反映电动机的负荷情况。
电动机负荷系数定义为:
从上式可以看出,电动机负荷系数K3反映的是实际机械负荷与电动机额定功率之比。
同时使用系数K0
d在某一运行状态时,同类机械不一定都同时使用,因此我们用一组同功率的用电设备的同时使用系数K0来计及它的影响。
同时使用系数为
式中n——该组同时工作的用电设备数目;m——该组用电设备的总数。
e总同时系数K0Ⅰ和K0Ⅱ
一般情况下,第I、Ⅱ类负荷总同时使用系数的取值范围为
K0Ⅰ=0.8~0.1
K0Ⅱ=0.3~1.0
具体选定时可参考下述原则:
i)在大的船舶上,由于负荷的数量较多,同时工作的可能性要小些,因此同时工作系数比负荷少的船舶可取小些。
ii)船舶的活动愈紧张,同时工作系数就取得愈大,因为设备的同时工作可能性愈大。
例如:
舰艇在战斗状态时K0Ⅰ取0.8,而在停泊时,可取0.65。
3所需功率的计算
a额定所需有功功率
在确定一台电动机需要电网供给的所需有功功率时,需要考虑到电动机的效率。
在额定工作状态下,一台电动机需要电网供给的额定功率为
式中η——电动机额定效率
一组同类电动机额定所需总功率应为
式中m——该组同类电动机数目。
对于照明及弱电设备来说,P5就是其装置功率。
b实际所需有功功率
由于在某一运行状态时,机械并不一定满负荷,一组同类辅机不一定都同时使用,考虑它们的影响,一组同类电动机实际所需有功功率为
c实际所需无功功率
对于交流用电设备,需要考虑到功率因素cosφ尚需计算所需无功功率
式中φ——用电设备的实际功率因数角,由实际负荷的cosφ求得。
cosφ可根据电动机的额定功率PN、额定转速nN和负荷程度由表2-6中查得。
d运行工况下需要发电机供给的总功率
应考虑到各组用电设备之间的第I类负荷总同时使用系数K0Ⅰ和第Ⅱ类负荷总同时系数K0Ⅱ。
尚需计入5%的电网损耗。
总有功功率
总无功功率
式中PⅠ、PⅡ——该状态下第Ⅰ类、第Ⅱ类负荷的总有功功率;QⅠ、QⅡ——该状态下第Ⅰ类、第Ⅱ类负荷的总无功功率。
在某运行状态下负荷的平均功率因数cosφ
在某运行状态下可能短时需要的最大负荷为
式中PⅢ——该状态第Ⅲ类负荷的总有功功率。
总功率是该状态下选择发电机功率和台数的依据。
根据最大负荷的总有功功率,再考虑10%~20%的储备容量,即可确定船舶电站的容量。
一般说来,船舶在航行等主要运行工况下,总的功率因数不低于0.7,对电站发电机功率的选择影响不大,为简化起见,有时可不计算无功功率。
e负荷表的编制
用三类负荷法计算全船电力负荷时,可按下列程序进行:
i)向轮机和舾装等专业收集全船用电设备的原始数据。
ii)将全船负荷按使用情况分为三类(连续、短时、偶然短时)。
iii)根据船舶类型及用途选定计算工况,将全船用电设备按用途或系统分类并填入表中。
iv)确定系数K1、K2、K3和K0。
v)计算各电动机和用电设备的额定所需功率P4、设备组的额定所需功率P5、每一运行工况下实际所需有功功率P和无功功率Q。
vi)计算每一运行状态下各类负荷所需的总功率PI、PII、PIII、QI、QII和QIII。
vii)考虑总同时使用系数K0I和K0II,并计及电网损耗5%,计算各运行状态下负荷所需总功率PΣ。
viii)根据上述计算结果选择发电机组的单机功率和数量,并核算各工况下发电机负荷百分率。
一般发电机应有10%~20%的储备功率。
最后还要用可能出现的短时需要最大负荷Pmax校验发电机的过载能力是否满足。
3.MATLABGUI简介
图形用于界面(GraphicalUserInterfaces,GUI)是提供人机交互的工具和方法。
GUI是包含图形对象(如窗口、图标、菜单和文本)的用户界面。
以某种方式选择或激活这些对象时,通常会引起动作或者发生变化。
一个设计优秀的GUI能够非常直观的让用户知道如何操作MATLAB界面,并且了解设计者的开发意图。
MATLAB的GUI为开发者提供了一个不脱离MATLAB的开发环境,有助于MATLAB程序的GUI集成。
这样可以使开发者不必理会一大堆烦杂的代码,简化程序,但是同样可以实现向决策者提供图文并茂的界面,甚至达到多媒体的效果。
可以说MATLAB提供了一个简便的开发环境,可以让开发者快速上手,提高了开发者的工作效率。
所谓的GUIDE就是图形用户界面开发环境(GraphicalUserInterfaceDevelopmentEnvironment),它向用户提供了一系列的创建用户图形界面的工具。
这些工具大大简化了GUI设计和生成的过程。
GUIDE可以完成的任务有如下两点:
1)输出GUI。
2)GUI编程。
GUIDE实际上是一套MATLAB工具集,它主要由七部分组成:
版面设计器、属性编辑器、菜单编辑器、调整工具、对象浏览器、Tab顺序编辑器、M文件编辑器。
图形用户界面(graphicaluserinterface,GUI)是由窗口、光标、按键、菜单、文字说明等对象(Ob—ject)构成的一个用户界面。
用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。
假如科技工作者仅仅执行数据分析、解方程等工作,一般不会考虑GUI的制作。
但是如果想向客户提供应用程序,想进行某种技术、方法的演示,想制作一个供反复使用且操作简单的专用工具,那么图形用户界面是最好的选择之一。
Matlab为表现其基本功能而设计的演示程序demo是使用图形界面的最好范例。
Matlab的用户在指令窗口中运行demo打开图形界面后,只要用鼠标进行选择和点击,就可浏览丰富多彩的内容。
开发实际的应用程序时应该尽量保持程序的界面友好,因为程序界面是应用程序和用户进行交互的环境。
在当前情况下,使用图形用户界面是最常用的方法。
提供图形用户界面可使用户更方便地使用应用程序,不需要了解应用程序怎样执行各种命令,只需要了解图形界面组件的使用方法;同时,不需要了解各种命令是如何执行的,只要通过用户界面进行交互操作就可以正确执行程序。
在Matlab7.o中,图形用户界面是一种包含多种图形对象的界面,典型的图形界面包括图形显示区域、功能按钮空间以及用户自定义的功能菜单等。
为了让界面实现各种功能,需要对各个图形对象进行布局和时间编程。
这样,当用户激活对应的GUI对象时,就能执行相应的时间行为。
最后,必须保存和发布自己创建的GU,使得用户可以应用GUI对象。
在Matlab中,所有对象都可以使用M文件进行编写。
GUI也是一种Matlab对象,因此,可以使用M文件来创建GUI。
使用M文件创建GuI的方法也是最基础的,使用其他方法创建GUI图形界面时,实现图形控件的各种功能时,也需要编写相应的程序代码。
除了使用M文件来创建GUI对象之外,Matlab还为用户开发图形界面提供了一个方便高效的集成开发环境:
Matlab图形用户界面开发环境(matlabgraphicaluserinterfacedeVelopmentenVi—ronment)简称GUIDE,其主要是一个界面设计工具集。
Matlab7.O将所有GUI所支持的用户控件都集成起来,同时提供界面外观、属性和行为响应方法的设置方法。
除了可以使用GUIDE创建GUI之外,还可以将设计好的GUI界面保存为一个FIG资源文件,自动生成对应的M文件。
该M文件包含了GUI初始化代码和组建界面布局的控制代码。
使用GUIDE创建GUI对象执行效率高,可以交互式地进行组件布局,还能生成保存和发布GUI的对应文件。
FIG文件:
该文件包含GUI图形窗口及其子对象的完全描述,包含所有相关对象的属性信息,可以调用hgsave命令或者使用M文件编辑器的File>Save命令生成该文件。
FIG文件是一个二进制文件,包含系列化的图形窗口对象。
所有对象的属性都是用户创建图形窗口时保存的属性。
该文件最主要的功能是对象句柄的保存。
M文件:
该文件包含GUI设计、控制函数及控件的回调函数,主要用来控制GUI展开时的各种特征。
该文件基本上可以分为GUI初始化和回调函数2个部分,控件的回调函数根据用户与GUI的具体交互行为分别调用。
应用程序M文件使用open—fig命令来显示GUI对象,但是该文件不包含用户界面设计的代码,对应代码由FIG文件保存。
四.软件设计
电力负荷分析系统软件设计
本软件实现的功能是根据三类负荷法计算船舶在不同的航行状态下所需的功率,从确定发电机的功率和使用几台发电机。
软件的界面如下图所示
本系统把界面分成了两部分:
数据输入界面和查询界面。
由于受到软件的限制,MATLAB不能直接不Excel的行进行删除和添加操作,所以把数据输入现行存放在txt文件中,等把所有的数据都输入完后,点击退出按钮,可把txt文件生成Excel文件,便于后续的处理操作。
另外还加入了一些提醒,如在添加设备按钮时,如果四种状态下所需的有用功率没有一个确定下来,此时在点击“添加设备”按钮时,会提醒“输入数据不完整”的提示;在点击新建界面时,会弹出是否保存已有数据的提示;在查看界面中,会有已是第一条数据和已是最后一条数据的提示。
存放在Excel文件,内容如下:
附录1matlab文件操作及读txt文件
文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。
MATLAB提供了一系列低层输入输出函数,专门用于文件操作。
文件的打开与关闭
1)打开文件
在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。
fopen函数的调用格式为:
fid=fopen(文件名,‘打开方式’)
说明:
其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。
文件名用字符串形式,表示待打开的数据文件。
常见的打开方式如下:
'r':
只读方式打开文件(默认的方式),该文件必须已存在。
'r+':
读写方式打开文件,打开后先读后写。
该文件必须已存在。
'w':
打开后写入数据。
该文件已存在则更新;不存在则创建。
'w+':
读写方式打开文件。
先读后写。
该文件已存在则更新;不存在则创建。
'a':
在打开的文件末端添加数据。
文件不存在则创建。
'a+':
打开文件后,先读入数据再添加数据。
文件不存在则创建。
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。
2)关闭文件
文件在进行完读、写等操作后,应及时关闭,以免数据丢失。
关闭文件用fclose函数,调用格式为:
sta=fclose(fid)
说明:
该函数关闭fid所表示的文件。
sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。
如果要关闭所有已打开的文件用fclose(‘all’)。
文本文件的读写操作
1)读文本文件
fscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。
其调用格式为:
[A,COUNT]=fscanf(fid,format,size)
说明:
其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:
d(整型)、f(浮点型)、s(字符串型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。
size为可选项,决定矩阵A中数据的排列形式,它可以取下列值:
N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。
2)写文本文件
fprintf函数可以将数据按指定格式写入到文本文件中。
其调用格式为
fprintf(fid,format,A)
说明:
fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵。
在本软件中,在“添加设备”按钮的回调函数中使用的对文本文件的操作。
其写txt文件的代码如下:
%获取用于判断数据输入是否完整的相关数据
h_gon=get(handles.h_gong,'string');
j_gon=get(handles.j_gong,'string');
z_gon=get(handles.z_gong,'string');
t_gon=get(handles.t_gong,'string');
ifstrcmp(h_gon,'')&&strcmp(j_gon,'')&&strcmp(z_gon,'')&&strcmp(t_gon,'')
errordlg('输入数据不完整');%判断数据输入是否完整
else
%获取序列号并更新
n=get(handles.leixing,'value');
count=get(handles.xuhao,'userdata');
%判断对那个文本进行操作
switchn
case1
count
(1)=count
(1)+1;
set(handles.xuhao,'string',num2str(count
(1)));
fid=fopen('1.txt','a+');%打开txt文件
case2
count
(2)=count
(2)+1;
set(handles.xuhao,'string',num2str(count
(2)));
fid=fopen('2.txt','a+');
case3
count(3)=count(3)+1;
set(handles.xuhao,'string',num2str(count(3)));
fid=fopen('3.txt','a+');
case4
count(4)=count(4)+1;
set(handles.xuhao,'string',num2str(count(4)));
fid=fopen('4.txt','a+');
end
set(handles.xuhao,'userdata',count);%保存序号数据
%获取相关数据
fprintf(fid,'%s?
',get(handles.xuhao,'string')-1);
fprintf(fid,'%s?
',get(handles.shebei,'string'));
set(handles.shebei,'string','');
fprintf(fid,'%s?
',get(handles.shuliang,'string'));
set(handles.shuliang,'string','');
fprintf(fid,'%s?
',get(handles.edit5,'string'));
set(handles.edit5,'string','');
fprintf(fid,'%s?
',get(handles.d_gong,'string'));
set(handles.d_gong,'string','');
fprintf(fid,'%s?
',get(handles.d_xiao,'string'));
set(handles.d_xiao,'string','');
fprintf(fid,'%s?
',get(handles.d_xu,'string'));
set(handles.d_xu,'string','');
fprintf(fid,'%s?
',get(handles.dz_gong,'string'));
set(handles.dz_gong,'string','');
fprintf(fid,'£¿');
fprintf(fid,'%s?
',get(handles.h_k2,'string'));
set(handles.h_k2,'string','');
fprintf(fid,'%s?
',get(handles.h_k3,'string'));
set(handles.h_k3,'string','');
fprintf(fid,'%s?
',get(handles.h_k0,'string'));
set(handles.h_k0,'string','');
fprintf(fid,'%s?
',get(handles.h_gong,'string'));
get(handles.h_gong,'string')
ifget(handles.h_gong,'string')==''
fprintf(fid,'?
');
else
fprintf(fid,'%s?
',get(handles.h_p,'value')+'0');
end
set(handles.h_gong,'string','');
fprintf(fid,'%s?
',get(handles.j_k2,'string'));
set(handles.j_k2,'string','');
fprintf(fid,'%s?
',get(handles.j_k3,'string'));
set(handles.j_k3,'string','');
fprintf(fid,'%s?
',get(handles.j_k0,'string'));
set(handles.j_k0,'string','');
fprintf(fid,'%s?
',get(handles.j_gong,'string'));
get(handles.j_gong,'string')
ifget(handles.j_gong,'string')==''
fprintf(fid,'?
');
else
fprintf(fid,'%s?
',get(handles.j_p,'value')+'0');
end
set(handles.j_gong,'string','');
fprintf(fid,'%s?
',get(handles.z_k2,'string'));
set(handles.z_k2,'string','');
fprintf(fid,'%s?
',get(handles.z_k3,'string'));
set(handles.z_k3,'string','');
fprintf(fid,'%s?
',get(handles.z_k0,'string'));
set(handles.z_k0,'string','');
fprintf(fid,'%s?
',get(handles.z_gong,'string'));
get(handles.z_gong,'string')
ifget(handles.z_gong,'string')==''
fprintf(fid,'?
');
else
fprintf(fid,'%s?
',get(handles.z_p,'value')+'0');
end
set(handles.z_gong,'string','');
fprintf(fid,'%s?
',get(handles.t_k2,'string'));
set(handles.t_k2,'string','');
fprintf(fid,'%s?
',get(handles.t_k3,'string'));
set(handles.t_k3,'string','');
fprintf(fid,'%s?
',get(handles.t_k0,'string'));
set(handles.t_k0,'string','');
fprintf(fid,'%s?
',get(handles.t_gong,'string'));
get(handles.t_gong,'string')
ifget(handles.t_gong,'string')==''
fprintf(fid,'?
');
else
fprintf(fid,'%s?
',get(handles.t_p,'value')+'0');
end
set(handles.t_gong,'string','');
fprintf(fid,'\r\n');
fclose(fid);