现在的位置: 首页 > 综合 > 正文

Delphi真的没落了吗?_说Delphi母语Pascal的另一个应用

2012年08月10日 ⁄ 综合 ⁄ 共 2427字 ⁄ 字号 评论关闭

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

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

抱歉!评论已关闭.