气象信息与网络技术地面探空电码译码系统.doc

上传人:zf 文档编号:30808830 上传时间:2024-01-30 格式:DOC 页数:23 大小:309KB
下载 相关 举报
气象信息与网络技术地面探空电码译码系统.doc_第1页
第1页 / 共23页
气象信息与网络技术地面探空电码译码系统.doc_第2页
第2页 / 共23页
气象信息与网络技术地面探空电码译码系统.doc_第3页
第3页 / 共23页
气象信息与网络技术地面探空电码译码系统.doc_第4页
第4页 / 共23页
气象信息与网络技术地面探空电码译码系统.doc_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

气象信息与网络技术地面探空电码译码系统.doc

《气象信息与网络技术地面探空电码译码系统.doc》由会员分享,可在线阅读,更多相关《气象信息与网络技术地面探空电码译码系统.doc(23页珍藏版)》请在冰豆网上搜索。

气象信息与网络技术地面探空电码译码系统.doc

气象信息与网络技术课程设计

题目地面/探空电码译码系统

学生姓名

学号

学院

专业

设计时间 16周

二O一五年六月三十日

地面/探空电码译码系统

摘要:

气象资料是对气象进行预测和气象研究的重要依据,而各国各地的气象资料都是以编码的形式进行互相传递的,气象要素的信息以代码的形式储存在文件中。

而我们的地面/探空电码译码系统是基于C语言的译码系统,根据气象信息编码的特点翻译出编码表示的气象要素。

用户提供的年月日及地区等指示可找到对应的气象要素信息,如温度,露点,风速,风向等。

这样用户可以方便地知道地面报文和探空报文所指示的气象。

从而可以方便各种研究和应用。

关键词:

地面报文;探空报文;译码系统;气象要素;

一、前言

气象地面报文电码具有地面各种气象要素和天气现象,如气温、湿度、风向、风速、海平面气压和雨、雪、雾,还具有记录云高、云状、天气演变如三小时变压、气压倾向等。

近年来,随着计算机技术的快速发展以及卫星通信技术的研究深度的加深,地面气象报文系统的发展日益完善,报文电码的发展与计算机技术相关度越来越大,二者相结合为人类的日常生活产生了日益深远的影响。

我国是自然灾害频发的国家,而气象灾害又是在自然灾害中损毁程度最严重的。

如我国最近几年发生几次大的寒潮,以及每年夏天发生的台风等同时每次自然灾害给人民的生产生活都带来了极大的不便甚至对一个地区的生产秩序起到破坏性的作用,因此国际国内对天气系统的变化情况越来越关注,而在气象领域对卫星观测资料的依赖度越来越大,天气资料在天气预报系统中占据越来越重要的作用,气象报文信息发挥了比以往更关键的角色,气象台根据气象信息预报寒潮、台风、暴雨等自然灾害出现的位置和强度,就可以直接为工农业生产和群众生活服务,通过应急准备及人员疏散等可以讲自然灾害带来的损害讲到最低。

气象信息就成为现代社会不可缺少的重要信息。

同时,气象信息的作用与气象代码翻译工作是分不开的,通过现代化的手段以及先进的通讯工具,气象电码的翻译工作效率大大提高,气象信息一经翻译,依赖于先进的通讯工具就能够及时地发布出去,具有很强的实时性,因而此代码翻译系统是具有重要意义的。

在我们可接触到的各种电码翻译系统中,翻译系统的实现采用了多种语言,本文提供一种基于C语言的电码翻译系统,根据地面报文电码的特点通过相关的语句翻译出所表示的气象信息。

世界气象组织所属的天气监测网由一百多个成员国组成,其观测系统中包括十多颗卫星、三千多架飞机、一万多个陆上观测站、七千多个船舶观测站以及九百多个携带自动气象站的系统航标和浮标。

世界天气观测网络就是通过这个观测系统提供最新的全球天气预报的。

每天,高速电信链路通过三个世界级气象中心、34个区域性气象中心和187个国家级气象中心向全球传输气象资料和气象图。

