找回密码
 立即注册
首页 业界区 业界 PLC结构化文本(ST)——属性(Property)

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

艾晓梅 2025-6-9 09:37:05
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#代码示例:
  1. public class Person
  2. {
  3.     private string name;
  4.     public string Name
  5.     {
  6.         get { return name; }
  7.         set { name = value; }
  8.     }
  9. }
  10. 或者
  11. public class Person
  12. {
  13.     public string Name { get; set; }
  14. }
复制代码
TwinCAT3 ST代码示例:
  1. // 创建类(FB)
  2. FUNCTION_BLOCK FB_Person
  3. VAR_INPUT
  4. END_VAR
  5. VAR_OUTPUT
  6. END_VAR
  7. VAR
  8.     name : STRING;
  9. END_VAR
  10. -------------------------
  11. // 创建属性
  12. PROPERTY Name : STRING
  13. -------------------------
  14. // Get方法(访问器)
  15. VAR
  16. END_VAR
  17. -------------
  18. Name := name;
  19. ------------------------
  20. // Set方法(访问器)
  21. VAR
  22. END_VAR
  23. -------------
  24. 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中的使用非常频繁。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册