Copyright: ISaGRAF V3.4


共同物件

ISaGRAF程式設計所使用的資料基本上有一些主要特徵和共同物件。這種物件可以使用在任何以SFC、FC、FBD、LD、ST或IL所撰寫的任何程式中。

基本型態

常數表示法

變數

註解

定義字


基本型態

程式 (用任何語言撰寫的) 中所用的任何常數、運算式或變數都必須標示出其所屬的型態。在圖形式運算和文字敘述時，此型態必須一致。目前程式設計可以使用的基本型態如下：

布林 (BOOLEAN)：	邏輯 (真或假) 值

類比 (ANALOG)：	整數或實數 (浮點) 值

計時器 (TIMER)：	時間值

訊息 (MESSAGE)：	文字字串

注意：計時器型態只能包含少於一天的時間值，不能用來儲存日期。


常數表示法

常數形態也是一種型態。相同符號不能用來表示不同型態的常數形態。

布林常數表示法

整數類比常數表示法

實數類比常數表示法

時間常數表示法

訊息字串常數表示法


布林常數表示法

只有兩種布林常數形態：

TRUE (真)	等價於整數值1

FALSE (假)	等價於整數值0

"True" 及 "False" 這兩個關鍵字在拼字方面是不分大小寫的。


整數類比常數表示法

整數常數形態是指具有正負號的長整數 (32位元) 值：從-2147483647到+2147483647。整數類比常數在表達上必須以下面所列的任一基底為基本原則。整數常數必須在數值前加上一個前置字 (prefix) 以識別其所使用的基底：

基底	前置字	範例

十進位法 (DECIMAL)	無	-908

十六進位法 (HEXADECIMAL)	"16#"	16#1A2B3C4D

八進位法 (OCTAL)	"8#"	8#1756402

二進位法 (BINARY)	"2#"	2#1101_0001_0101_1101

底線字元 ( '_' ) 可以用來將數位的群組隔開，這作法並不是特別重要，只是用來增加常數形態的可讀性。


實數類比常數表示法

實數類比常數形態可以用十進位法或科學記號表示法來表示。其中，整數和小數的部份是用小數點 ( '.' ) 來隔開。另外，小數點必須用來辨識實數常數形態和整數常數形態的不同。在科學記號表示法中，是用 'E' 或 'F' 字母來隔開尾數部份和指數部份，而指數部份必須是一個有正負號的整數值，大小從-37到+37。以下是實數類比常數形態的範例：

3.14159	-1.0E+12

+1.0	1.0F-15

-789.56	+1.0E-37

"123" 這種表示法並不能表示一個實數常數形態。它正確的實數表示法應該是 "123.0"。


時間常數表示法

時間常數形態的時間數值是從0 second (0秒) 到23h59m59s999ms (23時59分59秒999毫秒)。可以允許的最小單位是一個毫秒。所使用的標準時間單位如下：

時	小時的數目後必須緊接著 "h" 字母

分	分的數目後必須緊接著 "m" 字母

秒	秒的數目後必須緊接著 "s" 字母

毫秒	毫秒的數目後必須緊接著 "ms" 字母

時間常數形態的數值前必須以 "T#" 或 "TIME#" 為前置字。前置字和時間單位的字母是不分大小寫的。有些單位若沒有使用到，就可以不必標示出來。範例如下：

T#1H450MS	一小時又450毫秒

time#1H3M	一小時又三分

"0" 這種表示法並不能表示一個時間數值，而是一個類比常數。


訊息字串常數表示法

字串或訊息常數形態是指文字字串。文字字串前必須有一個單引號，而且文字字串後必須緊接著另一個單引號。例如：

'THIS IS A MESSAGE'