气象资料是气象科学对天气过程进行的预测及对大气活动规律进行研究的主要依据,气象资料交换是气象业务的科研的基础。

但是,由于各国文字的不一致性,和文字占据大容量存储空间的问题,决定将其以规定的编码形式在国际国内间进行交换。

气象地面电码和探空电码就是其中的一种可供交换编码。

各个行业都有各自的国际电码。

地面气象观测的天气电码,不但反映天气实况,而且也反映了天气的演变规律。

因此,必须从天气学的角度去理解和选用天气报告电码。

这是全面、准确反映测站天气实况和保证天气预报工作、减少人为失误的重要环节。

电码需要按照一定的规则编写,这样,译码者才能按照那个规则译出电码所代表的通俗易懂的信息。

随着社会、经济的飞速发展和人民生活水平生活质量的大幅度提高,社会上各行各业对气象部门提出了全方位、多时效、针对性强、准确度高的天气预报服务要求。

社会需求永远是天气预报发展的动力和压力。

为了适应日益增长的社会需要,做好预报服务,预报员需要用到近年来许多新的知识和参考资料,尤其是各个地区的地面和探空气象资料分析,能够有效帮助预报员分析当地的天气现象,从而做出比较准确的天气预报。

二、需求分析

1、提供给天气预报员实时天气资料,以便实时进行天气分析及准确预报。

实时天气资料是天气分析和预报的基础,因为天气总在不断的变化,依据最接近所要预报的时间的实时天气资料所得出天气预报的准确程度最高,短期的天气预报总比长期和中长期的天气预报准确。

所以想要得到较为准确的天气预报,必不可少的是方便及时地获得实时资料信息,这就需要电码译码系统来帮助实现。

编写成电码的方式,能有效地节约信息传送的时间和空间,增加了天气预报的时效。

2、提供给科研人员过去和现在的天气各要素资料,从气温、气压、风、云、降水、能见度和空气湿度等,得出天气的性质,并且广泛地采用绘图,建表等分析方法,加上具体情况的具体分析,联系各个地方、各个时段的天气情况,找出天气变化规律,系统地进行研究,以便分析总结,研究天气的发展、演变,为揭示天气变化、研究大自然的奥妙,进而应用天气现象做出贡献。

该系统对于这些大型的研究来说只是渺小的一小步,但确是不可或缺的一部分。

3、为二次天气应用开发提供天气资料,从而生产各种应用产品。

天气应用十分广泛,天气信息可以直接应用播报天气情况,还可以应用在二次天气软件上,如可以设计出查询实时天气情况的软件,输入年月日时段和地点,即可显示出具体气象要素的信息,把软件安装在手机上,随身携带,方便快捷,符合大众的应用要求。

4、提供给开发人员一个译码工具,方便开发人员优化开发,充分利用译码的语句和设计流程,不需要开发人员重新设计,可以直接使用,如此简化了气象台的工作量,增加了其工作效率。

此外,还给教师的教学提供了很大的方便,教师直接输入需要知道的时间站点信息即可得到对应的气象要素值,学生可以很好地了解具体的气象要素信息,能更好地学习气象知识。

5、提供给普通用户查询天气实时或过去天气资料,用户自己总结天气状况,决定自己在穿衣御寒防热还有度假出行等方面的生活。

6、提供给农民获取实时天气和过去天气资料,对比现在天气情况,从而比较好地进行播种、收割等农家活动。

有了科学技术的支持,农业生产能取得迅速地发展,收获更多地粮食,养活更多的人口。

7、提供给工厂天气情况,有些产品的生产与天气的要素如温度、湿度等有着很大的关系,清楚地了解了具体的天气情况就能及时调整这些因素,这对产品的生产有很大的益处,工厂生产效率也能极大的提高。

三、概要设计

1、设计思路

读取气象电报电码文件,经过本电码译码系统,生产各气象要素。

地面电码资料的气象要素有:

