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#属性相比,只是结构上有点区别,程序本质上没有任何区别。若想实现属性的只读或只写删除对应的Get
或Set
方法即可。
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属性并无太大区别,都是对内部字段的包装,都有get
和Set
访问器,属性在OOP中的使用非常频繁。
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容