Copyright: ISaGRAF V3.4


 使用ISaGRAF模擬器

當位在程式管理視窗上的 "除錯" 功能表中的 "模擬" 命令執行時，除錯器中的ISaGRAF核心模擬器就會被啟動。核心模擬器是一個完整的ISaGRAF目標硬體系統，完全支援ISaGRAF標準特性、所有的C函式和由CJ International公司所衍生出的功能方塊。在視窗中，I/O板被模擬成圖形型式。任何型態的I/O板都可以被模擬。在 I/O連結時定義成 "虛擬板" 的I/O板也同樣地出現在模擬視窗中。

除錯器的連接

I/O模擬

資料庫元件

選項

ISaGRAF模擬器還包含了其它強而有力的工具讓使用者對應用程式模擬及診斷：

儲存及回復輸入狀態

週期描繪器

模擬草稿


除錯器的連接

核心模擬器支援所有可與ISaGRAF除錯器溝通的通訊方式，所以可在模擬期間使用任何除錯方式。核心模擬器總是工作在現行的ISaGRAF應用程式。在模擬期間，除錯器命令 "開始"，"停止"，"下載" 或 "更新" 不再適用。在建立目標硬體碼之前，假如在編譯器選項中沒有選取 "模擬" 目標硬體，模擬器就不能被使用。關閉模擬器視窗意指除錯器視窗 (和除錯時期所開啟的任何ISaGRAF視窗) 也同樣關閉。


I/O模擬

出現在模擬器視窗中的I/O板，會標記出它們的名稱和位置號碼。任何ISaGRAF的I/O標準型態 (布林、類比或是訊息) 都能作處理。輸入板的連結點顯示成特殊按鈕和欄位。輸出板的連結點顯示成圖形狀態燈和資料欄。

 	布林輸入：一個布林輸入表示成一個綠色方塊按鈕。連結點號碼和I/O按鈕一同顯示出來。當按鈕被按下時，輸入值將設定成真。點取按鈕可更改相關的I/O值。只有當按鈕壓下才可使用滑鼠右鍵來設定輸入。

 	布林輸出：布林輸出以一個小圓圈來表示。連結點號碼顯示在I/O按鈕旁邊。當小圓圈亮起時，輸出值將被設定成真。

 	類比輸入：一個類比輸入連結點即是一個可鍵入相關輸入值的簡單數值欄。點選方塊區將顯示出游標，然後就可以輸入一新數值到連結點，輸入完之後不必按ENTER鍵。類比輸入可以被輸入成十進位或是十六進位。使用上/下鍵來增加或是減少現有數值。

 	類比輸出：一個類比輸出連結點即是一個可輸出相關值的數值欄。輸出值可以被輸出成十進位或是十六進位。使用者不能於此處更改輸出連結點。

 	訊息輸入：一個訊息輸入連結點即是一個可鍵入相關輸入字串的簡單的文字欄框。點選方塊區將顯示輸入游標，然後就可以輸入一新字串到連結點，輸入完之後不必按ENTER鍵。

 	訊息輸出：一個字串輸出連結點即是一個文字輸出欄框，使用者在輸出連結點上不能執行任何動作。


資料庫元件

由CJ International發展的ISaGRAF模擬器完全支援標準轉換、函數和功能方塊。所支援的物件如下：

 轉換函數：

bcd, scale

 函數：

abs, acos, ArCreate, ArRead, ArWrite, ascii, asin, atan, char, cos, delete, expt, find, insert, left, limit, log, max, mid, min, mlen, mod, mux4, mux8, odd, rand, replace, right, rol, ror, sel, shl, shr, sin, sqrt, tan, trunc

 功能方塊：

average, blink, cmp, ctd, ctu, ctud, derivate, f_trig, hyster, integral, lim_alrm, r_trig, rs, sema, sr, stackint, tof, ton, tp

使用者定義的轉換、"C" 函數和功能方塊通常都不和ISaGRAF模擬器整合在一起。基本上，這些物件被設計用來使用目標硬體系統的軟硬體資源，這些資源一般並不適用於Windows系統。ISaGRAF模擬器對使用者定義的轉換、"C" 函數和功能方塊提供下列標準行為：

•	當新的轉換被模擬器處理時，它會被空的轉換所取代。意思是說類比變數的物理值總是等於電位值 (表示輸入或顯示在模擬器面板上的數值)。

