 コードジェネレータの使い方

コードジェネレータは各種ISaGRAFワークベンチのウィンドウ「アプリケーションコード生成」あるいは「ベリファイ」コマンドを選択するとアプリケーションコード生成ウィンドウが自動で開きます。コードが生成されたあとはこのウィンドウは自動では閉じません。その間ユーザは以下のコードジェネレーション（生成）のメニューにアクセスすることができます。

「ファイル」コマンドメニュー

コンパイラオプション

Ｃソースコードの生成

コード生成情報のモニタ：「編集」メニューコマンド

リソースファイルの定義


「ファイル」コマンドメニュー

「ファイル」メニューにはプログラムの文法チェックやアプリケーションコード生成のためのコマンドが含まれています。

アプリケーションコードの生成

プログラムの文法チェック

完全な再コンパイル（再コード生成）

エラー発生時にはエラーメッセージをダブルクリックすることにより、エラーのプログラムを開き、エラー箇所までカーソルを移動させます。


アプリケーションコードの生成

「ファイル」－「アプリケーションコード生成」コマンドにより、アプリケーションコード（中間コード、ＴＩＣコード）の生成を行います。プロジェクトコード生成の前にはプログラムや辞書の文法チェック（ベリファイ）を行います。次に、数値変換テーブルの処理の後、Ｉ／Ｏ接続の処理、更にライブラリとのリンクを行います。これらの途中にエラーが発生した場合はエラーを修正しない限り次のステップには進めません。

既にベリファイがエラーなしで行われていて、その後プログラムの修正や辞書修正が行われていない場合にはベリファイのステップは省略されます。変数宣言及び、プログラムのコヒーレントチェックは毎回行われます。「アプリケーションコード生成」コマンド実行中に処理を中断したい場合はＥＳＣキーを使います。

注意：プログラムのローカル変数が変更された場合はそのプログラムがベリファイされます。グローバル変数が変更された場合は全プログラムがベリファイされます。


プログラムの文法チェック

「ファイル」－「ベリファイプログラム」コマンドにより、選択されたプログラムのみがベリファイされます。プログラムに変更が加わっていない場合でもベリファイされます。

「ファイル」－「辞書のベリファイ」コマンドにより、プロジェクトの全変数辞書の宣言内容のチェックが行われます。

「ファイル」－「全プログラムのベリファイ」コマンドにより、プロジェクト内の全プログラムがベリファイされます。中に変更されていないプログラムがあっても、全プログラムがベリファイされます。このベリファイはエラーが発生しても途中で中止されないので、プログラムに残っている全てのエラーリストが作成できます。ただし、ベリファイを中断する場合はＥＳＣキーを使います。


完全な再コンパイル（再コード生成）

「ファイル」－「タッチ」コマンドにより、次の「アプリケーションコード生成」コマンドの時に全プログラムがベリファイされるように擬似的に全てのプログラムの修正が加わったことにします。

「ファイル」－「オープン」コマンドにより、最後にベリファイされていたプログラムが開かれるので、シンタックスエラーの検出されたプログラムをチェックするのに便利です。


コンパイラオプション

「オプション」－「コンパイラオプション」コマンドにより、アプリケーションコード生成時のターゲットコードの作成と最適化のためのパラメータ設定ができます。生成されるターゲットコードのタイプの選択、コンパイル時やコード実行時の最適化パラメータの設定があります。

ISaGRAFターゲットの選択

ＳＦＣプログラムの処理

コード生成の最適化オプション

“アップロード”ボタンで、ダウンロードデータに圧縮されたソースコードを添付するための設定を行うダイアログボックスを開きます。


ISaGRAFターゲットの選択

ダイアログボックス上部のリストはターゲットコードの種類を示します。（サ）マークは選択されたターゲットコードを示します。ISaGRAFコードジェネレータは一回のコンパイルで最大３種類のコードを生成することができます。“選択”、“選択をはずす”ボタンで生成したいターゲットコードを選択します。以下に標準で選択可能なターゲットコードを示します。

SIMULATE:	このコードはワークベンチ上でのISaGRAFシミュレーション専用コードです。シミュレーション前にこの選択でシミュレーション用コードを生成しておく必要があります。

ISA86M:	このコードはＩｎｔｅｌベースのＣＰＵプロセッサー上で実行されるターゲット用のＴＩＣ（Target Independent Code）コードです。プロセッサータイプはバイトの並びのみを考慮しています。

ISA68M:	このコードはＭｏｔｏｒｏｌａベースのＣＰＵプロセッサー上で実行されるターゲット用のＴＩＣ（Target Independent Code）コードです。プロセッサータイプはバイトの並びのみを考慮しています。

