 グラフィックデバッガの使い方

ISaGRAFにはグラフィック又はシンボリックデバッガーの機能があります。プログラム管理の「デバッグ」コマンドを選択することでターゲット側にダウンロードされたアプリケーションの制御が行えます。この状態ではデバッガーはシリアルリンク（標準）を通してターゲットと通信を行っています。

「シミュレーション」コマンドはデバッガ画面と同時にターゲットシステムをシミュレーションします。このシミュレーションによりユーザはターゲットシステムの実際のＩ／Ｏがまだ完成されていないときでもアプリケーションをテストすることができます。デバッガーウィンドウからアプリケーションを操作することができます。

デバッガウィンドウ

アプリケーションの制御

オプション

書き込みコマンド

オンライン修正の詳細

ＤＤＥ通信

デバッガが起動され、ターゲット側のアプリケーションがワークベンチ側のアプリケーションと同一の場合は、自動的にプログラム管理ウィンドウがデバッグモードで開かれます。（ターゲットとワークベンチ側でアプリケーションが一致していない場合は、プログラム管理ウィンドウは開きません。）　また、プログラム管理ウィンドウのメニューから開かれる他のウィンドウ（グラフィックエディタ、テキストエディタ、辞書エディタ、変数リスト、Ｉ／Ｏ接続など）は全てデバッグモードで開かれます。　即ち、ここではプログラムの変更、編集コマンドは無効になります。　表示されたプログラムのコンポーネント（ステップ、トランジション、変数．．．）は状態表示とともに表示されます。　コンポーネントをダブルクリックすることでターゲットの状態や変数の値のみを一時的に変更することができます。

デバッガがシミュレーションモードで実行されているとき、ワークベンチとターゲット間の通信は行われていません。デバッガはＩ／Ｏシミュレータウィンドウと通信を行っています。ターゲット自体が存在しませんのでデバッグメニューの「ダウンロード」、「アプリケーションのスタート」、「アプリケーションのストップ」コマンドなどは使えません。


デバッガウィンドウ

ランタイムエラーはデバッグウィンドウに表示されますが、「オプション」－「エラーの表示」コマンドにより、エラーメッセージ表示を表示・非表示にしたりすることが可能です。

デバッガーウィンドウメニュー（ツールバー）の下の状態表示欄にはターゲットのアプリケーションの状態とサイクルタイム情報が表示されます。　以下にターゲットの状態例を示します。

ロギング中:	デバッガーがターゲットと通信をしようとしている状態

遮断状態:	デバッガーがターゲットとの間で通信ができません。ケーブル接続又は通信パラメータの設定が正しいかを確認して下さい。

ｱﾌﾟﾘｹｰｼｮﾝがありません:

通信は正常ですが、ターゲットには実行中のISaGRAFアプリケーションが存在していません。アプリケーションをダウンロード、あるいは、更新して下さい。

ｱﾌﾟﾘｹｰｼｮﾝ活性:	通信は正常で、ターゲットにアプリケーションがあり、アプリケーションとデバッガがターゲットアプリケーションと通信しようとしています。ワークベンチとターゲット側のアプリケーションが同じであればプログラム管理ウィンドウが開きます。

RUN:	ターゲットがリアルタイムモードで実行中です。

STOP:	ターゲットがサイクルモードで実行中です。

ﾌﾞﾚｰｸﾎﾟｲﾝﾄ:	アプリケーションがブレークポイントにさしかかったのでターゲットがサイクルモードで実行中です。

致命的なｴﾗｰ:

ターゲットアプリケーションが致命的な意味不明のエラーにより実行できません。

サイクルタイムに関する情報を以下に示します。

許容値:	プログラムされたサイクルタイム

現在値:	最終のサイクルタイム測定値

最大値:	ｱﾌﾟﾘｹｰｼｮﾝがＲＵＮしてからのサイクルタイムの最大値

ｵｰﾊﾞｰﾌﾛｰ:	サイクルタイムの現在値が許容値を越えたサイクル数

全ての値はｍｓ表示です。サイクルタイムの表示はターゲットシステムにより表示の精度が変わります。詳しくはターゲットユーザガイドを参照願います。デバッガがシミュレーションモードで使われているときはタイムは表示されません。


