Copyright: ISaGRAF V3.4


進階程式技巧

此章節包含了更多有關於ISaGRAF工作平台與目標系統的資訊。在閱讀此節之前，建議使用者先熟悉ISaGRAF的工具和使用程序。

關於ISaGRAF工具更多資訊

鎖住I/O點與虛擬I/O點

PC-PLC連結

ISaGRAF目錄

應用程式符號

ISaGRAF "不限點" (WDL) 版工作平台的限制


關於ISaGRAF工具的更多資訊

當使用ISaGRAF編輯工具時，使用者可按滑鼠右鍵來開啟一彈出式視窗，此視窗包含了主要的編輯指令，此選單將開啟於目前滑鼠游標的位置。此功能對執行剪貼指令時，所降低的滑鼠使用量來說是非常有用的。

ISaGRAF工具提供多工執行。雖然相同的工具無法開啟兩次來編輯同一文件，但以相同工具開啟不同視窗，或是以平行處理來編輯不同物件，則是可行的。

其它工具列上的指令圖示按鈕，也可以得到其資訊。在工具列空白的區域雙按滑鼠左鍵，將出現一彈出式選單，顯示工具列的內容。或是將滑鼠游標停留在圖示按鈕上以顯示和圖示相同的文字指令。


鎖住I/O點與虛擬I/O點
鎖住I/O與虛擬I/O點

若定義I/O板為虛擬，處理程序將不連結到實際的I/O點上。當I/O板定義為虛擬時，ISaGRAF 核心的運作並不會改變，唯一的不同在於輸入值不會去讀取輸入感測器，輸出值不會去更新到輸出設備，在此模式下，可以使用ISaGRAF除錯器來變更輸入值。虛擬屬性可以使用在任何一種板子上。要使板子有虛擬的屬性，必須在使用應用程式執行碼產生器前，定義I/O板時修改其屬性。虛擬的屬性是一種靜態特性，而當應用程式停止或重新啟動時將被儲存。

另一種可能是鎖住I/O變數。它將實際設備與相對應的ISaGRAF I/O變數連結關係中斷掉。變數是鎖住或解開是透過除錯器來執行。變數鎖住是一種動態處理，而且當程式重新啟動時是不會被記憶起來的。鎖住的使用只能一次對一個變數執行。下方是主要I/O控制摘要一覽：

虛擬屬性	鎖住屬性

可選取的工具	I/O板連結	除錯器

定義方式	靜態	動態

選取的模式	板子	變數

應用程式	確認與測試	保持

下面的方塊圖將說明I/O資料在ISaGRAF運作中的流程：

當輸入變數被鎖住時，其它通往資料庫的數個通道並沒有改變，但輸入的設備會不被連結，輸入的值可藉由除錯器更改並由ISaGRAF核心處理：

當輸出變數被鎖住時，則執行的核心與輸出驅動程式將失去連結。在這個例子中，使用ISaGRAF除錯器，經由輸出驅動程式仍可能對輸出設備作輸出：

當設定輸入點屬性為虛擬時，則輸入資料庫和連結的輸入設備將失去連結，虛擬I/O驅動程式取代實際的。

對輸入板或是輸出板設定成虛擬屬性，其設定方式都是跟據相同的規則。對輸出板而言，ISaGRAF核心會更新輸出資料庫。而與資料庫連結的輸出設備，不論如何將失去連結。虛擬I/O驅動程式將取代實際的。

總結所有的可能性：


PC-PLC連結

大多數關於ISaGRAF工作平台與目標PLC間的通訊不良問題，都在除錯器視窗中被顯示成 "斷線" 的狀態訊息。在任何診斷測試被執行前，當目標PLC中沒有應用程式在執行時，其通訊的參數就應該被確認。如此一來串列的通訊連結將可由其自己確認，並能將執行時產生的影響區隔開來。

C語言 (用來撰寫轉換函數與C函數的描述) 允許與目標系統直接存取。程式撰寫的錯誤可能會產生系統的錯誤，或導致ISaGRAF系統不正常的表現。而當I/O的驅動程式是以ISaGRAF IO發展工具所開發出來的話，則此類的程式可能會發生。舉例來說，系統錯誤可能是因為I/O板連結到不對的bus位址而造成的。下面的圖表顯示錯誤診斷的綜合列表：

狀態	情況	診斷
"斷線" (下載之前)		- 目標硬體尚未啟動  - 沒有通訊線\錯誤的通訊線  - 錯誤的通訊參數  - ISaGRAF目標硬體安裝不正確
"斷線" (下載之後)	以單步模式啟動	- 錯誤的I/O組態  - 系統當機
	以真實模式啟動	- 錯誤的I/O組態  - 系統當機 ("C" 程式的因素)
