From 2ca57dcb646aabd990e9b002f85f630f27cf701d Mon Sep 17 00:00:00 2001 From: KenanZhu111 <3471685733@qq.com> Date: Sat, 21 Sep 2024 16:07:58 +0800 Subject: [PATCH] Major update: Improve the function and operation logic of software input and output --- cal_mod.h | 2 + main.c | 146 +++++++++++++++++++++++++++++++++++++++++------------- main.exe | Bin 96345 -> 99939 bytes rahcal.h | 1 - 4 files changed, 114 insertions(+), 35 deletions(-) diff --git a/cal_mod.h b/cal_mod.h index 95ba0f2..1d13f2e 100644 --- a/cal_mod.h +++ b/cal_mod.h @@ -243,6 +243,8 @@ result_file = fopen(".\\Observation_Station_Site-Solving_by_Matlab\\LLA_result_for_Matlab.txt", "a+"); fprintf(result_file, "\nEND"); fclose(result_file); + + return 1; } #endif \ No newline at end of file diff --git a/main.c b/main.c index 76d6404..1647877 100644 --- a/main.c +++ b/main.c @@ -27,41 +27,119 @@ int main(void) pobs_epoch obs_e = NULL; pobs_body obs_b = NULL;//创建结构体指针,并将其初始化为空 - //O文件读取 - fp_obs = fopen("alic0600.22o", "r");//以只读的方式打开O文件 - int o_epochnum = get_epochnum(fp_obs);//O文件历元数 - rewind(fp_obs); - obs_h = (pobs_head)malloc(sizeof(obs_head));//给O文件头开辟空间 - obs_e = (pobs_epoch)malloc(sizeof(obs_epoch) * o_epochnum); - obs_b = (pobs_body)malloc(sizeof(obs_body) * o_epochnum); - if (obs_h && obs_e && obs_b) + int over = 0; + +/* -------------------------------------------------------------------------- */ +while(over == 0) + { + int langop; + char obs_flie[20]; + char nav_file[20]; + + printf("**************SPP-pseudorange-positioning**************\n"); + printf("**@Author: KenanZhu\n**@Date: 2024/09/21\n**@Make by: C\n"); + printf("**@INTRO: The main functions of the software include:\n"); + printf("**read RINEX3.04 files, and output three formats of document files,\n"); + printf("**please cooperate with the corresponding tools for processing.\n"); + printf("**Specific please see:\n https://github.com/KenanZhu111/SPP_-pseudorange-positioning\n"); + printf("*******************************************************\n\n"); + + printf("请选择您的语言:/Please choose your language\n(1)ENG/(0)中文\n"); + scanf("%d",&langop); + if (langop == 0) + { printf("本程序只支持 ver3.04 RINEX文件的读取\n"); + printf("请输入观测数据文件的文件名(包含拓展名):\n"); + scanf("%s", &obs_flie);} + if (langop == 1) + { printf("This program only supports reading ver3.04 RINEX files\n"); + printf("Please enter the file name (including the extension) of the observation data file.:\n"); + scanf("%s", &obs_flie);} +/* -------------------------------------------------------------------------- */ +//O文件读取 + fp_obs = fopen(obs_flie, "r"); + if (langop == 0 && fp_obs == NULL) + {printf("观测文件%s读取失败,请检查文件名或者确认文件是否被移动\n", obs_flie);break;} + else if (langop == 0 && fp_obs != NULL) + {printf("观测文件%s读取成功,正在处理数据\n", obs_flie);} + + if (langop == 1 && fp_obs == NULL) + {printf("Observation file %s failed to be read. Please check the file name or confirm whether the file has been moved\n", obs_flie);break;} + else if (langop == 1 && fp_obs != NULL) + {printf("The observation file %s has been read successfully and data is being processed\n", obs_flie);} + + int o_epochnum = get_epochnum(fp_obs);//O文件历元数 + rewind(fp_obs); + obs_h = (pobs_head)malloc(sizeof(obs_head));//给O文件头开辟空间 + obs_e = (pobs_epoch)malloc(sizeof(obs_epoch) * o_epochnum); + obs_b = (pobs_body)malloc(sizeof(obs_body) * o_epochnum); + if (obs_h && obs_e && obs_b) + { + read_o_h(fp_obs, obs_h);//读取O文件头 + read_o_b(fp_obs, obs_e, obs_b, obs_h->obstypenum_gps, obs_h->obstypenum_bds);//读取O数据块 + } + fclose(fp_obs);//关闭O文件 + + if (langop == 0) + { printf("观测文件读取完成!\n"); + printf("请输入导航文件的文件名(包含拓展名):\n"); + scanf("%s", &nav_file);} + if (langop == 1) + { printf("This program only supports reading ver3.04 RINEX files\n"); + printf("Please enter the file name (including the extension) of the Navigation data file.:\n"); + scanf("%s", &nav_file);} +/* -------------------------------------------------------------------------- */ +//N文件读取 + fp_nav = fopen(nav_file, "r"); + fp_obs = fopen(obs_flie, "r"); + if (langop == 0 && fp_nav == NULL) + {printf("导航文件%s读取失败,请检查文件名或者确认文件是否被移动\n", nav_file);break;} + else if (langop == 0 && fp_nav != NULL) + {printf("观测文件%s读取成功,正在处理数据\n", nav_file);} + + if (langop == 1 && fp_nav == NULL) + {printf("Navigation file %s failed to be read. Please check the file name or confirm whether the file has been moved\n", nav_file);break;} + else if (langop == 1 && fp_nav != NULL) + {printf("The Navigation file %s has been read successfully and data is being processed\n", nav_file);} + + int gps_satnum = getgpssatnum(fp_nav);//获取导航文件GPS卫星数据块数 + rewind(fp_nav);//将文件指针返回值起始位置 + nav_h = (pnav_head)malloc(sizeof(nav_head));//给N文件头开辟空间 + nav_b = (pnav_body)malloc(sizeof(nav_body) * gps_satnum * 20); + if (nav_h && nav_b) + { + read_n_h(fp_nav, nav_h);//读取N头文件 + read_n_b(fp_nav, nav_b);//读取N数据块 + } + fclose(fp_nav);//关闭N文件 + + if (langop == 0) + {printf("导航文件读取完成!\n");printf("正在计算数据>\n");} + if (langop == 1) + {printf("Navigation file read complete!\n");printf("Calculating data>\n");} + +/* -------------------------------------------------------------------------- */ + if (fp_obs != NULL && fp_nav != NULL) { - read_o_h(fp_obs, obs_h);//读取O文件头 - read_o_b(fp_obs, obs_e, obs_b, obs_h->obstypenum_gps, obs_h->obstypenum_bds);//读取O数据块 + blh = (pblh)malloc(sizeof(pblh) * o_epochnum *256); + enu = (penu)malloc(sizeof(penu) * o_epochnum *256); + rah = (prah)malloc(sizeof(prah) * o_epochnum *256); + pos_t = (ppos_t)malloc(sizeof(ppos_t) * o_epochnum * 256); + station = (pstation)malloc(sizeof(pstation) * o_epochnum * 256); + + over = sat_gps_pos_clac(result_file, nav_b, obs_e, obs_b, obs_h, station, pos_t, blh, enu, rah, o_epochnum, gps_satnum); + } - fclose(fp_obs);//关闭O文件 - - //N文件读取 - fp_nav = fopen("brdm0600.22p", "r");//以只读的方式打开N文件 - int gps_satnum = getgpssatnum(fp_nav);//获取导航文件GPS卫星数据块数 - rewind(fp_nav);//将文件指针返回值起始位置 - nav_h = (pnav_head)malloc(sizeof(nav_head));//给N文件头开辟空间 - nav_b = (pnav_body)malloc(sizeof(nav_body) * gps_satnum * 20); - if (nav_h && nav_b) - { - read_n_h(fp_nav, nav_h);//读取N头文件 - read_n_b(fp_nav, nav_b);//读取N数据块 - } - fclose(fp_nav);//关闭N文件 - - blh = (pblh)malloc(sizeof(pblh) * o_epochnum *256); - enu = (penu)malloc(sizeof(penu) * o_epochnum *256); - rah = (prah)malloc(sizeof(prah) * o_epochnum *256); - pos_t = (ppos_t)malloc(sizeof(ppos_t) * o_epochnum * 256); - station = (pstation)malloc(sizeof(pstation) * o_epochnum * 256); - - sat_gps_pos_clac(result_file, nav_b, obs_e, obs_b, obs_h, station, pos_t, blh, enu, rah, o_epochnum, gps_satnum); - - +/* -------------------------------------------------------------------------- */ + if (langop == 0) + { if (over == 1) + {printf("数据生成完毕!");} + if (over != 1) + {printf("数据处理发生错误!");break;}} + if (langop == 1) + { if (over == 1) + {printf("Data generation completed!");} + if (over != 1) + {printf("Data processing error!");break;}} + } return 0; } \ No newline at end of file diff --git a/main.exe b/main.exe index 9609150767476e0d5ffc26be38e23d8fbf80c92b..447cf20633f2c012808b626114251d00b053a952 100644 GIT binary patch delta 23777 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 t6(8^GU0iC-k=FCcZ;JV`8lRjTLg-oKV)|9PZyH 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 diff --git a/rahcal.h b/rahcal.h index 51eb32a..4532927 100644 --- a/rahcal.h +++ b/rahcal.h @@ -2,7 +2,6 @@ #define _RAHCAL_H_ #define PI 3.141592653589793 - #include #include