智慧水务软件二次开发入门介绍篇—使用ruby对ICM进行一些简单的操作

Posted 水务ICT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智慧水务软件二次开发入门介绍篇—使用ruby对ICM进行一些简单的操作相关的知识,希望对你有一定的参考价值。

Hello大家好,我叫陈泽伟,是一名水力模型工程师/智慧水务开拓者。今天我和大家分享一些非常简单的关于如何在ICM中使用ruby语言的介绍。

为什么要写这篇文章呢,因为最近智慧水务ICT这个话题实在是太火了,这个行业现在的需求如井喷一般喷薄而出。但是这个行业的从业人员素质普遍跟不上时代需求:我们暂且不谈智慧水务的顶层框架设计需要怎样的人才,仅仅就落实到每一个具体项目(需要对系统进行定制化的二次开发)上来看:不管是供水还是排水系统:懂水的人一般是给排水出身,总负责的主任工程师/总工/院长虽然经验丰富,但是对现在模型,算法,计算引擎的了解普遍不多,年轻一辈可能还能懂一些模型,但是一和他们聊到编程进行二次开发就一头雾水抓瞎了。对于学计算机专业的编程人员来说,跟他们讲什么叫产汇流模型,曼宁系数比让母猪上树还难。当然很重要的一点是,在现在这个互联网人才严重匮乏的大背景下,做智慧水务的公司很难招到一个正经985/211本科毕业的且有两年工作经验的程序员。有能力能干活的程序员都去BAT拿着高薪,走向人生巅峰了,程序员要转行也去搞金融去了,谁还和你一起挖下水道玩啊?


那我们换一个思路,既然很难招到靠谱的程序员,那我们学水的可不可以自己学习编程进行智慧水务方面的二次开发呢?根据我的在各个大学培训的经历,能考上清华/同济/华科/河海的市政工程的学生素质肯定是百里挑一的,不比那些学Computer science的差,只要他们有这方便的想法,可以持续学习,是绝对可以进行简单的二次开发。再不济,有了一定的编程经验,你以后给程序员派活,也能用他能听得懂的话告诉他你想要实现什么目的。


如果大家有这方面的想法,请大家尽早进行相关编程语言的学习,网上的教程一大堆。当然,我也会不定期的更新一些比较实用且简单的教程,与大家共同成长。那好,接下来我就和大家分享一下Ruby这门语言。


首先和大家简单介绍一下RubyRuby 是一种开源的面向对象程序设计的服务器端脚本语言,在20 世纪90 年代中期由日本的松本行弘(まつもとゆきひろ/YukihiroMatsumoto)设计并开发。在Ruby 社区,松本也被称为马茨(Matz)。Ruby 可运行于多种平台,如WindowsMACOS UNIX 的各种版本。为什么要给大家介绍Ruby呢,因为Ruby是ICM指定的二次开发语言,可以通过ICMExchange实现对ICM的二次开发。


RubyICM中的应用大体可以分成两类,一类Ruby是可以直接在ICM中运行,运行方式就是点击网络》运行ruby脚本即可。还有一种方法是在不开启ICM的情况下,通过ICM Exchange可以直接在外部调用ICM的大多数功能,比如修改模型网络,运行模型,输出结果等。


下面给大家讲两个简单的Ruby小例子,给大家露一小手。

  • 例子一:Hello World

不知道是谁规定的,任何语言学习,第一个程序一定是输出hello world,好接下来就和大家示范一下如何在ICM里面输出Hello world

首先,如果你没有写代码的软件,推荐下一个sublime text3。下载下来安装好之后,打开软件,



puts “hello world”。之后把文件保存成hello.rb..rbruby文件的后缀)

智慧水务软件二次开发入门介绍篇—使用ruby对ICM进行一些简单的操作



好了之后,打开ICM,点击网络》运行ruby,然后选择写好的这个程序。如果不出意外的话,恭喜你,ruby的第一个结果hello world就会出现在屏幕上面。

智慧水务软件二次开发入门介绍篇—使用ruby对ICM进行一些简单的操作



  • 例子二:查找有LID设施的子集水区的ID

这第二个例子,比较实用。就是查找有LID设施的子集水区的ID号。因为在ICM里面LID设施的存在是在SUDsControl这个二级表单里面的,因此,不能很方便的从子集水区这个一级表单里面对LID设施进行统计。

但是,在进行规划级别的海绵城市建模时,并不是所有的子集水区都会有LID设施的。一般我在做规划项目的时候,都会事先做一个选择表来确定哪些子集水区会有LID设施。当然,如果一开始没有进行选择表操作,后期想要进行此类统计的话就可使用下面的Ruby

智慧水务软件二次开发入门介绍篇—使用ruby对ICM进行一些简单的操作



简单介绍一下上面这个ruby,它是对所有的子集水区进行循环,查找子集水区的suds_control表单的长度(长度表示这个字段是否有值),如果子集水区的suds_control有值,就认为这个子集水区有LID设施,然后会输出这个子集水区的id号。       

智慧水务软件二次开发入门介绍篇—使用ruby对ICM进行一些简单的操作


 

有时候为了更方便的进行统计,我希望直接把是否有LID这个属性直接写到模型里面,于是,就有了下面的代码:功能是把LID设施的子集水区的用户备注8写入“LID


http://www.runoob.com/ruby/ruby-tutorial.html

我们团队会为你提供专业的技术咨询服务。


最后,感谢陈奕为本文提供的技术支持。


全球智库,为你服务。亲爱的朋友,我们下期再见。


以上是关于智慧水务软件二次开发入门介绍篇—使用ruby对ICM进行一些简单的操作的主要内容,如果未能解决你的问题,请参考以下文章

智慧化水务:降低污水处理过程中人力能耗成本

图扑软件数字孪生智慧水务,突破海绵城市发展困境

智慧水务未来技术发展方向预测探讨

长三角生态绿色一体化发展示范区开发者大会“吸睛王”来袭——智慧水务特展绽异彩

智慧水务网关解决方案

AIRIOT赋能水务行业深度转型,打造智慧水务“四化建设”