SCC:	このコードを選択すると、ISaGRAFコンパイラはプロジェクトのプログラムごとに構造化Ｃソースコードを生成し（appli.c, appli.hと個別プログラムのxxx.c, xxx.hファイル）、ターゲットのライブラリとコンパイル／リンクすると、コンパイルモードのISaGRAFターゲットの実行モジュールを生成することができます。構造化Ｃとは、人が見やすい形式で記述されたＣソースのことです。

CC86M	このコードを選択すると、ISaGRAFコンパイラはプロジェクトで１本のＣソースコードを生成します（appli.cとappli.hファイル）。このファイルをターゲットのライブラリとコンパイル／リンクすると、コンパイルモードのISaGRAFターゲットの実行モジュールを生成することができます。この機能は、構造化Ｃソースコード生成機能がサポートされていなかったISaGRF V3.23より前のバージョンとの互換性のために残されています。ＣＣ８６ＭはＳＣＣと異なり、べた書きのＣソースコードとなります。

注意：ＩＬ言語のプログラムに関しては、ＳＣＣによってＣソースが生成されないので、ＣＣ８６Ｍを使用してください。


ＳＦＣプログラムの処理

“組み込みＳＦＣエンジンの使用”のチェックボックスをＯＮすることにより、ISaGRAFターゲットにＳＦＣエンジンが組み込まれていることを前提にアプリケーションコードを生成します。通常は、このチェックボックスをＯＮとしておきます。ターゲット実行時のパフォーマンスが高いためです。しかし、ISaGRAFのターゲットによりＳＦＣエンジンを内蔵していないものがあります。この場合はこのチェックボックスをＯＦＦすることにより、ＳＦＣプログラム記述が全てローレベルの言語に翻訳されます。このようなコードはカスタマイズされたISaGRAFターゲットで必要とされる場合があります。


コード生成の最適化オプション

ターゲットコードの最適化のためにISaGRAFコードジェネレーションが扱うパラメータは「コンパイラオプション」コマンドで選択ができます。ディフォルトではコンパイル時間の短縮化のため全ての最適化オプションははずされています。

“ 2回最適化を行う ”オプションはコード最適化を２回行います。ただし、通常２回目の最適化は１回目ほどの重要な意味を持ちません。

“定数表現の評価”オプションは定数表現がコンパイラによって処理されます。例えば２＋３は５としてターゲットでは置き換えられます。もし、オプションがセットされていない場合はランタイム中に２＋３を計算します。

“未使用ラベルの圧縮”オプションはプログラム中の未使用のジャンプラベル、ラベルを無視します。

“変数コピーの最適化”オプションは中間結果などをストアするテンポラリ的な変数を最適化します。“表現の最適化”オプションと一緒にセットされます。例えば、プログラム中に２回以上使われたExpressionの結果などを再利用します。

“未使用コードの圧縮”オプションは無意味なコードをなくします。例えば、ＳＴプログラムの中で "var := 1; var := X;"　があった場合に生成されるコードは "var := X;"　のみとなります。

“算術演算の最適化”オプションは算術演算を最適化します。例えば、計算式の　"A + 0" は "A"　に置き換えられます。同様に、“論理値演算の最適化”オプションは論理値演算を最適化します。例えば、 "A & A"　は "A"　に置き換えられます。

“Binary Decision Diagram作成”オプションは論理式（AND, OR , XOR , NOT 演算子の組み合わせ)を条件付きジャンプで置き換えます。ただし、ジャンプ先でのシーケンスの処理が元の処理よりも短くなる場合にのみ適用されます。

以下のテーブルに最適化オプションのそれぞれのオプションに対するパフォーマンス効果と要求されるコンパイルタイムをまとめます。

ﾊﾟﾌｫｰﾏﾝｽ	ｺﾝﾊﾟｲﾙﾀｲﾑ

最適化を２回	■■	(*)

定数表現最適化	■■■■■	■■

未使用ラベル圧縮	■■	■■■■■

変数ｺﾋﾟｰ最適化	■■	■■■■■

Expressions最適化	■■	■■■■■

未使用ｺｰﾄﾞ圧縮	■■	■■■■■

算術演算最適化	■■■■■	■■

論理値操作最適化	■■■■■	■■

Binary Decision Diagrams作成	■■■■■■■	■■■■■■■

(*) ｺﾝﾊﾟｲﾙ時間は２倍かかります。


Ｃソースコードの生成

ISaGRAFワークベンチはアプリケーションコードをＣソースコードとして生成することができます。この場合、ＳＦＣチャート、データベースを含むプログラムの全てがＣソースコードに含まれます。生成されるコードのタイプには、以下の２つがあります。

CC86M（CソースコードV3.04)	非構造化Ｃソースコードを生成します。この形式はターゲットがISaGRAF V3.23より前のバージョンの場合使用します。

