- Cファンクション/ファンクションブロックの"Hidden" パラメータとはどのようなものか
Hidden(隠れた)パラメータは入力パラメータの一種ですが、FBDエディタ上では表示されません。そのためより簡潔なダイアグラムを作成することができます。 このパラメータはC言語ファンクション/ファンクションブロックにだけ定義できます。PLCToolsやTDBuild等のツールでC言語ファンクション類を定義するときにHidden パラメータも定義します。 FBDエディタの場合 FBDエディタからHiddenパラメータに値を設定する場合、データタイプは基本型(Bool/DINT/SINT/REAL/STRING/TIME)でなければなりません。新しい値を設定するダイアログボックスから構造体や配列を扱えないためです。 なお、Hiddenパラメータへの値の設定は、V4.03以降のバージョンのFBDエディタでのみ可能です。 Hiddenパラメータに値を設定するには: 1. FBDエディタで、Hidden パラメータを持つC言語ファンクション/ファンクションブロックを配置します。 2. 「ブロックの選択」ダイアログボックスでいったんブロックを選択し、「パラメータ」タブをクリックします。ここで Hidden パラメータに値を設定できます。 または、配置済みのブロックをダブルクリックすると、再度「ブロックの選択」ダイアログボックスが開きます。「パラメータ」タブをクリックし、パラメータに値を設定します。 LDエディタの場合 Hidden パラメータは通常の入力パラメータと同じように表示されます。 ...
- C言語ファンクションの作成手順
定義
まず、ワークベンチに付属するTDBuild.exe(TargetDefinition Builder)を使用します。これはC言語ファンクション/ファンクションブロック/変換関数をはじめ、I/Oボードやターゲットの構成を定義しするためのツールです。TDBuildを使えば、必要なCソースファイルやワークベンチ用の定義ファイルを簡単に生成することができます。
1. TDBuildを起動します。TDBuildはワークベンチのインストールディレクトリの "Bin" フォルダにあります。
2. 新しいTDBuildの定義ファイル(*.tdb)を作成します。
3. "Insert" メニューを実行し、"Cfunction" を新規作成します。
4. 追加するファンクションの名前を入力します。(例:MyFCT)
5. 入力パラメータ/出力パラメータ/ヘルプコメント等を定義します。
6. "Tools"-"Generate 'C' code" メニューを実行し、ソースファイル("*.c") とヘッダファイル("*.h") ファイルを生成します。
このファイルを、ターゲットのパッケージディレクトリに直接生成するか、後でそこにコピーしてください。
7. "Build"-"Send to File" メニューを実行し、ISaGRAF PROプロジェクトにインポートする定義ファイル(*.txt)を生成します。
注意:生成された定義ファイルは、1つのターゲットにしか適用できません。ファンクションを複数のターゲット上で使用する必要がある場合は、ターゲット毎に定義ファイルを生成してください。
ワークベンチ側での作業
1. ...
- C言語ファンクション類の選択ダイアログからオンラインヘルプの特定のページを表示させる方法
C言語ファンクション/ファンクションブロックを作成するには、ターゲットディフィニションビルダ(TDBUILDツール)を使用します。これらのファンクション類には、必要であればMicrosoft社の HTML HELP Workshopで作成したCHM形式のオンラインヘルプを起動するようなコマンドラインを付加しておくこともできます。このヘルプは、エンドユーザがファンクション類を挿入するときに参照できるようになります。
まず、TDBuildツールで"On Line info"のタブを選び、下記のコマンドラインを指定しておきます。
hh.exe -mapid 1 ..\help\MyCHelp.chm
ここで MyCHelp.chm は作成したヘルプファイル名で、"1" はHTML Help Workshopで選んだファンクションに対応するエイリアス番号です。同じヘルプファイルで他のファンクション類のヘルプを表示させるのなら、例えば下記のように指定します。
hh.exe -mapid 2 ..\help\MyCHelp.chm
エンドユーザがプロジェクトにこれらファンクションをインポートし、ブロックの選択時に「ヘルプ」ボタンをクリックすると、上記で指定したヘルプが表示されます。
...
- C言語ファンクション, C言語ファンクションブロックから直接ISaGRAF変数にアクセスする方法はあるか?
ISaGRAF変数の値にCのルーチンが直接アクセスすることはできません。
ISaGRAFのC言語ファンクション・ファンクションブロックでやりとりできるのは,Cルーチンへの入力/出力パラメータの値のみです。
尚、外部のプログラムからISaGRAF変数をアクセスしたい場合にはIXL関数を使用してください。
...
- C言語ファンクションを作る手順
バージョンによって手順が異なります。
ISaGRAF Ver.4/5の場合
定義
まず、ワークベンチに付属するTDBuild.exe(Target Definition Builder)を使用します。これはC言語ファンクション/ファンクションブロック/変換関数をはじめ、I/Oボードやターゲットの構成を定義しするためのツールです。
TDBuildを使えば、必要なCソースファイルやワークベンチ用の定義ファイルを簡単に生成することができます。
1. TDBuildを起動します。TDBuildはワークベンチのインストールディレクトリの "Bin" フォルダにあります。
2. 新しいTDBuildの定義ファイル(*.tdb)を作成します。
3. "Insert" メニューを実行し、"C function"を新規作成します。
4. 追加するファンクションの名前を入力します。(例:MyFCT)
5. 入力パラメータ/出力パラメータ/ヘルプコメント等を定義します。
6. "Tools"-"Generate 'C' code" メニューを実行し、ソースファイル("*.c") とヘッダファイル("*.h") ファイルを生成します。
このファイルを、ターゲットのパッケージディレクトリに直接生成するか、後でそこにコピーしてください。
7. "Build"-"Send to File" メニューを実行し、ISaGRAF ...
- CソースとTICコードのサイズ比較
ISaGRAFが生成するアプリケーションコードは、TICコード(ISaGRAF Ver.3の場合、ISA86MまたはISA68M)形式よりも、Cソースコードの形式の方が相対的にサイズが大きくなります。
以下の例は、ISaGRAF Ver.3でSFCや他のIEC言語を使用した比較的大きなアプリケーションの機械語の実行ファイルとTICコードを比較したものです。
TICコードの場合
ターゲット(カーネル)のサイズ=180KB
アプリケーションコード(TIC)サイズ=76KB
合計=256KB
Cソースコードをコンパイル・リンクした場合
カーネル+アプリケーション(実行ファイル)サイズ=391KB
このようにコードが大きくなる理由のひとつは、ほとんどのTICコードが、対応するCPUの命令コードよりもサイズが小さいためです。
この増分はTICコードのインタプリタ(カーネル)のどこかで吸収していることになります。また、同じ命令が処理される度にその部分が繰返し使用されるというわけでもありません。
...
- C言語ファンクションの戻り値はTRUEかFALSEになるが、CソースではTRUE,FALSEをどのように表現するのか?
値の定義
TRUEは(unsigned long)1
FALSEは(unsigned long)0
です。
ありがちなミス
例えば、0をFALSE,0以外をTRUEとプログラムしてしまう場合があります。この場合、ISaGRAFのデバッガには
0.......FALSE
0以外...TRUE
と表示され、一見うまく動作しているように見えます。しかし、ISaGRAFのターゲット内部ではそうではありません。0でもなく1でもない値は,TRUEでもなくFALSEでもありませんので問題が起きる場合があります。
例えば、下記のような場合、2つの条件判断はいずれも成立しません。
a:= testfunc(); (* (unsigned long)で0と1以外の値を返すファンクション *)
IF a = TRUE then
(* 処理1 *)
ELSE IF a = FALSE ...
- CソースとTICコードのサイズ比較
ISaGRAFが生成するアプリケーションコードは、TICコード(ISaGRAF Ver.3の場合、ISA86MまたはISA68M)形式よりも、Cソースコードの形式の方が相対的にサイズが大きくなります。
以下の例は、ISaGRAF Ver.3でSFCや他のIEC言語を使用した比較的大きなアプリケーションの機械語の実行ファイルとTICコードを比較したものです。
TICコードの場合
ターゲット(カーネル)のサイズ=180KB
アプリケーションコード(TIC)サイズ=76KB
合計=256KB
Cソースコードをコンパイル・リンクした場合
カーネル+アプリケーション(実行ファイル)サイズ=391KB
このようにコードが大きくなる理由のひとつは、ほとんどのTICコードが、対応するCPUの命令コードよりもサイズが小さいためです。
この増分はTICコードのインタプリタ(カーネル)のどこかで吸収していることになります。また、同じ命令が処理される度にその部分が繰返し使用されるというわけでもありません。
...
- C言語ファンクションの作成手順
定義
まず、ワークベンチに付属するTDBuild.exe(TargetDefinition Builder)を使用します。これはC言語ファンクション/ファンクションブロック/変換関数をはじめ、I/Oボードやターゲットの構成を定義しするためのツールです。TDBuildを使えば、必要なCソースファイルやワークベンチ用の定義ファイルを簡単に生成することができます。
1. TDBuildを起動します。TDBuildはワークベンチのインストールディレクトリの "Bin" フォルダにあります。
2. 新しいTDBuildの定義ファイル(*.tdb)を作成します。
3. "Insert" メニューを実行し、"Cfunction" を新規作成します。
4. 追加するファンクションの名前を入力します。(例:MyFCT)
5. 入力パラメータ/出力パラメータ/ヘルプコメント等を定義します。
6. "Tools"-"Generate 'C' code" メニューを実行し、ソースファイル("*.c") とヘッダファイル("*.h") ファイルを生成します。
このファイルを、ターゲットのパッケージディレクトリに直接生成するか、後でそこにコピーしてください。
7. "Build"-"Send to File" メニューを実行し、ISaGRAF Ver.4プロジェクトにインポートする定義ファイル(*.txt)を生成します。
注意:生成された定義ファイルは、1つのターゲットにしか適用できません。ファンクションを複数のターゲット上で使用する必要がある場合は、ターゲット毎に定義ファイルを生成してください。
ワークベンチ側での作業
1. ...
- C言語ファンクション類の選択ダイアログからオンラインヘルプの特定のページを表示させる方法
C言語ファンクション/ファンクションブロックを作成するには、ターゲットディフィニションビルダ(TDBUILDツール)を使用します。これらのファンクション類には、必要であればMicrosoft社の HTML HELP Workshopで作成したCHM形式のオンラインヘルプを起動するようなコマンドラインを付加しておくこともできます。このヘルプは、エンドユーザがファンクション類を挿入するときに参照できるようになります。
まず、TDBuildツールで"On Line info"のタブを選び、下記のコマンドラインを指定しておきます。
hh.exe -mapid 1 ..\help\MyCHelp.chm
ここで MyCHelp.chm は作成したヘルプファイル名で、"1" はHTML Help Workshopで選んだファンクションに対応するエイリアス番号です。同じヘルプファイルで他のファンクション類のヘルプを表示させるのなら、例えば下記のように指定します。
hh.exe -mapid 2 ..\help\MyCHelp.chm
エンドユーザがプロジェクトにこれらファンクションをインポートし、ブロックの選択時に「ヘルプ」ボタンをクリックすると、上記で指定したヘルプが表示されます。
...
- C言語ファンクション, C言語ファンクションブロックから直接ISaGRAF変数にアクセスする方法はあるか?
ISaGRAF変数の値にCのルーチンが直接アクセスすることはできません。
ISaGRAFのC言語ファンクション・ファンクションブロックでやりとりできるのは,Cルーチンへの入力/出力パラメータの値のみです。
尚、外部のプログラムからISaGRAF変数をアクセスしたい場合にはIXL関数を使用してください。
...
- C言語ファンクションを作る手順
バージョンによって手順が異なります。
ISaGRAF Ver.4の場合
定義
まず、ワークベンチに付属するTDBuild.exe(Target Definition Builder)を使用します。これはC言語ファンクション/ファンクションブロック/変換関数をはじめ、I/Oボードやターゲットの構成を定義しするためのツールです。
TDBuildを使えば、必要なCソースファイルやワークベンチ用の定義ファイルを簡単に生成することができます。
1. TDBuildを起動します。TDBuildはワークベンチのインストールディレクトリの "Bin" フォルダにあります。
2. 新しいTDBuildの定義ファイル(*.tdb)を作成します。
3. "Insert" メニューを実行し、"C function"を新規作成します。
4. 追加するファンクションの名前を入力します。(例:MyFCT)
5. 入力パラメータ/出力パラメータ/ヘルプコメント等を定義します。
6. "Tools"-"Generate 'C' code" メニューを実行し、ソースファイル("*.c") とヘッダファイル("*.h") ファイルを生成します。
このファイルを、ターゲットのパッケージディレクトリに直接生成するか、後でそこにコピーしてください。
7. "Build"-"Send to File" メニューを実行し、ISaGRAF ...
- CソースとTICコードのサイズ比較
ISaGRAFが生成するアプリケーションコードは、TICコード(ISaGRAF Ver.3の場合、ISA86MまたはISA68M)形式よりも、Cソースコードの形式の方が相対的にサイズが大きくなります。
以下の例は、ISaGRAF Ver.3でSFCや他のIEC言語を使用した比較的大きなアプリケーションの機械語の実行ファイルとTICコードを比較したものです。
TICコードの場合
ターゲット(カーネル)のサイズ=180KB
アプリケーションコード(TIC)サイズ=76KB
合計=256KB
Cソースコードをコンパイル・リンクした場合
カーネル+アプリケーション(実行ファイル)サイズ=391KB
このようにコードが大きくなる理由のひとつは、ほとんどのTICコードが、対応するCPUの命令コードよりもサイズが小さいためです。
この増分はTICコードのインタプリタ(カーネル)のどこかで吸収していることになります。また、同じ命令が処理される度にその部分が繰返し使用されるというわけでもありません。
...
- C言語ファンクションの戻り値はTRUEかFALSEになるが、CソースではTRUE,FALSEをどのように表現するのか?
値の定義
TRUEは(unsigned long)1
FALSEは(unsigned long)0
です。
ありがちなミス
例えば、0をFALSE,0以外をTRUEとプログラムしてしまう場合があります。
この場合、ISaGRAFのデバッガには
0.......FALSE
0以外...TRUE
と表示され、一見うまく動作しているように見えます。
しかし、ISaGRAFのターゲット内部ではそうではありません。
0でもなく1でもない値は,TRUEでもなくFALSEでもありませんので問題が起きる場合があります。
例えば、下記のような場合、2つの条件判断はいずれも成立しません。
a:= testfunc(); (* (unsigned long)で0と1以外の値を返すファンクション *)
IF a = TRUE then
(* 処理1 *)
ELSE IF a = FALSE ...