五、设计体会
这次电分课设的主题是电力系统短路故障的计算机算法程序设计,我选择了对称短路计算来研究。经过不懈努力与完善,最终形成的可执行文件可以对各种简单电力网络的对称短路故障进行分析计算,取得了较为满意的效果。
我编写了9个回流函数,分别执行不同的功能:
1.读取函数select_file:读取.csv文件,读取成功有提示。确定参数矩阵后,在右上侧显示各种已知参数。各种读取结果申公共。
2.计算函数calculate_start:精确算法,计算完毕将结果显示在右下侧。各种计算结果申公共。
3.导入函数input1:可任意修改短路点序号、小z矩阵,手动导入过程人性化。
4.导入函数input2:可任意修改发电厂阻抗矩阵。 5.导入函数input3:可以任意修改发电厂电压矩阵。 6.导入函数input3:可以任意修改漏抗导纳矩阵。
通过以上四个导入函数,还能实现不导入文件,完全手动输入所有参数。 7.存储函数save_result_txt:详细地以文本形式,记录网络参数与短路计算结果,汉字说明与数字结果夹杂混排。
电力系统分析课程设计是一项很有挑战性的工作。在选择这个课程设计之前,我就听学长说电力系统分析课程设计的难度,但是为了锻炼自己的能力,我还是迎难而上,选择了电力系统分析的课程设计。在期末考试结束后,我就开始着手准备课程设计。经过了再三比较候,我选择了MATLAB作为编程的语言,以前虽然接触过MATLAB,但接触的不深,只是用MATLAB画一些简单的图形之类的,这次用MATLAB语言开发软件,确实有相当大的难度。从最开始从图书馆借书,上网上查找MATLAB GUI的相关资料,一步步的深入,也开始意识到课程设计的难度所在。一开始完全无从下手,纠结了好几天完全不知所云,后来在网上找到了MATLAB中文论坛和罗华飞老师编写的MATLAB GUI设计学习手记,才开始对MATLAB GUI有一些最初的了解,也许是灵光一闪,就突然对MATLAB GUI设计有了一些感觉,从CSV文档的输入,到手动输入,从将文件读取的计算,在到保存文件为TXT格式,每一步都走得异常苦难,尤其是后期的调试,将各个部分组成一个系统的程序,兼顾各个部分的兼容性,可是说是经历过一次次失败之后才走向成功的。过程是艰辛的,结果是令人满意的,
21
大约花了两个星期的时间,我终于将软件成功的设计了出来,在调试成功的那一刻,我分外高兴,认为自己做了一件特别有意义的事情,回首这段时间,要感谢老师的悉心指导,一同做课程设计同学的悉心帮助,没有你们,我的课程设计就不可能完成,在此,像老师和同学们表示感谢。
六、参考文献
(1)、电力系统分析(上册) 何仰赞 温增银 ,华中科技大学出版社,2002
(3)、MATLAB程序设计与应用 张智星 ,清华大学出版社, 2002
(4)、 MATLAB 电力系统设计与分析 吴天明 ,国防工业出版社, 2004
(2)、MATLAB GUI设计学习手记 罗华飞 ,北京航空航天大学, 2011
22
七、附录(主程序及其注释)
1.读取函数select_file:读取.csv文件,读取成功有提示。确定参数矩阵后,在右上侧显示各种已知参数。各种读取结果申公共。
2.导入函数input1:可任意修改短路点序号、小z矩阵,手动导入过程人性化。
3.导入函数input2:可任意修改发电厂阻抗矩阵。 4.导入函数input3:可以任意修改发电厂电压矩阵。 5.导入函数input3:可以任意修改漏抗导纳矩阵。
通过以上四个导入函数,还能实现不导入文件,完全手动输入所有参数。 6.计算函数calculate_start:精确算法,计算完毕将结果显示在右下侧。各种计算结果申公共。
7.存储函数save_result_txt:详细地以文本形式,记录网络参数与短路计算结果,汉字说明与数字结果夹杂混排。
1、文件导入模块:
[filename,pathname]=uigetfile({'*.csv','csv-files(*.csv)'},'选择文件');
if filename==0
msgbox('您未成功选择 .csv文件!','对话框','warn'); return
else msgbox('成功载入!请继续操作!','对话框','help'); end
filename=[pathname,filename]; %带有路径的文件名 A=csvread(filename); %从文件中读入各种网络参数 if A(9,1)~=0 imagz=zeros(10,10);
for w=2:10 %以下步骤为确定节点间阻抗矩阵在A中的最大行数 if A(w,1)==0 %如果某元素为0,则减一得到最终值
23
w=w-1; break; end end
imagz=A(1:w,:);
set(handles.imagz,'Data',imagz); handles.imagz=imagz; g_z=zeros(10,10); g_z=A(7:8,1:2);
set(handles.g_z,'Data',g_z); handles.g_z=g_z; g_v=zeros(10,10); g_v=A(7:8,3:3);
set(handles.g_v,'Data',g_v); handles.g_v=g_v; loukang=handles.loukang; louy=handles.louy; loukang=zeros(10,10); if A(11,1)~=0
loukang=A(9:11,1:2); else
loukang=A(9:10,1:2); end
set(handles.louy,'Data',loukang); handles.louy=louy; handles.loukang=loukang; else
imagz=zeros(10,10);
for w=2:10 %以下步骤为确定节点间阻抗矩阵在A中的最大行数 if A(w,1)==0 %如果某元素为0,则减一得到最终值 w=w-1; break;
24
end end
imagz=A(1:w,:);
set(handles.imagz,'Data',imagz); handles.imagz=imagz; g_z=zeros(10,10); g_z=A(7:8,1:2);
set(handles.g_z,'Data',g_z); handles.g_z=g_z; g_v=zeros(10,10); g_v=A(7:8,3:3);
set(handles.g_v,'Data',g_v); handles.g_v=g_v; loukang=handles.loukang; louy=handles.louy; loukang=zeros(1,1);
set(handles.louy,'Data',loukang); handles.louy=louy; handles.loukang=loukang; end
guidata(hObject,handles);
2、手动录入模块: 又细分为四个模块: (1)、节点间阻抗录入: imagz=handles.imagz; A=ones(10,10);
A=str2num(get(handles.edit2,'String')); set(handles.imagz,'Data',A); z=zeros(10,10);
handles.imagz=imagz; %更新参数矩阵
25