Copyright: ISaGRAF V3.4


 使用碼產生器

藉由ISaGRAF工作平台視窗的 "驗證" 與 "製作" 命令，將自動開啟碼產生器視窗，而應用碼產生運作結束時，碼產生器視窗並不會自動關閉，所以使用者依然可以從視窗功能表中進入所有的碼產生用到的命令及選項。

主要的命令

編譯選項

產生C原始碼

觀看訊息

定義資源


主要的命令

"檔案" 功能表包含程式語法檢查及碼產生等命令。

製作應用碼

程式語法檢查

模擬變更

使用滑鼠左鍵在錯誤訊息上按兩下將開啟程式並且將游標放到錯誤上。


製作應用碼

"製作" 命令產生案件的整個應用碼。在產生任何碼之前，這個命令會檢查宣告及程式的語法，單一程式單獨編譯時無法偵測到的任何錯誤，於碼產生時都可以偵測到。這樣的動作亦可應用到轉換表、I/O變數連結及程式庫連結。當偵測到錯誤時，碼產生器會停止程式編譯，在繼續碼產生器之前必須修正程式錯誤。程式若早已被檢查過 (沒有錯誤產生)，且於上次 "驗證" 過後未再更改過，將不會重新編譯一次。而變數宣告及應用程式一致的檢查，每次都會執行。於程式檢查期間，"製作" 操作能使用ESCAPE鍵來中斷。

注意：	假如程式的區域變數宣告被變更過，程式會被重新驗證，假如全域變數被變更過，所有的程式都會被重新驗證。


程式語法檢查

"驗證程式" 命令允許使用者驗證一個程式，即使所選的程式從上次驗證過後未被變更，依然會加以編譯。"驗證字典" 命令允許使用者驗證案件中所有用到的變數的宣告。

"驗證所有程式" 檢查案件所有程式的語法，即使其中一些程式未被變更過，當偵測到程式的錯誤時，這個命令依然不會停止，這樣可以用來產生案件程式的所有錯誤的列表，這個命令可以按ESCAPE鍵來終止它。


模擬變更

"更新" 命令將模擬所有案件程式已被變更過，所以於下次 "製作" 執行時，所有程式皆會被驗證。"開啟" 命令用來開啟最後驗證的程式，對於直接進入偵測到語法錯誤的程式來說，這個命令是非常有用的。


編譯選項

"編譯選項" 命令用來設定ISaGRAF碼產生器的主要參數，以建立及最佳化目標硬體碼。這個命令的目標是根據ISaGRAF目標硬體來選擇產生器的型態，以及根據所期望的編譯時間與應用執行期的需求去設定最佳化參數。

選擇目標硬體

SFC處理

最佳化選項

"上載" 按鈕開啟另一個對話框，讓你可以選取壓縮原始檔的功能，以便與應用碼一起下載至目標硬體內。想要使用 "上載" 的功能，請參考 "上載" 章節以得到進一步的資訊。


選擇目標硬體

上半部列出可用目標硬體碼的列表，">>" 符號指出選擇的目標硬體。ISaGRAF碼產生器在一次編譯動作中可以產生三種不同的碼。使用 "選擇" 與 "反向選擇" 按鈕來設定所需的目標硬體碼集 (根據你的目標硬體)。下面是標準的ISaGRAF目標硬體：

SIMULATE：	這個碼用於工作平台上的ISaGRAF模擬器。假如這個目標硬體沒有被選擇，應用碼產生後，模擬器將無法執行。

ISA86M：	這是一個TIC碼 (Target Independent Code，與目標硬體無關的碼)，用於Intel處理器為基礎的ISaGRAF核心程式 (kernel)，這個處理器型態僅是於產生的碼中，位元組 (byte) 置放順序不同而已。

ISA68M：	這是一個TIC碼，用於Motorola處理器為基礎的ISaGRAF核心程式，這個處理器型態僅是於產生的碼中，位元組 (byte) 置放順序不同而已。

SCC：	選擇這個目標硬體將使ISaGRAF編譯器產生結構化的 "C" 語言原始碼，可被再編譯及與ISaGRAF目標硬體核心程式庫連結，產生一個可嵌入的可執行碼。

CC86M：	選擇這個目標硬體將使ISaGRAF編譯器產生無結構的 "C" 語言原始碼，可被再編譯及與ISaGRAF目標硬體核心程式庫連結，產生一個可嵌入的可執行碼。當ISaGRAF 3.23之前的版本不支援結構化的 "C" 原始碼，使用此選項可以與先前的版本相容。