温度、露点、本站气压、海平面气压、气压趋势、气压变化量、降水量、天气现象、云状、能见度,风向飞速、总云量等;高空电码资料的气象要素分13层:

地面、1000hPa、925hPa、850hPa、700hPa、500hPa、400hPa、300hPa、250hPa、200hPa、150hPa、100hPa;高空电码资料的每层气象要素是:

温度、温度露点差、气压、风向飞速。

编程思路是:

由用户输入要译码的年、月、日、世界时次和台站号(注:

有可能的话用地名),并选择地面或高空;由译码系统进行译码,生产出气象各要素,在屏幕上显示。

2、地面/探空电报译码数据流图

地面/探空电报码以文件形式存放,固定为8.3格式。

地面电报码文件格式是:

AAXXmmdd.Thh,探空电报码文件格式是:

TTAAmmdd.Thh。

其中AAXX表示地面报;TTAA表示探空报;mm表示月份,用2位数字01~12;dd表示日,用2位数字01~31;hh表示时次,用2位数字,地面有00、03、06、09、12、15、18、21共8个时次,探空有00、06、12、18共4个时次,都用世界时。

地面/探空电报译码数据流图如图1所示。

地面/探空电码文件

电码译码系统

各天气资料要素

图1电码译码系统数据流图

3、地面/探空电报译码程序总流程图

根据电码文件名是8.3格式,并且与月日时次形成固定关系,因此可以采用输入年月日时次的数据来组合文件名。

地面1~4位固定为“AAXX”,探空1~4位为“TTAA”,5~6位为2位数月份,7~8位为2位数日,9~10位为固定为“.T”,11~12位为2位数时次。

地面/探空电报译码程序流程图如图2所示,读取文件,找到指定台站的位置,并读取指定台站的电码到一个字符串数组中,然后传递给地面或探空处理程序继续处理,分解出天气各要素。

最后显示结果。

开始

输入年月日世界时及台站号

输入选择地面或高空

文件存在?

N

Y

读取电码文件

结束

显示出错信息

根据年月日世界时组成文件名

指定台站号?

文件结束?

Y

N

N

地面/高空?

Y

地面处理程序

高空处理程序

高空

地面

图2电码译码系统程序流程图

四、详细设计

由用户输入的P的值判断是否是高空资料分析或者是地面资料分析,P=1,代表是对地面要素的分析,P=2则代表是对高空各个气象要素的分析。

P=1,调用地面气象要素分析函数。

分解已读入的这一行字符串,第0~4字符是台站号;第6~10字符分别对应着→iRiX云底高度,能见度;第12~16字符分别对应着总云量,风向,风速。

令K=18,然后判断K是否还小于等于字符串总数,若成立,则进行下一步,分析地K字符代表的内容,K字符人为的规定可以表示气温,露点,本站气压,海平面气压,气压趋势,降水量,天气现象,云状,发报时间。

然后分析字符里的数据具体是多少,到表天气要素的一个什么状态,反馈到用户方面。

再调整K=K+6,继续重复从判断K的值是否有意义开始的内容,一直到字符串里的所有字符信息都已经分析反馈结束为止。

地面各要素

地面各要素入口

k=18

N

Y

返回

k>n?

第k字符为

1

2

3

4

5

6

7

8

9

气温

露点

本站气压

海平面气压

气压趋势

降水量

天气现象

发报时间

云状

k=k+6

分解已读入的这一行字符串。

第0~4字符→台站号IIiii;

第6~10字符→iRiXhVV;第12~16字符→Nddff

图3译出地面各要素功能流程图

P=2,表示用户需要的事探空各气象要素,然后分解已经读入的这一行字符串,第0到11字符不用,第12到16的字符代表台站号。

令K=18,在K在合理的范围内时,分析K:

K+1字符,由它们的数值判断气象要素所属的层数,继而分别译出气压,温度,温度露点差,风向风速。

然后K=K+18,重复上面的判断过程。

一直到K的数值大于n。

探空各要素

地面各要素入口

k=18