"沒有應用程式"		- 應用程式未下載  - 應用程式未啟動 ("C" 程式的因素)  - Intel/Motoroal 選取錯誤  - 錯誤的硬體版本


ISaGRAF目錄

ISaGRAF工作平台工作於單一磁碟的目錄結構。此結構的根目錄是使用者在安裝ISaGRAF時所定義的，而內定的ISaGRAF根目錄名稱為ISAWIN。下面是由安裝程式所產生出來的標準的目錄結構：

下面是標準ISaGRAF下層目錄結構：

路徑	內容
APL	ISaGRAF案件所在的根目錄 一個案件就是一個資料夾 資料夾也就包含了此案件的所有資料
	你可以將其他的案件群組置放於其他的目錄底下。ISaGRAF 安裝時會產生 "SMP" 目錄，此目錄存放應用樣例
COM	"共同" 範圍的資料 能被任何案件使用的資料
EXE	ISaGRAF的程式和說明檔案
LIB	ISaGRAF程式庫： - 元件集 - 每個元件的參數或介面 - 技術註記
LIB\IOC	I/O組態的原始碼
LIB\FNC	以IEC語法所撰寫的函數的原始碼
LIB\FBL	以IEC語法所撰寫的功能方塊的原始碼
LIB\SRC	轉換函數與C函數的原始碼
LIB\DEFS	轉換函數與C函數的標頭檔
LIB\RELS	轉換函數與C函數的目的碼
LIB\DEV	發展 "C" 程式庫的指令檔 如makefiles、link lists，等等......
TMP	暫存檔：此目錄TMP是保留給ISaGRAF的執行碼產生器使用，因此不要去刪除它。

上述的各個下層路徑可以被搬移到其它磁碟中的其它位置。當使用者沒有一個標準的目錄結構的話，此時就應於初使檔案ISA.ini中的WS001區域的宣告一些下層目錄的參數，而此檔位於ISaGRAF下層目錄EXE中。下面是WS001區域的輸入項目：

Isa	ISaGRAF目錄結構的根目錄
IsaExe	ISaGRAF程式與說明檔案的根目錄
IsaApl	ISaGRAF案件的根目錄
IsaTmp	ISaGRAF暫存檔案的根目錄
IsaSrc	給程式庫的原始檔用的目錄
IsaDefs	給程式庫的標頭檔用的目錄

請注意，假使你改變IsaTmp指向另一個目錄的話，則你必須在你所指目錄下增加OBJS、RELS和DATA等目錄。下面是個更改WS001區域中所指向的目錄，重新定義標準的ISaGRAF磁碟目錄結構：

;file c:\ISAWIN\EXE\ISA.ini

[WS001]

Isa=c:\isawin

IsaExe=c:\isawin\exe

IsaApl=c:\isawin\apl

IsaTmp=c:\isawin\tmp

IsaSrc=c:\isawin\lib\src

IsaDefs=c:\isawin\lib\defs

當你想加入 "C" 函數或功能方塊到ISaGRAF的目標硬體時，則目錄\ISAWIN\LIB\DEV是用來儲存開發檔案如:命令檔、makefiles、maps、等等...，而目錄\ISAWIN\LIB\RELS則是用來儲存當 "C" 編譯時所產生的目的檔，ISaGRAF的 "C" 程式庫也需要此目錄來作一些連結的動作。


應用程式符號

每一個ISaGRAF應用程式的物件都是藉由名稱和內部的虛擬位址來作為參考的依據，而名稱和位址是經由執行碼產生器所決定的。變數的虛擬位址並不是在宣告此變數時所輸入的網路位址。虛擬位址是用在通訊的工作，以及使用OEM選項所產生獨特的 "C" 應用程式上。當執行ISaGRAF執行碼產生器時，對所有案件物件 (變數、程式、步驟 ...) 會把名稱及虛擬位址依法定根據來產生ASCII檔案。經由此檔我們可輕易的由使用者的應用程式來知悉有關ISaGRAF靜態資料庫的資訊。此檔的名稱為 "APPLI.TST"，位於ISaGRAF案件的目錄中： "\ISAWIN\APL\proname" (proname是案件的名稱)，本章節有更多有關 "APPLI.TST" 檔案的詳細格式的描述。其中的主要符號則顯示在下方：

VA	虛擬位址

ATTR	變數的屬性

USP	"C" 函數