アプリケーションの制御
アプリケーションの制御：「ファイル」、「コントロール」メニューコマンド

「ファイル」、「コントロール」メニューコマンドにより、ターゲット上でのISaGRAFアプリケーションを制御できます。

注意：以下のいくつかのコマンドはシミュレーションモードでは使えません。なぜなら、シミュレーションモードでのアプリケーションはワークベンチ内部に作られるからです。

ターゲットアプリケーションのストップ

ターゲットアプリケーションの実行

アプリケーションのダウンロード

バージョンＮｏ．の表示

アプリケーションのオンライン修正

リアルタイムモード

サイクルモード

１サイクル実行

サイクルタイムの変更

全ブレークポイントの消去

全Ｉ／Ｏ変数のアンロック


ターゲットアプリケーションのストップ

「ファイル」－「アプリケーションのストップ」コマンドにより、現在実行中のターゲット上のアプリケーションをストップさせることができます。


ターゲットアプリケーションの実行

「ファイル」－「アプリケーションのスタート」コマンドにより、ターゲット上のアプリケーションをスタートさせることができます。アプリケーションがダウンロードされたときは自動的にアプリケーションはスタートします。　よって、「アプリケーションのスタート 」コマンドは「アプリケーションのストップ」コマンドの後に実行されることになります。

注意：	新しいアプリケーションがターゲットへダウンロードされる前にはターゲット上のアプリケーションはストップさせておく必要があります。


アプリケーションのダウンロード

「ファイル」－「ダウンロード」コマンドにより、ワークベンチ側で生成されたアプリケーションコードをターゲット側へダウンロードすることができます。ダウンロードすべきコードのタイプ（実行ＴＩＣコード、アプリケーションシンボルテーブル）を選択して下さい。


バージョンＮｏ．の表示

「ファイル」－「バージョンNo.の取得」コマンドにより、ワークベンチ上に開かれているアプリケーションとターゲット上に存在しているアプリケーションのバージョンＮｏ．を確認することが出来ます。以下の項目が表示されます。

バージョン:	この番号はコードジェネレータがカウントしている過去からのコード生成の回数です。

日付:	アプリケーションコードが生成された日付と時刻を表示します。

CRC:	シンボルテーブルから計算されたチェックサムを表示します。この数字はコードジェネレータで計算された値で変数辞書の内容で決まります。（辞書テーブルを変更するとＣＲＣ値は変わってしまいます。）

注意：「バージョンNo.の取得」コマンドはシミュレーションモードでも使用できます。ただ、リアルモードではターゲットとの接続がなされていない場合は使用できません。


アプリケーションのオンライン修正

「ファイル」－「アプリケーションの更新」コマンドにより、実行中のターゲットアプリケーションに対してオンライン編集が可能になります。　後の節で詳しく説明を行います。シミュレーションモードでは使えません。


リアルタイムモード

「コントロール」－「リアルタイムモード」コマンドにより、通常のモードで、サイクル実行は指定されたサイクルタイム毎にトリガーがかかり起動されます。


サイクルモード

「コントロール」－「サイクルモード」コマンドにより、ターゲットアプリケーションをサイクル実行モードにします。このモードでは「コントロール」－「１サイクル実行」コマンドにより、１サイクルを実行して停止します。


１サイクル実行

ターゲットアプリケーションがサイクルモードの時、「コントロール」－「１サイクル実行」コマンドにより、１サイクルを実行して停止します。

尚、アプリケーションスタート時の実行モードは「アプリケーションのランタイムオプション」内のパラメータとしてセットされています。


サイクルタイムの変更

「コントロール」－「サイクルタイムの変更」コマンドにより、プログラムされたサイクルタイムをターゲットアプリケーションが実行中に変更することができます。この変更値は許容値としてデバッガーのコントロールバーに表示されます。 サイクルモードへの切り替えが必要な場合は、サイクルタイムを変更する前にセットしておく必要があります。サイクルタイムは整数で入力しますが単位はｍｓです。


全ブレークポイントの消去

「コントロール」－「全ブレークポイントの消去」コマンドにより、アプリケーション全体にわたって設定されているブレークポイントを全てクリアします。　ブレークポイントは、このコマンドを使わないとデバッガーウィンドウを閉じても自動的にはクリアされることはありません。


