科技时报 全球最新科技资讯专业发布平台

这名80后是洋山自动化码头“大脑”的智造者

2019-10-21 08:46:56已围观次来源:澎湃新闻编辑:夏雪

  道虽迩,不行不至;事虽小,不为不成。

  上海从曾经的小渔村发展为如今的特大型城市,离不开拥有实干精神的奋斗者。他们来自各行各业,平凡却不平庸,兢兢业业地书写着历史。

  4月8日起,推出“新时代·奋斗者”系列稿件,向家国追梦人致敬。

  1980年出生的金鑫,毕业于上海同济大学计算机系本科,如今是振华重工智慧集团交通软件研发部经理,称得上是振华重工软件开发的一名“元老”,包括洋山深水港四期自动化集装箱码头在内,目前国内的3个自动化码头,金鑫全都贡献了自己的力量。

  2015年7月,振华重工签约洋山四期项目,开始承建世界上单体规模最大、自动化程度最先进的自动化码头。在公司领导的要求下,金鑫迎难而上,担任洋山深水港自动化集装箱码头项目软件技术负责人。

  洋山四期码头与其他项目不同,其设备规模前所未有,仅AGV(自动引导车)的数量就达到了130台之多。设备数量的增加,带来的是新的技术挑战,除程序算法需要重新开发和优化之外,AGV在通讯方面也出现了新的问题,原来的WiFi技术也不再适用,特定区域内的大批量设备通讯既需要保证稳定,还要确保可靠。除此之外,洋山四期项目还采取了很多创新技术,例如AGV自动换电,轨道吊对AGV侧面装卸,轨道吊海侧双箱自动化等等。

  为了保证洋山自动化码头的顺利开港,金鑫和他的团队在项目伊始,就对各个业务流程的每一个环节做了仔细的分析,对必须达到的性能指标做了充分的论证。在此基础上,他带领团队查找和筛选相关的成熟技术,排定科学研发计划,提前预测瓶颈环节,做好突击计划。

  与此同时,在项目过程中,金鑫尤其注意研发团队和码头用户工作的紧密结合,通过对作业流程的仔细分析,不放过任何一个细节,力求达到最完美的作业效果。金鑫和他的团队成员对每一个算法、每一个函数,进行仔细检查和测试,最大限度降低错误率,努力提高产品性能。

  2017年初,金鑫带领团队与用户明确开港功能要求。

  为了实现开港要求中的新功能,金鑫带领项目组再次进行封闭式开发,与用户一起集中讨论系统需求,并进行开发测试。在双方团队的精诚合作下,6月底已经基本完成今年的开港系统要求。但是,在后续五个多月中,除了按计划进行设备测试以外,还需要注意保证系统的稳定性和可靠性。因此,洋山四期用户开始进行模拟试生产作业,开启24小时压力测试模式。

  振华重工于2015年10月开始参与洋山自动化码头的建设,2017年12月10日,洋山自动化码头开港。

  在系统研发周期方面,与国外同类系统相比,其不仅极大缩短了研发周期,还在设备规模和功能复杂度方面处于领先地位,是全球综合自动化程度最高的码头。

  开港当日作业效率远超人工码头,集装箱从船上到箱区,从箱区到集卡,都是全自动运行,连AGV换电也是自动进行,大大节约了人工成本。这些,全靠金鑫和团队开发的软件控制。这些软件系统,成为洋山港四期自动化码头名副其实的“大脑”,上海洋山四期自动化集装箱码头由此获得2019年度中国港口协会科学技术奖(特等奖)。

  洋山自动化码头的顺利开港,是对金鑫及其团队历时2年以来辛勤工作的最大肯定。

  2016年,金鑫荣获洋山四期自动化码头装卸系统总承包项目劳动竞赛阶段性“先进个人”三等奖;2017年,金鑫与其团队在洋山四期自动化码头ECS项目管理部工作中,荣获振华重工劳动竞赛一等奖;同年,在洋山四期ECS项目效能监察工作中,荣获振华重工效能监察二等奖;2019年,团队荣获洋山四期自动化码头项目青年突击队称号。

  “做软件开发比较枯燥,要能够静下心来,检查每一行代码,看是否合理,是否达到了最优,工作量非常大。”金鑫说,但最终看到写的程序发挥作用,有了成果,就很有成就感。

  “能够参与洋山港的建设,是一件非常荣幸的事情,也给我们以后的工作带来了非常大的动力。”金鑫说。

window.onload = function (){ var oLi = document.getElementById("tab").getElementsByTagName("li"); var oUl = document.getElementById("ms-main").getElementsByTagName("div"); for(var i = 0; i < oLi.length; i++) { oLi[i].index = i; oLi[i].onmouseover = function () { for(var n = 0; n < oLi.length; n++) oLi[n].className=""; this.className = "cur"; for(var n = 0; n < oUl.length; n++) oUl[n].style.display = "none"; oUl[this.index].style.display = "block" } }}