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的人就不怎么样, 怎么说呢, 程序员写代码,我指写代码,用什么都没有两样,关键是看应用, 不同的应用选择一个合适的开发工具才是最重要的。

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

  • 相关阅读:
    085 Maximal Rectangle 最大矩形
    084 Largest Rectangle in Histogram 柱状图中最大的矩形
    083 Remove Duplicates from Sorted List 有序链表中删除重复的结点
    082 Remove Duplicates from Sorted List II 有序的链表删除重复的结点 II
    081 Search in Rotated Sorted Array II 搜索旋转排序数组 ||
    080 Remove Duplicates from Sorted Array II 从排序阵列中删除重复 II
    079 Word Search 单词搜索
    078 Subsets 子集
    bzoj2326: [HNOI2011]数学作业
    bzoj2152: 聪聪可可
  • 原文地址:https://www.cnblogs.com/volcanol/p/2070252.html
Copyright © 2011-2022 走看看