分解已读入的这一行字符串。

第0~11字符不用;第12~16字符→台站号

N

Y

返回

k>n?

第k:

k+1字符为

99

92

00

85

70

50/40

20/15/10

地面

925hPa

1000hPa

850hPa

700hPa

500/400

300/250

30/25

200/150/100

分别译出气压,温度,温度露点差,风向风速。

k=k+18

图4译出探空各要素功能流程图

五、编码设计

利用计算机高级语言对程序流程图进行编程,采用C语言编程。

1、编写主控程序,通过输入年月日时次,然后选择地面或高空,再输入要处理的台站号。

根据输入信息,自动组成相应的文件名,从文件中读出指定台站电码资料,存入字符串数组ch中,然后调度地面dmdisp子程序或高空updisp子程序进行相应的处理。

#include//程序中要用到输入/输出函数

#include//程序中要用到字符串处理函数,如strlen、strcpy等

intstr2int(char*ch,intk,intn);//对字符串从k位置开始,长度为n的子字符串转

//换为整型值。

对于含有非数字字符,则返回-1

voiddmdisp(char*ch);//对字符串ch进行地面译码的功能函数

voidupdisp(char*ch);//对字符串ch进行高空译码的功能函数

voidmain(void)//主控程序入口

{intyear,month,day,hour;//定义年year、月month、日day、时次hour

intn,p;//定义位置计数器n,临时变量p

charstation[6],ch[400];//定义台站号station、存放电码字符串数组ch

FILE*fp;charname[30];//定义读文件指针,文件名name

intdays[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//定义每月天数

printf("请输入年、月、日\n");

while

(1)

{scanf("%d%d%d",&year,&month,&day);//输入年月日用空格隔开

if(year%4==0)days[2]=29;elsedays[2]=28;

if(month>=1&&month<=12&&day>=1&&day<=days[month])break;

elseprintf("输入有错,请重新输入年、月、日\n");

}

printf("请选择:

1-地面;2-高空\n");

while

(1)

{scanf("%d",&p);

if(p==1||p==2)break;

elseprintf("输入有错,请重新选择:

1-地面;2-高空\n");

}

if(p!

=1)

{strcpy(name,"..\\探空资料\\TTAA0529.T00");p=13;

printf("请输入高空世界时,供选择:

0、6、12、18\n");

while

(1)

{scanf("%d",&hour);

if(hour==0||hour==6||hour==12||hour==18)break;

elseprintf("输入有错,请重新输入高空世界时,供选择:

0、6、12、18\n");

}

}

else

{strcpy(name,"..\\地面资料\\AAXX0529.T06");

printf("请输入地面世界时,供选择:

0、3、6、9、12、15、18、21\n");

while

(1)

{scanf("%d",&hour);

if(hour>=0&&hour<=21&&hour%3==0)break;

elseprintf("输入有错,请重新输入地面世界时:

0~21,间隔为3\n");

}

}

n=strlen(name);//以下生成电码文件名,存放在name中

name[n-2]='0'+hour/10;name[n-1]='0'+hour%10;//加入时次,2位数

name[n-8]='0'+month/10;name[n-7]='0'+month%10;//加入月份,2位数

name[n-6]='0'+day/10;name[n-5]='0'+day%10;//加入日期,2位数

printf("请输入台站号,南京为58238,北京为54511,上海为58362\n");

scanf("%s",station);//台站号存放入station中

if(fp=fopen(name,"rt"))//打开name电码文件,以便读入资料

{ fgets(ch,80,fp);//跳空一行

fgets(ch,80,fp);//跳空一行

if(p==1)fgets(ch,80,fp);//如果处理地面,则跳空一行

while(!

feof(fp))//如未找到指定台站号,则一直到文件结束

{fgets(ch,80,fp);//读入一行,存放到ch字符串数组中

n=strlen(ch)-1;//计算ch字符串实际读入个数

while(n<300&&ch[n-1]!

='='&&!

feof(fp))//一直到读完退出循环

{ch[n]='';//在ch字符串尾留出一个空格,预备后续存放

fgets(&ch[n+1],80,fp);//继续读入一行,存放到ch字符串数组后面中

n=strlen(ch)-1;//重新计算ch字符串实际读入个

}

if(!

strncmp(&ch[p-1],station,5))//是否找到指定台站号,未找到继续循环

{if(p==1)dmdisp(ch);elseupdisp(ch);//找到,则作相应的调度处理

p=0;break;//退出循环,准备结束程序运行

}

}

fclose(fp);//关闭文件

if(p!

=0)printf("你指定的%s--台站未找到,请检查!

\n",station);

}

elseprintf("你指定的%s--文件不存在,请检查!

\n",name);

}

2、对ch字符串数组从k位置开始,规定字符串从0开始计数,长度为n的子字符串转换为整型值。

对于含有非数字字符,则返回-1。

例如ch[]=”123456/78”,则函数str2int(ch,2,3)返回345;函数str2int(ch,5,3)返回-1。

intstr2int(char*ch,intk,intn)//字符串转换成整数值函数

{inti,m=0;//循环变量i,中间变量m,用于存放结果整数值

for(i=0;i

{if(ch[k+i]<'0'||ch[k+i]>'9')break;//字符串中含非数字,中途跳出

m=m*10+ch[k+i]-‘0’;//字符串转换成整数值

}

if(i==n)returnm;elsereturn-1;//返回结果值

}

3、对字符串电码ch进行译码,翻译出高空各要素的值进行显示。

voidupdisp(char*ch)//对ch进行探空译码

{intn,i,p,y;//n表示当前字符串位置,p表示转换出的整数值

printf("=================读出的探空电码========================\n");

puts(ch);//显示读到的字符串电码内容

printf("=================探空译码结果==========================\n");

n=(ch[10]=='')?

11:

12;//调整好当前位置,如果“TTAA”后只有一个空格,

//则n取11;若有两个空格,则n取12

y=str2int(ch,n-6,2);//取出月份给y保存,处理风速时要用到

printf("区站号:

");//n已指出台站号位置

for(i=0;i<5;i++)printf("%c",ch[n+i]);//输出台站号

printf("\n");//换行

while

(1)//死循环,中途必须用break跳出循环

{n+=6;//调整好当前位置,准备处理hhPPP

p=str2int(ch,n+2,3);//p←PPP电码,处理气压,位势米

if(ch[n]=='9'&&ch[n+1]=='9')//99:

地面气压

//此处输出地面气压的位势米高度p,若p≤100,则加1000;否则p就是位势米。

{

if(p<=1000){p+=1000;}

printf("地面气压:

%d",p);

}

elseif(ch[n]=='0'&&ch[n+1]=='0')//00:

1000hPa气压

//此处输出1000hPa气压的位势米高度p,若p>500,则500-p;否则p就是位势米。

{if(p>500){p=500-p;}

printf("1000hPa气压:

%d",p);

}

elseif(ch[n]=='9'&&ch[n+1]=='2')//92:

925hPa气压

//此处输出925hPa气压的位势米高度p,p就是位势米。

{printf("925hPa气压:

%d",p);

}

elseif(ch[n]=='8'&&ch[n+1]=='5')//85:

850hPa气压

//此处输出850hPa气压的位势米高度p,p加1000。

{p=p+1000;

printf("850hPa气压:

%d",p);

}

elseif(ch[n]=='7'&&ch[n+1]=='0')//70:

700hPa气压

//此处输出700hPa气压的位势米高度p,若p>300,加2000;否则加3000。

{if(p>300)

{p=p+2000;}

else

{p=p+3000;}

printf("700hPa气压:

%d",p);

}

elseif((ch[n]=='5'||ch[n]=='4')&&ch[n+1]=='0')//500hPa或400hPa气压

//此处输出500hPa或400hPa气压的位势米高度p,p乘以10。

{

p=p*10;

pr

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

当前位置:首页 > 外语学习 > 韩语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1