•	當新的 "C" 函數或功能方塊被模擬器執行時，它不會執行任何的動作，結果值將不被設定。


選項

"選項" 功能表命令讓使用者能夠去控制模擬器面板上的I/O顯示。在所有的除錯期間使用者都能夠設定或移除這些選項。

當 "顯示顏色" 選項被設定時，I/O連結點就被顯示成彩色bitmap圖。假如在一些不能顯示彩色的LCD螢幕，使用者應該移除這個選項來得到純粹黑白的輸出入圖形。

當 "變數名稱" 選項被設定時，一個標籤和所連結的變數名稱將被顯示在所有的I/O連結點旁邊。移除這個選項讓使用者能夠減少模擬器面板尺寸。

當 "十六進位值" 選項被設定時，任何輸出入類比連結點都將以16進位值顯示或輸入。

當 "總是在最頂層" 選項設定時，即使輸入的焦點視窗是在其他視窗，模擬器視窗依然是看得見的。


週期描繪器

ISaGRAF週期描繪器 (Cycle Profiler) 是一個強力的診斷器，它顯示各種程式、函數及功能方塊間所分配的時間比例。這個工具於快速診斷應用程式的執行效能上相當有用，且引導程式設計者知道哪部分程式碼需做最佳化。

週期描繪器由ISaGRAF模擬視窗下的 "工具 / 週期描繪器" 命令來執行，它顯示每個程式、函數或功能方塊所花費的時間百分比值：

當 "檢視 / 平均值" 選項被設定後，顯示的資訊為應用程式開始或上次 "檢視 / 重置" 命令之後的百分比平均值。

假如 "檢視 / 平均值" 選項未設定，顯示的資訊為前一個週期的測量值。當應用程式處於 "單步" 模式之下時，你可以使用此種模式顯示上次週期的測量值。

使用 "檢視 / 複製" 命令以ASCII格式複製程式名稱及百分比至Windows剪貼簿內，然後資料可以被貼入文字編輯器或試算表內。

注意：

這並不是很精確的量測值，百分比是以TIC指令數乘上各指令所執行的時間計算出來的。此種計算方法並不包含 "C" 函數及功能方塊所花費的時間。

函數或功能方塊的顯示值為所有呼叫時間的加總。

時間的計算是根據TIC碼計算出來的，假如實際的應用程式碼是以 "C" 語言編譯產生的，則所顯示的值將不可信賴。


模擬草稿

ISaGRAF模擬器包含建立及執行模擬草稿的工具。草稿使用類似ST文字式語言的方式來描述，且用來搭配ISaGRAF模擬器做自動化測試。

編輯草稿

執行草稿

草稿描述語言

模擬草稿編輯器由模擬器視窗下的 "工具 / 模擬草稿" 命令執行。下面是草稿編輯器的例子：

上層的視窗是一個文字編輯器，用來輸入草稿命令。這個命令編輯器包含高階元件，如可以使用滑鼠選取變數符號。你能使用 "選項" 功能表下的命令設定定位點寬度及選擇字型。

下層的視窗顯示草稿執行時的所有輸出訊息。上下層視窗間的分隔線可以自由拖曳，以改變視窗大小。輸出視窗可以於草稿編輯時隱藏，但是每次草稿執行時皆會自動開啟。


編輯草稿

使用 "檔案" 功能表下的命令管理草稿檔：

開新草稿	產生一個新的未命名草稿

開舊草稿	從檔案中載入已存在的草稿

儲存草稿	儲存草稿文字及輸出視窗內容至磁碟中 (置放於案件目錄下)

另存新草稿	以另一個名稱儲存草稿

每一個草稿將於ISaGRAF案件目錄下產生兩個檔案：

<草稿名稱>.SCC	草稿文字 (指令)

<草稿名稱>.SCO	輸出視窗內容

兩個檔案皆是標準的文字檔，可以以任何的文字編輯器來開啟。

 當編輯草稿時，你能使用 "編輯 / 插入符號" 命令選取已宣告的變數名稱，然後將之插入於游標處。


執行草稿

草稿於執行前必須加以檢查及編譯，假如有需要的話，執行 "執行草稿" 命令時會自動檢查草稿。使用下述之 "草稿" 功能表下的命令：

檢查	檢查語法，且編譯草稿