全Ｉ／Ｏ変数のアンロック

「コントロール」－「全てのＩ／Ｏ変数をアンロック」コマンドにより、デバッグ中にアプリケーション内でロックされているＩ／Ｏ変数の全点をアンロックします。Ｉ／Ｏがロックされている時は、デバッガコマンドやアプリケーションによってＩ／Ｏ変数の状態は変更が可能ですが、 実Ｉ／Ｏ状態は変化しなくなります。　ロックされたＩ／Ｏ変数は、このコマンドを使わないと、デバッガーを閉じても自動的にはアンロックされません。


オプション

 「オプション」メニューによりデバッガーウィンドウに表示される情報をコントロールすることが出来ます。

通信パラメータ

表示オプション


通信パラメータ

「オプション」―「パラメータ」コマンドにより、通信パラメータを設定できます。　ただ、通信タイムアウトパラメータのみここで設定できます。その他の通信パラメータ（ボーレート、パリティ．．．）はプログラム管理ウィンドウの「通信リンク設定」コマンドで設定します。

通信タイムアウトとはワークベンチからの要求に対してターゲットが通信を返し始めるまでにターゲットシステムに与えられた時間のことを指します。　サイクルリフレッシュ間隔はデバッガー中のオープンされたウィンドウからのデータ読み込みのためデバッガーから出される読み込み要求時間間隔のことを指します。

表示されている数値全てはｍｓです。デバッガーがシミュレーションモードの時は通信パラメータは設定できません。


表示オプション

「オプション」－「サイクルタイム表示」コマンドにより、デバッガウィンドウに表示されるサイクルタイム表示を有効・無効にします。　「サイクルタイム表示」がセットされているときはサイクルタイム（許容値、現在値、最大値、オーバーフロー）が表示されます。　セットされていないときは表示されず、ターゲットとの通信負荷が軽減されます。

「オプション」－「エラーの表示」オプションがセットされているときはランタイムエラーがデバッグウィンドウに表示されます。セットされていないときはエラーリストは閉じられていて、ターゲットとの通信負荷が軽減されます。「オプション」－「エラーのクリア」コマンドにより、現在デバッグウィンドウに表示されているエラー表示がクリアされます。

「オプション」―「ウィンドウの最小化」コマンドにより、デバッグウィンドウのサイズを最小にして、最小限必要な操作ができるパネル表示に切り替えられます。


書き込みコマンド

ISaGRAFシンボリックデバッガーによりアプリケーション内の変数の値や状態を変更することが出来ます。デバッガーウィンドウが開いている状態でプログラム編集ウィンドウなどで名称やエレメント部分をダブルクリックすることで変更が可能状態になります。

変数の操作

SFCオブジェクトの操作


変数の操作

ダブルクリックによって変数状態の変更が可能なウィンドウには以下のものがあります。

•	辞書エディタ

•	変数リスト

•	LD あるいは FBD プログラム

•	I/O 接続エディタ

以下のコマンドがデバッグダイアログボックスで使われます。

•	新しい値の“書き込み”

•	変数の“ロック”　（Ｉ／Ｏ変数に限ります。）

•	変数の“アンロック” （Ｉ／Ｏ変数に限ります。）

•	タイマー変数のスタート あるいは、ストップ （自動リフレッシュモードをセット）

ブール型値でFALSE、TRUE値を表すのにシンボリック変数が使われます。シンボリック変数とは変数辞書でブール型値変数のために定義された文字列です。　アナログ変数に対して“書き込み”を行う場合は変数辞書の定義に合わせて整数あるいは実数で入力する必要があります。メッセージ変数に対して“書き込み”を行う場合はメッセージに与えられた最大文字数を越えることは出来ません。


ＳＦＣオブジェクトの操作

デバッグ時にＳＦＣプログラムの処理をモニタするにはプログラム管理ウィンドウの「ファイル」メニューのコマンドを使います。以下に使えるコマンドを示します。

ｽﾀｰﾄ:	選択されたＳＦＣプログラムのそれぞれのイニシャルステップにトークンをセットすることで選択されたプログラムを実行モードにします。

停止（Kill）:	存在している全トークンを取り除くことで選択されたプログラムを停止させます。

凍結（Freeze）:	存在している全トークンを選択されたプログラムから取り除くがそれらの場所を記憶させておきます。再起動コマンドと対になって操作されます。