變數可能有的值都顯示在下面。此類的值會出現在 "屬性" 欄位中：

+X	內部變數

+C	唯讀內部變數

+I	輸入變數

+O	輸出變數

除了虛擬位址外，所有的數字都是以十進位的整數來表示。虛擬位址 (VA) 則是以十六進位4個數字來表示；且數字前面加上一個字元 "!"。例如：

123	這是一個十進位數值

!A003	這是一個十六進位數值

下面是檔案 "APPLI.TST" 的主要結構，檔案由一串的區塊所組成，一個區塊就是一串記錄，每個記錄都是以一行文字來表示，每一個區塊都是以標頭文字開始。

起始區塊

描述區塊

結束區塊

下面是一個區塊的一般語法：

@ <block_name> <arguments>

#record...

#record...

...

下面是第一個區塊的結構，包含了應用程式的主要資訊：

@ISA_SYMBOLS,<appli_crc>

#NAME,<appli_name>,<version>

#DATE,<creation_date>

#SIZE,G=<nbprg>,S=<nbstep>,T=<nbtra>,L=0,P=<nbpro>,V=<nbvar>

#COMMENT,cj international

appli_crc	應用程式符號檢查加總

appli_name	應用程式的名稱

version	ISaGRAF工作平台版本號碼

creation_date	應用程式產生的日期

nbprg	程式的數目

nbstep	SFC步驟的數量

nbtra	SFC轉移條件的數量

nbpro	"C" 函數使用的數量

nbvar	變數的總數量

結束區塊的結構，用來表示已到了檔案的結尾，如下所示：

@END_SYMBOLS

下面的區塊結構是用來描述應用程式中的程式：

@PROGRAMS,<nbprg>

#<va>,<name>

#...

nbprg	此區塊中定義的程式數量

va	程式中的虛擬位址

name	程式名稱

此區塊的結構是用來描述SFC程式中的步驟，如下所示。注意，有一虛擬步驟是定義給每個非SFC程式使用的：

@STEPS,<nbsteps>

#<va>,<name>,<father>

#...

nbsteps	此區塊中定義的步驟數量

va	步驟的虛擬位址

name	步驟名稱

father	父程式的虛擬位址

此區塊的結構是用來描述SFC程式中的轉移條件，如下所示：

@TRANSITIONS,<nbtrans>

#<va>,<name>,<father>

#...

nbtrans	此區塊中定義的轉移條件數量

va	轉移條件的虛擬位址

name	轉移條件名稱

father	父程式的虛擬位址

此區塊的結構是用來描述應用程式中的布林變數，如下所示：

@BOOLEANS,<nb_boo>

#<va>,<name>,<attr>,<program>,<eq_false>,<eq_true>

#...

而且假如變數數量超過4095時：

X#(1.<varno>),<name>,<attr>,<program>,<eq_false>,<eq_true>

nb_boo	此區塊中定義的變數數量

va	變數的虛擬位址

vamo	位址範圍 (在布林資料型態中)

name	變數名稱

attr	變數屬性

program	主程式的虛擬位址

或是以 "!0000" 表示全域變數

eq_false	值為假時的表示字串

eq_true	值為真時的表示字串

此區塊的結構是用來描述應用程式中的類比變數，如下所示：

@ANALOGS,<nb_ana>

#<va>,<name>,<attr>,<program>,<format>,<unit>

#...

而且假如變數數量超過4095時：

X#(2.<varno>),<name>,<attr>,<program>,<format>,<unit>

nb_ana	此區塊中定義的變數數量

va	變數的虛擬位址

vamo	位址範圍 (在類比資料型態中)

name	變數名稱

attr	變數屬性

program	主程式的虛擬位址

或是以 "!0000" 表示全域變數

format	= "I" 為整數變數

= "F" 為實數變數

unit	單位的字串

此區塊的結構是用來描述應用程式中的計時器變數，如下所示：

@TIMERS,<nb_tmr>

#<va>,<name>,<attr>,<program>

#...

而且假如變數數量超過4095時：

X#(3.<varno>),<name>,<attr>,<program>

nb_tmr	此區塊中定義的變數數量

va	變數的虛擬位址

vamo	位址範圍 (在計時器資料型態中)

name	變數名稱

attr	變數屬性 (永遠為+X：內部變數)

program	主程式的虛擬位址

或是以 "!0000" 表示全為域變數

此區塊的結構是用來描述應用程式中的字串變數，如下所示：

@MESSAGES,<nb_msg>

#<va>,<name>,<attr>,<program>,<max_len>