執行草稿	開始執行目前編輯的草稿

假如為新的未命名草稿，在檢查之前必須先加以儲存 (且必須給予一個草稿名稱)。假如草稿已命名，在檢查之前會自動儲存至磁碟上。

當草稿執行時，無法更改它的內容。當草稿執行至結束行時，會出現通知訊息。執行中的草稿可以使用 "草稿" 功能表的下述命令加以停止：

終止草稿	結束執行中的草稿

草稿於每個週期間會加以執行，假如程式中有無窮迴圈的情況，ISaGRAF模擬器會中斷此迴圈，所以ISaGRAF週期仍然可以繼續執行，其他的ISaGRAF應用程式也就不會被凍結住 (block)。假如於同一個週期內執行了多次相同的 "標籤" (label) 的話，ISaGRAF草稿解譯器會自動中斷草稿的執行，你亦可以使用 "cycle" 或 "wait" 指令來加以中斷。


草稿描述語言

草稿描述語言是非常簡單的文字式語言，它類似ST，但是每個指令必須寫在不同列，且不需要於最後以分號終結。使用工具列上的下述按鍵將可用的指令插入於游標處：

插入指令 (關鍵字及說明)

有各種不同型態的指令，第一個為變數指令 (強制)：

:=	指定

另有一些指令用於輸出訊息至輸出視窗：

Print	輸出文字字串或變數值

PrintTime	輸出目前的時間

另有一些指令用於草稿執行與ISaGRAF週期間的同步：

Cycle	讓ISaGRAF模擬器執行一個週期

Wait	等待一段指定的時間

另有一些指令用於控制草稿之指令執行順序：

Labels	可以置放於草稿中的任何地方

Goto	無條件跳躍至標籤

If goto	有條件跳躍至標籤

End	終止草稿

草稿所用的語言不分大小寫。註解可以放置於任何文字列的最後面，但必須放置於 "(*" 及 "*)" 之間，或是加於 ";" 之後。


":=" 指定

意義：	強制ISaGRAF變數的值，變數可以是內部變數、輸入連結點或輸出連結點。

語法：	<變數名稱> := <常數表示式>

<變數名稱> = <常數表示式>

引數：	<變數名稱>為應用程式中宣告的變數符號，或是使用 "%" 語法的變數直接表示法。

<常數表示式> 為與變數同型態的常數表示式。對布林型態而言，"0" 及 "1" 可以用來替代 "FALSE" 或 "TRUE"。對計時器型態而言，前置詞 "T#" 或 "TIME#" 可以省略。

注意：	於草稿中強制輸入型態的變數並不需先加以鎖住。當輸入變數被強制時，相對應的輸入連結點會跟著更新。

警告：	不要強制有附加轉換的輸入或輸出類比變數，草稿並不支援轉換函數或轉換表。

範例：	MyBooVar := 1         (* 與TRUE同義 *)

MyIntVar := 1234

MyRealVar := 1.2345

MyMsgVar := 'Hello'

MyTmrVar := t#12s


Print

意義：	輸出字串或變數值至輸出視窗。文字以另一新列輸出。

語法：	Print '<文字>'

Print <變數名稱>

引數：	<文字> 是任何以單引號括住的文字字串。

<變數名稱> 為應用程式中宣告的變數符號，或是使用 "%" 語法的變數直接表示法。

注意：	變數值根據IEC的格式輸出。

範例：	Print 'Hello'

Print MyBooVar

輸出：	Hello

MyBoovar = TRUE


PrintTime

意義：	輸出目前的時間戳記至輸出視窗。文字以另一新列輸出。

語法：	PrintTime

注意：	時間戳記格式根據Windows系統的目前設定值輸出。

範例：	Print 'Time now is:'

PrintTime

輸出：	Time now is:

15:45:22


Cycle

意義：	停滯草稿執行，直到下個ISaGRAF週期開始為止。

語法：	Cycle

注意：	草稿於ISaGRAF週期開始時執行。假如模擬器處於 '單步' 模式下，"Cycle" 指令將緊跟週期開始之後，其餘的草稿指令會於下個 "執行一個週期" 命令之後執行。

範例：	(* ISaGRAF的程式將A複製至B *)

A := 0

Cycle

Print B

A := 1

Print B (* 這個週期的程式尚未執行 / B未設定為1 *)

Cycle

Print B