根據你的硬體手冊去得知安裝於你的PLC上的ISaGRAF目標硬體核心程式的型態，其它的目標硬體型態 (機器碼，C原始碼_) 可以被支援於未來的ISaGRAF工作平台版本。


SFC處理

選取 "使用嵌入的SFC引擎" 對話框，可用來開啟ISaGRAF SFC引擎的使用。這種模式將是較好的方式，它會導致較高的執行期效能。然而在ISaGRAF目標硬體的某些特別的做法時，目標硬體引擎可能會遺失掉。若顧客的目標硬體有用到ISaGRAF碼前置處理器，你必須移除這個選項，讓ISaGRAF編譯器將SFC圖編譯成低階指令。參考你的硬體手冊，以得到使用這個選項的更多資訊。


最佳化選項

下面是用於ISaGRAF碼產生器最佳化目標硬體碼的參數，你能夠從 "編譯選項" 對話盒來設定它。"內定" 按鈕用於移除所有的最佳化選項，以便於減少編譯時間。

當 "執行兩次最佳化" 選項被設定，ISaGRAF碼最佳化會執行兩次，第二次最佳化過程一般會比第一次過程較不明顯。

當 "評估常數表示式" 選項被設定，編譯器會求得常數表示式的值。譬如，數值表示式 "2 + 3" 於目標硬體碼中會以 "5" 來取代。若這個選項未設定，常數表示式會於執行期間才加以計算。

當 "懸置未用的標籤" 選項被設定，最佳化過程會簡化掉跳躍及程式標籤，以便懸置未用的標籤或空的跳躍。

當 "變數複製最佳化" 選項被設定，暫時變數 (用於儲存暫時的結果) 的使用會做最佳化，這個選項一般與 "最佳化表示式" 選項一起使用。當這個選項被設定，最佳化過程會重複使用表示式及副表示式 (在程式中使用超過兩次) 的結果。

當 "懸置未用碼" 選項被設定，最佳化過程會懸置沒意義的碼。譬如，若程式為如下的敘述："var := 1; var := X;"，產生相對的碼僅為："var := X;"。

當 "最佳化算數運算" 選項被設定，最佳化過程會根據特別的運算來簡化算數運算。譬如，表示式 "A + 0" 將被取代為 "A"。當 "最佳化布林運算" 選項被設定，最佳化過程會根據特別的運算來簡化布林運算。譬如，布林表示式 "A & A" 將被取代為 "A"。

當 "建立二元決定圖" 選項被設定，最佳化過程會以縮減的條件跳躍運算來取代布林方程式 (混和AND，OR，XOR與NOT的運算元)，轉換僅有當期待的跳躍順序執行時間少於原表示式的時間才會加以處理。

下述的表格集合每個參數期待的最佳化及需要的編譯時間：

效能提升	編譯時間

執行兩次最佳化	xxxx	(*)

最佳化常數表示式	xxxxxxxxxx	xxxx

懸置未用的標籤	xxxx	xxxxxxxxxx

最佳化變數複製	xxxx	xxxxxxxxxx

最佳化表示式	xxxx	xxxxxxxxxx

懸置未用的碼	xxxx	xxxxxxxxxx

最佳化算數運算	xxxxxxxxxx	xxxx

最佳化布林運算	xxxxxxxxxx	xxxx

建立二元決定圖	xxxxxxxxxxxxxxx	xxxxxxxxxxxxxxx

(*) 編譯時間乘以兩倍


產生C原始碼

ISaGRAF工作平台可以產生 "C" 語言的原始碼，用這樣的方法，所有的應用程式內容 (包含SFC圖形描述)、資料庫定義及碼的順序都以 "C" 原始碼格式產生。有兩種樣式的 "C" 原始碼可以產生：

CC86M	(C原始碼 - 3.04版) 產生非結構化的 "C" 原始碼，假如你的目標軟體為3.23之前的版本，請選擇此種型態。

SCC	(結構化 C 原始碼) 產生非結構化的 "C" 原始碼，假如你的目標軟體為3.23或之後的版本，最好選擇此種型態。

下述的兩個檔案將被產生於案件目錄下：

APPLI.C	應用程式原始碼

APPLI.H	"C" 語言定義

若產生的是結構化 "C" 原始碼，應用程式的每個程式將產生一個 ".C" 原始碼及一個 ".H" 定義檔，另外再加上 "APPLI.C" 及 "APPLI.H" 兩個共用檔。