警告：	在一個字串常數形態中，不能使用單引號 ''' 字元。撰寫程式原始碼時，若想使用字串常數形態，必須將它撰寫在同一列上。而它的長度不能超過255個字元 (包括空白字元)。

可以用兩個單引號來表示空字串常數形態，而這兩個單引號之間不可以包含任何的空白或跳位字元，如下：

''   (*這是一個空字串*)

若在一些特殊的字元前加上一個錢號字元 ( '$' )，就可以將其視為非列印字元，使用在字串常數形態中。各種情形如下所示：

順序	含意	ASCII (十六進位)	範例

$$	'$' 字元	16#24	'I paid $$5 for this'

$'	單引號	16#27	'Enter $'Y$' for YES'

$L	換行	16#0a	'next $L line'

$R	歸位到行首	16#0d	'   llo $R He'

$N	新的一行	16#0d0a	'This is a line$N'

$P	新的一頁	16#0c	'lastline $P first line'

$T	跳位符號	16#09	'name$Tsize$Tdate'

$hh  (*)	任何字元	16#hh	'ABCD = $41$42$43$44'

(*) "hh" 是將所要表達的字元用ASCII碼的十六進位法數值表示出來。


變數

對一個程式來說，其所使用的變數可以是區域的或全域的。區域變數只能在一個程式使用。而全域變數可以在案件的任何程式中使用。

保留字

變數的直接表示法

布林變數

類比變數

計時器變數

訊息字串變數

變數名稱必須遵循下面的規則：

-	字數不可以超過十六個字元

-	第一個字元必須是一個英文字母

-	除了第一個字元之外，其他的字元可以是英文字母、阿拉伯數字或底線字元


保留字

下面列出了ISaGRAF的保留字。這些保留字 (關鍵字) 不能是另一個程式、變數、 'C'函數或功能方塊的名稱：

A	ANA, ABS, ACOS, ADD, ANA, AND, AND_MASK, ANDN, ARRAY, ASIN, AT, ATAN,

B	BCD_TO_BOOL, BCD_TO_INT, BCD_TO_REAL, BCD_TO_STRING, BCD_TO_TIME, BOO, BOOL, BOOL_TO_BCD, BOOL_TO_INT, BOOL_TO_REAL, BOOL_TO_STRING, BOOL_TO_TIME, BY, BYTE,

C	CAL, CALC, CALCN, CALN, CALNC, CASE, CONCAT, CONSTANT, COS,

D	DATE, DATE_AND_TIME, DELETE, DINT, DIV, DO, DT, DWORD,

E	ELSE, ELSIF, EN, END_CASE, END_FOR, END_FUNCTION, END_IF, END_PROGRAM, END_REPEAT, END_RESSOURCE, END_STRUCT, END_TYPE, END_VAR, END_WHILE, ENO, EQ, EXIT, EXP, EXPT,

F	FALSE, FEDGE, FIND, FOR, FUNCTION,

G	GE, GFREEZE, GKILL, GRST, GSTART, GSTATUS, GT,

I	IF, INSERT, INT, INT_TO_BCD, INT_TO_BOOL, INT_TO_REAL, INT_TO_STRING, INT_TO_TIME,

J	JMP, JMPC, JMPCN, JMPN, JMPNC,

L	LD, LDN, LE, LEFT, LEN, LIMIT, LINT, LN, LOG, LREAL, LT, LWORD,

M	MAX, MID, MIN, MOD, MOVE, MSG, MUL, MUX,

N	NE, NOT,

O	OF, ON, OPERATE, OR, OR_MASK, ORN,

P	PROGRAM

R	R, REDGE, READ_ONLY, READ_WRITE, REAL, REAL_TO_BCD, REAL_TO_BOOL, REAL_TO_INT, REAL_TO_STRING, REAL_TO_TIME, REDGE, REPEAT, REPLACE, RESSOURCE, RET, RETAIN, RETC, RETCN, RETN, RETNC, RETURN, RIGHT, ROL, ROR,

S	S, SEL, SHL, SHR, SIN, SINT, SQRT, ST, STN, STRING, STRING_TO_BCD, STRING_TO_BOOL, STRING_TO_INT, STRING_TO_REAL, STRING_TO_TIME, STRUCT, SUB, SYS_ERR_READ, SYS_ERR_TEST, SYS_INITALL, SYS_INITANA, SYS_INITBOO, SYS_INITTMR, SYS_RESTALL, SYS_RESTANA, SYS_RESTBOO, SYS_RESTTMR, SYS_SAVALL, SYS_SAVANA, SYS_SAVBOO, SYS_SAVTMR, SYS_TALLOWED, SYS_TCURRENT, SYS_TMAXIMUM, SYS_TOVERFLOW, SYS_TRESET, SYS_TWRITE, SYSTEM,

T	TAN, TASK, THEN, TIME, TIME_OF_DAY, TIME_TO_BCD, TIME_TO_BOOL, TIME_TO_INT, TIME_TO_REAL, TIME_TO_STRING, TMR, TO, TOD, TRUE, TSTART, TSTOP, TYPE,

U	UDINT, UINT, ULINT, UNTIL, USINT,

V	VAR, VAR_ACCESS, VAR_EXTERNAL, VAR_GLOBAL, VAR_IN_OUT, VAR_INPUT, ,VAR_OUTPUT,

W	WHILE, WITH, WORD,

X 	XOR, XOR_MASK, XORN

只要關鍵字 (keyword) 的字首是一個底線 ( '_' ) 字元，它就是內部關鍵字，不可以在文字敘述的指令中使用。


變數的直接表示法

ISaGRAF可以在程式的原始碼中使用變數的直接表示法，來表達空置的連結點。空置的連結點是指未連結至一個已宣告的I/O點變數的連結點。變數的直接表示法總是用一個 "%" 字元作為前導字元，以便識別。

對於單板上的連結點，其變數直接表示法的命名規則如下。"s" 是板子上的插槽編號，"c" 是板子上的連結點編號。

%IXs.c	布林輸入板上的空置連結點

%IDs.c	整數輸入板上的空置連結點

%ISs.c	字串輸入板上的空置連結點

%QXs.c	布林輸出板上的空置連結點

%QDs.c	整數輸出板上的空置連結點

%QSs.c	訊息輸出板上的空置連結點

對於複合設備的連結點，其變數直接表示法的命名規則如下。"s" 是設備的插槽編號，"b" 是複合設備中單板的指標，"c" 是複合設備上單板的連結點編號。

%IXs.b.c	布林輸入板上的空置連結點

%IDs.b.c	整數輸入板上的空置連結點

%ISs.b.c	訊息輸入板上的空置連結點

%QXs.b.c	布林輸出板上的空置連結點

%QDs.b.c	整數輸出板上的空置連結點

%QSs.b.c	訊息輸出板上的空置連結點

範例如下：

%QX1.6	板子#1的第六個連結點 (布林輸出)

%ID2.1.7	設備#2上，板子#1的第七個連結點 (整數輸入)

變數的直接表示法不可以有 "實數" 資料型態。


布林變數

布林意味邏輯。此變數可以是布林數值TRUE (真) 或FALSE (假)。布林變數通常會在布林形態中使用。它可以具有的屬性如下：

內部：	由程式更新數值的記憶體變數

常數：	具有初始值的唯讀記憶體變數

輸入：	連接至一個輸入裝置的變數 (由系統更新數值)

輸出：	連接至一個輸出裝置的變數

警告：	當宣告布林變數的時候，可以定義在除錯期間取代 'true' 和 'false' 數值的字串。假如用適合於程式的語言將字串宣告成 '定義字' (defined words)，就能在程式中使用這些字串。


類比變數

類比意味連續，此變數是具有正負號的整數或實 (浮點) 數。類比變數可以具有的格式如下：

整數	32位元帶符號的整數：從-2147483647到+2147483647

實數	標準IEEE 32位元浮點數值 (單精度)

正負號的一個位元+假數的23個位元+指數的8個位元

實數類比變數的指數數值不能少於-37或大於+37。類比變數可以具有的屬性如下：

內部：	由程式更新數值的記憶體變數

常數：	具有初始值的唯讀記憶體變數

輸入：	連接至輸入裝置的變數 (由系統更新數值)

輸出：	連接至輸出裝置的變數

注意：	當實數變數被連接至I/O裝置時，相對應的I/O驅動器會將之轉為等價的整數值。

警告：	在同一個類比運算式中，不能將整數和實數類比變數或常數形態混和在一起使用。


計時器變數

計時器意味時鐘或計數器。此變數具有時間數值，而且通常在時間表示式中使用。時間數值不能超過23h59m59s999ms (23小時59分59秒999毫秒)，而且不能是負值。計時器變數是以32位元的字組單位來儲存。它的內部表示法是一個以毫秒為單位的正數。

計時器變數可以具有的屬性如下：

內部：	由程式管理的記憶體變數，而且由ISaGRAF系統更新數值

常數：	具有初始值的唯讀記憶體變數

警告：	計時器變數不可以具有輸入或輸出的屬性。

ISaGRAF系統會自動更新計時器變數的數值。當計時器變數處於動作 (active) 狀態時，它的數值會根據目標硬體系統的即時時鐘自動地遞增。可以用下面的ST語言敘述式來控制一個時間：

TSTART	開始計時器的自動更新

TSTOP	停止計時器的自動更新


訊息字串變數

訊息或字串變數包含文字字串。在程序運作期間，可以改變字串的長度。當宣告變數的時候，訊息變數的長度不能超過特定的容量 (最大長度)。訊息的容量限制是255個字元。訊息變數可以具有的屬性如下：

內部：	由程式更新數值的記憶體變數

常數：	有一個初始值的唯讀記憶體變數

輸入：	連接至一個輸入裝置的變數 (由系統更新數值)

輸出：	連接至一個輸出裝置的變數

字串變數可以包含標準ASCII表格 (ASCII碼從0到255) 中的任何字元。文字字串中可以包含空 (null) 字元。在標準的ISaGRAF程式庫中，有一些 "C" 函數不能正確地操作包含空 (ASCII碼為0) 字元的訊息。


註解

在文字敘述的語言 (例如ST和IL語言) 中，可以自由的插入註解。一個註解必須啟始於特定的字元 "(*" 和終止於 "*)" 。在ST語言的程式中，註解可以插在任何地方，而且可以不必寫在同一列。

以下是註解的範例：

counter := ivalue;   (* 指定主計數器 *)

(* 這是一個二行的

註解 *)

c := counter (* 你可以於任何地方置放註解 *) + base_value + 1;

註解裡不能插入另一個註解，也就是說，在一個註解裡不能使用 "(*" 字元。

警告：	在IL語言中，只能在一個指令列的最後加上註解。


定義字

ISaGRAF系統允許使用者對常數形態，真和假布林形態，關鍵字或複雜的ST語言運算式再定義。達成這個目的的方式，就是必須指定一個識別字 (identifier) 名稱給對應的表示式。例如：

YES	是	TRUE

PI	是	3.14159

OK	是	(auto_mode AND NOT (alarm))

當定義這樣的等式關係之後，就可以在ST程式的任何地方使用此識別字，以取代附屬於此識別字的表示式。下面是使用識別字撰寫的ST程式範例：

If OK Then

   angle := PI / 2;

   isdone := YES;

End_if;

對一個程式來說，其所使用的定義字的範圍可以是區域的、全域的或共同的。

區域的定義字只能在一個程式中使用。

全域的定義字可以在案件的任何程式中使用。

共同的定義字可以在任何案件的任何程式中使用。

使用者需注意到一件事，就是共同的定義字可以由拷貝 (Archive) 管理員分開地儲存。

警告：	當使用者用不同的ST等價式將同樣的識別字定義兩次時，只有最後的定義式會成立。例如：

定義：	OPEN	是	FALSE

OPEN	是	TRUE

意味：	OPEN	是	TRUE

定義字命名時必須遵循下面的規則：

-	名稱不可以超過16個字元

-	第一個字元必須是一個英文字母

-	若名稱的字數不止一個字元，那麼除了第一個字元之外，其他的字元可以是英文字母、阿拉伯數字或底線 ( '_' ) 字元

警告：	不可以用一個定義字去定義另外一個定義字。例如，不能有下面的情形：

只能用常數或變數和運算式來撰寫完整的等價式子：

PI2 	是	6.28318