再起動（Restart）:	凍結されているプログラムに対して一度取り除かれたトークンを元の場所に戻します。凍結コマンドと対になって操作されます。

チャイルドプログラムにとってはこれらのコマンドはそれぞれ"GSTART", "GKILL", "GFREEZE" さらに"GRST"　ＳＴステートメントにプログラムの中では対応します。

ＳＦＣステップからでもＳＦＣチャート中のグラフィックシンボルをダブルクリックすることにより制御の状態をコントロールすることが出来ます。　以下のコマンドがダイアログボックスに現れます。

•	ステップが活性（状態）時にブレークポイントの設定

•	ステップが非活性状態時にブレークポイントの設定

•	ステップに設定されているブレークポイントを消去

注意： 活性状態時ブレークポイントと非活性時ブレークポイントは同一ステップには設定できません。

ＳＦＣトランジションからでもＳＦＣチャート中のグラフィックシンボルをダブルクリックすることにより制御の状態をコントロールすることが出来ます。　以下のコマンドがダイアログボックスに現れます。

•	トランジション通過時にブレークポイントの設定

•	設定されたブレークポイントの消去

•	手動でのトランジション通過（トークンの移動又は追加）

無条件付き通過:	トランジションの次のステップにトークンを移動（追加）します。このとき前のステップにあるトークンは取り除きません。

条件付き通過:	トランジションの次のステップにトークンを移動します。このとき前のステップにあるトークンを自動的に取り除きます。


オンライン修正の詳細

  ISaGRAFではアプリケーションプログラムを停止することなくオンラインでプログラムを修正する機能があります。　これを“オンライン修正”と呼びます。　この機能は細心の注意を払って行う必要があります。　なぜなら、ISaGRAFはユーザの変更による全ての問題点を検出することが出来ないかもしれないからです。　オンライン修正を行うときはデバッグモードで開かれているプログラム管理ウィンドウを一旦閉じてから改めて開き直して必要なプログラムを修正し再度「アプリケーションコード生成」コマンドでコードを生成します。　さらに、生成されたコードをダウンロードしておきデバッグウィンドウのアプリケーションの更新コマンドで新しくダウンロードされたアプリケーションに実行を切り替えます。　ただし、変数辞書が変更された場合はＣＲＣコードが一致しませんのでオンライン修正は無効となります。　この場合は一旦アプリケーションを停止してから新アプリケーションをダウンロード、スタートする必要があります。

コードシーケンス

内部変数の変更

入力、出力変数の変更

オンライン修正の操作手順

オンライン修正に必要なメモリ要求

オンライン修正における制限

オンライン修正操作の詳細


コードシーケンス

オンライン修正における適用範囲としてはコードシーケンスの変更に限られます。このコードシーケンスとは“サイクルの最初：Ｂｅｇｉｎ”又は“サイクルの最後：Ｅｎｄ”セクションに書かれているＳＴ、ＩＬ、ＬＤ、ＦＢＤプログラムあるいはＳＦＣのレベル２で記述されているプログラミングのことを指します。オンライン修正ではターゲットアプリケーションの実行を停止させることなく複数のコードシーケンスを変更することを意味しますが、ＳＦＣにおいてはトークンのコントロールが大変クリティカルであるためＳＦＣの構造の変更、即ちステップやトランジションの追加、削除は行うことが出来ません。


内部変数の変更

変数値に関してはアプリケーションに大変重要な位置づけでもありますがデバッガーからの変数の値の変更はいつでも行えます。しかし、オンライン修正においては変数を新たに追加したり、削除したりすることは出来ません。　ただし、使わない変数（内部あるいはＩ／Ｏ）でも宣言をしておき（辞書にあらかじめ変数を定義しておき）はじめのプログラムでは使わなくても後で使用するといったことであればオンライン修正で行うことが出来ます。

ISaGRAFのターゲットのデータベースでは異なる変数のスタイルが存在します。制限はそれら全てにあります。

- 辞書登録された変数

これらは、オンライン修正では追加、削除、名前の変更などはできません。オンライン修正の為には、今現在は使用しないかもしれませんが、いくつかの予備の変数をあらかじめ登録しておくことが考えられます。この様な予備の変数は、予期せぬアプリケーションの変更に際しても、アプリケーションCRCチェックサムが変わらないので、オンライン修正が可能になります。

