中国地质大学(武汉) 学士学位论文
第三章 C程序调用NEC软件的实现
§3.1 方案的制定
由于毕设选题要求:1、将天线结构参数转换为NEC能识别的输入格式;2、调用NEC软件评估天线的性能;3、读取NEC输出文件。为了能够实现以上要求,经过对NEC天线仿真软件的认真分析,确定出接口实现程序的流程图,如图3-1所示:
开 始 主界面 Y 判断功能 各卡信息处理 N 该软件功能说明 自动运行NEC软件 N 是否返回 Y N 判断是否打开.out文件 Y 打开.out文件 结束
图3-1 接口实现程序流程图
16
中国地质大学(武汉) 学士学位论文
§3.2 难点攻克
一、各卡的信息是用怎样的形式保存?
开始时,将打孔孔数误解为字符数,就将每个CM卡信息量定位在了78个字符。后经过老师的指点,明白了打孔和字符数的区别。最后决定,利用结构体定义CM、CE卡,并保存其信息。这样做是既方便编程和管理其信息,又能更好的熟悉、使用结构体。 对应程序:
//CM卡(注释卡)结构体 struct CM {
char name[2]; char content[78]; };
//CE卡(注释卡)结构体 struct CE { };
二、当读取键盘输入是否继续的操作时,读取输入的字符时总是内存错误。 当使用scanf(\语句读取键盘输入时,会提示内存错误。经过多番查找资料[6,8],选择使用a=getchar();进行读取。这是因为scanf(\中a取的不是地址,scanf都是用地址来查找的,a前加&就能执行。
三、提取文件中天线的各点参数,不知道怎么编写。
因为给的文件里,天线的各点坐标都是:X1 Y1 Z1,X2 Y2 Z2,?格式的,这样的数据很有规律,但怎样提取、提取出来放哪里就成为我的一个难题了。后经过查找资料[6,7],在论坛上寻求帮助,最终确定为:利用空格、逗号提取各点坐标,然后存放在二维数组中,便于以后调用。详细代码: char vec[255][255] = {0}; int i = 0, j = 0; while (!feof(file)) {
char name[2]; char content[78];
char c = fgetc(file); if(c==' ' || c==','){
17
中国地质大学(武汉) 学士学位论文
}
i++; j=0;
}else{ vec[i][j++] = c; }
§3.3 设计结果
运行程序,首先进入主界面,如图3-2所示。
图3-2 程序主界面
选择所需功能,首先选择“2.查看帮助说明”,如图3-3所示。
图3-3 帮助说明
返回主界面后,可以选择“1.输入天线参数”,然后根据提示,输入CM卡信息。如图3-4所示。
18
中国地质大学(武汉) 学士学位论文
图3-4 输入CM卡信息
接着输入CE卡信息,如图3-5所示。
图3-5 输入CE卡信息
之后,程序会自动调用“data1.txt”文件,读取天线各点坐标,保存为“NEC_test1.nec”文件,存储到F:\\4nec2\\models下。并自动调用NEC天线仿真软件,读取“NEC_test1.nec”输入文件。如图3-6所示。
19