ISaGRAF Ver.4/5 ターゲット移植のためのガイドライン


ISaGRAF Ver.4/5  開発ツールキットを使用してVer.4/5のターゲットを移植する際にVer.4/5のヘルプ(ProDk.chm)を読む前に、以下の移植のガイドラインをご覧下さい。

【内容】
(1)基本的なシステム要件
(2)移植のファーストステップの概要
(3)移植のヒント

(1)基本的なシステム要件
Ver4.03以降のISaGRAF Ver.4/5 ターゲットでは、移植を行うシステムに必要な項目は以下の通りです。

1.マルチタスクOS
2.ANSI Cによる開発環境を使用可能なターゲットシステムであること
3.以下のような機能をもつこと
    • TCP/IP BSD ソケットインタフェース
      ワークベンチとターゲット間の通信、またはターゲットどうしのバインディングリンク用です。
      シリアル通信ドライバ
      シリアル通信ポートを制御するドライバ。基本的には、キャラクタ単位の読み書きを行います。ワークベンチとの通信にのみ使用します。
      時間管理
      一定周期のものであれば何でも構いません。システムティックなどを利用します。
      ISaGRAF Ver.4/5の時間の単位はミリ秒です。つまり、最大の精度は1ミリ秒になります。
      共有メモリ
      複数のタスクから同じメモリエリアをアクセスできること。
      セマフォ
      タスク間の同期を取るためにバイナリセマフォを使います。
      複数タスクからのデータアクセス制御のためにはミューテックスセマフォ(排他セマフォ)を使います。
      メッセージキュー
      タスクどうしはメッセージをやり取りして通信します。メッセージの内容は移植時に気にする必要はありません。
      メッセージキューは、セマフォで管理された共有のFIFOバッファと見なすことができ、複数のタスクからアクセスが可能です。
      タスク管理
      各タスクは、アプリケーションのコンフィギュレーションやデバッグコマンドにともない、スタート/終了させる必要があります。
      補助記憶装置(ハードディスク、RAMディスク、フラッシュメモリ等)
      アプリケーション情報の保存用の媒体管理。アプリケーションコードや、シンボルテーブル等の保存のために使います。
      また、アプリケーションコードが保存されているリソースの一覧を取得するためのシンプルなブラウズ機能も必要です。

    以上の機能は、一連のシステムルーチンを経由してコールされます。これらのルーチンのインタフェース仕様は、ISaGRAF Ver.4/5開発キットのヘルプファイルをご覧下さい。
    ISaGRAF ver.4/5開発ツールキットの"NewOS"フォルダ内には、これらのルーチンのソースのひな型をコメント付きで収録してあります。
    実際の移植のおもな作業は、このひな型の内容を埋める、つまり、ISaGRAF Ver.4/5に必要な機能をターゲットOSに合わせる作業ということになります。

4.スタティックなデータの配置
    全ての関数から参照可能な変数があります。これは通常、スタックには格納されないグローバル変数です。
    また、複数のタスクが同じ実行コードを共有する場合があります。

    これはおもに
      • バーチャルマシンのタスクが複数回起動する場合あらゆるタスクからコールされる、システムレイヤのライブラリ
    です。このような場合、OSはタスクのインスタンス毎にスタティックデータ用のメモリを割り当てられる必要があります。
    これは、「カーネル」ライクなOSやマルチスレッドOSといったものにはあてはまりません。
    この機能を実現するために、OSは最低限の機能として、タスクのコンテキスト切替時に数個のポインタ(3、4個)をストアできなければなりません。したがって、タスクの初期化の第一段階で、データの割り当てを行うようなプログラミングをすることになります。 VxWorks版ターゲットのソースには、そのような例が含まれています。

(2)移植のファーストステップ
1.これまでに示した最小の機能要件が満たされていることを確認してください。
2.ISaGRAF Ver.4/5開発ツールキット(NSS-I4-PRDK)のCD-ROMから、"NewOS" フォルダの内容を開発環境にコピーしてください。
3.ターゲットに関する定義を行います。
    ターゲットの定義は、ワークベンチ側、ターゲット側ともに必要です。
    ワークベンチ側では、PLCtools.mdb または TDBuild.exe ツールを使って、新しいターゲットの定義をおこないます。
    ターゲット側では、IsaSys\dsys0def.h の中の定義を修正します。
    もちろん、双方の設定内容は一致していなければなりません。

    dsys0def.h ファイルの "TO DO" マークは最初のステップで何を行うべきかを示す印になっています。
    また、"#error"プラグマは、重要な情報をソース中に記述し忘れた場合、コンパイルエラーを起こして注意を促すためのものです。