- ファンクションブロックのインスタンス

C言語やICE言語で記述されたファンクションブロックは、ISaGRAFのターゲットデータベース内に確保されたデータに関連しています。従って、ファンクションブロックのインスタンスが追加されたり削除されたりするとオンライン修正はできません。ですから、ブロックを挿入すると自動的にファンクションブロックのインスタンスが自動的に生成されるQuickLDやFBDエディタでのプログラミングよりも、ファンクションブロックのインスタンスを明示的に辞書に登録して、 ST言語でプログラムを記述するほうがよいでしょう。. もちろん、辞書エディタでのファンクションブロック・インスタンスの編集は、オンライン修正ができなくなる原因になります。

- SFCのステップ

個々のSFCステップは、 ISaGRAFのターゲットデータベース内に確保されたそのステップのダイナミックな属性を表すデータに関連しています。SFCのステップの追加や削除のような編集は、アプリケーションデータベースの変更につながり、オンライン修正を不可能にします。

- コードジェネレータが生成する内部変数

ISaGRAFのコードジェネレータは、複雑なプログラムをコード化する為に、隠れたテンポラリ変数を生成します。時には、プログラムの表現方法の変更が、このテンポラリ変数の変化につながる場合があり、その結果、オンライン修正が不可能になります。 この様な状況を防ぐ為に、下記に示すような設定をISA.INIファイルに行うことで、強制的に、各プログラム毎にテンポラリ変数を割り振ることができます。

[DEBUG]

MNTVboo=8	; for booleans

MNTVana=4	; for integers and reals

MNTVtmr=4	; for timers

MNTVmsg=2	; for messages

ISA.INIファイルにこの様な設定がされたときには、コードジェネレータは、アプリケーションのコード生成結果が、指定以上のテンポラリ変数が必要であった場合に、ワーニングメッセージを出力します。


入力、出力変数の変更

ISaGRAFでのＩ／Ｏシステムの変更はハードウェアを考慮に入れたＩ／Ｏ開発キットによって変更が出来ます。　オンライン修正ではＩ／Ｏボードの記述を変更したり、Ｉ／Ｏボードチャネルの割付を変更（追加、削除）したりすることは出来ません。


オンライン修正の操作手順

オンライン修正の通常の変更方法を以下に説明します。

•	ターゲットでのアプリケーションが実行中に一度デバッグウィンドウを閉じます。

•	プログラムエディタでアプリケーションのソースコードを変更します。

•	「アプリケーションコード生成」を行います。

•	アプリケーションコードを「アプリケーションの更新」コマンドでダウンロードします。（「ダウンロード」コマンドは使いません）

•	「更新実行」コマンドにより古いアプリケーションから新アプリケーションへの更新をサイクルタイム間で行います。

こうすることにより、ターゲット内部では各サイクルにおいても完全な信頼性あるアプリケーションが実行されていることになります。オンライン修正の頻度に関しての制限はありません。

オンライン修正は結局「アプリケーションのストップ」、「ダウンロード」、「アプリケーションのスタート」をマニュアルで行うことと本質的には変わりありませんが、違いは変数状態が失われることなくまた、アプリケーションの切り替え時間が大変短い（通常１～２サイクル）ことにあります。

アプリケーションが切り替わる（更新される）間は全変数（内部、Ｉ／Ｏ）の状態は同じ値を保持していて、ＳＦＣにおいてはいかなるアクションも行われずＳＦＣトークンは動きません。


オンライン修正に必要なメモリ要求

オンライン修正が可能な条件としてターゲット内部に修正されたアプリケーションがダウンロードされる十分なメモリが空いていることが必要です。　旧、新２つのバージョンのアプリケーションが更新時には同時に存在することになります。


オンライン修正における制限

前にも述べましたが、オンライン修正ではコードシーケンスの変更が許されていますが、変数の定義、関数パラメータの変更、Ｉ／Ｏ接続変更などは行うことが出来ません。

