土壤水分资料自动下载及查看软件的研发
2018-03-10朱俊翰
朱俊翰
【摘 要】土壤水分资料是气象部门农气工作必需的资料,精确下载土壤水分资料对农气工作至关重要。目前所使用的土壤水分下载器存在许多的问题,如资料遗漏、无查看功能、过度依靠手动操作等,研发新的土壤水分自动下载和查看软件可以解决上述问题。本文详述了该土壤水分自动下载及查看软件的研发过程,展示了软件功能,并分享C#编写技巧。运行测试结果表明该软件对农气观测业务工作效率的提升有很大的帮助,值得推广。
【关键词】土壤水分;自动下载;农气;C#
[Abstract] Soil moisture content is the necessary information for the meteorological department, and it is very important to accurately download the soil moisture data to the agricultural gas work. Currently used by the soil moisture downloader has many problems, such as data missing, without excessive view function, rely on manual operation, etc., research and development of new soil moisture automatically download and view software can solve the above problems. This paper describes the process of automatic downloading and viewing software of this soil, showing the software functions and sharing C# writing skills. The result of running test shows that the software is helpful to the improvement of the working efficiency of agricultural gas observation.
[Key words] Soil moisture; Automatic download; Farmers gas; C #
土壤水分是土壤的重要物理参数,是气候、植被、地形及土壤因素的综合反映,对于降雨产流、蒸散等过程具有重要影响,因此是气象测报和农气观测中不可或缺的部分,对描述天气变化、指导农业生产有着重要的作用。
目前山东省各区县局气象站的土壤水分观测资料均采用Z-FTP土壤水分资料下载器处理。在设定好用户名、密码、服务器地址的情况下,Z-FTP能够手动批量下载土壤水分观测资料,免去了每次下载时都要人工圈选和输入密码的重复操作,简化了工作流程[1]。但是也存在着一些问题。因此本研究从分析Z-FTP软件的问题入手,有针对性地研发土壤水分观测资料的自动下载及查看软件,进一步提高数据获取的效率和准确度。
1 研发新软件的必要性
Z-FTP土壤水分资料下载器的使用为一线工作人员提供了便利,但是也存在一些问题:
土壤水分资料在省局信息中心只保存3天,由于Z-FTP软件没有自动下載功能,所以如果连续3天或更长时间未进行资料下载,就会导致这期间的土壤水分资料永久缺失;
每次下载资料时都需要手动调整时间设置,并且当设置的时间间隔大于3天时,下载器会把之前下载的资料删除且不能恢复,从而导致误操作;
下载的资料输出时,需要预先在指定路径依照年月建立文件夹,且不能随意改变输出目录。
综上可以看出,Z-FTP土壤水分资料下载器在实际的使用过程中并不十分便捷,因此研发一款能够自动下载和存储,减少误操作的土壤水分资料下载软件是十分必要的。
2 软件研发
2.1 开发工具
本软件研发使用的是C#语言。C#语言是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言,具有安全、稳定、简单的特性[2]。
2.2 开发流程
2.2.1 界面设计 考虑到业务人员的使用习惯,新开发的软件依据原Z-FTP的设计模式,搭建土壤水分资料自动下载器界面,界面包括输入用户名、密码的登录模块、服务器地址输入模块、参数设置模块及结果显示模块,并为各个模块设计相应输入框[3]。 新开发的软件根据功能需求设计5个按钮,用于修改路径,路径部署,保存设置,自动下载和手动下载。
2.2.3 下载函数 在设计各个模块之前首先要编写下载ftp文件用的函数,以下为下载函数的主要部分及其注释。
public static void DownloadFile(string localDir, string FtpDir, string FtpFile, string hostname, string username, string password)
//用本地路径,ftp文件夹路径,ftp文件名,ftp地址,用户名和密码下载ftp文件
{
string URI = "ftp://" + hostname + "/" + FtpDir + "/" + FtpFile; string tmpname = Guid.NewGuid().ToString();
// 生成一个guid作为临时文件名
string localfile = localDir + @"\" + tmpname;endprint
//本地完全路径
System.Net.FtpWebRequest ftp = GetRequest(URI, username, password);
//以用户名和密码连接ftp
ftp.Method = System.Net.WebRequestMethods.Ftp.DownloadFile;
//调用ftp下载协议
ftp.UseBinary = true;
ftp.UsePassive = false;
3 软件功能
3.1 手动下载功能
在自动土壤水分资料下载器中设计手动下载模块,既能防止程序运行过程中意外退出,也能避免程序在自动下载过程中出现故障导致数据的遗漏,同时也为实现自动下载功能提供了基础。
土壤水分资料在服务器上保存时效一般为72小时,因此手动下载模块的时间范围也是从当前时次开始向前推72小时,以保证下载资料的完整性。以下为下载代码:
private void button5_Click(object sender, EventArgs e)
{int i; string datemoon, datehour, filename;
string basename1 = "Z_AGME_I_" + zhanHao.Text + "_";string basename2 = "0000_O_ASM-FTM.txt";
test.Text = "";
for (i = 0; i <= 72; i++) { try
{
datemoon = System.DateTime.Now.AddHours(-80 + i).ToString("yyyyMM");
datehour = System.DateTime.Now.AddHours(-80 + i).ToString("yyyyMMddHH");
filename = basename1 + datehour + basename2;
fileway=output.Text + "\\" + datemoon + "\\" + filename;
if (!File.Exists(fileway))
{
DownloadFile(output.Text + "\\" + datemoon, input.Text, filename, ip.Text, user.Text, pass.Text);
test.Text += "\n\r已补下" + filename;
}
} }
以上变量中,i为72小时的计数器,datemoon为年月形式的文件夹名称,datehour为Z文件名中表示年月日时的部分,basename1和basename2分别为Z文件文件名的日期部分前后的字段,以此组成一个完整的文件名。每次下载将提示框(test)中的内容清除,以防提示框内容过长。
之后生成文件名用DownloadFile函数下载,并将补下的文件名输出至提示框[4]。
3.2 自动下载功能
自动下载模块由两部分组成。一为自动下载按钮,点击该按钮后开始自动下载,并显示提示文字,方便使用者判断自动下载是否开始,再次点击即可关闭自动下载功能;二为downloadTimer定时器(Time类),当其开启时,每十分钟(Interval=600000,单位毫秒)下载一次24小时数据,在每次生成文件名后,先判断所要下载的文件距今是否超过5小时,如果超过则用File.Exists判断是否存在,如不存在则重新下载,之后对5小时内的资料进行重复下载防止出错。经由此方法则每10分钟一次的下载时间缩减至8秒左右,且漏下错下概率极低。另外定时器中写入了在每年最后一天的24时自动生成下一年所用文件夹的函数,减少了人工操作。
计时器内具体代码和72小时手动下载按钮及部署文件夹按钮内容一致,此处不再赘述,只需将72小时的计数器条件改为<=24即可。图1所示为软件运行结果。
另外,软件提示文字可改为显示下载失败的文件名,如全部下载成功则显示“某日某时数据下载正常”,如此可以提高阅读效率,并使界面更为美观。
3.3资料读取及查看功能
按照气象业务规范,测报人员每天都要填写指定时次的土壤水分资料,一般为9时、17时、20时三个时次。然而目前获取土壤水分可视资料的方式有且只有浏览网站一种。该网站运行流程较为繁琐,首先,每次登陆该系统必须输入用户名、密码,选择台站、资料类型和起止日期,属于重复操作;其次,该系统资料的默认显示顺序和我们习惯的填写顺序相反,容易造成资料种类、资料时次填写错误等问题。因此为了减少工作的重复性,以及降低出错几率,新软件的研发增加了自动查看功能[5]。
按照之前的研发流程,用DataGridview组件制作有文件读取及自动查看功能的模块[6]。首先确认一下所需数据的种类,一共有平时所用的9、17、20三小时数据和特殊日期所用的14时平均数据这两种,如果涉及到校对,则涉及到当天和前一天两天时间范畴,因此一共需要设计4个按钮[7]。分析土壤水分文件的结构,对照之前的系统,所需要的土壤水分资料的位置就能够确定。最后利用按钮将读出的數据显示在DataGridView当中即可[8]。以下为显示功能部分代码:
if(File.Exists(fileway)
{
str = File.ReadAllText(@fileway);endprint
FinalGrid.Rows[0].Cells[0].Value = "9时";
for (i = 0; i <= 9; i++)
{
k = 56 + 22 * i;
if (str.Substring(k, 4) != "////")
{
ceng = float.Parse(str.Substring(k, 4)) / 10;
FinalGrid.Rows[0].Cells[i + 1].Value = ceng;
}
else
{
FinalGrid.Rows[0].Cells[i + 1].Value = "无";
}
}
}
在确认文件存在的情况下进行文件读取,并先行填写对应时次,之后忽略前56个字符的土壤含水量,从第57个字符开始每22个字符读取长度为4的土壤水分数据,取9次并忽略无效数据(////)并对四位字符串转化成浮点型后除以10以防止小数位遗漏。因此填写的数据就为该时次9个层次不带百分号的土壤水分值(即土壤相对湿度值)[9]。
图2为输出结果。
4 运行测试
在本软件应用之前,2015年2月,我局某员工因在查找资料时选错资料类型,致使某日资料全部抄错,需要大量修改,导致抄写本被涂污,2017年上半年我局多次发生因Z-FTP下载设定时间过长而导致资料大规模丢失的事件,最严重一次在5月底,除28,29,30日之外全月资料丢失,后经市局补下才将资料补齐。
自2017年7月5日使用该软件自动下载土壤水分资料以来,青岛市崂山区气象局再未出现过资料遗漏及因重复下载导致文件被误删的现象。8月13日,安装自动土壤水分资料下载器的服务器因雷击导致主板损毁,经修复后于8月14日17时重启软件,重新下载前72小时数据并开启自动下载功能,后经校对所下载的数据完好,因为没有超过3天,因此并未发生数据缺失现象。
5 小结
从目前运行情况可见,土壤水分资料自动下载及查看器软件相对于原有的土壤水分下载器具有容错率高、免人工操作、有效防止误操作等优势,测报人员反映工作量明显降低、工作效率有较大提升。但3个月的时间对于检测一个软件功能尚显不足,气象业务中与土壤水分相关的工作也远不止于此,因此该软件的长期工作效率、运行稳定性还有待进一步验证。今后通过逐步完善软件功能,并经过专家评估测试后,可面向省内各站点推广使用。
参考文献:
[1] 白军龙. 基于IP传感器的网络监控系统OPC研究. 2009. 北方工业大学硕士论文.
[2] 周华生. 复杂电磁环境信号自动监测和识别系统的开发. 2009 . 北京交通大学硕士论文.
[3] 郝建勋. 基于网络的高频虚拟实验室的设计与开发. 2006. 大慶石油学院硕士论文.
[4] 邬海杰. 基于双C/S结构的计算机控制技术远程网络实验系统的设计与实现 . 2003. 浙江大学硕士论文.
[5] 徐晓. 新一代天气雷达值机系统设计与雷达资料应用研究. 2011. 北京邮电大学硕士论文.
[6] 潘小龙. IOS系统中不同多线程技术的研究和比较. 2014. 中国新通信.
[7] 郑若伦.一种基于窗体多线程技术提高页面访问效率的方法. 2013. 电子制作.
[8] 张汉烨.Linux多线程编程实现机制的研究及应用.2015.互联网论文库.
[9] 付博友.基于C++的windows监控系统的设计与实现.2015.互联网论文库.endprint