论文部分内容阅读
摘要:利用c#语言的便利灵活性,结合MSSQL数据库,针对气象部门土壤自动站报文数据上传后进行有效实时解析人库。对土壤水分数据进行分类解析入库、实时解码、并行处理等,对数据进行粗加工,并生成显示、报警等机制,也为二次开发提供标准的数据库接口,统一标准,避免重复解析,进一步提高数据的实时性、效率性和适应性。
关键词:气象;c#;数据库;土壤水分;报文
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2020)15-01 17-04
1背景
随着气息事业的日益发展,人民生活对气象需求的多样性也日益增长。气象部门在对日常天气预报的精准预报下,对预报的衍生产品的研究也日益透彻,特别像浙江这样一个气象灾害比较频繁的地区,我们不仅要关注和防范一般的自然天气灾害,还要特别防范由天气现象造成的次生灾害,譬如山体滑坡、泥石流、塌方等地质灾害,往往这些灾害给人民的生命财产造成了极大的危险。而气象部门针对此情况,在容易发生地质灾害的地方布置了大量的针对土壤水分的自动站来监测土壤水分的饱和度,通过大数据的分析,做出针对性的预案。这往往要对土壤水分数据处理的实时性、准确性、并行性提出了较高的要求,并需要和预报数据相互结合,做出更精准的预测。为此我们设计了新的土壤水分入庫程序,提高了处理的实时性和并发能力,满足了大数据处理的需求。
2设计思路
为了保持和其他气象数据的兼容性和传承性,同样土壤水分数据在取样后,采用了报文形式的传输形式,以文件形式传输,而不是目前流行的数据流格式或数据库格式的传送,处理时需要对每个文件中的报文进行解包分析,判断数据的时限性、准确性和报文的类别,实时入库,避免信道堵塞并发出相应的处理信息。
2.1开发语言介绍
c#是微软公司与2001年基于C 之后新开发的一种面向对象程序设计的语言,它运行于Net FrameWork之上,是一种类似于JAVA的脚本性语言。他集成了C语言的灵活性又继承了C 面向对象的特性,并且面向Intemet编程进行了重新设定,使得他结合了VB、DELPHI、JAVA等各类语言的一些特性,在整个Net框架之内,可以轻松地驾驭各种开发程序,保留了c的强大能力,有简洁了C 的复杂性,友好的IDE界面,便利的语言继承,使得原先大量的c语言程序设计师转向了c#语言,发挥了它的稳定、简单、安全又功能多样的特点。
2.2系统设计
本系统利用地面宽带和4G信号,接收从土壤水分自动站传回的数据,它以文件形式报文结构存在。我们利用线程池和文件缓冲队列,解码传回来的数据,根据相应的要素排列生成对应的数据库,数据库采用了微软的MSSQL,利用数据库AI-waysOn群集和可用性组的特点实现的高可用性及灾难恢复解决方案,利用分布式的特点实现了数据的高效率利用和互相备份的存储。利用了Windows的消息队列设计,进行窗体之间的信息互传,给用户在数据缺测时做到及时提醒报警,并提供标准的COM接口为二次开发和第三方用户提供服务。
通过不定期的扫描接收文件,判断文件的时效性,生产相应的日志,为后面的故障解决提供数据依据。为了提高执行效率,在业务模式相对简单的情况下,抛弃了复杂的类处理,在对象后面直接采用c语言API函数快速解决底层驱动问题,大大提高了扫描的效率。为土壤水分预报的及时性提供了技术的保障。
2.3报文内容
基于气象部门的特殊性和继承性,数据的流转脱胎于航空报文的模式,为了资料的兼容性,目前还有大量的资料采用了报文的传输格式,同样,我们的土壤水分数据传输也采用了这一方式,当然各类的数据报文格式也有所不一,但都是以ASCII码文件的形式存在的,报文的内容为5个字符为一组数据,相邻数据以空字符相隔,有报文头和结束符,每组数据有着不一样的意义,需要程序进行译码。一般以“NNN”为报文的结尾,如“58xxx 23456 N2342…NNN”等,在土壤水分信息报文中,包含了站号、经度、维度、高度、生成时间、观察时间、相对湿度等内容。在报文传输到达后,经过时效性、合法性验证后,对报文进行判别翻译后写入数据库以供共享所用。
3软件设计
3.1总体框架图
根据业务需求,结合技术特点和行业特征,我们设计了以下的软件方案:
在数据应用端,我们采用了定时扫描文件的策略,根据土壤水分数据的来报频率,设计相应的时间去判别是否有新的数据到来,以减轻前端处理机的运行负荷,当判别有新报文来临时,设计了一个防冲突的机制,防止别的用户在操作该文档,正常读取报文内容后,进行拆包人库,采用了模块化的设计和消息队列机制,防止文件死锁,减少程序处理时的CPU想要时间。而网络层充分利用了目前气象信息网络的先进性,千兆的局域网、百兆的地面宽带网和高速4G网络,保证了数据传输的有效性和完整性,合理地分布了分布式数据库进行存储和备份,通过业务端的逻辑优化,提高查询和并发处理的性能。
3.2软件设计流程
根据总体框架图中的流程,对整个软件的数据流转和业务流转进行合理的分配协调,成功地进行了以下的设计:
3.3土壤水分数据库结构设计
土壤水分数据以每小时每站点生成一个单独文件,文件中报文内容为一条单独记录,格式如下:
通过微软的ADO数据库引擎,成功地在软件中直接对MS-SQL2015数据库进行操作,及时地把数据插入库中,保证了程序的完整性,方便程序移植到同类业务单位。
3.4软件编码
在应用端,我们打开VISIOStudi02015,在文件菜单项中选中新建项目,然后在项目中选取C#Windows应用程序的建立,如ASM,这样我们就创建了一个C#的程序框架。namespaceASM
由于定时器的延迟性和不确定性,在土壤水分入库的机器上尽量不要运行其他占CPU高的程序,并确保报文数据来报的定时性,这样会大大增加处理入库的效率,在报文入库的同时,其他任务避免直接操作该报文,等他入库后调用数据库的COM接口来查询数据,以使任务的统一化,增加报文处理的成功率。
3.5程序功能界面
在报文解析人库处理中,我们尽量简化界面的操作,减少人机交互带来的操作失误,把CPU时间多分配给报文解码线程,确保程序的灵敏度和反应度,避免在程序处理时,界面发生假死或白板现象。程序启动后会定时根据报文的传输时间启动报文处理模块,不需人工干预,稳定、高效、连续,在报文加密观察时或临时增加采集或处理遗漏的情况下,可以通过界面上的按钮进行手工处理,并且把执行结果同步显示在界面上。
4结束语
本文通过数据库技术,改变了原先以文本方式为主的显示方式,对要素数据进行了归纳,方便了数据的存储、调用、查询和归档,对数据的冗余性、纠错机制提供了驱动依据,也便于及时读人报文数据,避免由于读取不及时造成报文数据的丢失,并且系统提供了手工处理功能,在系统故障或线路延迟造成的文件逾限、丢失,可以通过人工处理得以解决。完美地解决了报文数据处理上的各种缺陷,通过一段时间运行、改正,目前系统日益完善,在土壤水分数据处理的及时性、完整性和准确性上得到了充分的验证。为预报部门提供了翔实充分的数据,并取得了良好社会效益。
关键词:气象;c#;数据库;土壤水分;报文
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2020)15-01 17-04
1背景
随着气息事业的日益发展,人民生活对气象需求的多样性也日益增长。气象部门在对日常天气预报的精准预报下,对预报的衍生产品的研究也日益透彻,特别像浙江这样一个气象灾害比较频繁的地区,我们不仅要关注和防范一般的自然天气灾害,还要特别防范由天气现象造成的次生灾害,譬如山体滑坡、泥石流、塌方等地质灾害,往往这些灾害给人民的生命财产造成了极大的危险。而气象部门针对此情况,在容易发生地质灾害的地方布置了大量的针对土壤水分的自动站来监测土壤水分的饱和度,通过大数据的分析,做出针对性的预案。这往往要对土壤水分数据处理的实时性、准确性、并行性提出了较高的要求,并需要和预报数据相互结合,做出更精准的预测。为此我们设计了新的土壤水分入庫程序,提高了处理的实时性和并发能力,满足了大数据处理的需求。
2设计思路
为了保持和其他气象数据的兼容性和传承性,同样土壤水分数据在取样后,采用了报文形式的传输形式,以文件形式传输,而不是目前流行的数据流格式或数据库格式的传送,处理时需要对每个文件中的报文进行解包分析,判断数据的时限性、准确性和报文的类别,实时入库,避免信道堵塞并发出相应的处理信息。
2.1开发语言介绍
c#是微软公司与2001年基于C 之后新开发的一种面向对象程序设计的语言,它运行于Net FrameWork之上,是一种类似于JAVA的脚本性语言。他集成了C语言的灵活性又继承了C 面向对象的特性,并且面向Intemet编程进行了重新设定,使得他结合了VB、DELPHI、JAVA等各类语言的一些特性,在整个Net框架之内,可以轻松地驾驭各种开发程序,保留了c的强大能力,有简洁了C 的复杂性,友好的IDE界面,便利的语言继承,使得原先大量的c语言程序设计师转向了c#语言,发挥了它的稳定、简单、安全又功能多样的特点。
2.2系统设计
本系统利用地面宽带和4G信号,接收从土壤水分自动站传回的数据,它以文件形式报文结构存在。我们利用线程池和文件缓冲队列,解码传回来的数据,根据相应的要素排列生成对应的数据库,数据库采用了微软的MSSQL,利用数据库AI-waysOn群集和可用性组的特点实现的高可用性及灾难恢复解决方案,利用分布式的特点实现了数据的高效率利用和互相备份的存储。利用了Windows的消息队列设计,进行窗体之间的信息互传,给用户在数据缺测时做到及时提醒报警,并提供标准的COM接口为二次开发和第三方用户提供服务。
通过不定期的扫描接收文件,判断文件的时效性,生产相应的日志,为后面的故障解决提供数据依据。为了提高执行效率,在业务模式相对简单的情况下,抛弃了复杂的类处理,在对象后面直接采用c语言API函数快速解决底层驱动问题,大大提高了扫描的效率。为土壤水分预报的及时性提供了技术的保障。
2.3报文内容
基于气象部门的特殊性和继承性,数据的流转脱胎于航空报文的模式,为了资料的兼容性,目前还有大量的资料采用了报文的传输格式,同样,我们的土壤水分数据传输也采用了这一方式,当然各类的数据报文格式也有所不一,但都是以ASCII码文件的形式存在的,报文的内容为5个字符为一组数据,相邻数据以空字符相隔,有报文头和结束符,每组数据有着不一样的意义,需要程序进行译码。一般以“NNN”为报文的结尾,如“58xxx 23456 N2342…NNN”等,在土壤水分信息报文中,包含了站号、经度、维度、高度、生成时间、观察时间、相对湿度等内容。在报文传输到达后,经过时效性、合法性验证后,对报文进行判别翻译后写入数据库以供共享所用。
3软件设计
3.1总体框架图
根据业务需求,结合技术特点和行业特征,我们设计了以下的软件方案:
在数据应用端,我们采用了定时扫描文件的策略,根据土壤水分数据的来报频率,设计相应的时间去判别是否有新的数据到来,以减轻前端处理机的运行负荷,当判别有新报文来临时,设计了一个防冲突的机制,防止别的用户在操作该文档,正常读取报文内容后,进行拆包人库,采用了模块化的设计和消息队列机制,防止文件死锁,减少程序处理时的CPU想要时间。而网络层充分利用了目前气象信息网络的先进性,千兆的局域网、百兆的地面宽带网和高速4G网络,保证了数据传输的有效性和完整性,合理地分布了分布式数据库进行存储和备份,通过业务端的逻辑优化,提高查询和并发处理的性能。
3.2软件设计流程
根据总体框架图中的流程,对整个软件的数据流转和业务流转进行合理的分配协调,成功地进行了以下的设计:
3.3土壤水分数据库结构设计
土壤水分数据以每小时每站点生成一个单独文件,文件中报文内容为一条单独记录,格式如下:
通过微软的ADO数据库引擎,成功地在软件中直接对MS-SQL2015数据库进行操作,及时地把数据插入库中,保证了程序的完整性,方便程序移植到同类业务单位。
3.4软件编码
在应用端,我们打开VISIOStudi02015,在文件菜单项中选中新建项目,然后在项目中选取C#Windows应用程序的建立,如ASM,这样我们就创建了一个C#的程序框架。namespaceASM
由于定时器的延迟性和不确定性,在土壤水分入库的机器上尽量不要运行其他占CPU高的程序,并确保报文数据来报的定时性,这样会大大增加处理入库的效率,在报文入库的同时,其他任务避免直接操作该报文,等他入库后调用数据库的COM接口来查询数据,以使任务的统一化,增加报文处理的成功率。
3.5程序功能界面
在报文解析人库处理中,我们尽量简化界面的操作,减少人机交互带来的操作失误,把CPU时间多分配给报文解码线程,确保程序的灵敏度和反应度,避免在程序处理时,界面发生假死或白板现象。程序启动后会定时根据报文的传输时间启动报文处理模块,不需人工干预,稳定、高效、连续,在报文加密观察时或临时增加采集或处理遗漏的情况下,可以通过界面上的按钮进行手工处理,并且把执行结果同步显示在界面上。
4结束语
本文通过数据库技术,改变了原先以文本方式为主的显示方式,对要素数据进行了归纳,方便了数据的存储、调用、查询和归档,对数据的冗余性、纠错机制提供了驱动依据,也便于及时读人报文数据,避免由于读取不及时造成报文数据的丢失,并且系统提供了手工处理功能,在系统故障或线路延迟造成的文件逾限、丢失,可以通过人工处理得以解决。完美地解决了报文数据处理上的各种缺陷,通过一段时间运行、改正,目前系统日益完善,在土壤水分数据处理的及时性、完整性和准确性上得到了充分的验证。为预报部门提供了翔实充分的数据,并取得了良好社会效益。