PLC结构化文本(ST)——属性(Property)
  0MYASp6SnAa9 12天前 35 0

PLC Structured Text Object Oriented Programming

PLC结构化文本(ST)——属性(Property)

属性的定义

C# 中的属性(Property)是类和结构体中用于封装数据的成员。它们提供了一种方式来定义类成员的访问和设置规则,通常用于隐藏字段(Fields)的内部实现细节,同时提供控制数据访问的机制。---C#属性

在PLC ST中属性的定义与高级语言相同,或者说ST中属性这一概念就是仿照高级语言中属性设计的。此处引入一个概念字段(Fields),在POU内部声明的成员变量可以统称为字段(Fields)这是高级语言中的概念,同样适用于PLC ST。

属性的特点

  • 属性可以看作是对字段的包装器,通常由 get 和 set 访问器组成。
  • 属性(Property)不会确定存储位置。相反,它们具有可读写或计算它们值的 访问器(accessors)。
  • 例如,有一个名为 Student 的类,带有 age、name 和 code 的私有域。我们不能在类的范围以外直接访问这些域,但是我们可以拥有访问这些私有域的属性。---C#属性

Tips : IEC61131-3并没有对OOP支持的很完善,例如POU内部声明的变量在实例化之后仍然可以通过“对象.组件”访问POU内部成员,这表明POU内部声明的变量默认是Public且Readonly。这点目前与高级语言C#稍有不同。

属性实现方式

C#代码示例:

public class Person
{
    private string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}
或者
public class Person
{
    public string Name { get; set; }
}

TwinCAT3 ST代码示例:

// 创建类(FB)
FUNCTION_BLOCK FB_Person
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
    name : STRING;
END_VAR
-------------------------
// 创建属性
PROPERTY Name : STRING
-------------------------
// Get方法(访问器)
VAR
END_VAR
-------------
Name := name;
------------------------
// Set方法(访问器)
VAR
END_VAR
-------------
name := Name;

与C#属性相比,只是结构上有点区别,程序本质上没有任何区别。若想实现属性的只读只写删除对应的GetSet方法即可。

Tips : PLC经常在线监控变量当前值,但是属性变量并不显示当前状态值,需要使用断点来监控及其不方便。官方提供了两种特性来解决这个问题。{attribute 'monitoring' := 'variable'}{attribute 'monitoring' := 'call'} 详细使用方法查阅官方文档:https://content.helpme-codesys.com/zh-CHS/CODESYS Development System/_cds_pragma_attribute_monitoring.html

总结

C#中属性与PLC ST属性并无太大区别,都是对内部字段的包装,都有getSet访问器,属性在OOP中的使用非常频繁,所以各位工程师需要好好研究学习。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 12天前 0

暂无评论

推荐阅读
  ghDVQLArV5FR   2024年08月07日   51   0   0 面向对象
  GTLjg49kZWO2   2024年08月07日   47   0   0 面向对象
0MYASp6SnAa9