首页 > 其他分享 >PLC结构化文本(ST)——方法(Method)

PLC结构化文本(ST)——方法(Method)

时间:2024-09-03 10:14:14浏览次数:8  
标签:eatTimes END 变量 ST PLC VAR 方法 Method

PLC Structured Text Object Oriented Programming

PLC结构化文本(ST)——方法(Method)

什么是方法

一个方法是把一些相关的语句组织在一起,用来执行一个任务的语句块。---C#方法

方法是语句的集合,它们在一起执行一个功能。

  • 方法是解决一类问题的步骤的有序组合
  • 方法包含于类或对象中
  • 方法在程序中被创建,在其他地方被引用
    ---Java方法

PLC ST中的方法定义与上述类似,并无其它区别。国内PLC工程师在写ST代码时,使用最多的是PROGRAM(PRG)ACTION(ACT),显而易见这些程序块只适合面向过程编程(OPP),这里不讨论OPP和OOP哪种编程方式好,各有各的应用场景和范围。

这里只介绍OOP中的方法,当然方法Method并不是只可以在面向对象编程时才能使用,其实IEC61131-3新增的OOP功能及特性并不局限某种编程模式,换句话说在OPP中也可以使用属性、接口、方法等。只不过混合使用会让程序变得复杂难懂显得不伦不类。

建议:在PLC程序设计时,面向过程编程(OPP)不要掺杂面向对象编程(OOP)的功能特性,反之亦然。

如何创建方法

  • 1.FB创建方法Method
    FBCreateMethod

DefinedMethod

这里使用TwinCAT3程序编译器创建方法,使用CODESYS源生平台或CODESYS其它二次开发平台都是可以的。作者工作中使用TwinCAT3较多,所以后面的文章基本全部使用TwinCAT3作为工具编写例程。

//变量声明区
METHOD eat
VAR_INPUT
END_VAR
-----------------
// 代码编辑区
  • 2.PRG创建方法Method
    PrgCreateMethod

PrgDefinedMethod

//变量声明区
METHOD test
VAR_INPUT
END_VAR
-----------------
// 代码编辑区

Tips : 在使用ST面向对象编程时,一般只有一个PRG程序且不会给它创建Method方法块。所以后续介绍OOP时不会使用PRG + Method这种方式。

方法特点

  • 1.局部临时变量特点:
    在方法内部声明的变量为本地临时变量,FB及FB其它成员无法访问。比如在VAR...END_VAR内部声明的整型变量eatTimes仅作用于eat当前方法,其它任何地方无法访问。
METHOD eat
VAR_INPUT
END_VAR
VAR
	eatTimes : INT; // 吃饭次数
END_VAR
-----------
eatTimes := eatTimes + 1;// 临时变量,一个周期后初始化为0