這些檔案必須被編譯且連結至ISaGRAF目標硬體程式庫，以產生最後的可執行碼。參考 "ISaGRAF I/O 發展工具使用者指南"，以得到關於建議的實行技術方面的更進一步資訊。

注意：	當ISaGRAF應用程式是用 "C" 來編譯，一些如應用程式下載、線上變更與中斷點等除錯功能將不再可用。


觀看訊息

"編輯" 功能表包含觀看碼產生期間所建立的各種文字檔與於碼產生視窗上的語法檢查操作等命令。碼產生視窗是一個包含碼產生或語法檢查操作期間的文字區，所有的訊息皆儲存於磁碟上，所以可以使用 "編輯" 功能表命令來測試。

編輯命令

"清除螢幕" 命令用來清除視窗內的文字區。於每次碼產生或語法檢查以前，這個視窗也會自動清除。"複製" 命令用於複製顯示的文字到視窗剪貼簿中，所以可以給諸如ISaGRAF文字編輯器等其它的應用程式所使用。

觀看編輯器輸出訊息

"執行訊息" 命令顯示最後一次 "製作" 或 "驗證" 動作所顯示於視窗文字區的所有訊息，這個命令可以觀看所有的錯誤訊息。

"編輯" 功能表的其它命令允許使用者監看創造於語法驗證及碼產生期間的輔助文字檔，這些檔案通常不用於ISaGRAF案件中。


定義資源

"選項" 功能表的 "資源" 命令允許使用者去定義資源。資源是使用者定義的任何格式的資料 (網路組態，硬體設定 _)，這些資料將會合併到產生的碼中，以便下載到目標硬體PLC中。ISaGRAF 硬體核心不會直接拿這樣的資料作運算，而是用於目標硬體PLC上其它的軟體。參考你的硬體手冊以得到關於可利用的資源的更進一步說明。

資源定義檔

語言參考

例子

資源編譯器

實行


資源定義檔

資源被定義於ISaGRAF案件的 "資源定義檔" 中，它是一個純文字檔，由ISaGRAF資源編輯器所處理。當應用程式碼建立時，這個編譯器會自動執行。這一節解釋這個檔案的語法，資源定義檔使用ST語言的語法規則。註解 (以 "(*" 開始，"*)" 結束) 能被插入於文字中的任何一處，字串以單引號為界線。參考本手冊的第二部分，可得到關於輸入數值的語法格式的更進一步解釋。


語言參考

下面是用於資源定義檔中的關鍵字與敘述表。

ULONGDATA

VARLIST

BINARYFILE

TEXTFILE

TARGET

ANYTARGET

FROM

TO


ULONGDATA

意義：	指示為整數值集合的資源，以不帶符號的32位元整數存於目標硬體碼中，且以資源定義檔指定的順序儲存。各種數值之間以逗點來區隔，資源名稱不能超過15個字元。

語法：	ULONGDATA '<資源名稱>'

BEGIN

...選擇目標硬體...

...數值集合...

END

例子：	ULongData 'MYDATA'

Begin

...

0, -1, 100_000,	(*十進位*)

16#A0B1, 2#1011_0101	(*16進位,二進位*)

End


VARLIST

意義：	指定變數位址集合的資源。在原始定義檔中，變數以名稱來識別，而在目標硬體碼中，變數位址以不帶符號的16位元整數儲存，位址以資源定義檔中指定的順序儲存。各變數間必須以逗點分隔。資源名稱不能超過15個字元。

語法：	VARLIST '<資源名稱>'

BEGIN

...選擇目標硬體...

...變數名稱集...

END

例子：	VarList 'LIST'

Begin

...

Var100, MyParameter, Command, Alarm

End


BINARYFILE

意義：	指定二元檔資源。資源中的資料儲存於一個MS-DOS檔中，目標硬體資源定義加上路徑檔名來完成。ISaGRAF資源編譯器不會轉換換列字元。資源名稱不能超過15個字元。

語法：	BINARYFILE '<資源名稱>'

BEGIN

...選擇目標硬體...

FROM '<來源路徑>'

TO '<目的路徑>'

END

例子：	BinaryFile 'MYFILE'

Begin

...

From 'c:\user\config.bin'

To '/dd/user/appl/config.dat'

End


TEXTFILE

意義：	指定文字檔資源。資源資料儲存於ASCII檔案中，目標硬體資源定義以路徑檔名加以完成。ISaGRAF資源定義檔會根據目標硬體主系統轉換法轉換換列字元。資源名稱不能超過15個字元。