SCC（構造化Ｃソースコード）	構造化Ｃソースコードを生成します。ターゲットシステムがV3.23以降の場合、こちらの形式を選択してください。

※プログラムにＩＬ言語を使用している場合、ＳＣＣではＣソースコード生成が出来ません。ＣＣ８６Ｍでコード生成を行ってください。

ＣＣ８６Ｍの場合、以下の２つのファイルが編集中のプロジェクトのサブディレクトリに作られます。

APPLI.c	共通のアプリケーションソースコードファイル

APPLI.h	共通のＣヘッダーファイル

構造化Ｃソースの場合、APPLI.cとAPPLI.hファイルに加え、各プログラムに１つずつ拡張子.cのソースファイルと.hのヘッダーファイルが作られます。

これらのファイルはISaGRAFターゲット用の実行モジュールを生成するために、ISaGRAFターゲットライブラリと共にコンパイル／リンクされる必要があります。このためには別途ターゲット毎のＩ／Ｏ開発ツールキット（オプション）が必要になります。詳細はＩ／Ｏ開発ツールキットガイドを参照願います。

標準のISaGRAFターゲットは中間コードをソフトウェア処理（インタプリタ）して実行するため、インタプリタ型と呼ばれるのに対して、このＣソースコードからコンパイルされる場合はコンパイル型と呼ばれます。

注意：	アプリケーションのＣコンパイル版ではいくつかのデバッグ機能が使えなくなります。例えば、アプリケーションのダウンロード、オンライン修正、ブレークポイントの設定などです。


コード生成情報のモニタ：「編集」メニューコマンド

「編集」メニューコマンドにより、コード生成中、あるいはベリファイ中に作られたテキストファイルを開くことができます。コード生成ウィンドウはコード生成やベリファイ中のメッセージを表示します。画面表示のメッセージは後でモニタできるようにハードディスクに保管されます。

編集コマンド

「編集」－「クリア」コマンドにより、コード生成ウィンドウに表示中のテキストをクリアします。各コード生成、ベリファイの前にはウィンドウは自動的にクリアされます。

「編集」－「コピー」コマンドにより、表示されているテキストをクリップボードへコピーします。この内容は他のテキストエディタなどで使うことができます。

コンパイラ出力メッセージのモニタ

「編集」－「メッセージ実行」コマンドにより、最後の「アプリケーションコード生成」、「ベリファイ」コマンドで表示されたエラーメッセージを含む全メッセージを再表示します。.

その他の「編集」メニューコマンドによりコード生成やベリファイ中に生成されたファイルをモニタすることができますが、通常のISaGRAF使用においては使われません。


リソースファイルの定義

「オプション」－「リソース定義」コマンドにより、リソースを定義することができます。ここで言うリソースとは、ファイルやリストなどの形式のユーザ定義データ（ネットワーク構成、ハードウェア設定など。。）でターゲットコードとマージしてダウンロードされます。このデータはISaGRAFのカーネルが直接操作することはなく、ターゲット側にインストールされた他のプログラムが参照するためのものです。

リソース定義ファイル

リソースファイル言語リファレンス

リソース定義ファイルの例

リソースコンパイル

リソースのターゲットコードへのマージ


リソース定義ファイル

リソースの定義はISaGRAFのプロジェクトファイルと一緒に“リソース定義ファイル”として定義されます。このファイルはアスキーテキストファイルで、ISaGRAFのリソースコンパイラによって処理されます。リソースコンパイラはアプリケーションコード生成時に自動的に起動されます。ファイル内の記述はＳＴ言語の文法に従って書かれます。例えばコメントは(*    *)で、文字列は '　' で囲まれます。詳細の文法は該当の項を参照願います。


リソースファイル言語リファレンス

以下に、リソース定義ファイルの中で使われるキーワードとその記述方法を示します。

ULONGDATA

VARLIST

BINARYFILE

TEXTFILE

TARGET

ANYTARGET

FROM

TO


ULONGDATA

意味:	整数値のリスト。ターゲットコードにunsigned 32 bit integers で追加されます。整数はリソース定義ファイルで定義された順番に並びます。整数はコンマによって区切られます。リソースの名称は最大１５文字です。

文法:	ULONGDATA '<resource_name>'

BEGIN

...target_selection...

...list of values...

END

例:	ULongData 'MYDATA'

Begin

...

0, -1, 100_000,	(* decimal *)

16#A0B1, 2#1011_0101	(* hexadecimal, binary *)

End


VARLIST

意味:	変数アドレス（ＶＡ）を示すリストです。変数はリソース定義ファイル内の変数名で識別されます。変数アドレスはターゲットコードではunsigned 16 bit integersで表現されます。アドレスはリソース定義ファイル内で指定された定義順になります。変数はコンマで区切られ、リソース名称は最大１５文字です。