Tips : 方法(Method)和函数(Function)类似,内部声明的变量为局部临时变量,每次退出(Return)之后变量会重新初始化。因此示例中eatTimes := eatTimes + 1并不会跟想象中的一样累加。

  • 2.方法内部声明静态变量(STAT
    在方法内部声明静态变量可以实现上述效果,每次程序退出时(Return)并不会重新初始化静态变量。
METHOD eat
VAR_INPUT
END_VAR
VAR_STAT
	eatTimes : INT; // 吃饭次数
END_VAR
----------
eatTimes := eatTimes + 1; // 静态变量,一个周期后仍然保持当前值.

Tips :PRGFB声明的内部变量默认都是静态变量,FUNMETHOD声明的内部变量默认都是临时变量。VAR_TEMP声明临时变量,VAR_STAT声明静态变量。

方法调用

// main 主程序中实例化
PROGRAM MAIN
VAR
	dog : FB_Dog; // 实例化FB_Dog,dog对象
	bTest : BOOL;
END_VAR
-----------
IF bTest THEN
	dog.eat();
	bTest := FALSE;
END_IF

实例化FB_Dog,使用对象dog点出eat方法。

Tips : 此处的方法默认为PUBLIC,方法修饰符PUBLIC、PRIVATE、PROTECTED、INTERNAL以及ABSTRACT以后会在后续章节介绍。

总结

方法Method是FunctionBlock的内部成员,方法内部声明的变量为局部临时变量,方法调用可以使用对象.方法名方式,也可以FB内部方法成员之间相互调用。

标签:eatTimes,END,变量,ST,PLC,VAR,方法,Method
From: https://www.cnblogs.com/JSheng/p/18393155

相关文章

  • 倍福PLC数据 转 IEC61850项目案例
    目录1 案例说明 12 VFBOX网关工作原理 13 准备工作 24 设置倍福PLC 25 配置网关参数采集倍福PLC数据 46 用IEC61850协议转发数据 77 网关使用多个逻辑设备和逻辑节点的方法 98 案例总结 111 案例说明设置倍福PLC,开通ADS通信设置网关采集倍福PLC数据把采集的数据转成I......
  • Postman完美平替!免费开源、轻量级、快速且美观的 API 调试工具Hoppscotch
    Hoppscotch:开源API的智能伙伴,让开发更简单、更高效。 - 精选真开源,释放新价值。概览Hoppscotch是一个开源的API开发工具,它为开发者提供了一个全面而直观的平台来构建、测试和监控API。作为一个开源项目,它具有高度的可定制性和灵活性,允许用户根据自己的需求进行调整。Hoppscotc......
  • VMware Workstation 17.5.2 Pro for Linux 更新 OEM BIOS 2.7 支持 Windows Server 20
    VMwareWorkstation17.5.2ProforLinux更新OEMBIOS2.7支持WindowsServer2025VMwareWorkstation17.5.2PromacOSUnlocker&OEMBIOS2.7forLinux在Linux上运行macOSSonoma请访问原文链接:https://sysin.org/blog/vmware-workstation-17-unlocker-linux/,查......
  • VMware Workstation 17.5.2 Pro for Windows 更新 OEM BIOS 2.7 支持 Windows Server
    VMwareWorkstation17.5.2ProforWindows更新OEMBIOS2.7支持WindowsServer2025VMwareWorkstation17.5.2PromacOSUnlocker&OEMBIOS2.7forWindows在Windows上运行macOSSonoma请访问原文链接:https://sysin.org/blog/vmware-workstation-17-unlocker-win......
  • C++(static_cast)
    目录1.语法2.示例3.为什么选择static_cast总结static_cast是C++中的一种类型转换运算符,用于在不同的数据类型之间进行安全转换。与C风格的强制类型转换不同,static_cast更加安全和明确。它主要用于进行类型转换时,确保转换是合法的,并且不会引入不必要的风险。1.语法......
  • Spring中基于redis stream 的消息队列实现方法
       本文主要介绍了消息队列的概念性质和应用场景,介绍了kafka、rabbitMq常用消息队列中间件的应用模型及消息队列的实现方式,并实战了在Spring中基于redisstream的消息队列实现方法。一、消息队列   消息队列是一种进程间通信或者同一个进程中不同线程间的通信方......
  • H. Sakurako's Test
    H.Sakurako'sTestSakurakowillsoontakeatest.Thetestcanbedescribedasanarrayofintegers$n$andataskonit:Givenaninteger$x$,Sakurakocanperformthefollowingoperationanynumberoftimes:Chooseaninteger$i$($1\lei\len$......
  • Python用CNN+LSTM+Attention对新闻文本分类、锂离子电池健康、寿命数据预测
    全文链接:https://tecdat.cn/?p=37561原文出处:拓端数据部落公众号 分析师:WeiqiaoJue在当今的数字化时代,数据的爆炸式增长既带来了机遇,也带来了挑战。如何从海量的数据中高效地提取有价值的信息,并进行准确的分类和预测,成为了众多领域亟待解决的关键问题。本研究通过CNN+LSTM+A......
  • 三、STM32F103标准库DMA+USART接收不定长数据
    项目中常用到串口通信,当需要使用串口中断接不定长数据时,可以参考以下示例:本实例使用DMA+USART空闲中断来进行不定长数据接受,在数据接收完成后将数据透传。结果将通过另一个串口信息显示。1、主函数配置#include"stm32f10x.h"#include"printfsupport.h"#include"usar......
  • SCKG:Reliable Semantic Communication System Enabled by Knowledge Graph——智能化
    1.语义通信的背景和重要性1.1.传统通信vs.语义通信        传统的通信技术关注的是比特和符号的准确传输,即如何在不丢失信息的前提下将数据从发送端传输到接收端。然而,随着数据量的爆炸性增长和对通信带宽的需求增加,传统通信方式逐渐接近香农容量的上限,难以满足......