輸出：	B = 0

B = 0

B = 1


Wait

意義：	停滯草稿執行，直到延遲時間經過為止。

語法：	Wait <延遲時間>

引數：	<延遲時間> 表示式為IEC的時間常數表示法，但是 "T#" 或 "TIME#" 前置詞可以省略。延遲時間必須介於10毫秒至1小時之間。

注意：	"Wait" 指定並不是很精確，準確性端視Windows系統而定。延遲時間的誤差為正負一個ISaGRAF週期時間。

當執行至 "Wait" 指令時，ISaGRAF會等待延遲時間經過後再繼續執行草稿。

範例：	PrintTime

Wait 2s

PrintTime

輸出：	15:45:27

15:45:29


Labels

意義：	Label (標籤) 可以放置於草稿的任何地方，它可以搭配 "Goto" 指令一起使用，以改變草稿指令的執行順序。

語法：	<標籤名稱>:

引數：	<標籤名稱> 為唯一的名稱，必須根據ISaGRAF變數的命名規則：最多16個字元、以英文字母開始、其餘字元可以是英文字母、數字或底線字元。標籤名稱必須於後面緊跟著 ":" 字元。

注意：	標籤必須單獨一列，同一列上不可以放置任何指令。標籤名稱不可與宣告的ISaGRAF變數符號相同。

範例：	(* 無窮迴圈的草稿例子 *)

loop:

PrintTime

Wait 1s

Goto loop


Goto

意義：	無條件跳躍至標籤

語法：	Goto <標籤名稱>

引數：	<標籤名稱> 是草稿中所定義的標籤名稱。

注意：	往前跳躍是被允許的。假如為無窮迴圈，草稿每執行一次迴圈會自動產生中斷，如此便可讓ISaGRAF週期持續下去。

範例：	Print 'Before Jump'

Goto MyLabel

Print 'Within Jump' (* 永遠不會執行 *)

MyLabel:

Print 'After Jump'

輸出：	Before Jump

After Jump


If Goto

意義：	有條件跳躍至標籤。判斷條件不是兩個ISaGRAF變數的比較，就是變數與常數表示式的比較。

語法：	If <變數1> test <變數2> Goto <標籤名稱>

If <變數1> test <常數表示式> Goto <標籤名稱>

可使用的比較測試 (test) 指令有：

=	假如兩邊相等，則結果為真

<>	假如兩邊不相等，則結果為真

<	假如第一個小於第二個，則結果為真

<=	假如第一個小於或等於第二個，則結果為真

>	假如第一個大於第二個，則結果為真

>=	假如第一個大於或等於第二個，則結果為真

引數：	<變數1> <變數2> 為宣告的變數名稱，或是使用 "%" 語法的變數直接表示法。

<常數表示式> 是與變數相同型態的有效常數表示式。對布林型態而言， "0" 及 "1" 可用來代替 "FALSE" 或 "TRUE"。對計時器型態而言，前置詞 "T#" 或 "TIME#" 可以省略。

<標籤名稱> 是草稿中所定義的標籤名稱。

注意：	往前跳躍是被允許的。假如為無窮迴圈，草稿每執行一次迴圈會自動產生中斷，如此便可讓ISaGRAF週期持續下去。

範例：	(* MyVar為真時，這個草稿才會結束 *)

Loop:

If MyVar = TRUE Goto TheEnd

Print MyVar

Goto Loop

TheEnd:


End

意義：	結束草稿

語法：	End

注意：	"End" 指令並不強制必須置放於草稿最後一列

範例：	(* MyVar為真時，這個草稿才會結束 *)

Loop:

If MyVar = FALSE Goto Continue

End

Continue:

Print MyVar

Goto Loop


儲存及回復輸入狀態

使用ISaGRAF模擬器，可以手動強制輸入型態的接點，也可以使用按鈕動作，以及編輯模擬控制面板。你可以於任何時候使用 "工具" 功能表的下述命令來儲存及回復所有輸入點的狀態：

載入輸入表	設定輸入接點與之前 "儲存輸入表" 命令所產生的檔案內容相同的值。

儲存輸入表	儲存輸入接點的狀態至檔案中。如此便可於稍後使用 "載入輸入表" 命令回復。儲存之檔案置放置於案件目錄下。

注意：	僅有已命名的連接點 (有連結變數者) 才會儲存。