PLC結(jié)構(gòu)化文本(ST)——屬性(Property)
PLC Structured Text Object Oriented Programming
PLC結(jié)構(gòu)化文本(ST)——屬性(Property)
屬性的定義
C# 中的屬性(Property)是類和結(jié)構(gòu)體中用于封裝數(shù)據(jù)的成員。它們提供了一種方式來定義類成員的訪問和設(shè)置規(guī)則,通常用于隱藏字段(Fields)的內(nèi)部實現(xiàn)細節(jié),同時提供控制數(shù)據(jù)訪問的機制。---C#屬性
在PLC ST中屬性的定義與高級語言相同,或者說ST中屬性這一概念就是仿照高級語言中屬性設(shè)計的。此處引入一個概念字段(Fields),在POU內(nèi)部聲明的成員變量可以統(tǒng)稱為字段(Fields)這是高級語言中的概念,同樣適用于PLC ST。
屬性的特點
- 屬性可以看作是對字段的包裝器,通常由 get 和 set 訪問器組成。
- 屬性(Property)不會確定存儲位置。相反,它們具有可讀寫或計算它們值的 訪問器(accessors)。
- 例如,有一個名為 Student 的類,帶有 age、name 和 code 的私有域。我們不能在類的范圍以外直接訪問這些域,但是我們可以擁有訪問這些私有域的屬性。---C#屬性
Tips :
IEC61131-3并沒有對OOP支持的很完善,例如POU內(nèi)部聲明的變量在實例化之后仍然可以通過“對象.組件”訪問POU內(nèi)部成員,這表明POU內(nèi)部聲明的變量默認是Public且Readonly。這點目前與高級語言C#稍有不同。
屬性實現(xiàn)方式
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代碼示例:
// 創(chuàng)建類(FB)
FUNCTION_BLOCK FB_Person
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
name : STRING;
END_VAR
-------------------------
// 創(chuàng)建屬性
PROPERTY Name : STRING
-------------------------
// Get方法(訪問器)
VAR
END_VAR
-------------
Name := name;
------------------------
// Set方法(訪問器)
VAR
END_VAR
-------------
name := Name;
與C#屬性相比,只是結(jié)構(gòu)上有點區(qū)別,程序本質(zhì)上沒有任何區(qū)別。若想實現(xiàn)屬性的只讀或只寫刪除對應(yīng)的Get或Set方法即可。
Tips : PLC經(jīng)常在線監(jiān)控變量當前值,但是屬性變量并不顯示當前狀態(tài)值,需要使用斷點來監(jiān)控及其不方便。官方提供了兩種特性來解決這個問題。
{attribute 'monitoring' := 'variable'}和{attribute 'monitoring' := 'call'}詳細使用方法查閱官方文檔:https://content.helpme-codesys.com/zh-CHS/CODESYS Development System/_cds_pragma_attribute_monitoring.html
總結(jié)
C#中屬性與PLC ST屬性并無太大區(qū)別,都是對內(nèi)部字段的包裝,都有get和Set訪問器,屬性在OOP中的使用非常頻繁。

浙公網(wǎng)安備 33010602011771號