4.メイクファイルの作成
    詳細についてはISaGRAF Ver.4/5開発キットのヘルプ(ProDk.chm)にもあるように、ターゲットはいろいろなコンポーネントで構成されています。コンパイルするときには、コンポーネントごとにメイクファイルが存在するということになります。
    例えば、タスク(プロセス、実行ファイル等、使用するシステムによって形態や用語はことなります)をリンク/生成するためのメイクファイル、ライブラリ等を生成するためのメイクファイルなどがあります。
    メイクファイルの詳細な情報に関しては、"NewOs\MakPrDK.txt"ファイルをご覧下さい。

5.ファイルのコンパイルとターゲットのビルド
    メイクファイルを準備できたら、これらを使ってターゲットをコンパイルします。ここで全てのファイルでコンパイルエラーが無いことを確認します。
    ビルドできても正常に動作しない場合もあると思いますが、次のステップでこの点をチェックします。

6.必要なインタフェースの実装
    ターゲット全体のテストを行う前に、個々のインタフェースの実装が完全かどうか確認しておくことをお勧めします。
    確認の順番としては、
      • 時間管理:"IsaSys\dsys0tim.c"
        まず最初に、確認が容易な時間管理をチェックします。
      • 共有メモリ:"IsaSys\dsys0spc.c"
        最初の段階では、補助記憶装置に関しての確認はスキップしても構いません。
      • メッセージキュー: "IsaSys\dsys0msq.c"
      • タスク管理:"IsaCmg\dcmg0tsk.c"TCP/IP BSD
      • ソケットインタフェース:"Etcp\detc0soc.c Etcp\detc0soc.h
      • シリアル通信ドライバ:"IsaRsi\drsi0com.c", "IsaRsi\drsi0com.h"
    この段階では、ターゲットをスタート(コンフィギュレーションマネージャを起動)し、TCP/IPかシリアル通信(実装しているほう)でワークベンチとの通信を確立してみます。
    最初は簡単なプロジェクト-1リソース、1内部変数-で試してみることをお勧めします。

    ワークベンチ側では、コード生成前に下記の項目を正しく設定しておきます。
      • ターゲット名...コンフィギュレーションまたはリソースのプロパティで設定通信パラメータ...ハードウェアアーキテクチャウィンドウで設定
    こうすれば、プロジェクトデータのダウンロードとデバッグモニタが成功するはずです。

    この段階では、以下の操作はまだ実行できません。
      • リソースコードの保存保存したコードからのリソースの起動シンボルテーブル類のダウンロードリソース間のバインディングリンク(TCP/IP(ETCP)またはローカル(HSD))
    リソースコードの保存/リストアを可能にするためには、補助記憶装置の管理を実装しておく必要があります。それには、下記のインタフェース(最初にスキップした部分)が必要です。
      • 共有メモリスペース:"IsaSys\dsys0spc.c"保存されているリソースの参照:"IsaCmg\dcmg0fil.c"
    シンボルテーブルの管理には、下記のものも必要です。
      • データのシーケンシャルアクセス:"IsaSys\dsys0dsa.c"
    バインディングリンクには、以下のインタフェースを実装します。
      • セマフォ:"IsaSys\dsys0sem.c"
(3)移植のヒント
1.'X'で始まる名前関数群 (X-----())
    これらは外部ファイルスコープを持つルーチンを表わします。しかし、これらはパブリックなインタフェースではありません。
    これらはライブラリ内部でのコーディングの利便性とモジュール性の向上のための手法です。
    この関数名は'X'の替わりに、ターゲットOSを表わす3文字の識別子に置き換えても構いません。具体的には標準OS上の実装を参考としてください。

    (例: XsysWngInit->OS9sysWngInit)

    同様に、IsaSys\dext0***.h ヘッダ類は、全てOSに依存する宣言や定義を行います。例えば、"X-----()" 関数類は dext0pro.h 内で宣言されています。基本的に、ファイル名の "ext" 部分をOSを表わす3文字の識別子に置きかえることが可能です。こちらも標準OSでの実装を参考としてください。

    (例:dext0pro.h->dos90pro.h)

2.sysObjNameGet() と dsysPathNameGet()
    「メモリスペース」、「メッセージキュー」、「セマフォ」等の管理を実装する際、ターゲットのOSによってはハンドルやオブジェクトに名前をつける必要があります。この場合は、XsysObjNameGet() 関数が利用できます。

    同様に、補助記憶装置の管理では、dsysPathNameGet() 関数で異なるオブジェクト(メモリスペースやデータシーケンシャルアクセス等)の保存先のフルパス名を取得できます。

    なお、dsysPathNameGet()関数は、XsysObjNameGet()関数を使用しています。

    また、パス名の取得は実際には_dsysPrjPathSet() ルーチンで行いますので、ここで任意のパス名を作ることができます。
    例えば、標準のターゲットでは、スタートアップパラメータの "PrjPath" から "dsysArgGet()" を使用してパス名を取得することができます。
最終更新:
2008-07-29 15:55
改訂:
1.2
評価点数:0 (0 件の投票)
Chuck Norris has counted to infinity. Twice.

このカテゴリー内のレコード

タグ