修正版のアプリケーションがダウンロードされる時にISaGRAFでは危険な変更を未然にチェックする目的からエラー検出を行っています。エラーが検出された場合はメッセージを表示してアプリケーションの更新は中止されます。　チェックの内容にはシンボルテーブルのチェックサムチェック（ＣＲＣチェック）があります。　ここでは、変数の定義、プログラム名、ＳＦＣのエレメント名の修正が無かったかどうかチェックしています。

ＳＦＣにおいて更新時にステップが活性状態である場合にノーマル(N)アクションに関しては失われます。また、新しいステップのパルス（ステップの立ち上がり）アクションは実行されません。新しいステップのＰ１（ステップの立ち下がり）アクションは実行されます。　また、更新時にトランジションが活性状態であればそこでの条件式は新しいアプリケーションコードで再度チェックされます。

新しくダウンロードされたアプリケーションはＰＬＣ内部でのバックアップ（ハードディスクへの保管）はなされません。バックアップされているアプリケーションは通常のダウンロードコマンドによってダウンロードされたアプリケーションに限ります。

注意：アプリケーションのオンライン修正を行った後に、「アプリケーションのストップ」コマンドを実行あるいはターゲット側を終了した場合には、次回アプリケーションがスタートされたときは、オンライン修正以前の旧アプリケーションがスタートします。なぜなら、アプリケーションのオンライン修正によって、アプリケーションコードはハードディスクに保存されないでメモリ上に展開されているためです。従って、次回からも修正されたアプリケーションで実行したい場合は、オンライン修正後に「ダウンロード」を実行することが必要となります。（詳細は、ターゲットマニュアルを参照願います。）


オンライン修正操作の詳細

アプリケーションの更新時の操作を一般的な注意事項を含めて以下に解説します。

•	アプリケーションの修正を行う場合は対象のプロジェクトを前もって別名でバックアップしておくことが重要です。　修正はそのコピーで行うのが賢明です。

•	プログラムの修正時にはエディタウィンドウで「修正履歴の更新」をセットしておく方が好ましいです。　後でのプログラムの保全に役立ちます。

•	コードシーケンスに変更が存在する場合は必ず新しい「アプリケーションコード生成」コマンドでコードを生成する必要があります。

•	「デバッグ」コマンドにより、ターゲット側（旧アプリケーションが実行中）とワークベンチ間を接続しておきます。このとき、ワークベンチ側とターゲット側のアプリケーションコードが異なるために、メッセージボックスが開きます。

•	デバッガ「ファイル」－「アプリケーションの更新」コマンドを実行します。

•	修正されたアプリケーションを更新用にダウンロードします。この時、ダウンロードダイアログボックスでは“後で更新”を選択します。（この選択によりデータのダウンロードスピードが少し遅くなります。）

•	ダウンロードが完了したら、「更新実行」コマンドによりアプリケーションを更新します。　更新には１～２サイクル要します。

•	うまくアプリケーションが更新された場合は新しいアプリケーションプログラムがデバッグモードで再表示されます。　もし、アプリケーションの更新が成功しなかった場合は古いアプリケーションが表示されたままになっています。


ＤＤＥ通信

 ISaGRAFデバッガーはＤＤＥ（ Dynamic Data Exchange）サーバ機能を含んでいます。　ＤＤＥの中でＡｄｖｉｓｅとＰｏｋｅループをサポートしています。　これにより、ISaGRAF以外のＤＤＥをサポートしているアプリケーションにデータを引き渡すことが出来ます。

ＡｄｖｉｓｅループではISaGRAFの変数に変化が生じたときのみクライアントタスクにデータが渡されます。Ａｄｖｉｓｅループで変数をモニタリング中の場合は、その変数に対してＲｅｑｕｅｓｔループも扱えます。　全タイプの変数をモニタすることが出来ます。　ＤＤＥでのパラメータを以下に示します。

アプリケーション名:	"ISaGRAF"

トピック名: 	ISaGRAFのプロジェクト名

アイテム名: 	変数名

もし、変数がプログラムのローカル変数である場合は以下のように括弧でプログラム名を明記する必要があります。

variable_name(program_name)

ＤＤＥ　Ａｄｖｉｓｅループにより最大２５６変数の同時モニタが行えます。　ＤＤＥはデバッグモード、シミュレーションモードいずれの場合からでも使用することが出来ます。　リフレッシュ時間間隔はワークベンチ側－ターゲット側との通信の時間となります。