語法：	TEXTFILE '<資源名稱>'

BEGIN

...選擇目標硬體...

FROM '<來源路徑>'

TO '<目的路徑>'

END

例子：	TextFile 'MYFILE'

Begin

...

From 'c:\user\config.bin'

To '/dd/user/appl/config.dat'

End


TARGET

意義：	指定必須包含於資源中的目標硬體碼名稱。參考先前所說的編譯選項區域，以得知更多關於所用的目標硬體更多的說明。"Target" 敘述在同一個資源區塊中能出現多次，以便選擇多個目標硬體，若有指定 "Any Target" 敘述，則這個敘述不能使用。

語法：	TARGET '<目標硬體名稱>'

例子：	BinaryFile 'MYFILE'

Begin

Target 'ISA86M'

Target 'ISA68M'

...

End


ANYTARGET

意義：	指定碼產生器建立所有的目標硬體碼，都必須整合到資源中。ISaGRAF碼產生器能於相同的 "製作" 命令產生幾個目標硬體碼。假如已指定一個或多個 "Target" 敘述，這個敘述就不能使用。

語法：	ANYTARGET

例子：	ULongData 'MYDATA'

Begin

AnyTarget

...

End


FROM

意義：	指定BinaryFile或TextFile資源的來源檔 (位於ISaGRAF安裝的PC上)。用於路徑元件 (磁碟機，目錄，檔名，延伸檔名) 的區隔字元必須遵循MS-DOS系統格式。

語法：	FROM '<來源路徑>'

例子：	BinaryFile 'MYFILE'

Begin

...

From 'c:\user\config.dat'

To '/dd/user/appl/config.dat'

End


TO

意義：	指定BinaryFile或TextFile資源的目的檔 (位於目標硬體系統上)。用於路徑元件 (磁碟機、目錄、檔名、延伸檔名) 的區隔字元必須遵循目標硬體系統格式。

語法：	TO '<目標硬體路徑>'

例子：	TextFile 'MYFILE'

Begin

...

From 'c:\user\config.dat'

To '/dd/user/appl/config.dat'

End


例子

以下是一個完整的資源定義檔例子：

(* 資源定義檔 *)

ULongData 'DATA1'	(* 許多數值的集合 *)

Begin

   Target 'ISA86M'	(* 僅用於這個目標硬體 *)

   1, 0, 16#1A2B3C4D, +1, -1	(* 數值 *)

End

VarList 'VLIST1'	(* 許多變數的集合 *)

Begin

   Target 'ISA86M'	(* 僅用於這個目標硬體 *)

   Valve1, StateX, Command, Alrm1	(* 變數名稱 *)

End

BinaryFile 'FILE1'	(* 二元檔資源 *)

Begin

   AnyTarget	(* 可用於所有的目標硬體 *)

   From 'c:\user\updatef.bin'	(* PC上的原始檔 *)

   To 'updatef.cfg'	(* PLC上的目標硬體檔 *)

End

TextFile 'FILE2'	(* 文字檔資源 *)

Begin

   Target 'ISA68M'

   From 'c:\nw\nwbd.txt'	(* PC上的原始檔 *)

   To '/nw/dat/nwbd'	(* PLC上的目標硬體檔 *)

End


資源編譯器

假如資源已被輸入資源定義檔中，於ISaGRAF碼產生後將出現一個對話框。按 "開始編譯" 按鈕執行資源編譯器，訊息及錯誤將顯示於視窗中。按 "離開" 避免資源編譯，則資源將不會加入ISaGRAF碼中。


實行

ISaGRAF不限制資源數、資料列及檔案大小，資源將儲存於產生碼之後。下面是資源目錄的格式 (以C表示)：

__RESOURCE:

{

  long nbres;	/* 定義的資源數 */

  {

    char name[16];	/* 資源名稱 */

    long type;	/* 資源資料型態 */

    long size;	/* 資料區塊的確實大小 */

    uint32 data;

    uint32 path_offset;	/* 指到字串的指標 */

  } /* 記錄大小 */

}

下面是 "type" 欄位的可能值：

1 = binary file (二元檔)

2 = text file (文字檔)

3 = ulong data (不帶符號長整數資料) (path_offset欄此時不使用)

4 = variable list (變數集) (path_offset欄此時不使用)

資源編譯器會根據目標硬體系統格式來轉換文字檔的換列字元。所有的指標都是32位元的相對位址偏移值，所有的資源名稱及路徑都以空字元當做字串結束。路徑及資料緊跟著目錄結構之後。