zoukankan      html  css  js  c++  java
  • Delphi真的没落了吗?_说Delphi母语Pascal的另一个应用

          我最近才接触Delphi语言, 而且从目前所有就业招聘的情况来看,Delphi的前景看起来有点不如某些开发工具光鲜,尤其在Borland公司被甲骨文Oracle收购后,好像Delphi注定要被世人遗忘一样, 同时在各大论坛、BBS上人们对Delphi的看法就有太多的成见,一般人都看不起Delphi和VB这样简单的语言,或者说对程序员来说缺少学习难度的语言或者开发工具。

          不过好像这些都是——真正的程序员——们的看法,而不是所有人的看法,大多数的程序员其实不知道其实对于Delphi的母语——Pascal——还有一个非常特别的应用:那就是作为国际上通用的PLC编程语言存在。

          在自动化控制领域, 有几种用的比较多的语言,最常用的就是LAD、STL和FBD。除了这些常用的语言之外还有一个比较常用的语言:那就是SCL。SCL语言是什么语言呢? 就是结构化文本编程。

          SCL语言对于一些复杂的运算,尤其是数学运算其编程的复杂程度较LAD、STL和FBD都要简单。下面我们来看看自动化界使用的Pascal语言应用,我们以西门子PLC为例子来做一个简单的比较,做一个简单的电机正反转的控制语言的实现。

    首先看看一个定义的函数块:FC

    STL语言:

     第一步定义数据接口

       IN数据接口:

           Estop   BOOL   //   急停  I0.0

           Power   BOOL  //    控制电源 I0.1

           StartDir    BOOL  //  正向启动   I0.2

           StartRev   BOOL  // 反向启动 I0.2

           Stop   BOOL  //停止  I0.3

            Test   BOOL   //试灯 I0.4

       OUT接口区:

           RunDIr BOOL  //正向启动 Q0.0

           RunRev BOOL  // 反向启动  Q0.1

           RunningLamp BOOL  // 运行指示灯  Q0.2

     第二步程序的实现:

    Net1: 正转控制

           A    Estop

           A   Power

           AN StartRev

           A  

           A(

           O  StartDir

           O  RunDir

            )

           = RunDoir

    Net2: 反转控制

           A   Estop

           A   Power

           AN StartDir

           A   Stop

           A(

            O StartRev

            O RunRev

            )

           = RunRev

    Net3: 指示灯

          O  RunDir

          O   RunRev

          O  Test

          = RunningLamp

    上面程序段是自动化人员可能会用到的一种较常用的实现;下面我们看看Pascal是怎么实现的。

    FUNCTION   "MotorStart"

    title

    version

    VAR_INPUT

            Estop:BOOL;

            Power:BOOL;

            StartDir:BOOL;

            StartRev:BOOLl;

            Stop:BOOL;

            Test:BOOL;

    END_VAR

    VAR_OUTPUT

            RunDir:BOOL;

            RunRev:BOOL;

            RunLamp:BOOL;

    END_VAR

    VAR_TEMP  

           DirTemp:BOOL;

           RevTemp:BOOL;

    END_TEMP

    Begin:

          // 正转

          IF  Estop=TRUE  AND  Power= TRUE AND Stop=TRUE AND StartDir=TRUE  THEN

              DirTemp:=TRUE;

          ElSE

              DirTemp:=FALSE;

          END_IF

          IF  DirTemp=TRUE  AND   StartRev=FALSE THEN

              RunDir:=TRUE;

          END_IF;

          //反转

          IF  Estop=TRUE  AND  Power=TRUE  AND Stop=TRUE  AND StartRev=TRUE  THEN

                     RevTemp:=TRUE;

          ElSE

                   RevTemp:=TRUE;

          END_IF

          IF  RevTemp  AND   StartDir=FALSE THEN

              RunRev:=TRUE;

          END_IF;

           //指示灯

          IF  RunDir=TRUE  OR  RunRev=TRUE  OR Test=TRUE  THEN

               RunningLamp:=TRUE ;

          END_IF

    END_FUNCTION

    上面的SCL程序段好像并没有比STL语言简洁或者容易多少,反而看起来很复杂, 当然如果做逻辑运算SCL实际上并不比其他语言简单。但是如果循环和所数学运算,用SCL就会简单多了。

    这里不多说了,以后有机会再讨论其他的应用。

    只想表达一个观点,其实Delphi的应用如果编写Windows的应用程序,应该不比Microsoft出品的Visual Studio中的C/C++组件差多少,如果说有一定的差距,那就是目前没有人用Pascal写过操作系统, 而目前主流的操作系统都是用C语言实现的,可能在这一点上人们会认为Pascal语言不如C语言,学C的人就是牛人,而学Pascal的人就不怎么样, 怎么说呢, 程序员写代码,我指写代码,用什么都没有两样,关键是看应用, 不同的应用选择一个合适的开发工具才是最重要的。

    一孔之见,欢迎弯腰低头找板砖........................

  • 相关阅读:
    @JsonFormat和@DateTimeFormat
    13位时间戳和时间格式化转换,工具类
    springboot配置hibernate jpa多数据源
    Mysql向数据库插入数据时,判断是否存在,若不存在就插入数据
    服务器启动完成执行定时任务Timer,TimerTask
    java中服务器启动执行定时任务
    Java定时任务
    阿里大鱼短信发送,放到项目中报错Java.lang.NoClassDefFoundError:com/aliyuncs/exceptions/ClientException,已解决
    MD5加密(相同的字符串,每次加密后的密文是相同的)
    常见的集中加密方法BASE64、MD5、SHA、HMAC
  • 原文地址:https://www.cnblogs.com/volcanol/p/2070252.html
Copyright © 2011-2022 走看看