每類本地變量或參數,都有用各自關鍵字對標識的自己的聲明子域。每個子域包含允許的詳細的聲明子域,子域可按任何順序定位。
下表顯示能夠在各種邏輯塊中聲明的變量或參數類型。
變量作為:
靜態變量VAR
...
END_VAR
臨時變量VAR_TEMP
...
END_VAR
塊參數作為:
輸入參數VAR_INPUT
...
END_VAR
輸出參數VAR_OUTPUT
...
END_VAR
輸入/輸出參數VAR_IN_OUT
...
END_VAR
靜態變量
靜態變量是本地變量,塊運行時其值被保留。用來保存功能塊的值,并包含在相應實例數據塊中。
句法(Syntax)
靜態變量在VAR / END_VAR聲明區內聲明。該聲明子域是FB聲明部分的一部分。編譯之后,該子域和塊參數子域決定了指定的實例數據塊的結構。
在該子域能夠:
建立變量,指定變量的數據類型和初始化變量。
如果要在當前FB中作為本地實例調(其他的)FB,則將一個被調用的FB聲明為靜態變量。
例子(Example)
VAR
RUN :INT;
MEASARR :ARRAY [1..10] OF REAL;
SWITCH :BOOL;
MOTOR_1,MOTOR_2 :FB100; // 實例聲明
END_VAR
存取(Access)
從如下代碼部分存取變量:
塊內存取(Access within the block):在功能塊的代碼部分能夠存取在聲明部分聲明的變量。詳細的解釋在標題為“賦值語句(Value Assignment)”節。
用實例DB進行外部存取(External access using the instance DB): 用索引存取能夠從其他塊存取變量,如DBx.變量。
臨時變量
Temporary Variables
臨時變量在本地屬于邏輯塊,不產生靜態內存區域,他們位于CPU的堆棧里。本塊正在運行時,其值才被保留。臨時變量不能從聲明它的塊外存取。一個OB、FB或FC首次執行前,臨時變量的值是不確定的。也不能被初始化。
如果只要求在OB、FB或者FC執行時記錄中間結果,可以聲明臨時數據。
句法(Syntax)
臨時變量在VAR_TEMP / END_VAR聲明部分里聲明。該聲明部分是FB、FC或OB的一部分。通過變量聲明以聲明變量名和數據類型。
例子(Example)
VAR_TEMP
BUFFER 1 : ARRAY [1..10] OF INT ;
AUX1, AUX2 : REAL ;
END_VAR
存取(Access)
變量總是從邏輯塊的代碼部分存取,變量是在聲明部分聲明的(內部存取)。參見題為“賦值語句(Value Assignment)”節。
塊參數
參數是占位符,塊被實際地調用時才指定一個值。在塊里聲明的占位符認為是指派了作為實際參數的值的形式變量。且參數提供了一個塊間交換信息的機制。
塊參數的類型(Types of Block Parameters)
被實際參數指定的形式輸入參數(數據流入塊)。
形式輸出參數用來傳遞輸出參數(數據 從塊流出)。
有輸入和輸出參數功能的形式輸入/輸出參數。
句法(Syntax)
在功能塊或函數的聲明部分制作形式參數的聲明,根據在三種聲明子域內的參數類型組合參數。在變量聲明中,指定參數名和數據類型。初始化只可能對一個FB的輸入和輸出參數。
聲明形式參數時,不僅只能用基本的、復雜的和用戶定義數據類型,也可用參數數據類型。
例子(Example)
VAR_INPUT // 輸入參數
MY_DB : BLOCK_DB ;
CONTROLLER : DWORD ;
TIMEOFDAY : TIME_OF_DAY ;
END_VAR
VAR_OUTPUT // 輸出參數
SETPOINTS: ARRAY [1..10] of INT ;
END_VAR
VAR_IN_OUT // 輸入/輸出參數
SETTING : INT ;
END_VAR
存取(Access)
塊參數可從邏輯塊的代碼部分進行存取如下:
內部存取: 從在其聲明部分已經聲明該參數的邏輯塊的代碼部分存取。在題為“賦值語句(Value Assignment)”和“表達式、操作和地址(Expressions, Operations and Addresses)”節有解釋。
用實例數據塊外部存取: 用特定的DB能夠存取功能塊的塊參數。
責任編輯:haq
-
西門子
+關注
關注
93文章
3008瀏覽量
115639 -
變量
+關注
關注
0文章
613瀏覽量
28329
原文標題:西門子SCL-聲明子域概述
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論