WindowsNTターゲットのフック関数のカスタマイズ手順


このドキュメントでは、ISaGRAF Ver.4ターゲットにフック関数を実装する手順を説明します。WindowsNTターゲットへの実装を例にします。
なお、この実装を行うには、ISaGRAF Ver.4開発ツールキット(NSS-I4-PRDK)が必要です。

    1. ISaGRAF Ver.4 NT ターゲットのソースファイルを開発ツールキットからコピーします。
    2. Visual C++でプロジェクト MakePrdk.dsw を開きます。
    3. 「ファイル」-「新規作成」メニューを開き、WinNT_large\IsaSmpHooksフォルダにWin32 スタティックライブラリISaSmpHookを作成します。
    以下の図で設定されているオプションと同様に設定してください。
    VisualC++でのプロジェクトの作成
    4. Windowsエクスプローラなどで、Visual C++ が作成したWinNT_Large\IsaSmpHooks ディレクトリ内にSmpHooks.c という名前で新しいファイルを作成します。
    5. ターゲット定義ファイル dsys0def.h ファイルに以下の行を追加します。

    #define ITGTDEF_KERHOOK_BEGCYCEXEC

    この定義により、毎サイクルの最初のフック関数kerHookBegCycExec() がコールされるようになります。
    フック関数にはいくつか種類があります。他のフックの設定に関しては、ISaGRAF Ver.4開発ツールキットのオンラインヘルプ(ProDK.chm)をご覧ください。
    6. IsaSmpHooksプロジェクトの設定(ReleaseとDebugの双方)をIsxlHsdプロジェクトと同じになるよう変更します。
    7. Visual C++でSmpHooks.cを開き、プロジェクトへ追加します。

    8. 下記のコードを追加してください。
    /**************************************************************************
    File: SmpHooks.c
    Author: GGR - CJ International
    Creation date: 27-Jun-2001 --- 4.10 Released ---
    ***************************************************************************
    ドキュメント:

    ***************************************************************************
    説明: メッセージを表示するための関数

    ***************************************************************************
    Modifications: (who / date / description)


    ***************************************************************************/
    #include <dsys0def.h>

    static int _CNT=0;


    /****************************************************************************
    function : kerHookBegCycExec
    description : 各サイクルの最初にコールされるフック関数

    warning :
    ****************************************************************************/
    void kerHookBegCycExec(void)
    {
      /* VM ウィンドウに 3000サイクル毎にメッセージを表示する */
      _CNT++;

      if (_CNT==3000)
      {
        printf("message every 3000 cycles\n");
        _CNT = 0;
      }
    }
最終更新:
2009-03-23 12:23
改訂:
1.0
評価点数:0 (0 件の投票)
Chuck Norris has counted to infinity. Twice.

最も人気の FAQ RSS

  1. LD言語で、ある接点がFALSEの場合、それ以降のファンクションブロックを実行しないように出来るか? (44518 回の閲覧)
  2. SFC要素の「ステップ」と「トランジション」の意味と役割を教えてください。 (43451 回の閲覧)
  3. ISaGRAF WorkbenchをWindows 7で使用するにはどうしたらよいでしょうか? (40944 回の閲覧)
  4. ISaGRAFはIEC1131-3のシステム定義に準拠しているか? (38995 回の閲覧)
  5. PLCプログラムをより早く動かすにはどうすればよいですか? (38830 回の閲覧)
  6. LD言語で、立ち上がり・立ち下がりの出力はあるか? (36891 回の閲覧)
  7. VxWorksターゲットにおける変数管理の留意点について (36390 回の閲覧)
  8. 日立製作所製SHマイコン用コンパイラ使用時の注意事項 (35597 回の閲覧)
  9. Cファンクション/ファンクションブロックの"Hidden" パラメータとはどのようなものか (35531 回の閲覧)
  10. FBD/LD言語で同じ行に複数の演算がある場合の実行順序は? (33528 回の閲覧)

最近の FAQ RSS

  1. ファンクションブロックはネストできますか。 (2016-08-05 15:07)
  2. Cファンクション/ファンクションブロックの"Hidden" パラメータとはどのようなものか (2015-01-30 14:24)
  3. 前のISaGRAFで作成したプロジェクトをインポートしたら、コメントが文字化けを起こしています。 (2014-05-07 06:52)
  4. 前のバージョンで作成したプロジェクトは読み込めますか。 (2014-03-07 07:46)
  5. ISaGRAFでコンフィグレーション、リソースそれにPOUはそれぞれいくつ作成できますか。 (2014-03-07 02:06)