文法:	VARLIST '<resource_name>'

BEGIN

...target_selection...

...list of variable names...

END

例:	VarList 'LIST'

Begin

...

Var100, MyParameter, Command, Alarm

End


BINARYFILE

意味:	バイナリファイルリソース。ＭＳ－ＤＯＳファイル形式で保管されます。 パス名から成り立っています。End of line キャラクタはリソースコンパイラで変換されません。リソース名称は最大１５文字です。

文法:	BINARYFILE '<resource_name>'

BEGIN

...target selection...

FROM '<source_pathname>'

TO '<destination_pathname>'

END

例:	BinaryFile 'MYFILE'

Begin

...

From 'c:\user\config.bin'

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

End


TEXTFILE

意味:	テキストファイルリソース。アスキーファイルとして保管されます。パス名から成り立っています。 End of line キャラクタはターゲットシステムに合わせた方法でリソースコンパイラで変換されます。リソース名称は最大１５文字です。

文法:	TEXTFILE '<resource_name>'

BEGIN

...target selection...

FROM '<source_pathname>'

TO '<destination_pathname>'

END

例:	TextFile 'MYFILE'

Begin

...

From 'c:\user\config.bin'

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

End


TARGET

意味:	指定するリソースを含むターゲットコードの名称。"Target"ステートメントは複数のターゲットを選択可能になるべく、同一のリソースブロック内に何回も使われます。"AnyTarget"ステートメントが使われているところでは扱えません。

文法:	TARGET '<target_name>'

例:	BinaryFile 'MYFILE'

Begin

Target 'ISA86M'

Target 'ISA68M'

...

End


ANYTARGET

意味:	指定リソースがコード生成時に全てのターゲットコードにマージされされることを意味します。「アプリケーションコード生成」コマンドで複数のターゲットコードを生成することができますが、これら全てのターゲットコードが対象になります。 "Target" ステートメントが指定されている場合は扱えません。

文法:	ANYTARGET

例:	ULongData 'MYDATA'

Begin

AnyTarget

...

End


FROM

意味:	ソースファイル名をパス名付きで指定します。ISaGRAFワークベンチがインストールされているＰＣ内部のバイナリファイル又はテキストファイルのファイル名を指さします。パス名記述の際はＭＳ－ＤＯＳシステムの指定に従う必要があります。

文法:	FROM '<target pathname>'

例:	BinaryFile 'MYFILE'

Begin

...

From 'c:\user\config.dat'

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

End


TO

意味:	デスティネーション（ターゲットシステム）におけるバイナリファイル又はテキストファイル名を指します。ファイル名の記述はターゲットシステムの指定に従う必要があります。

文法:	TO '<target pathname>'

例:	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'	(* ソースファイル名 *)

   To 'updatef.cfg'	(* ターゲットでのファイル名 *)

End

TextFile 'FILE2'	(* テキストファイルリソース *)

Begin

   Target 'ISA68M'

   From 'c:\nw\nwbd.txt'	(* ソースファイル名 *)

   To '/nw/dat/nwbd'	(* ターゲットでのファイル名 *)

End


リソースコンパイル

リソースがリソース定義ファイルで定義されている場合は、コード生成が終了後に以下のダイアログボックスが開きます。

 "Start compile" ボタンを選択することにより、リソースコンパイルが開始されます。出力メッセージやエラーメッセージはこのウィンドウに表示されます。 "Exit" ボタンを選択することにより、リソースコンパイラを抜けます。この場合はリソースはターゲットコードに付加されません。


リソースのターゲットコードへのマージ

リソースの数、行数、ファイル数はISaGRAFには制限はありません。リソースはターゲットコードの最後にリソースディレクトリ付きで付加されます。以下にリソースディレクトリフォーマットをＣ言語の文法で示します。

__RESOURCE:

{

  long nbres;	/* 定義されているリソースの数 */

  {

    char name[16];	/* リソース名 */

    long type;	/* リソースデータタイプ */

    long size;	/* データブロック長 */

    void *data;

    char *path_offset;	/* 文字列へのポインタ */

  } /*nb of records */

}

上記の "type" フィールドには以下のいずれかが指定されます。

1 = バイナリファイル

2 = テキストファイル

3 = データリスト:ulong data (この場合path_offsetフィールドは使われません)

4 = 変数リスト:varlist  (この場合path_offsetフィールドは使われません)

テキストファイルに関して end of lineキャラクタはターゲットシステム合わせてリソースコンパイラが翻訳します。全てのポインタは３２ビットオフセットとなります。リソース名やパス名はNULLで終了します。パス名やデータが上記のリソースディレクトリの後に続きます。