#...

而且假如變數數量超過4095時：

X#(4.<varno>),<name>,<attr>,<program>,<max_len>

nb_msg	此區塊中定義的變數數量

va	變數的虛擬位址

vamo	位址範圍 (在字串資料型態中)

name	變數名稱

attr	變數屬性

program	主程式的虛擬位址

或是以 "!0000" 表示全域變數

max_len	最大的長度 (取決於硬體容量)

此區塊的結構是用來描述應用程式中使用的 "C" 函數，如下所示：

@USP,<nb_usp>

#<va>,<name>

#...

nb_usp	此區塊中定義的C函數數量

va	C函數的虛擬位址

name	C函數名稱

此區塊的結構是用來描述應用程式中使用的 "C" 功能方塊樣例，如下所示：

@FBINSTANCES,<nb_fb>

#<va>,<inst_name>,<fb_name>

#...

nb_fb	此區塊中定義的C功能方塊樣例的數量

va	C功能方塊樣例虛擬位址

inst_name	C功能方塊樣例的名稱

fb_name	C功能方塊的名稱


ISaGRAF "不限點" (WDL) 版工作平台的限制

ISaGRAF工作平台所用到的物件受到一些限制，當然，大多數實際的限制是起因於所用的電腦的組態 (可用的記憶體與硬碟空間) 以及ISaGRAF目標硬體的能力 (可用的記憶體與軟硬體資源等...)。下面是所受到的最大數目限制：

對於案件而言：

物件	最大	備註

程式	255	包含主程式、副程式及子程式

樹狀結構層次	20

安裝於工作平台上的案件數目僅受限於可用的硬碟空間大小。

對名稱而言：

名稱：	最大	備註

案件	8字元

程式	8字元

變數	16字元	註解最大60個字元

定義字標籤	16字元

同意定義	255字元	註解最大60個字元

轉換表	16字元

變數列表	16字元

函數/功能方塊 (程式庫)	8字元	適用於C函數、C功能方塊或以IEC語言撰寫的函數

函數參數 (程式庫)	16字元	適用於C函數、C功能方塊或以IEC語言撰寫的函數

IO板	8字元

IO組態	8字元

板子oem參數	16字元

轉換函數	8字元

編輯 (對一個程式而言)：

物件	最大	備註

SFC列	600

SFC行	20

SFC步驟	4095	對全部案件而言，包含步驟、初始步驟、開始及結束步驟

SFC轉移條件	4095	對全部應用程式而言

LD/FBD編輯	200行

2000列	亦是編輯區域的大小

Quick LD編輯	無限制	僅受限於PC的容量

IL標籤	251	於同一個IL程式中

文字編輯	40K位元組	或者根據系統組態來看可能會較少

針對字典 (對一個案件而言)：

物件	最大	備註

布林變數	65535

類比變數	65535	包含整數及實數變數

計時器	65535

訊息變數	65535

定義字	4095	相同範圍所用到的

定義字	255	同一個程式所用到的

轉換表	127	於應用程式中所用到的

一個轉換表點數	32	定義於相同轉換表

布林、類比或訊息變數的最大數目限制包含內部、輸入與輸出的變數，亦包含所有編譯器所配置的隱藏的暫時變數。於字典編輯器中的變數總計 (相同型態、相同範圍) 不可超過16000點，但是得視PC的組態而定，這個限制有可能小於16000點。假如你的目標硬體版本為3.21或更早的版本，若同一種型態的變數超過4095點，你無法加編譯後的應用程式下載至此目標硬體中。因為標準的 "Modbus" 連結限制的關係，同一種型態的變數也不能設定超過4095點的網路位址。

IO連結：

物件	最大	備註

IO板	256	定義於相同應用程式中 (包含I/O板及複合設備)

IO連結點	128	於同一塊板子上

對程式庫而言：

物件	最大	備註

函數 (IEC語言) 	255	安裝於程式庫中的數量

功能方塊 (IEC語言)	255	安裝於程式庫中的數量

C函數	255	安裝於程式庫中的數量

C功能方塊	255	安裝於程式庫中的數量

功能方塊樣例	4095	於同一個應用程式中的相同型態的功能方塊

函數輸入參數	31	適用於C函數及以IEC語言撰寫的函數

功能方塊參數	32	輸出入參數總數量，但至少一個輸出參數

轉換表	128	安裝於程式庫中的數量

IO組態	255	安裝於程式庫中的數量

IO板	255	安裝於程式庫中的數量

複合IO設備	255	安裝於程式庫中的數量

板子oem參數	16