[CodeSys] 第一章:初始Codesys与ST-1.2.3ST语言的基本介绍

[复制链接]
查看38812 | 回复0 | 2024-11-12 09:52:12 | 显示全部楼层 |阅读模式


   ST语言是一种高级语言,其语法类似于C语言。大家学英语的时候肯定学过英语的语法,学完语法之后就能知道该怎么用英语表达自己的想法了。其实学习编程也是一样的,我们先熟悉编程语言的语法,然后用掌握的编程语言语法及词组,进行“造句”,然后会造句之后,我们就可以尝试写一些功能段落,功能段落掌握之后,我们就可以尝试使用“ST"写”文章“了。

    上面说到ST语法和C语言的语法很像很像,但是其又比C语言高级一点。C语言是面向过程的编程语言,而ST文本是面向对象的编程语言。下面为大家简单介绍一下面向对象的编程思想。

    什么是面向对象呢?举一个我个人理解的例子:对于人这种对象来说,人具有眼睛,耳朵,鼻子,手,脚等基础属性。这些属性是正常人都具备的,所以我们就可以将这些基础属性封装成一个功能块。

    然后我们在用程序表示张三李四王二麻子的时候,都可以调用这个功能块,因为张三李四王二麻子都有这些人类的基本特征,而对于他们个人来说唯一不同的就是这些基础属性的特征值,比如眼睛多大,耳朵多大,眼睛是圆的还是扁的,是单眼皮还是双眼皮等等。我们只需要向这个基本属性功能块中传入相应的特征值参数就行了。

    大家理解了么?这就是面向对象的思想,我们首先有一个目标对象,而这个目标对象,可能有一些通用的属性我们可以拿出来,做成一个基础功能块,便于给其他类似的对象使用这个功能块里的程序,这样能大大提高程序的重复使用率,减少我们编写重复性的代码,这样编程效率就提升了。

    我们编程的时候,就可以根据我们的目标对象特有的特征属性,抽象出这类“对象”的基础属性特征,在我们其他地方要使用这种“对象”的时候。我们就可以直接“实例化”这种类型的对象。只有熟悉了面向对象的编程思想之后,我们才有可能把ST语言功力发挥到极限。

    好的,面向对象的概念,大家应该是搞清楚了,我们看下面一个例子,看不懂也没关系,先有个概念就好了。以下四段代码,实现的都是报警器报警功能。每段代码实际上都是YJ_BeepAlarm这一种类型,只是传入这个功能块里的参数不同罢了。在YJ_BeepAlarm这个功能块类型中,我们抽象出所有报警功能具备的基础属性,然后写成了YJ_BeepAlarm功能块。

    第一部分,我们首先声明了四种报警功能声明为同一种类型的变量也就是YJBeepAlarm类型变量。下面FB启动报警、FB单批报警、FB丢标报警、FB_缺料报警这些都是我们起的“姓名”,而YJ_BeepAlarm,就是这些变量对应的“对象类型”。

//------四种报警功能声明-----------------------

FB_启动报警            : YJ_BeepAlarm;

FB_单批报警            : YJ_BeepAlarm;

FB_丢标报警            : YJ_BeepAlarm;

FB_缺料报警            : YJ_BeepAlarm;

//------启动报警功能块的调用--------------------

FB_启动报警(

    ib_报警启动:= (gi_停切_自动步骤 = 6000),

    ib_报警停止:= gr_停止RTrig.Q,

    if_报警周期:= 1000,

    if_报警占比:= 0.4,

    id_报警次数:= 3,

    ob_报警完成=> gb_启动报警完成,

    ob_报警输出=> vb_启动报警);   

//-------缺料报警停机功能--------------------------

FB_缺料报警(

    ib_报警启动:= ib_放料缺料接近光电,

    ib_报警停止:= gr_停止RTrig.Q,

    if_报警周期:= 500,

    if_报警占比:= 0.3,

    id_报警次数:= 3,

    ob_报警完成=> ,

    ob_报警输出=> vb_缺料报警);

FB_单批报警(

    ib_报警启动:= (vf_单批剩余个数 <= hf_批满报警提前) AND hb_批满报警,

    ib_报警停止:= gr_停止RTrig.Q,

    if_报警周期:= 150,

    if_报警占比:= 0.9,

    id_报警次数:= 1,

    ob_报警完成=> ,

    ob_报警输出=> vb_单批报警);

FB_丢标报警(

    ib_报警启动:= gf_送料_丢标次数 <> gf_送料_丢标次数Old AND hb_白袋彩袋,

    ib_报警停止:= gr_停止RTrig.Q,

    if_报警周期:= 150,

    if_报警占比:= 0.8,

    id_报警次数:= 1,

    ob_报警完成=> ,

    ob_报警输出=> vb_丢标报警);



      
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则