自控工程师为什么要学习高级程序设计语言


  我们通常把C++、C#和JAVA等程序设计语言归类为高级程序设计语言,这是相对于汇编语言这种第二代编程语言而言的。我们自控行业常用的PLC编程语言LAD、FBD和SCL等其实也可以看作为高级编程语言(对比于STL这种类似汇编一样的编程语言来看),只不过它们的语言特性远没有C++等这些现代编程语言丰富。本文所描述的高级程序设计语言指的是C++、C#这些现代编程语言。

1、为什么要学习高级程序设计语言

PLC从最初发明开始就是面向电气工人的,从现在各个厂家的编程手册中就可以看出来,什么线圈、能流、触点等等,全部是电气概念。随着工业制造水平的日益提高,随之对自动控制的要求也越来越高,最初设计的PLC已经慢慢的满足不了工业生产需求,随后中、大型PLC开始逐渐登场。在近几年的中大型PLC中已经开始慢慢的淡化了这些电气概念,在很多方面开始有向计算机概念靠近的趋势,比如西门子提出的模块化编程等等。

从我个人观点来看,所谓的模块化编程说法并不准确。模块化编程是面向过程程序设计时代的概念。它是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一个确定的功能,并在这些模块之间建立必要的联系,通过模块的互相协作完成整个功能的程序设计方法。模块化编程强调的是任务分割,而不是面向对象中的封装、接口等。虽然我们也知道西门子所说的模块化编程指的就是类似于面向对象编程的概念,但是PLC编程也是软件设计,这种混淆概念的叫法并不可取。

在我的拙作《TIA Portal高级编程》中最开始将这种现代化的PLC编程方法称之为面向组件编程。为什么我没有称之为面向对象编程?组件是采用面向对象编程思想开发的功能单元,它除了强调封装、继承、接口等之外更重要的是具有更好的分发性,可以很方便的在不同项目之中重复使用。在西门子PLC中,我们将工业生产中最常用的气缸、马达等设备封装为FB,然后借助类型/全局库技术进行分发的这样一种方式就和面向组件程序设计是同样的思想。所以我认为称之为面向组件设计更为合理。

图1 PLC中的组件

  值得一提的是,我们常说的背景DB英文全称是Instance Data Block,翻译为“实例”其实更为合理。不知道在国内为什么变成了背景DB。HwBasicLib就是使用面向组件设计思想开发的一套用于TIA Portal的基础组件库。

图二 WinCC中的组件

  当然我们今天的主题并不是PLC编程,而是高级程序设计语言,也就是可以开发应用程序的编程语言。作为一名自控工程师,我们学习高级程序设计语言的目的并不一定是为了转型或者去开发软件。当然如果你对软件开发很有兴趣也可以考虑转型。我们学习高级程序设计语言的基本目的是可以更好的理解现代软件开发思想。这种软件开发思想应用在自动化中将会极大的提升我们的编程水平、开拓视野,对很多在编程中遇到的问题将会有全新的看法。

  其实我一直以来都认为学计算机出身的人做自控会比学电气出身的人做的更好,就是因为长期的思想熏陶,他们对问题的解决思路会完全不同。简单的来说,体现在PLC编程上,学电气出身的人会使用面向过程技术来设计,而学计算机的人肯定毋庸置疑的采用面向对象技术来设计。非常遗憾的是目前几乎所有学校的自动化专业、培训机构、市面上的自动化教材还停留在原始的程序设计阶段。编写《TIA Portal高级编程》的初衷就是为了在自动化行业中普及这一编程技术。

  如果你还希望自己在高级程序设计方面能更进一步,那么可以继续学习GUI、数据库、网络通信、WEB等知识。前面也说过,现代工业生产对自动化工程师的要求越来越高,仅仅会玩PLC和组态软件面对很多问题会有捉襟见肘的感觉。举个简单的例子,我们可能会遇到业主要求我们的控制系统能够和MES交互、在WINCC上实现复杂的所见即所得的报表、PLC数据定时保存在指定的数据表中等等,这些需求都要求我们具有或多或少的高级程序设计背景才能完成。

  综合以上,我认为作为自控工程师来说,学习一门高级程序设计语言是非常有必要的。

2、如何选择高级程序设计语言

软件工程发展了这么多年,目前可供选择的开发语言和工具很多,那么我们到底该选择哪一种呢?这种困惑相信每一个想学高级程序设计的人都会有的。我个人最开始是学习VB6的,后来微软的战略转移到DotNet平台上后VB6也就不再更新了。在寻找替代语言和工具期间比较了Delphi、Java、C#等多种语言和工具,最终才确定的C#。下表是我对这些语言和工具的比较结果。没有最好的,只有最合适的,每种语言都有自己的长处,适合自己的就是最好的。需要说明的是下表中的优势和劣势是针对自控行业的。

  对于自控行业来说,一门编程语言及开发工具是否具有丰富的GUI库非常重要,因为很多时候我们需要实现人机交互的功能。仅凭这一点,上表中的很多编程语言就无需考虑,比如JAVA、Python、C等等。其次自控工程师一般时间精力有限,很多时候需要现场调试,不可能有太多的时间精力放到学习程序开发上面,那么C++建议不要考虑,因为没有大量的时间付出连入门都困难。

  VB6是二十年前的产品了,虽然它简单易用,也有丰富的GUI控件,但是大多非常丑陋,未来的操作系统能否支持能不好说,所以也不建议学习。另外学习资料少、使用人数少的程序设计语言也不建议选择,因为一旦遇到问题常常需要耗费大量精力,甚至很多时候无解。

  这样一来只剩下C#可供选择了,C#是微软未来的主打开发语言,语言特性丰富、语法简洁优美。丰富的文档支持和DotNet Framework足以使我们可以解决在学习过程中遇到的绝大部分问题。虽然在互联网行业C#并不是很受欢迎,但是在工业生产中,大部分MES是使用C#开发的。大名鼎鼎的博途软件就是基于DotNet Framework开发的。基于以上,如果您对程序设计有兴趣的话,我们建议选择C#。

3、C#与工业自动化

C#与工业自动化》是HwLib(慧兰博)技术团队出品的一部专门针对自控工程师的C#教材。它和市面上的其它C#教材的不同点在于下面几个方面。

  • 减少不常用的语法特性介绍,利于入门;
  • 针对自控行业的案例,比如专门的通信章节包含了S7通信、Socket通信、OPC UA;
  • 针对组态软件的插件开发(比如WinCC),拓展其功能;
  • 针对工业4.0的工厂数据中心;
  • 机器视觉(未来);

  除了上述的几个特点外,常用的案例也不缺少,比如数据库、数据报表等。《C#与工业自动化》的目标是学以致用,避免出现那种看书时好像啥都理解,但是针对实际问题却不知从何下手的尴尬场景。

-- END --

如果您对我们的高端教程有兴趣的话可以x宝上搜索“hwlib”或者“慧兰博”,或者点击这里:HwLib(慧兰博)

关于HwLib(慧兰博)技术团队的更多信息:www.hwlib.cn

HwLib(慧兰博)技术团队技术资料:https://pan.baidu.com/s/1dF3gpt3

HwLib(慧兰博)公众号

专注于工业自动化高端编程应用

HwLib(慧兰博)微信号

优质内容筛选与推荐>>
1、Unity学习笔记
2、你在AutoHotKey面前居然敢比调音量 - imsoft.cnblogs
3、什么叫做隐式迭代?
4、约瑟夫环:递归算法(唐伯虎点秋香)
5、android studio下生成jni头文件


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号