...

C(98)/ISA製品からPCI/CompactPCI製品への移行

by user

on
Category: Documents
29

views

Report

Comments

Transcript

C(98)/ISA製品からPCI/CompactPCI製品への移行
TUT-0006
www.interface.co.jp
Ver.1.2
改訂履歴
改訂履歴
Ver
年 月
1.0
1.1
1.2
2003 年 2 月
2004 年 1 月
2005 年 3 月
改 訂 内 容
初版
CompactPCI の追加
技術資料一覧更新
本チュートリアルをご使用の際は、必ず各製品型式の最新のドキュメント(ユーザーズマニュア
ル,オンラインヘルプ)をあわせて参照してください。また、最新のドライバソフトウェアをご使
用ください。ユーザーズマニュアル, ドライバソフトウェアは弊社 Web site からダウンロードで
きます。(オンラインヘルプはドライバソフトウェアに含まれています)
商標/登録商標
Microsoft、MS-DOS、MS、Visual C++は、米国 Microsoft Corporation の登録商標です。
IBM PC DOS 2000 日本語版は、IBM 社、Borland C++ Suite は、ボーランド社の登録商標です。
その他、本書に掲載されている会社名、製品名は、それぞれ各社の商標または登録商標です。
保証の内容と制限
株式会社インタフェースは本書の情報の正確さに万全を期しています。万一、誤記または誤植などがあっ
た場合、株式会社インタフェースは予告無く改訂する場合があります。本書または本書内の情報に起因す
るいかなる損害に対しても株式会社インタフェースは責任を負いません。
本書の図や表は説明のためであり、ユーザ個別の応用事例により変化する場合があります。
著作権、知的所有権
株式会社インタフェースは本書に対する権利や知的所有権を保持しています。
本書はコンピュータ ソフトウェア(プログラム)、 図、 文章、 写真などを含んでいます。
複製の禁止
株式会社インタフェースの許可なく、本書の全て、または一部に関わらず、複製、改変などを行うことは
できません。
責任の制限
株式会社インタフェースは、株式会社インタフェース または再販売者の予見の有無にかかわらず発生した
いかなる特別損害、偶発的損害、間接的な損害、重大な損害について、責任を負いません。
© 2003, 2005 Interface Corporation. All rights reserved.
目次
「目次」
はじめに ....................................................................................................................................................................... 1
第1章
システム移行の戦略 ................................................................................................................................ 2
1.1
ハードウェア面から見た C(98)/ISA と PCI/CompactPCI の違い ........................................................ 2
1.2
ソフトウェア面から見た C(98)/ISA と PCI/CompactPCI の違い ........................................................ 3
1.3
システム移行のケース例 ........................................................................................................................ 4
„
„
„
第2章
2.1
2.2
2.3
2.4
2.5
ケース 1 既存のシステムは、弊社ライブラリを使って構築していた.............................................................. 4
ケース 2 既存のシステムは、拡張ボードを直接制御していた.......................................................................... 5
ケース 3 ユーザインタフェースをグラフィカルなものに取り替えたい.......................................................... 5
プログラミングの前に ............................................................................................................................ 6
PCI/CompactPCI 拡張ボードは、如何にしてリソースを設定するのか?......................................... 6
同一型式の拡張ボードの見分け方......................................................................................................... 9
使用する PCI/CompactPCI 拡張ボードの選択....................................................................................... 9
使用できる OS とソフトウェアの変化................................................................................................ 11
その他の Tips .......................................................................................................................................... 11
„
第3章
3.1
3.2
3.2.1
3.2.2
„
„
„
3.3
3.3.1
3.3.2
„
„
„
„
„
3.4
3.4.1
3.4.2
„
„
„
„
„
3.5
3.5.1
3.5.2
„
„
„
„
„
3.6
3.6.1
3.6.2
3.6.3
„
„
„
„
„
3.7
3.7.1
3.7.2
„
プラットフォームの違い ......................................................................................................................................... 11
弊社ライブラリを使用したシステムからの移行 ............................................................................... 13
移行の概要 .............................................................................................................................................. 13
デジタル入出力用ライブラリ(VND/VID/VED-2000)からの移行 ..................................................... 15
関数 比較一覧...................................................................................................................................................... 15
移行時の注意点.................................................................................................................................................... 15
DioSetup 関数 ............................................................................................................................................................. 16
DioEnableInterrupt 関数 ............................................................................................................................................. 17
DioDisableInterrupt 関数 ............................................................................................................................................ 18
アナログ入力用ライブラリ(GND/GID-31xx)からの移行 .................................................................. 18
コマンド 比較一覧.............................................................................................................................................. 19
移行時の注意点.................................................................................................................................................... 19
移行に使う GPD-3100 のライブラリの選択.......................................................................................................... 19
コマンドの差異.......................................................................................................................................................... 20
波形メモリ確保の仕組み ......................................................................................................................................... 20
組み込み方法の違い ................................................................................................................................................. 20
移植例.......................................................................................................................................................................... 21
アナログ出力用ライブラリ(GND/GID-33xx)からの移行 .................................................................. 22
コマンド 比較一覧.............................................................................................................................................. 22
移行時の注意点.................................................................................................................................................... 23
移行に使う GPD-3300 のライブラリの選択.......................................................................................................... 23
コマンドの差異.......................................................................................................................................................... 23
波形メモリ確保の仕組み ......................................................................................................................................... 23
組み込み方法の違い ................................................................................................................................................. 24
移植例.......................................................................................................................................................................... 24
アナログ入出力用ライブラリ(GND/GID-35xx)からの移行 .............................................................. 26
コマンド 比較一覧.............................................................................................................................................. 26
移行時の注意点.................................................................................................................................................... 27
移行に使う GPD-3500 のライブラリの選択.......................................................................................................... 27
コマンドの差異.......................................................................................................................................................... 27
波形メモリ確保の仕組み ......................................................................................................................................... 28
組み込み方法の違い ................................................................................................................................................. 28
移植例.......................................................................................................................................................................... 28
シリアル通信(調歩同期)用ライブラリからの移行 ............................................................................ 30
ハードウェアの選択............................................................................................................................................ 30
関数 比較一覧...................................................................................................................................................... 31
移行時の注意点.................................................................................................................................................... 33
オープン関数によるボード指定方法の違い(xxxOpenPort 関数)........................................................................ 33
オープン関数による指定方法の違い(VCD-4201/4205) ....................................................................................... 36
対応ポート数の増加による修正(xxxCheckData 関数) ......................................................................................... 37
タイマ機能を有効にした場合の挙動の変化(GPD-4101 のみ)............................................................................ 38
ボードの設定変更関数に渡す初期化情報文字列の修正(xxxConfigPort) .......................................................... 38
シリアル通信(LAP-B)用ライブラリからの移行................................................................................. 42
関数 比較一覧...................................................................................................................................................... 42
移行時の注意点.................................................................................................................................................... 43
ボード情報の定義関数(LapbnInit, LapbnvdInit)..................................................................................................... 43
© 2003, 2005 Interface Corporation. All rights reserved.
目次
„
受信クロックの設定(LapbnOpenPort, LapbnvdOpenPort) ..................................................................................... 44
第4章
拡張ボードを直接制御したシステムからの移行 ............................................................................... 45
4.1
移行の概要 .............................................................................................................................................. 45
4.2
PCI/CompactPCI 拡張ボードに割り当てられたリソースを取得する .............................................. 46
4.3
PCI/CompactPCI 拡張ボードに搭載されたメモリへのアクセスをする .......................................... 47
4.4
共有割り込み処理をする ...................................................................................................................... 49
技術資料紹介.............................................................................................................................................................. 55
参考文献 ..................................................................................................................................................................... 56
[図目次]
図
図
図
図
図
図
図
2-1 アドレッシング方法の違い........................................................................................................................................... 6
2-2 拡張ボードの見分け方 ................................................................................................................................................... 9
2-3 CompactPCI と PCI ......................................................................................................................................................... 12
4-1 BPD-0806 により、上位のメモリにアクセスできる ............................................................................................... 48
4-2 C(98)/ISA 拡張ボードは割り込みは 1 対 1................................................................................................................. 50
4-3 PCI/CompactPCI 拡張ボードは割り込みは 1 対 n...................................................................................................... 50
4-4 PCI/CompactPCI 拡張ボードは割り込みステータスでボードを特定 .................................................................... 51
[表目次]
表
表
表
表
表
表
表
表
表
表
表
表
表
表
表
1-1 C(98)/ISA 拡張ボード用のライブラリ.......................................................................................................................... 4
1-2 サービスソフトウェア一覧........................................................................................................................................... 5
2-1 ハードウェア仕様の互換性......................................................................................................................................... 10
3-1 移行に適切な PCI/CompactPCI 拡張ボード用ライブラリ ...................................................................................... 13
3-2 デジタル入出力用ライブラリの新旧比較................................................................................................................. 15
3-3 アナログ入力用ライブラリの新旧比較..................................................................................................................... 19
3-4 アナログ入力用ドライバのオプションパラメータ比較 ........................................................................................ 21
3-5 アナログ出力用ライブラリの新旧比較..................................................................................................................... 22
3-6 アナログ出力用ドライバのオプションパラメータ比較 ........................................................................................ 24
3-7 アナログ入出力用ライブラリの新旧比較................................................................................................................. 26
3-8 アナログ入出力用ドライバのオプションパラメータ比較 .................................................................................... 28
3-9 シリアル通信用ライブラリの関数名一覧................................................................................................................. 31
3-10 GPD-4101 と GPD-4141 の関数名比較 ...................................................................................................................... 33
3-11 LAP-B 用ライブラリの新旧比較 ............................................................................................................................... 42
4-1 サービスソフトウェアの一覧..................................................................................................................................... 45
[List 目次]
List 3-1 サンプリング入力例 ................................................................................................................................................... 21
List 3-2 サンプリング出力例 ................................................................................................................................................... 24
List 3-3 サンプリング出力例 ................................................................................................................................................... 29
List 4-1 SMP6103.C .................................................................................................................................................................... 51
© 2003, 2005 Interface Corporation. All rights reserved.
はじめに
はじめに
平素は格別のご高配を賜り、厚くお礼申し上げます。
本冊子は、PC DOS あるいは MS-DOS(以降 DOS)上で、弊社 C(98)/ISA 拡張ボードをご利用いた
だいている方を対象に、C(98)/ISA 拡張ボードから PCI/CompactPCI 拡張ボードへの移行方法(ハ
ードウェア面での違い、ソフトウェア面で移行の際に気を付けなければならない事)を記載して
おります。
どうやって移行すれば
良い?
どんな違いがあるのか?
C
Interface
PCI
BUS
BUS
移行したい
Interface
ISA
CompactPCI
BUS
BUS
何を修正すれば
良い?
本冊子が、お客様のシステム移行の一助になれば幸いです。
© 2003, 2005 Interface Corporation. All rights reserved.
1
システム移行の戦略
第1章 システム移行の戦略
本冊子を手にされているお客様は、C(98)/ISA 拡張ボードを使ったシステムを構築された事が あ
ると思います。そして、システムのリプレースないしはバージョンアップ、または新規システム
を作る事になり、PCI/CompactPCI 拡張ボードを使用する事を検討・決定されたのだと思います。
システム移行の前に、
まず対象を良く知って頂くために、C(98)/ISA 拡張ボードと PCI/CompactPCI
拡張ボードとの違いについて、幾つか紹介します。
1.1 ハードウェア面から見た C(98)/ISA と PCI/CompactPCI の違い
ハードウェア面から見た際の、C(98)/ISA 拡張ボードと PCI/CompactPCI 拡張ボードとの違いにつ
いて、以下に列挙します。
違い
PCI/CompactPCI バスは、
C(98)/ISA バスに比べ、デー
タ転送の帯域幅が広い
説明
バスの性能指標の一つとして、バスが一度に送れるデータ量 転
送レートがあります。
C(98)/ISA バスの最大転送レートは、約 8∼10Mbyte/s ですが、
PCI/CompactPCI バスの最大転送レートは、約 132Mbyte/s です。
従って、C(98)/ISA バスに比べて PCI/CompactPCI バスでは、高速
なデータ転送を必要とするボードのデータ転送量の上限が高く、
多数の拡張ボードを使用した際、バスに対する負荷が軽いです。
PCI/CompactPCI 拡張ボード C(98)/ISA 拡張ボードでは、ボード 1 枚に対して 1 つの割り込み
は、1 つの割り込みに複数の 番号(IRQ)しか割り当てられませんでした。
ボードを割り当てられる
この為、特に複数のボードを使用する際、使用可能な割り込み番
号を探す為に、BIOS の設定やボードの設定を試行錯誤しながら
変更したり、アプリケーション側で対処しなければなりませんで
した。
しかし、PCI/CompactPCI 拡張ボードは、1 つの割り込みに複数の
ボードを割り当てる事ができます。この為、設計の自由度が高ま
っています。
PCI/CompactPCI 拡張ボード C(98)/ISA 拡張ボードでは、I/O ポートアドレスやメモリアドレス、
は、リソース(資源)の割り当 割り込み番号を設定する為のロータリスイッチやジャンパスイ
てを、自動で行う
ッチなどがボード上にあり、コンピュータ上の空いているリソー
スを調べて、一つ一つ設定する必要がありました。
この為、どこにボードのリソースを割り当てるか決定する為に、
デバッガ等のツールを使って空いているリソースを調べる必要
がありました。
しかし、
PCI/CompactPCI 拡張ボードは、これらの設定は Plug&Play
ソフトウェア(BIOS もしくは OS)が自動的に調整するので、人手
で決める必要がありません。
ソフトウェアは、BIOS もしくは OS に対し、ボードに割り当てら
れた I/O ポートアドレスを問い合わせ、そのポートにアクセスす
れば良いのです。
© 2003, 2005 Interface Corporation. All rights reserved.
2
システム移行の戦略
1.2 ソフトウェア面から見た C(98)/ISA と PCI/CompactPCI の違い
ソフトウェア面から見た時の違いは、一般に思われている程 大きくはありません。
実際にプログラムを組む際 考慮しなければならない点は、リソースの設定を Plug&Play ソフト
ウェアが自動的に決定する事と、割り込みが共有される、の 2 点ぐらいです。
拡張ボードの制御は、C(98)/ISA 拡張ボードと同様に、I/O ポートないしメモリに割り当てられ
たリソースに対して行います。
リソースの設定を Plug&Play ソフトウェアが自動設定する事による違いは、拡張ボードにアクセ
スする前に、Plug&Play ソフトウェアが割り当てた設定値を 前もって読み出す必要があるとい
う事です。
例えば、280h 番地に割り当てた、ISA 拡張ボードのオフセットアドレス 2 の I/O ポートに 12h
を書き込みたい場合、以下のようなコードを記述します。
unsigned short
uBaseAdrs = 0x280;
outp(uBaseAdrs + 2, 0x12);
PCI/CompactPCI 拡張ボードの場合は、Plug&Play ソフトウェアが番地を割り当てますので、その
PCI/CompactPCI 拡張ボードに割り当てられた番地を取得し、所望のオフセットにデータを書き
込みます。
unsigned short
uBaseAdrs;
/* ↓コンピュータが割り当てた I/O ポートアドレスを取得する関数を呼び出す */
uBaseAdrs = GetBaseAdrs();
outp(uBaseAdrs + 2, 0x12);
割り込みが共有される事による違いは、割り込みの共有処理が必要になる事です。
IRQn の割り込み処理ルーチンが呼び出された時、C(98)/ISA 拡張ボードの場合は、割り込み番号
1 つに対して拡張ボードは 1 つなので、割り込みを発生させたのは この拡張ボードだと判断す
る事ができます。
しかし、PCI/CompactPCI 拡張ボードの場合、割り込み番号 1 つに対して複数の拡張ボードを設
定できるので、このような判断方法は使えません。
実際には 拡張ボードの割り込みステータスをチェックし、その拡張ボードが割り込みを呼び出
した事を確認した上で、実処理を行います。
© 2003, 2005 Interface Corporation. All rights reserved.
3
システム移行の戦略
1.3 システム移行のケース例
既に C(98)/ISA 拡張ボードを使ったシステムがあり、これを PCI/CompactPCI 拡張ボードのもの
に置き換える場合の、考えられる移行方法の例を幾つか示します。
„
ケース 1 既存のシステムは、弊社ライブラリを使って構築していた
システム移行に際して 既存システムで作ったソフトウェア資産をできる限り多く流用したい場
合、既存システムと新システムの動作環境を合わせるのが 最も修正量が少なく済みます。
例えば、既存システムが DOS 上で動くよう構築されているならば、新システムも DOS 上で動く
ようにした方が、修正の手間は少なく済みます。
既存システムが下表の弊社ライブラリを使って構築されていたとします。
表 1-1 C(98)/ISA 拡張ボード用のライブラリ
分類
VND シリーズ
VID シリーズ
VCD シリーズ
VED シリーズ
説明
PC/FC-9801,9821 シリーズコンピュータを使って、C(98)拡張ボードを制御
するためのライブラリです。
PC/AT 互換機コンピュータを使って、ISA 拡張ボードを制御するためのラ
イブラリです。
PC/FC-9801,9821 シリーズコンピュータを使って、C(98)拡張ボードを制御
するためのライブラリと、PC/AT 互換機コンピュータを使って、ISA 拡張
ボードを制御するためのライブラリを、同梱したパッケージです。
PC/AT 互換機コンピュータに当社 EBS-1311※1 を接続して、C(98)拡張ボー
ドを制御するためのライブラリです。
※1:ISA-C(98)バスインタフェースセット。PC/AT 互換機コンピュータか
ら、C(98)拡張ボードを利用可能にする拡張バスブリッジセット。
弊社では、PCI/CompactPCI 拡張ボードの DOS 用ライブラリを用意しており、API 体系も上表の
ライブラリの API と高い互換性を提供しております。
既存システムを弊社ライブラリを使って構築しているならば、移行の手間は かなり軽いものと
なります。(一部除く)
このケースに当てはまるお客様は、第 3 章をご覧ください。
© 2003, 2005 Interface Corporation. All rights reserved.
4
システム移行の戦略
„
ケース 2 既存のシステムは、拡張ボードを直接制御していた
弊社ライブラリを使用せず、直接 I/O ポートやメモリにアクセスするアプリケーションを記述し
ていた場合、「1.2 ソフトウェア面から見た C(98)/ISA と PCI/CompactPCI の違い」で示した注意
点に気を付ける必要があります。
これらの作業を支援する為に、弊社では「BPD-0805 DOS 用リソース取得ライブラリ」と
「BPD-0806 DOS 用 4G メモリアクセスツール」,「BPD-0811 PCI DOS 用割り込み登録ライブ
ラリ」を用意しております。
表 1-2 サービスソフトウェア一覧
型式
BPD-0805
BPD-0806
BPD-0811
概要
DOS から PCI/CompactPCI 拡張ボードにアクセスする為に、ベンダ ID,デバイ
ス ID ないしは、ベンダ ID,デバイス ID,サブベンダ ID,サブシステム ID か
ら、PCI/CompactPCI 拡張ボードに割り当てられた I/O ポートアドレス,メモリ
アドレス,割り込み番号を取得します。
DOS の REAL モードでは、CPU のセグメントリミットが 64KB に制限される
ため、32 ビットレジスタ(EBX, ESI, EDI)による 1MB を超えるメモリエリアへ
のアクセスは、例外が発生します。
FBIMEM4G.COM の実行により、REAL モードのセグメントリミット
(DS,ES,FS,GS)は 64KB から 4GB に拡張され、32 ビットレジスタ(EBX, ESI, EDI)
による 1MB を超えるメモリエリアへのアクセスが有効となります。
PC/AT 互換機および PC/FC-9801, 9821 シリーズの MS-DOS, PC DOS 上のアプ
リケーションから、弊社 PCI/CompactPCI 拡張ボードにて割込みを使用するた
めの割込み処理関数の登録、削除を行うためのソフトウェアです。
これらのサービスソフトウェアを使用する事で、お客様は直接制御部分の移行に集中でき、移行
がしやすくなります。
このケースに当てはまるお客様は、第 4 章をご覧ください。
„
ケース 3 ユーザインタフェースをグラフィカルなものに取り替えたい
DOS 上で動作するよう構築したシステムがあり、ユーザインタフェース部分を、Windows のような
グラフィカルなものに切り替えたい場合、今まで作り上げたソフトウェアを破棄し、全面的に
Windows に移行すべきか?と言うと、必ずしもそうではありません。
例えば、2 台のコンピュータを用意し、ユーザインタフェースを使わない実処理を一方のコンピュー
タで行い、もう一方でユーザインタフェースの処理を行わせるように、処理を分離するのも一つの手
段です。弊社では、「TUT-0017 メモリンクを使用した負荷分散システム チュートリアル」にて、こ
の場合の構築方法について、サンプルプログラムと一緒に用意しております。
このチュートリアルは、弊社 Web site より PDF ファイルをダウンロードできます。
© 2003, 2005 Interface Corporation. All rights reserved.
5
プログラミングの前に
第2章 プログラミングの前に
先の章では、C(98)/ISA 拡張ボードと PCI/CompactPCI 拡張ボードの違いについて触れました。こ
こでは実際にプログラミングを行う際に、知っておきたい内容について列挙します。
2.1 PCI/CompactPCI 拡張ボードは、如何にしてリソースを設定す
るのか?
PCI/CompactPCI 拡張ボードは、ボードのリソース割り当てをコンピュータが行います。
この機能は、PCI コンフィギュレーションレジスタと呼ばれるリソース設定用の特殊なレジスタ
によって実現しています。
通常、拡張ボードは I/O 空間ないしはメモリ空間に配置され、ソフトウェアは これらの領域に
アクセスする事で、拡張ボードを制御します。
PCI コンフィギュレーションレジスタは、PCI コンフィギュレーションレジスタ空間と呼ばれる
空間に配置され、その領域にアクセスする事で、拡張ボードの I/O ポートアドレスやメモリアド
レス,割り込み番号などを、設定します。
<C(98)/ISA 拡張ボード>
0280h
<PCI/CompactPCI 拡張ボード>
I/O 空間
1200h
拡張ボード
I/O 空間
PCI
拡張ボード
CompactPCI
I/O
0280h
メモリ
D0000h
E00000h
D0000h
メモリ空間
メモリ空間
PCI コンフィギュレーション
レジスタ空間
I/O
1200h
メモリ
E00000h
図 2-1 アドレッシング方法の違い
I/O 空間やメモリ空間は、280h 番地や D0000h 番地といった 1 つのパラメータでアクセスします
が、PCI コンフィギュレーションレジスタ空間は、バス番号,デバイス番号,ファンクション番
号,レジスタ番号の 4 つのパラメータを使ってアクセスします。
(各パラメータの詳細については、規格書を参照してください。)
1 つの拡張ボードには、最低 1 ファンクション分の PCI コンフィギュレーションレジスタがあり
ます。1 ファンクションは、256 バイトのレジスタがあり、その内、64 バイトまでが規格書で用
途が決められています。
© 2003, 2005 Interface Corporation. All rights reserved.
6
プログラミングの前に
規格書で定義された 64 バイトの PCI コンフィギュレーションレジスタの内、最も重要なのはベ
ンダ ID とデバイス ID です。弊社では更にサブシステム ID を加えて、PCI/CompactPCI 拡張ボー
ドの区別に用いています。
レジスタ名
ベンダ ID
デバイス ID
サブシステム ID
役割
デバイスの製造者を表している 16bit の ID です。
弊社のベンダ ID は、1147h です。
デバイスを識別するための 16bit の ID です。
弊社では、一部を除いて、ボードの型式に付けられている 4 ケタの 10 進
数がデバイス ID として用いています。
PCI デバイスが搭載されているアドインボードを識別する目的、
あるいは、
製品の一意性を確保する目的で付与される 16bit の ID です。
弊社では、製品の一意性を確保する目的で使用しています。
デバイス ID とサブシステム ID をセットにして、PCI/CompactPCI 拡張ボ
ードを特定します。
下表に、弊社 PCI/CompactPCI 拡張ボードの割り当て例を示します。
弊社 PCI/CompactPCI 拡張ボードのデバイス ID とサブシステム
ボード型式
PCI-2128
CTP-2128
PCI-2130C
PCI-2131
PCI-2131A
CTP-2131
PCI-2135
デバイス ID
2128(0850h)
2128(0850h)
2130(0852h)
2131(0853h)
2131(0853h)
2131(0853h)
2135(0857h)
サブシステム ID
1(0001h)
257(0101h)
1(0001h)
1(0001h)
17(0011h)
257(0101h)
1(0001h) ()内の値は 16 進数
それぞれのボードのデバイス ID、サブシステム ID は、I/O ポート公開資料
に記載されていますので、それらの資料を参照してください。
これらのレジスタ値は、型式毎に ほぼ一意であり、システム内に実装された拡張ボードを区別
する為に使用されます。
例えば、PCI コンフィギュレーションレジスタを走査中、次の値が検出されたとします。
ベンダ ID
デバイス ID
サブシステム ID
:1147h
:2130(0852h)
:1(0001h)
弊社では、この値を PCI-2130C に割り当てている為、アプリケーションはシステム内に、PCI2130C が実装されていると判断する事ができます。
© 2003, 2005 Interface Corporation. All rights reserved.
7
プログラミングの前に
★ベンダ ID,デバイス ID,サブシステム ID を使った、存在の判定方法
この機能は、システムが拡張ボードを認識できるかどうかの判定方法の一つに使えます。
C(98)/ISA 拡張ボードの時、システムに拡張ボードが挿さっているか判断するには、割り当てた
I/O ポートアドレスなどの Read/Write 可能なレジスタに対してアクセスし、Write した値が Read
できるか?などの手段により判定していました。
しかし、この手法では、同じ位置に別のボードが実装された時を考えると、確実な手法とは言え
ません。
対して PCI/CompactPCI 拡張ボードでは、システム内に目的のベンダ ID,デバイス ID,サブシ
ステム ID を持つ拡張ボードがあるかチェックする事で、確実に存在判定を行う事ができま
す。
拡張ボードを特定した後、プログラマにとって重要なのは、拡張ボードに割り当てられた I/O ポ
ートアドレス,メモリアドレス,割り込み番号を知る事です。
これらの値は、Plug&Play ソフトウェアが、拡張ボードが必要としているリソースの大きさを調
べ、システム内で空いているリソース状態から適当な位置に割り振り、各レジスタに書き込んで
いきます。
各種設定は Plug&Play ソフトウェアが自動的に行う為、プログラマは自身で割り振る必要はあり
ません。
★リソースが割り当てられない拡張ボードの確認
拡張ボードの不良ないしは、割り当てる事の可能なリソースが不足していたなどの理由で、
Plug&Play ソフトウェアが拡張ボードのリソースをシステム上に配置できない事があります。
割り当てできなかった場合、ほとんどの Plug&Play ソフトウェアは、特定のレジスタの値を 0 に
設定します。
これを利用する事で、ソフトウェアから拡張ボードがシステムに正常にリソース配置されたか確
認する事が可能です。
★何故、DOS 環境で PCI/CompactPCI 拡張ボードを制御できるのか?
何故、PCI/CompactPCI が出現する以前の DOS 環境で PCI/CompactPCI 拡張ボードが制御できる
のか、不思議に思われるかも知れません。
答えは、BIOS にあります。
PCI/CompactPCI 拡張スロットを持つコンピュータの BIOS には、PCI/CompactPCI 拡張ボードの
リソース割り振りを行う機能と、PCI/CompactPCI 拡張ボードにアクセスする為の INT ファンク
ションが用意されています。
PCI/CompactPCI 拡張ボードの初期化は、コンピュータ電源 ON 時に BIOS が行い、PCI/CompactPCI
で新設された PCI コンフィギュレーションレジスタへのアクセスは、PCI BIOS と呼ばれるアク
セス用の INT ファンクションを経由して行います。
このように、PCI/CompactPCI のサポートを BIOS レベルで行っている為、PCI/CompactPCI に特
に対応していない OS(この場合 DOS)からでも、PCI/CompactPCI 拡張ボードを制御する事ができ
るのです。
© 2003, 2005 Interface Corporation. All rights reserved.
8
プログラミングの前に
2.2 同一型式の拡張ボードの見分け方
先ほどの説明で、PCI-2130C や PCI-3133 がシステム内に存在するかどうかのチェック方法を説
明しました。
では、PCI-2130C がシステムに 2 枚以上実装されている場合、制御すべき拡張ボードを認識する
には、どうすれば良いのでしょうか?
PCI-2130C
PCI-2130C
PCI-3133
PCI-2130C
これはどうやって
区別するのか?
これは区別できる
図 2-2 拡張ボードの見分け方
拡張ボードの見つかったデバイス番号で区別するのも一つの手です。
しかし、この方法では、拡張ボードの挿すスロットを変更した時、プログラムに教える必要があ
り、ベストな方法とは言えません。
この問題を解決する為に、弊社では同一型式の拡張ボードを区別する為に拡張ボードの基板上に、
ボード識別用ロータリスイッチ(ボード ID)を搭載しております。
お客様は、1 枚毎にボード識別用ロータリスイッチの値を変更する事で、ソフトウェアから目的
の拡張ボードを認識させる事ができるようになっています。
2.3 使用する PCI/CompactPCI 拡張ボードの選択
C(98)/ISA 拡張ボードを使った既存システムから、PCI/CompactPCI 拡張ボードを使った新システ
ムに移行する際、まず問題となるのは、システムに組み込む PCI/CompactPCI 拡張ボードの選択
です。
C(98)/ISA から PCI/CompactPCI へ移行する際、拡張ボードのハードウェア仕様が同一である事が望
ましいならば、同一の型式番号を持つ PCI/CompactPCI 拡張ボードを選択される事をお奨めします。
弊社では 一部を除き、同一の型式番号の製品は ハードウェア仕様の互換性を保っています。
© 2003, 2005 Interface Corporation. All rights reserved.
9
プログラミングの前に
以下に例を挙げます。
表 2-1 ハードウェア仕様の互換性
分類
型式
入力チャンネル数
シングルエンド入力
差動入力
入力形式
入力レンジ
ユニポーラ
バイポーラ
分解能
変換時間
チャンネル固定
チャンネル切り替え
絶縁方式
外部制御入力
デジタル入出力
電源仕様
ケーブル側コネクタ
C(98)製品
AZI-3133
ISA 製品
IBX-3133
←同左
PCI 製品
PCI-3133
←同左
CompactPCI 製品
CTP-3133
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
←同左
+5V 0.7A
PCR-E50FS
(本多通信工業)
相当品
←同左
←同左
DC+3.3V 0.2A
(起動時 0.5A),
DC+5V 0.7A
←同左
16ch
8ch
マルチプレクサ方式
0∼+5V、0∼+10V
±2.5V、±5V、±10V
12 ビット
10μsec
60μsec
非絶縁
AD サンプリング
制御入力
外部割込み入力
入力 2 点、出力 2 点
+5V 0.4A
+12V 30mA
-12V 10mA
57-30500-D76
(第一電子工業)相当品
三者を見比べた時、仕様的に異なるのは電源仕様とケーブル側コネクタ程度です。
このように、弊社の同一型式番号の製品は、高い互換性を保っています。
★選択に際しての注意
PCI/CompactPCI 拡張ボード製品では、より多くの製品を取り揃えており、お客様のニーズによ
っては別型式の製品を選択された方が より良い場合があります。
また、同一型式番号の製品は高い互換性を有しておりますが、バスの制約ならびに機構上の理由
により、一部仕様が異なるものもあります。この為、ボード選定の決定に際しては、弊社お客様
相談センタに一度お問い合わせ頂く事をおすすめします。
© 2003, 2005 Interface Corporation. All rights reserved.
10
プログラミングの前に
2.4 使用できる OS とソフトウェアの変化
本書では、MS-DOS あるいは PC DOS を実行環境として説明しています。
しかし、同じ DOS 環境でも、C(98)/ISA 拡張ボード用のライブラリ提供時と比べ、現在購入可能
な DOS 環境が若干変化しております。
例として、VND-2000 提供時の、動作環境 OS を示します。
PC/FC-9801 シリーズ:
MS-DOS Ver5.0 以降
IBM PC/AT 互換機:
IBM-DOS J5.X/V
IBM PC DOS J6.X/V 以降
MS-DOS Ver5.0/V 以降
Windows98/98SE の DOS モード
残念ながら、これらのバージョンの DOS は、現在入手が困難な状況にあります。2003 年 2 月時
点で入手可能な DOS 環境としては、以下が挙げられます。
IBM PC/AT 互換機、PC98-NX シリーズ、弊社 CPU ボード:
MS-DOS Ver6.X 以降
IBM PC DOS 2000
※Microsoft 版 MS-DOS は、現在単体での新規販売はされていません。
なお、MS-DOS ならびに PC DOS の API 仕様(DOS ファンクション)は、基本的に上位互換性を
保っております。従って、特殊なアプリケーションを使わない限り(OS 非公開のファンクション
や、あるバージョンのメモリ構造に依存したソフトウェアなど)、現在利用可能なバージョンの
DOS 環境にシステムを移行する事ができます。
2.5 その他の Tips
ここでは、幾つかの Tips を紹介します。
„
プラットフォームの違い
C(98)/ISA から PCI/CompactPCI への移行時、プラットフォームを変更する事があります。
例えば、PC/FC-9801,9821 シリーズのコンピュータを、IBM PC/AT 互換機のコンピュータに変更す
る等です。
Windows などの新しい OS では、ハードウェアの違いは OS 自身が差異を吸収しますが、DOS で
は OS が一部サポートしないハードウェアの違いを、ユーザ(ここではお客様)が対処しなければ
なりません。
© 2003, 2005 Interface Corporation. All rights reserved.
11
プログラミングの前に
基本的には、お客様の使用されるプログラムが、DOS の提供するファンクションコールのみを
使って作られているならば、修正や変更の必要はありません。
しかし、グラフィックや BIOS の INT ファンクションを呼び出すようなプログラムを記述してい
た場合、代替する処理に取り替える必要があります。
なお、PCI の情報にアクセスする為の PCI BIOS は、両方とも同じ INT ファンクションで呼び出
せる為、両プラットフォーム共 同じ処理で記述できます。
コラム
■CompactPCI とは?
CompactPCI は、PCI バスを工業製品に応用する事を目的として策定されたバス規格です。
2 つの拡張ボードを下図に示します。
<CompactPCI 拡張ボード>
<PCI 拡張ボード>
図 2-3 CompactPCI と PCI
CompactPCI は PCI に比べて、機械的・物理的・電気的に特性の優れたものを目指しています。
例えば、垂直カード方式によりボードの抜き差しが行いやすい、バスコネクタがピン形状でカー
ド保持機構を持っている為 衝撃や振動に強い、などの特長を持ちます。
また、ソフトウェア面から見て、CompactPCI と PCI は ほぼ同一の為(HotSwap への対応が追加
されたぐらい)、移行しやすくなっています。
PCI から CompactPCI への移行は、多くの場合 拡張ボードの取り替えで済みます。
© 2003, 2005 Interface Corporation. All rights reserved.
12
弊社ライブラリを使用したシステムからの移行
第3章 弊社ライブラリを使用したシステムからの移行
本章では、「1.3 システム移行のケース例」の「ケース 1 既存のシステムは、弊社ライブラリを
使って構築していた」で示した、C(98)/ISA 拡張ボード用ライブラリを使用して構築している既
存システムを、PCI/CompactPCI 拡張ボード用ライブラリに変更する際の注意点などについて説
明します。
3.1 移行の概要
システム移行時に問題となると思われる項目は、以下の 3 点です。
1. 使用する拡張ボードの選択
2. 使用するライブラリの選択
3. プログラムの修正
「1.使用する拡張ボードの選択」については、
「2.3 使用する PCI/CompactPCI 拡張ボードの選択」
を参照してください。
次に「2.使用するライブラリの選択」については、以下に示す C(98)/ISA 拡張ボード用のライブラ
リと、それに対応する PCI/CompactPCI 拡張ボード用のライブラリの一覧表を参照してください。
表 3-1 移行に適切な PCI/CompactPCI 拡張ボード用ライブラリ
C(98)/ISA 拡張ボード用
PCI/CompactPCI 拡張ボード 互換性
ライブラリソフトウェア
用ライブラリソフトウェア
VND-2000
/
VID-2000
/
GPD-2000
デジタル入出力
◎
VED-2000
GND-3100 / GID-3100
GPD-3100
○
アナログ入出力
GND-3300 / GID-3300
GPD-3300
○
GND-3500 / GID-3500
GPD-3500
○
VCD-4101
GPD-4101
◎
シリアル通信
VCD-4105
GPD-4101 / GPD-4141
△
VND-4131 / VED-4131
GPD-4101 / GPD-4141
△
VCD-4137
GPD-4101 / GPD-4141
△
VCD-4141
GPD-4141
◎
VCD-4201
GPD-4101 / 4141
△
VCD-4205
GPD-4101 / 4141
△
GPD-4101 / GPD-4141
VND-4111 / VED-4111
△
シリアル通信 /
PPI /
GPD-2746C
×
カウンタ
GPD-6202
×
GPD-4141
VCD-4112
△
シリアル通信 /
GPD-8208
プリンタ
×
GPD-4141
VCD-4113
△
シリアル通信 /
GP-IB
GPD-4301 / GPD-4304
×
カテゴリ
© 2003, 2005 Interface Corporation. All rights reserved.
13
参照
ページ
15
18
22
26
30
弊社ライブラリを使用したシステムからの移行
カテゴリ
シリアル通信 /
PPI
LAP-B
HDLC
GP-IB
モーション
C(98)/ISA 拡張ボード用
ライブラリソフトウェア
VCD-4140
VCD-4115
VCD-4215
VCD-4116
VCD-4216
VCD-4301
VCD-4304
VND-4322
VND-7202 / VED-7202
VCD-7207
VCD-7208
互換性について
PCI/CompactPCI 拡張ボード 互換性
用ライブラリソフトウェア
GPD-4101 / GPD-4141
△
GPD-2746C
×
GPD-4115
◎
GPD-4115
△
GPD-4116
×
GPD-4116
×
GPD-4301
×
GPD-4304
×
GPD-4301 / GPD-4304
×
×
×
×
参照
ページ
30
42
-
-
◎:ほぼ完全互換 ○:互換性あり
△:同等の機能を持つ関数がある ×:互換性なし
★PCI/CompactPCI 拡張ボード用ライブラリの入手について
PCI/CompactPCI 拡張ボード用ライブラリは、弊社 Web site より無償でダウンロードできます。
弊社 Web site:www.interface.co.jp
弊社の PCI/CompactPCI 拡張ボード用ライブラリは、C(98)/ISA 拡張ボード用ライブラリと、同等
もしくは高い互換性を持ったものが多く、C(98)/ISA バスから PCI/CompactPCI バスへの移行が容
易に実現可能です。
次項より、同等の機能を持ったライブラリ・互換性があるライブラリとの相違点等、移行方法の
解説を行います。
互換性の無いライブラリを使用するプログラムに関しては、新しいライブラリの仕様に合わせて
プログラムを作成する必要があります。
GPD シリーズの関数説明等をご参照の上、作成していただきますようお願いいたします。
© 2003, 2005 Interface Corporation. All rights reserved.
14
弊社ライブラリを使用したシステムからの移行
3.2 デジタル入出力用ライブラリ(VND/VID/VED-2000)からの移行
弊社デジタル入出力ボードに対応するライブラリソフトウェアには以下のものがあります。
C(98)/ISA バス用
PCI/CompactPCI バス用
VND-2000 / VID-2000 / VED-2000
GPD-2000
ここでは、デジタル入出力ボード用の C(98)/ISA 拡張ボード用ライブラリから PCI/CompactPCI
拡張ボード用ライブラリに移植する際の注意点を列挙します。
3.2.1
関数 比較一覧
双方のライブラリの、関数の比較一覧を示します。
表 3-2 デジタル入出力用ライブラリの新旧比較
機 能
ボード初期化
DI 入力(接点)
DO 出力(接点)
DI 入力(ポート)
DO 出力(ポート)
割り込みユーザ関数設定
割り込みユーザ関数解除
ディレイ設定
出力パルス設定
チャタリング防止設定
トリガ条件設定
トリガ待ち
DI 入力カウント
接点状態比較
シーケンス制御設定
シーケンス制御開始
DO 出力クリア
DO 出力リードバック
接点情報取得
DI 一定周期入力
設定情報の読み出し
設定情報の保存
ライブラリ使用終了
3.2.2
VND-2000
VID-2000
VED-2000
DioSetup
DioReadPoint
DioWritePoint
DioReadPort
DioWritePort
DioEnableInterrupt
DioDisableInterrupt
DioSetDelay
DioSetPulse
DioSetChattering
DioDefineTrigger
DioWaitTrigger
DioCount
DioCompareData
DioDefineSequence
DioStartSequence
DioClear
DioGetData
DioGetLineStatus
DioSampleData
DioLoad
DioSave
DioFinish
GPD-2000
DioSetup
○
DioReadPoint
◎
DioWritePoint
◎
DioReadPort
◎
DioWritePort
◎
DioEnableInterrupt
○
DioDisableInterrupt
○
DioSetDelay
◎
DioSetPulse
◎
DioSetChattering
◎
DioDefineTrigger
◎
DioWaitTrigger
◎
DioCount
◎
DioCompareData
◎
DioDefineSequence
◎
DioStartSequence
◎
DioClear
◎
DioGetData
◎
DioGetLineStatus
◎
DioSampleData
◎
DioLoad
◎
DioSave
◎
DioFinish
◎
◎:完全互換 ○:ほぼ互換
移行時の注意点
双方の関数名は、一部を除いて ほぼ同一です。
一部の関数は、ボードを特定する為の引数が追加されています。
© 2003, 2005 Interface Corporation. All rights reserved.
15
互換性
弊社ライブラリを使用したシステムからの移行
„
DioSetup 関数
関数宣言の比較>
<VND/VID/VED-2000>
<GPD-2000>
int DioSetup(
int DioSetup(
char *Device,
/* ボードの種別 */
char *Device,
/* ボードの種別 */
unsigned int Ioadr, /* I/O ポートベースアドレス */
unsigned int DeviceID,
/* デバイス ID */
int Num,
/* ボードの接点数 */
unsigned int SubsystemID, /* サブシステム ID */
int StartNum,
/* 接点開始番号 */
unsigned int BoardID,
/* ボード ID */
int StartPort,
/* 論理ポート開始番号 */
unsigned int uOffset,
/* 設定開始オフセット */
unsigned int Type, /* 制御信号有無 */
unsigned int Num,
/* ボードの接点数 */
int Ttype,
/* タイマ種別 */
int StartNum,
/* 接点開始番号 */
int Tadr,
/* タイマの I/O ポートアドレス */
int StartPort
/* 論理ポート開始番号 */
int Tirq
/* タイマの割り込み番号 */
);
);
VND/VID/VED-2000 では、第 2 引数に拡張ボードの I/O ポートアドレスを指定する必要がありま
すが、GPD-2000 では代わりに拡張ボードを特定するデバイス ID、サブシステム ID、ボード ID(第
2∼4 引数)を指定します。
VND/VID/VED-2000 にあったタイマ関連の設定は、PCI/CompactPCI 拡張ボード自身にインター
バルタイマが内蔵された為、GPD-2000 では削除されました。
移植例>
IBX-2131 から PCI-2131 へ移行する例です。
接点番号 1∼32、論理ポート番号 1∼4 に設定しています。
nRet = DioSetup( "DI", 0x0280, 32, 1, 1, 0x0282, 0, 0, 0 );
使わない指定。
nRet = DioSetup( "DI", 2131, 0x0001, 0, 0, 32, 1, 1 );
I/O ポートアドレスを指定する代わりに
デバイス ID 等を指定。
移植のポイントは、以下の通りです。
・ 拡張ボードの I/O ポートアドレスを直接指定からデバイス ID 等を指定に変更
・ 制御信号の指定は無い(常に有効)
・ タイマ種別の指定は無い(拡張ボード内部のインターバルタイマが使用される)
© 2003, 2005 Interface Corporation. All rights reserved.
16
弊社ライブラリを使用したシステムからの移行
„
DioEnableInterrupt 関数
関数宣言の比較>
<VND/VID/VED-2000>
<GPD-2000>
int DioEnableInterrupt(
int DioEnableInterrupt(
int Irq,
/* 割り込み番号 */
char *Device,
/* ボードの種別 */
void (*func)(),
/* ユーザー処理関数へのポインタ */
unsigned int DeviceID,
/* デバイス ID */
int ExInt
/* 拡張割り込み用の割り込み番号 */
unsigned int SubSystemID, /* サブシステム ID */
);
unsigned int BoardID,
/* ボード ID */
unsigned int Config,
/* 割り込み要因の割り当て */
unsigned int Mask,
/* 割り込み要因のマスク */
void(*Func)()
/* ユーザ処理関数へのポインタ */
);
VND/VID/VED-2000 では割り込み番号(第 1 引数)を直接指定していましたが、GPD-2000 では直
接指定せず、代わりにデバイス ID、サブシステム ID、ボード ID(第 2∼4 引数)を使って拡張ボ
ードを指定します。
(ライブラリ内部で、指定された拡張ボードの割り込み番号を取得、設定します)
GPD-2000 の割り込み要因のマスク(第 6 引数)は、PCI/CompactPCI 拡張ボードで割り込み要因が
ソフトウェア設定できるようになった為、追加された機能です。
移植例>
IBX-2131 から PCI-2131 へ移行する例です。
IN1 の入力信号が High→Low になった時、割り込み処理関数 int_sub を呼び出すようにしていま
す。
nRet = DioEnableInterrupt( 6, int_sub, -1)
nRet = DioEnableInterrupt( "DI", 2131, 0x0001, 0, 0, 1 , int_sub );
割り込み番号を指定する代わりに
デバイス ID 等を指定。
基板上の割り込み設定を
ここで指定。
移植のポイントは、以下の通りです。
・ 割り込み番号を直接指定するのでなく、デバイス ID 等で指定する
・ 拡張ボードの基板上で設定していた内容は、ソフトウェアで設定する
・ 特に、割り込み要因の設定がソフトウェア設定になっている事に留意
© 2003, 2005 Interface Corporation. All rights reserved.
17
弊社ライブラリを使用したシステムからの移行
„
DioDisableInterrupt 関数
関数宣言の比較>
<VND/VID/VED-2000>
<GPD-2000>
int DioDisableInterrupt(
int
int Irq,
/* 割り込み番号 */
int ExInt /* 拡張割り込み用の割り込み番号 */
);
DioDisableInterrupt(
char *Device,
/* ボードの種別 */
unsigned int DeviceID,
/* デバイス ID */
unsigned int SubSystemID, /* サブシステム ID */
unsigned int BoardID,
/* ボード ID */
);
VND/VID/VED-2000 では割り込み番号(第 1 引数)を直接指定していましたが、GPD-2000 では直
接指定せず、代わりにデバイス ID、サブシステム ID、ボード ID(第 2∼4 引数)を使って拡張ボ
ードを指定します。
移植例>
IBX-2131 から PCI-2131 へ移行する例です。
nRet = DioDisableInterrupt( 6, -1)
nRet = DioDisableInterrupt( "DI", 2131, 0x0001, 0 );
割り込み番号を指定する代わりに
デバイス ID 等を指定。
移植のポイントは、以下の通りです。
・ 割り込み番号を直接指定するのでなく、デバイス ID 等で指定する
3.3 アナログ入力用ライブラリ(GND/GID-31xx)からの移行
弊社アナログ入力ボードに対応するライブラリソフトウェアには以下のものがあります。
C(98)/ISA バス用
PCI/CompactPCI バス用
GND-31xx / GID-31xx (xx は、ボードの型式番号が入ります)
GPD-3100
ここでは、アナログ入力ボード用の C(98)/ISA 拡張ボード用ライブラリから PCI/CompactPCI 拡
張ボード用ライブラリに移植する際の注意点を列挙します。
© 2003, 2005 Interface Corporation. All rights reserved.
18
弊社ライブラリを使用したシステムからの移行
3.3.1
コマンド 比較一覧
双方のライブラリのコマンドの比較一覧を示します。
表 3-3 アナログ入力用ライブラリの新旧比較
機 能
波形メモリの取得・開放
サンプリングチャンネルの設定
サンプリング周波数の設定
サンプリング件数の設定
平均処理の種類と件数の設定
データの種類・計算式・係数の設定
入力仕様の設定
入力レンジの設定
ゲインの設定
割り込み番号の設定
トリガ条件の設定
サンプリングの開始
サンプリングの強制停止
波形メモリからのデータの取り出し
現在の AD 変換値一点の取得
外部トリガによるサンプリング入力
外部トリガでのサンプリングデータ取得
外部トリガでのサンプリングの終了
汎用入力の状態取得
汎用出力からの出力
ユーザー処理の登録
3.3.2
„
GND-31xx / GID-31xx
GPD-3100
互換性
MEM
MEM
×
CH
CH
◎
SC
SC
◎
SN
SN
◎
AVG
AVG
◎
CLC
CLC
◎
SD
SD
◎
RNG
RNG
◎
GIN
×
INT
×
TRG
TRG
◎
RAI
RAI
○
BRK
BRK
◎
MRD
MRD
○
ADRD
ADRD
◎
EXST
EXST
◎
EXIN
EXIN
◎
EXED
EXED
◎
DI
DI
◎
DO
DO
◎
USR
×
◎:完全互換 ○:ほぼ互換 ×:GPD-3100 では削除
移行時の注意点
移行に使う GPD-3100 のライブラリの選択
GPD-3100 には、以下の 2 種類のライブラリがあります。
1.
GPD-3100
Windows 用ソフトウェア(GPC-3100)と高い互換性を持つ API を持つライブラリです。
このライブラリは、LIB ファイルが提供されており、お客様のソースコードとリンクする事
で利用します。
2.
GPD-3100 WaveDriver
DOS 用ソフトウェア(GND/GID-31xx) と高い互換性を持つコマンド群を持つライブラリで
す。このライブラリは、GND/GID-31xx と同様、常駐型のドライバが提供されており、お客
様はドライバを常駐させた後、ドライバに対するファイルアクセス(open,read,write,close)
を行う事で利用します。
GND/GID-31xx を利用して作成したソフトウェアから移行するには、2 の「GPD-3100
Wave Driver」ライブラリの使用をお奨めします。
© 2003, 2005 Interface Corporation. All rights reserved.
19
弊社ライブラリを使用したシステムからの移行
„
コマンドの差異
先に示したコマンドの内、修正を要するコマンドを列挙します。
コマンド
MEM
GIN
INT
RAI
MRD
USR
„
対応方法
波形メモリの確保はドライバ内部で自動的に行われる為、このコマンドは削除されま
した。RAI コマンドおよび、MRD コマンドにてメモリハンドルを指定すべき所では、
代わりに「M0000」を指定します。
入力ゲインは、入力レンジとして まとめて表現可能な為、このコマンドは削除され
ました。
(例:入力レンジ:0∼5V、入力ゲイン:×1、×2 とすると、入力レンジ:0∼5V、
0∼10V として表す事が可能)
割り込み番号の管理は、ドライバ内部で自動的に行われます。
不要となった為、このコマンドは削除されました。
メモリハンドルの指定では、常に「M0000」を指定します。
メモリハンドルの指定では、常に「M0000」を指定します。
この機能は、GPD-3100 ではサポートされていません。
波形メモリ確保の仕組み
GND/GID-31xx では、MEM コマンドにて波形メモリを確保してからサンプリングを行う必要が
ありました。
GPD-3100 は、波形メモリの確保はライブラリ内部で自動的に行われます。
ライブラリが確保する波形メモリのサイズは、以下の式により求めています。
波形メモリサイズ = 1 データのサイズ(分解能) ×
サンプリングのチャンネル数 ×
サンプリング件数
波形メモリは XMS を使って確保しています。
なお、Windows95/98 の DOS モードは、初期状態で XMS が使える状態になっています。XMS
ドライバを別途導入する必要はありません。
„
組み込み方法の違い
GND/GID-3100 のドライバ組み込み方法としては、以下の 2 種類がありました。
・ CONFIG.SYS にドライバ名を記述し登録・常駐する
・ コマンドラインからドライバを動的に常駐させる
GPD-3100 は、コマンドラインからのドライバ常駐のみサポートします。
また、組み込み時、使用可能なオプションパラメータに違いがあります。
© 2003, 2005 Interface Corporation. All rights reserved.
20
弊社ライブラリを使用したシステムからの移行
表 3-4 アナログ入力用ドライバのオプションパラメータ比較
機 能
使用するボードの枚数
サンプリングバッファの件数
外部トリガに使用する割込みレベル
I/O ポートアドレス
デバイス名の設定
コマンドラインから組み込んだ場合の解除
GND/GID-31xx
GPD-3100
互換性
B
B
◎
S
×
E
×
I
×
N
N
◎
R
R
◎
◎:完全互換 ○:ほぼ互換 ×:GPD-3100 では削除
いずれも、波形メモリをドライバが確保する為 不要となったり、割り込みや I/O をドライバが
自動判定する為に削除されたものです。
„
移植例
以下は、チャンネル 1 から 10 件のサンプリング入力を行う場合の移植例を示しています。
List 3-1 サンプリング入力例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<GND/GID-31xx>
<GPD-3100>
char szCmd[256]; /* ドライバコマンド */
char szStat[256]; /* ドライバステータス */
char szWaveMem[6]; /* 波形メモリのハンドル */
char szCmd[256]; /* ドライバコマンド */
char szStat[256]; /* ドライバステータス */
int main(void)
{
int nRet;
int hAd;
int nBoardID;
int main(void)
{
int nRet;
int hAd;
int nBoardID;
/* ボード番号0に対して操作する */
nBoardID = 0;
/* ボード番号0に対して操作する */
nBoardID = 0;
/* ドライバのオープン */
hAd = open("GND3104", O_RDWR │ O_BINARY);
/* ドライバのオープン */
hAd = open("AD_IO", O_RDWR │ O_BINARY);
/* 波形メモリの確保(EMSに対して1024件確保) */
sprintf(szCmd, “MEM=EMS,1024¥xd”);
write(hAd, szCmd, strlen(szCmd));
/* 確保した波形メモリのハンドルを取得 */
read(hAd, szStat, 8);
memcpy(szWaveMem, szStat + 2, 5);
szWaveMem[5] = 0;
/* サンプリングチャンネルの設定(1チャンネル) */
sprintf(szCmd, "CH=%d:1¥xd", nBoardID);
write(hAd, szCmd, strlen(szCmd));
/* サンプリングチャンネルの設定(1チャンネル) */
sprintf(szCmd, "CH=%d:1¥xd", nBoardID);
write(hAd, szCmd, strlen(szCmd));
/* サンプリング件数の設定(10件) */
sprintf(szCmd, "SN=%d:10¥xd", nBoardID);
write(hAd, szCmd, strlen(szCmd));
/* サンプリング件数の設定(10件) */
sprintf(szCmd, "SN=%d:10¥xd", nBoardID);
write(hAd, szCmd, strlen(szCmd));
/* サンプリング入力の開始(I/Oサンプリング) */
sprintf(szCmd, "RAI=%d:1,%s¥xd",
nBoardID, szWaveMem);
write(hAd, szCmd, strlen(szCmd));
/* サンプリングの開始(I/Oサンプリング) */
sprintf(szCmd, "RAI=%d:1,M0000¥xd",
nBoardID);
write(hAd, szCmd, strlen(szCmd));
© 2003, 2005 Interface Corporation. All rights reserved.
21
弊社ライブラリを使用したシステムからの移行
38
39
40
41
42
43
44
/* (中略)*/
/* (中略)*/
/* ドライバのクローズ */
close(hAd);
return 0;
/* ドライバのクローズ */
close(hAd);
return 0;
}
}
移植のポイントは、以下の通りです。
・ 波形メモリの確保と、ハンドル値の取得部分を削除。(3 行目、17∼24 行目)
・ ハンドル値の指定を、全て「M0000」に変更。(35∼36 行目)
・ 登録したドライバ名でオープンする。(15 行目)
3.4 アナログ出力用ライブラリ(GND/GID-33xx)からの移行
弊社アナログ出力ボードに対応するライブラリソフトウェアには以下のものがあります。
C(98)/ISA バス用
PCI/CompactPCI バス用
GND-33xx / GID-33xx (xx は、ボードの型式番号が入ります)
GPD-3300
ここでは、アナログ出力ボード用の C(98)/ISA 拡張ボード用ライブラリから PCI/CompactPCI 拡
張ボード用ライブラリに移植する際の注意点を列挙します。
3.4.1
コマンド 比較一覧
双方のライブラリのコマンドの比較一覧を示します。
表 3-5 アナログ出力用ライブラリの新旧比較
機 能
波形メモリの取得・開放
サンプリング出力チャンネルの設定
サンプリング出力周波数の設定
サンプリング出力件数の設定
データの種類・計算式・係数の設定
出力レンジの設定
割り込み番号の設定
サンプリング出力の開始
サンプリング出力の繰り返し
サンプリングの強制停止
全チャンネルに 0V 出力を行う
波形メモリへデータの書き込み
一点の DA 出力データの出力
汎用入力の状態取得
汎用出力からの出力
ユーザー処理の登録
GND-3300 / GID-3300
GPD-3300
互換性
MEM
MEM
×
CH
CH
◎
SC
SC
◎
SN
SN
◎
CLC
CLC
◎
RNG
RNG
◎
INT
×
RAO
RAO
○
RAOR
RAOR
○
BRK
BRK
◎
CLR
CLR
◎
MWR
MWR
○
DAWR
DAWR
◎
DI
DI
◎
DO
DO
◎
USR
×
◎:完全互換 ○:ほぼ互換 ×:GPD-3300 では削除
© 2003, 2005 Interface Corporation. All rights reserved.
22
弊社ライブラリを使用したシステムからの移行
3.4.2
„
移行時の注意点
移行に使う GPD-3300 のライブラリの選択
GPD-3300 には、GPD-3100 同様、2 種類のライブラリがあります。
1.
GPD-3300
Windows 用ソフトウェア(GPC-3300)と高い互換性を持つ API を持つライブラリです。
このライブラリは、LIB ファイルが提供されており、お客様のソースコードとリンクする事
で利用します。
2.
GPD-3300 WaveDriver
DOS 用ソフトウェア(GND/GID-33xx) と高い互換性を持つコマンド群を持つライブラリで
す。
このライブラリは、GND/GID-33xx と同様、常駐型のドライバが提供されており、お客様は
ドライバを常駐させた後、ドライバに対するファイルアクセス(open,read,write,close)を
行う事で利用します。
GND/GID-33xx を利用して作成したソフトウェアから移行するには、2 の「GPD-3300
Wave Driver」ライブラリの使用をお奨めします。
„
コマンドの差異
先に示したコマンドの内、修正を要するコマンドを列挙します。
コマンド
MEM
INT
RAO
RAOR
MWR
USR
„
対応方法
波形メモリの確保はドライバ内部で自動的に行われる為、このコマンドは削除されま
した。RAO,RAOR,MWR コマンドにてメモリハンドルを指定すべき所では、代わ
りに「M0000」を指定します。
割り込み番号の管理は、ドライバ内部で自動的に行われます。
不要となった為、このコマンドは削除されました。
メモリハンドルの指定では、常に「M0000」を指定します。
メモリハンドルの指定では、常に「M0000」を指定します。
メモリハンドルの指定では、常に「M0000」を指定します。
この機能は、GPD-3300 ではサポートされていません。
波形メモリ確保の仕組み
GND/GID-33xx では、MEM コマンドにて波形メモリを確保してからサンプリングを行う必要が
ありました。
GPD-3300 は、波形メモリの確保はライブラリ内部で自動的に行われます。
ライブラリが確保する波形メモリのサイズは、以下の式により求めています。
波形メモリサイズ = 1 データのサイズ(分解能) ×
サンプリングのチャンネル数 ×
サンプリング件数
© 2003, 2005 Interface Corporation. All rights reserved.
23
弊社ライブラリを使用したシステムからの移行
波形メモリは XMS を使って確保しています。
なお、Windows95/98 の DOS モードは、初期状態で XMS が使える状態になっています。XMS
ドライバを別途導入する必要はありません。
„
組み込み方法の違い
GND/GID-3300 のドライバ組み込み方法としては、以下の 2 種類がありました。
・ CONFIG.SYS にドライバ名を記述し登録・常駐する
・ コマンドラインからドライバを動的に常駐させる
GPD-3300 は、コマンドラインからのドライバ常駐のみサポートします。
また、組み込み時、使用可能なオプションパラメータに違いがあります。
表 3-6 アナログ出力用ドライバのオプションパラメータ比較
機 能
使用するボードの枚数
サンプリングバッファの件数
I/O ポートアドレス
デバイス名の設定
コマンドラインから組み込んだ場合の解除
GND/GID-33xx
GPD-3300
互換性
B
B
◎
S
×
I
×
N
N
◎
R
R
◎
◎:完全互換 ○:ほぼ互換 ×:GPD-3300 では削除
いずれも、波形メモリをドライバが確保する為 不要となったり、割り込みや I/O をドライバが
自動判定する為に削除されたものです。
„
移植例
以下は、チャンネル 1 から 1000Hz で 100 点のサンプリング出力を行う場合の移植例を示してい
ます。
List 3-2 サンプリング出力例
<GND/GID-33xx>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char szCmd[256];
char szStat[256];
char szWaveMem[6];
float afData[100];
<GPD-3300>
/*
/*
/*
/*
ドライバコマンド */
ドライバステータス */
波形メモリのハンドル */
出力データ */
char szCmd[256]; /* ドライバコマンド */
char szStat[256]; /* ドライバステータス */
float afData[100]; /* 出力データ */
int main(void)
{
int nRet;
int hDa;
int nBoardID;
int main(void)
{
int nRet;
int hDa;
int nBoardID;
/* ボード番号0に対して操作する */
nBoardID = 0;
/* ボード番号0に対して操作する */
nBoardID = 0;
© 2003, 2005 Interface Corporation. All rights reserved.
24
弊社ライブラリを使用したシステムからの移行
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/* ドライバのオープン */
hDa = open("DA_IO", O_RDWR │ O_BINARY);
/* ドライバのオープン */
hDd = open("GND3303", O_RDWR │ O_BINARY);
/* 波形メモリの確保(EMSに対して1024件確保) */
sprintf(szCmd, “MEM=EMS,1024¥xd”);
write(hDa, szCmd, strlen(szCmd));
/* 確保した波形メモリのハンドルを取得 */
read(hDa, szStat, 8);
memcpy(szWaveMem, szStat + 2, 5);
szWaveMem[5] = 0;
/* サンプリングチャンネルの設定(1チャンネル)*/
sprintf(szCmd, "CH=%d:1¥xd", nBoardID);
write(hDa, szCmd, strlen(szCmd));
/* サンプリングチャンネルの設定(1チャンネル)*/
sprintf(szCmd, "CH=%d:1¥xd", nBoardID);
write(hDa, szCmd, strlen(szCmd));
/* サンプリング件数の設定(100件) */
sprintf(szCmd, "SN=%d:100¥xd", nBoardID);
write(hDa, szCmd, strlen(szCmd));
/* サンプリング件数の設定(100件) */
sprintf(szCmd, "SN=%d:100¥xd", nBoardID);
write(hDa, szCmd, strlen(szCmd));
/* 周波数の設定(1000Hz) */
sprintf(szCmd, "SC=%d:1000¥xd", nBoardID);
write(hDa, szCmd, strlen(szCmd));
/* 周波数の設定(1000Hz) */
sprintf(szCmd, "SC=%d:1000¥xd", nBoardID);
write(hDa, szCmd, strlen(szCmd));
/* (中略)*/
/* (中略)*/
/* 波形メモリにデータ書き込み(100件) */
sprintf(szCmd, "MWR=%s,1,100,%Fp¥xd",
szWaveMem, afData);
write(hDa, szCmd, strlen(szCmd));
/* 波形メモリにデータ書き込み(100件) */
sprintf(szCmd, "MWR=M0000,1,100,%Fp¥xd",
afData);
write(hDa, szCmd, strlen(szCmd));
/* サンプリング出力の開始(I/O) */
sprintf(szCmd, "RA0=%d:1,%s¥xd",
nBoardID, szWaveMem);
write(hDa, szCmd, strlen(szCmd));
/* サンプリング出力の開始(I/O) */
sprintf(szCmd, "RA0=%d:1,M0000¥xd",
nBoardID);
write(hDa, szCmd, strlen(szCmd));
/* (中略)*/
/* (中略)*/
/* ドライバのクローズ */
close(hDa);
return 0;
/* ドライバのクローズ */
close(hDa);
return 0;
}
}
移植のポイントは、以下の通りです。
・ 波形メモリの確保と、ハンドル値の取得部分を削除。(3 行目、18∼25 行目)
・ ハンドル値の指定を、全て「M0000」に変更。(42∼43、47∼48 行目)
・ 登録したドライバ名でオープンする。(16 行目)
© 2003, 2005 Interface Corporation. All rights reserved.
25
弊社ライブラリを使用したシステムからの移行
3.5 アナログ入出力用ライブラリ(GND/GID-35xx)からの移行
弊社アナログ入出力ボードに対応するライブラリソフトウェアには以下のものがあります。
C(98)/ISA バス用
PCI/CompactPCI バス用
GND-35xx / GID-35xx (xx は、ボードの型式番号が入ります)
GPD-3500
ここでは、アナログ入出力ボード用の C(98)/ISA 拡張ボード用ライブラリから PCI 拡張ボード用
ライブラリに移植する際の注意点を列挙します。
3.5.1
コマンド 比較一覧
双方のライブラリのコマンドの比較一覧を示します。
表 3-7 アナログ入出力用ライブラリの新旧比較
機 能
波形メモリの取得・開放
サンプリングチャンネルの設定
サンプリング周波数の設定
サンプリング件数の設定
平均処理の種類と件数の設定
データの種類・計算式・係数の設定
入力仕様の設定
入力レンジの設定
ゲインの設定
割り込み番号の設定
トリガ条件の設定
サンプリング入力の開始
サンプリング出力の開始
サンプリング出力の繰り返し
サンプリング入出力の開始
サンプリング入出力のステータス取得
サンプリングの強制停止
DA 出力の全チャンネルを 0V にする
波形メモリからのデータの取り出し
波形メモリへデータの書き込み
現在の AD 変換値一点の取得
一点の DA 出力の出力
外部トリガによるサンプリング入力
外部トリガでのサンプリングデータ取得
外部トリガでのサンプリングの終了
汎用入力の状態取得
汎用出力からの出力
ユーザー処理の登録
GND / GID-35xx
GPD-3500
互換性
MEM
MEM
×
CH
CH
◎
SC
SC
◎
SN
SN
◎
AVG
AVG
◎
CLC
CLC
◎
SD
SD
◎
RNG
RNG
◎
GIN
×
INT
×
TRG
TRG
◎
RAI
RAI
○
RAO
RAO
○
RAOR
RAOR
○
RAIO
RAIO
◎
RAIOST
RAIOST
◎
BRK
BRK
◎
CLR
CLR
◎
MRD
MRD
○
MWR
MWR
○
ADRD
ADRD
◎
DAWR
DAWR
◎
EXST
EXST
◎
EXIN
EXIN
◎
EXED
EXED
◎
DI
DI
◎
DO
DO
◎
USR
×
◎:完全互換 ○:ほぼ互換 ×:GPD-3500 では削除
© 2003, 2005 Interface Corporation. All rights reserved.
26
弊社ライブラリを使用したシステムからの移行
3.5.2
„
移行時の注意点
移行に使う GPD-3500 のライブラリの選択
GPD-3500 には、GPD-3100/3300 同様、2 種類のライブラリがあります。
3.
GPD-3500
Windows 用ソフトウェア(GPC-3500)と高い互換性を持つ API を持つライブラリです。
このライブラリは、LIB ファイルが提供されており、お客様のソースコードとリンクする事
で利用します。
4.
GPD-3500 WaveDriver
DOS 用ソフトウェア(GND/GID-35xx) と高い互換性を持つコマンド群を持つライブラリで
す。
このライブラリは、GND/GID-35xx と同様、常駐型のドライバが提供されており、お客様は
ドライバを常駐させた後、ドライバに対するファイルアクセス(open,read,write,close)を
行う事で利用します。
GND/GID-35xx を利用して作成したソフトウェアから移行するには、2 の「GPD-3500
Wave Driver」ライブラリの使用をお奨めします。
„
コマンドの差異
先に示したコマンドの内、修正を要するコマンドを列挙します。
コマンド
MEM
GIN
INT
RAI
MRD
RAO
RAOR
MWR
USR
対応方法
波形メモリの確保はドライバ内部で自動的に行われる為、このコマンドは削除されま
した。RAI,MRD,RAO,RAOR,MWR コマンドにてメモリハンドルを指定すべき
所では、代わりに「M0000」を指定します。
入力ゲインは、入力レンジとして まとめて表現可能な為、このコマンドは削除され
ました。
(例:入力レンジ:0∼5V、入力ゲイン:×1、×2 とすると、入力レンジ:0∼5V、
0∼10V として表す事が可能)
割り込み番号の管理は、ドライバ内部で自動的に行われます。
不要となった為、このコマンドは削除されました。
メモリハンドルの指定では、常に「M0000」を指定します。
メモリハンドルの指定では、常に「M0000」を指定します。
メモリハンドルの指定では、常に「M0000」を指定します。
メモリハンドルの指定では、常に「M0000」を指定します。
メモリハンドルの指定では、常に「M0000」を指定します。
この機能は、GPD-3500 ではサポートされていません。
© 2003, 2005 Interface Corporation. All rights reserved.
27
弊社ライブラリを使用したシステムからの移行
„
波形メモリ確保の仕組み
GND/GID-35xx では、MEM コマンドにて波形メモリを確保してからサンプリングを行う必要が
ありました。
GPD-3500 は、波形メモリの確保はライブラリ内部で自動的に行われます。
ライブラリが確保する波形メモリのサイズは、以下の式により求めています。
波形メモリサイズ = 1 データのサイズ(分解能) ×
サンプリングのチャンネル数 ×
サンプリング件数
波形メモリは XMS を使って確保しています。
なお、Windows95/98 の DOS モードは、初期状態で XMS が使える状態になっています。XMS
ドライバを別途導入する必要はありません。
„
組み込み方法の違い
GND/GID-3500 のドライバ組み込み方法としては、以下の 2 種類がありました。
・ CONFIG.SYS にドライバ名を記述し登録・常駐する
・ コマンドラインからドライバを動的に常駐させる
GPD-3500 は、コマンドラインからのドライバ常駐のみサポートします。
また、組み込み時、使用可能なオプションパラメータに違いがあります。
表 3-8 アナログ入出力用ドライバのオプションパラメータ比較
機 能
使用するボードの枚数
サンプリングバッファの件数
外部トリガに使用する割込みレベル
I/O ポートアドレス
デバイス名の設定
コマンドラインから組み込んだ場合の解除
GND/GID-35xx
GPD-3500
互換性
B
B
◎
S
×
E
×
I
×
N
N
◎
R
R
◎
◎:完全互換 ○:ほぼ互換 ×:GPD-3500 では削除
いずれも、波形メモリをドライバが確保する為 不要となったり、割り込みや I/O をドライバが
自動判定する為に削除されたものです。
„
移植例
以下は、チャンネル 1 から 1000Hz で 100 点のサンプリング出力を行う場合の移植例を示してい
ます。
© 2003, 2005 Interface Corporation. All rights reserved.
28
弊社ライブラリを使用したシステムからの移行
List 3-3 サンプリング出力例
<GND/GID-35xx>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
char szCmd[256];
char szStat[256];
char szWaveMem[6];
float afData[100];
<GPD-3500>
/*
/*
/*
/*
ドライバコマンド */
ドライバステータス */
波形メモリのハンドル */
出力データ */
char szCmd[256]; /* ドライバコマンド */
char szStat[256]; /* ドライバステータス */
float afData[100]; /* 出力データ */
int main(void)
{
int nRet;
int hDa;
int nBoardID;
int main(void)
{
int nRet;
int hDa;
int nBoardID;
/* ボード番号0に対して操作する */
nBoardID = 0;
/* ボード番号0に対して操作する */
nBoardID = 0;
/* ドライバのオープン */
hDd = open("GND3502", O_RDWR │ O_BINARY);
/* ドライバのオープン */
hDa = open("AD_DA", O_RDWR │ O_BINARY);
/* 波形メモリの確保(EMSに対して1024件確保) */
sprintf(szCmd, “MEM=EMS,1024¥xd”);
write(hDa, szCmd, strlen(szCmd));
/* 確保した波形メモリのハンドルを取得 */
read(hDa, szStat, 8);
memcpy(szWaveMem, szStat + 2, 5);
szWaveMem[5] = 0;
/* サンプリングチャンネルの設定(1チャンネル)*/
sprintf(szCmd, "CH=%d:1¥xd", nBoardID);
write(hDa, szCmd, strlen(szCmd));
/* サンプリングチャンネルの設定(1チャンネル)*/
sprintf(szCmd, "CH=%d:1¥xd", nBoardID);
write(hDa, szCmd, strlen(szCmd));
/* サンプリング件数の設定(100件) */
sprintf(szCmd, "SN=%d:100¥xd", nBoardID);
write(hDa, szCmd, strlen(szCmd));
/* サンプリング件数の設定(100件) */
sprintf(szCmd, "SN=%d:100¥xd", nBoardID);
write(hDa, szCmd, strlen(szCmd));
/* 周波数の設定(1000Hz) */
sprintf(szCmd, "SC=%d:1000¥xd", nBoardID);
write(hDa, szCmd, strlen(szCmd));
/* 周波数の設定(1000Hz) */
sprintf(szCmd, "SC=%d:1000¥xd", nBoardID);
write(hDa, szCmd, strlen(szCmd));
/* (中略)*/
/* (中略)*/
/* 波形メモリにデータ書き込み(100件) */
sprintf(szCmd, "MWR=%s,1,100,%Fp¥xd",
szWaveMem, afData);
write(hDa, szCmd, strlen(szCmd));
/* 波形メモリにデータ書き込み(100件) */
sprintf(szCmd, "MWR=M0000,1,100,%Fp¥xd",
afData);
write(hDa, szCmd, strlen(szCmd));
/* サンプリング出力の開始(I/O) */
sprintf(szCmd, "RA0=%d:1,%s¥xd",
nBoardID, szWaveMem);
write(hDa, szCmd, strlen(szCmd));
/* サンプリング出力の開始(I/O) */
sprintf(szCmd, "RA0=%d:1,M0000¥xd",
nBoardID);
write(hDa, szCmd, strlen(szCmd));
/* (中略)*/
/* (中略)*/
/* ドライバのクローズ */
close(hDa);
return 0;
/* ドライバのクローズ */
close(hDa);
return 0;
}
}
移植のポイントは、以下の通りです。
・ 波形メモリの確保と、ハンドル値の取得部分を削除。(3 行目、18∼25 行目)
・ ハンドル値の指定を、全て「M0000」に変更。(42∼43、47∼48 行目)
・ 登録したドライバ名でオープンする。(16 行目)
© 2003, 2005 Interface Corporation. All rights reserved.
29
弊社ライブラリを使用したシステムからの移行
3.6 シリアル通信(調歩同期)用ライブラリからの移行
調歩同期通信に対応した、弊社シリアル通信ボードに対応するライブラリソフトウェアには以下
のものがあります。
C(98)/ISA バス用
PCI/CompactPCI バス用
VCD-4101 / VCD-4105 / VND-4111 / VED-4111
VND-4131 / VCD-4137 / VCD-4140 / VCD-4141
VCD-4201 / VCD-4205
GPD-4101 / GPD-4141
ここでは、調歩同期通信に対応したシリアル通信ボード用の C(98)/ISA 拡張ボード用ライブラリ
から PCI/CompactPCI 拡張ボード用ライブラリに移植する際の注意点を列挙します。
3.6.1
ハードウェアの選択
C(98)/ISA 拡張ボードと PCI/CompactPCI 拡張ボードでは、多くの点で機能が改善されています。
1. PCI/CompactPCI 拡張ボードでは、ほぼ全てに送受信バッファが搭載されています
例えば、AZI-4101 では送受信バッファが ありませんでしたが、PCI-4101 では 4kB/チャンネル
のバッファが搭載されています。
2. 最大ボーレート(bps)が向上しています
製品によっては、最大ボーレートが向上しています。同一の型式番号は無いものの、例えば
PCI-4161 は 1Mbps の送受信が可能です。
なお、PCI-4161 はプログラマブルボーレートジェネレータを搭載しており、任意のボーレート
設定が可能です。
この他、PCI/CompactPCI 拡張ボードで新たに追加された製品では、高速の外部クロック入力が
使用可能な製品や、多チャンネルの製品がラインナップされています。
また、C(98)/ISA 拡張ボードでは、AZI/IBX-4113 や AZI/IBX-4140 などのように、GP-IB や PPI
等の複合ボードがあります。
PCI/CompactPCI 拡張ボードでは、シリアル通信ボードと GP-IB ボード、シリアル通信ボードと
PPI ボードという風に、複数のボードを組み合わせていただく事になります。
© 2003, 2005 Interface Corporation. All rights reserved.
30
弊社ライブラリを使用したシステムからの移行
3.6.2
関数 比較一覧
シリアル通信用ライブラリの関数体系は、C(98)/ISA および PCI/CompactPCI 共、非常に似ています。
まず、C(98)/ISA 拡張ボード用ライブラリの関数一覧を示します。
見ての通り、関数名の「Comhg」等のプレフィクスより後は、全て同じ名前で統一されています。
機能
ボードのオープン
ボードのクローズ
ボードの設定変更
受信データのフレーム長
取得
受信データのデータ長取
得
データの送信
受信データの取り出し
表 3-9 シリアル通信用ライブラリの関数名一覧
型式
関数名
型式
関数名
VCD-4101
VND-4111
VCD-4112
VND-4131
VCD-4137
VCD-4140
VCD-4201
VCD-4101
VND-4111
VCD-4112
VND-4131
VCD-4137
VCD-4140
VCD-4201
VCD-4101
VND-4111
VCD-4112
VND-4131
VCD-4137
VCD-4140
VCD-4201
VCD-4101
VND-4111
VCD-4112
VND-4131
VCD-4137
VCD-4140
VCD-4201
VCD-4101
VND-4111
VCD-4112
VND-4131
VCD-4137
VCD-4140
VCD-4201
VCD-4101
VND-4111
VCD-4112
VND-4131
VCD-4137
VCD-4140
VCD-4201
VCD-4101
VND-4111
VCD-4112
VND-4131
VCD-4137
VCD-4140
VCD-4201
ComhgOpenPort
CompicsOpenPort
PrtcomcOpenPort
Com61kOpenPort
ComOpenPort
ComppiOpenPort
ComfzdOpenPort
ComhgClosePort
CompicsClosePort
PrtcomcClosePort
Com61kClosePort
ComClosePort
ComppiClosePort
ComfzdClosePort
ComhgConfigPort
CompicsConfigPort
PrtcomcConfigPort
Com61kConfigPort
ComConfigPort
ComppiConfigPort
ComhgGetFrameLen
CompicsGetFrameLen
PrtcomcGetFrameLen
Com61kGetFrameLen
ComGetFrameLen
ComppiGetFrameLen
ComfzdGetFrameLen
ComhgGetLen
CompicsGetLen
PrtcomcGetLen
Com61kGetLen
ComGetLen
ComppiGetLen
ComfzdGetLen
ComhgSendData
CompicsSendData
PrtcomcSendData
Com61kSendData
ComSendData
ComppiSendData
ComfzdSendData
ComhgReceiveData
CompicsReceiveData
PrtcomcReceiveData
Com61kReceiveData
ComReceiveData
ComppiReceiveData
ComfzdReceiveData
© 2003, 2005 Interface Corporation. All rights reserved.
31
VCD-4105
VED-4111
VCD-4113
VED-4131
ComnOpenPort
CompicsOpenPort
ComgOpenPort
Com61kOpenPort
VCD-4141
VCD-4205
VCD-4105
VED-4111
VCD-4113
VED-4131
ComvOpenPort
ComnvdOpenPort
ComnClosePort
CompicsClosePort
ComgClosePort
Com61kClosePort
VCD-4141
VCD-4205
VCD-4105
VED-4111
VCD-4113
VED-4131
ComvClosePort
ComnvdClosePort
ComnConfigPort
CompicsConfigPort
ComgConfigPort
Com61kConfigPort
VCD-4141
VCD-4205
VCD-4105
VED-4111
VCD-4113
VED-4131
ComvConfigPort
ComnGetFrameLen
CompicsGetFrameLen
ComgGetFrameLen
Com61kGetFrameLen
VCD-4141
VCD-4205
VCD-4105
VED-4111
VCD-4113
VED-4131
ComvGetFrameLen
ComnvdGetFrameLen
ComnGetLen
CompicsGetLen
ComgGetLen
Com61kGetLen
VCD-4141
VCD-4205
VCD-4105
VED-4111
VCD-4113
VED-4131
ComvGetLen
ComnvdGetLen
ComnSendData
CompicsSendData
ComgSendData
Com61kSendData
VCD-4141
VCD-4205
VCD-4105
VED-4111
VCD-4113
VED-4131
ComvSendData
ComnvdSendData
ComnReceiveData
CompicsReceiveData
ComgReceiveData
Com61kReceiveData
VCD-4141
VCD-4205
ComvReceiveData
ComnvdReceiveData
弊社ライブラリを使用したシステムからの移行
機能
型式
関数名
型式
関数名
エラー発生状況など取得
VCD-4101
VND-4111
VCD-4112
VND-4131
VCD-4137
VCD-4140
VCD-4201
VCD-4101
VND-4111
VCD-4112
VND-4131
VCD-4137
VCD-4140
VCD-4201
VCD-4101
VND-4111
VCD-4112
VND-4131
VCD-4137
VCD-4140
VCD-4201
VCD-4101
VND-4111
VCD-4112
VND-4131
VCD-4137
VCD-4140
VCD-4201
VCD-4101
VND-4111
VCD-4112
VND-4131
VCD-4137
VCD-4140
VCD-4201
VCD-4101
VND-4111
VCD-4112
VND-4131
VCD-4137
VCD-4140
VCD-4201
VCD-4101
VND-4111
VCD-4112
VND-4131
VCD-4137
VCD-4140
VCD-4201
ComhgGetInfo
CompicsGetInfo
PrtcomcGetInfo
Com61kGetInfo
ComGetInfo
ComppiGetInfo
ComfzdGetInfo
ComhgGetStat
CompicsGetStat
PrtcomcGetStat
Com61kGetStat
ComGetStat
ComppiGetStat
ComfzdGetStat
ComhgCtrlPort
CompicsCtrlPort
PrtcomcCtrlPort
Com61kCtrlPort
ComCtrlPort
ComppiCtrlPort
ComfzdCtrlPort
ComhgCheckData
CompicsCheckData
PrtcomcCheckData
Com61kCheckData
ComCheckData
ComppiCheckData
ComfzdCheckData
ComhgScanData
CompicsScanData
PrtcomcScanData
Com61kScanData
ComScanData
ComppiScanData
ComfzdScanData
ComhgSendBreak
PrtcomcSendBreak
Com61kSendBreak
ComSendBreak
ComppiSendBreak
ComhgClearBuffer
PrtcomcClearBuffer
Com61kClearBuffer
ComClearBuffer
ComppiClearBuffer
-
VCD-4105
VED-4111
VCD-4113
VED-4131
ComnGetInfo
CompicsGetInfo
ComgGetInfo
Com61kGetInfo
VCD-4141
VCD-4205
VCD-4105
VED-4111
VCD-4113
VED-4131
ComvGetInfo
ComnvdGetInfo
ComnGetStat
CompicsGetStat
ComgGetStat
Com61kGetStat
VCD-4141
VCD-4205
VCD-4105
VED-4111
VCD-4113
VED-4131
ComvGetStat
ComnvdGetStat
ComnCtrlPort
CompicsCtrlPort
ComgCtrlPort
Com61kCtrlPort
VCD-4141
VCD-4205
VCD-4105
VED-4111
VCD-4113
VED-4131
ComvCtrlPort
ComnvdCtrlPort
ComnCheckData
CompicsCheckData
ComgCheckData
Com61kCheckData
VCD-4141
VCD-4205
VCD-4105
VED-4111
VCD-4113
VED-4131
ComvCheckData
ComnvdCheckData
ComnScanData
CompicsScanData
ComgScanData
Com61kScanData
VCD-4141
VCD-4205
VCD-4105
VED-4111
VCD-4113
VED-4131
ComvScanData
ComnvdScanData
ComnSendBreak
ComgSendBreak
Com61kSendBreak
VCD-4141
VCD-4205
VCD-4105
VED-4111
VCD-4113
VED-4131
ComvSendBreak
ComnClearBuffer
ComgClearBuffer
Com61kClearBuffer
VCD-4141
VCD-4205
ComvClearBuffer
-
ポートの制御信号の状態
取得
ポートの制御信号の制御
全ポートのデータ有無検
査
全ポートのデータ有無を
検査し、最初にデータが
見つかったポート番号の
取得
ブレーク信号の送出
送受信バッファのクリア
© 2003, 2005 Interface Corporation. All rights reserved.
32
弊社ライブラリを使用したシステムからの移行
次に、PCI/CompactPCI 拡張ボード用ライブラリの関数一覧を示します。
双方の違いは、関数名のプレフィクスが「Comhg」か「Comv」かの違いです。
また、C(98)/ISA 拡張ボード用ライブラリの関数名とも酷似しています。
表 3-10 GPD-4101 と GPD-4141 の関数名比較
GPD-4101
GPD-4141
機能
ボードのオープン
ボードのクローズ
ボードの設定変更
受信データのフレーム長取得
受信データのデータ長取得
データの送信
受信データの取り出し
エラー発生状況など取得
ポートの制御信号の状態取得
ComhgOpenPort
ComhgClosePort
ComhgConfigPort
ComhgGetFrameLen
ComhgGetLen
ComhgSendData
ComhgReceiveData
ComhgGetInfo
ComhgGetStat
ComvOpenPort
ComvClosePort
ComvConfigPort
ComvGetFrameLen
ComvGetLen
ComvSendData
ComvReceiveData
ComvGetInfo
ComvGetStat
ポートの制御信号の制御
ComhgCtrlPort
ComvCtrlPort
全ポートのデータ有無検査
全ポートのデータ有無を検査し、最初にデータが見つ
かったポート番号の取得
ブレーク信号の送出
送受信バッファのクリア
ComhgCheckData
ComhgScanData
ComvCheckData
ComvScanData
ComhgSendBreak
ComhgClearBuffer
ComvSendBreak
ComvClearBuffer
3.6.3
移行時の注意点
関数体系は ほぼ同一の為、C(98)/ISA 拡張ボード用ライブラリから PCI/CompactPCI 拡張ボード
用ライブラリへの移植作業は、関数名の置き換えが中心となります。
以降では、移植作業の中で、注意を必要とする作業項目について説明します。
„
オープン関数によるボード指定方法の違い(xxxOpenPort 関数)
オープン関数(ComhgOpenPort や ComvOpenPort 等)は、使用する拡張ボードを指定する必要があ
りますが、C(98)/ISA から PCI/CompactPCI への移行に伴い、指定方法が変わります。
以下に例として、VCD-4101 と GPD-4101、GPD-4141 で、関数宣言の比較をします。
© 2003, 2005 Interface Corporation. All rights reserved.
33
弊社ライブラリを使用したシステムからの移行
関数宣言の比較>
<GPD-4101>
<VCD-4101>
int ComhgOpenPort(
int ComhgOpenPort(
int Port,
/* オープンするポート番号 */
int nPort,
/* オープンするポート番号 */
struct d4101OpenForm *Set
/* I/O ポートベースアドレス */
PCOMHGOPENFORM *pSet,
/* セットアップ情報へのポインタ */
);
);
セットアップ情報
セットアップ情報
struct d4101OpenForm{
typedef struct ComhgOpenForm{
unsigned int ioadr;
/* I/O ポートアドレス */
unsigned int
uDeviceID;
int
irq;
/* 割り込み番号*/
unsigned int
uSubSysID;
/* サブシステム ID */
char
*sndbuf;
/* 送信バッファポインタ */
unsigned int
uBoardID;
/* ボード ID(RSW1 設定値) */
char
*rcvbuf;
/* オープンする CH 番号 */
/* デバイス ID */
/* 受信バッファポインタ */
unsigned int
uCh;
unsigned int sndbufsize;
/* 送信バッファサイズ */
unsigned int
uTimer;
/* タイマ選択 */
unsigned int rcvbufsize;
/* 受信バッファサイズ */
void far
*pSendBuffer;
/* 送信バッファポインタ */
/* 受信バッファポインタ */
int
board;
/* ボードタイプ */
void far
*pRecvBuffer;
int
ch;
/* オープンするチャンネル番号 */
unsigned int
uSendBufferSize; /* 送信バッファサイズ */
int
timertype;
unsigned int
uRecvBufferSize; /* 受信バッファサイズ */
/* タイマ選択 */
unsigned int tadr;
/* タイマ使用時、I/O アドレス */
int
/* タイマ使用時、割り込み番号 */
tirq;
} COMHGOPENFORM, *PCOMHGOPENFORM;
};
<GPD-4141>
int ComvOpenPort(
int nPort,
PCOMVOPENFORM
/* オープンするポート番号 */
*pSet,
/* セットアップ情報へのポインタ */
);
セットアップ情報
typedef struct ComvOpenForm{
unsigned int
uDeviceID;
unsigned int
uSubSysID;
/* デバイス ID */
/* サブシステム ID */
unsigned int
uBoardID;
/* ボード ID(RSW1 設定値) */
unsigned int
uCh;
/* オープンする CH 番号 */
void far
*pSendBuffer;
/* 送信バッファポインタ */
void far
*pRecvBuffer;
/* 受信バッファポインタ */
unsigned int
uSendBufferSize; /* 送信バッファサイズ */
unsigned int
uRecvBufferSize; /* 受信バッファサイズ */
} COMVOPENFORM, *PCOMVOPENFORM;
VCD-4101 では第 1、2、7 引数で、使用する拡張ボードを特定する I/O ポートアドレス,割り込
み番号,ボードタイプを指定しますが、GPD-4101,GPD-4141 では代わりに拡張ボードを特定す
るデバイス ID,サブシステム ID,ボード ID(第 1∼3 引数)を指定します。
VCD-4101 のタイマ関連の設定(第 9∼11 引数)と、GPD-4101 のタイマ選択の設定(第 5 引数)は、
若干意味合いが異なります。
VCD-4101 のタイマ関連の設定は、拡張ボードが使用するタイマを指定する為に存在しますが、
GPD-4101 のタイマ関連の設定は、半二重通信や受信タイムアウト時の振る舞いを変更するため
に存在します。
(PCI/CompactPCI 拡張ボードには、インターバルタイマが標準的に搭載されています)
なお、GPD-4141 には、この設定はありません。
© 2003, 2005 Interface Corporation. All rights reserved.
34
弊社ライブラリを使用したシステムからの移行
移植例>
AZI-4101 から PCI-4101 へ移行する例です。
シリアル通信ボードのチャンネル 1 をポート 1 に割り当て、送受信バッファのサイズを 1024 バ
イトに設定する例です。
int
nRet;
int
nRet;
char
szSendBuff[1024], szRecvBuff[1024];
char
szSendBuff[1024], szRecvBuff[1024];
struct d4101OpenForm sSet;
COMHGOPENFORM
I/O ポートアドレス等を
/* セットアップ情報の設定 */
sSet.ioadr
= 0x00d0;
sSet.intr
= 3;
sSet.sndbuf
sSet.rcvbuf
指定する代わりに、
sSet;
/* セットアップ情報の設定 */
sSet.uDeviceID
= 4101;
sSet.uSubSysID
= 0x0001;
= szSendBuff;
sSet.uBoardID
= 0;
= szRecvBuff;
sSet.uCh
= 1;
デバイス ID 等を指定。
sSet.sndbufsize = 1024;
sSet.uTimer
= 1;
sSet.rcvbufsize = 1024;
sSet.pSendBuffer
= szSendBuff;
sSet.board
= 0;
sSet.pRecvBuffer
= szRecvBuff;
sSet.ch
= 1;
sSet.uSendBufferSize
= 1024;
sSet.timertype
= 0;
sSet.uRecvBufferSize
= 1024;
sSet.tadr
= 0;
sSet.tirq
= 0;
VCD-4101 に合わせるなら、
使わない指定。
タイマ使用が良い。
/* ボードのオープン(ポート番号 1) */
/* ボードのオープン(ポート番号 1) */
nRet = ComhgOpenPort(1 , &sSet);
nRet = ComhgOpenPort(1, &sSet);
移植のポイントは、以下の通りです。
・ 拡張ボードの I/O ポートアドレスを直接指定からデバイス ID 等で指定に変更
・ 関数名を、使用するライブラリのものに置換する。
・ 構造体も、使用するライブラリのものに置換する。
© 2003, 2005 Interface Corporation. All rights reserved.
35
弊社ライブラリを使用したシステムからの移行
„
オープン関数による指定方法の違い(VCD-4201/4205)
VCD-4201 と VCD-4205 では他のシリアル通信用ボードの API と比べて、オープン関数
(xxxOpenPort 関数)とボードの設定変更関数(xxxConfigPort 関数)が組み合わさった関数体系とな
っています。
関数宣言の比較>
<VCD-4201>
<GPD-4101 の ComhgOpenPort>
int ComfzdOpenPort(
int ComhgOpenPort(
unsigned int dpadr, /* DPRAM アドレス */
int nPort,
/* オープンするポート番号 */
unsigned int ioadr, /* I/O ポートアドレス */
PCOMHGOPENFORM *pSet,
/* セットアップ情報へのポインタ */
int port,
/* オープンするポート番号 */
char *info,
/* 初期化文字列情報へのポインタ */
);
int timertype,
/* タイマの選択 */
セットアップ情報
int tadr,
/* タイマ使用時、I/O ポートアドレス */
typedef struct ComhgOpenForm{
int tirq
/* タイマ使用時、割込み番号 */
unsigned int uDeviceID;
);
/* デバイス ID */
unsigned int uSubSysID;
/* サブシステム ID */
unsigned int uBoardID;
/* ボード ID(RSW1 設定値) */
<VCD-4205>
unsigned int uCh;
/* オープンする CH 番号 */
int ComnvdOpenPort(
unsigned int uTimer;
/* タイマ選択 */
unsigned int dpadr, /* DPRAM アドレス */
void far
*pSendBuffer;
/* 送信バッファポインタ */
unsigned int ioadr, /* I/O ポートアドレス */
void far
*pRecvBuffer;
/* 受信バッファポインタ */
int port,
/* オープンするポート番号 */
unsigned int uSendBufferSize; /* 送信バッファサイズ */
char *info,
/* 初期化文字列情報へのポインタ */
int timertype,
/* タイマの選択 */
int tadr,
/* タイマ使用時、I/O ポートアドレス */
int tirq
/* タイマ使用時、割込み番号 */
);
unsigned int uRecvBufferSize; /* 受信バッファサイズ */
} COMHGOPENFORM, *PCOMHGOPENFORM;
<GPD-4101 の ComhgConfigPort>
int ComhgConfigPort(
int
nPort,
char *szInfo
/* ポート番号 */
/* 初期化情報文字列 */
);
前の VCD-4101 のオープン関数の宣言とも見比べてください。2 つの関数が 1 つになっているの
が判ります。
移植の際は、ComfzdOpenPort/ComnvdOpenPort の第 4 引数(info パラメータ)を、
ComhgConfigPort/ComvConfigPort に移動し、「■ボードの設定変更関数に渡す初期化情報文字列
の修正(xxxConfigPort)」に示す項目を参考に修正すると良いでしょう。
© 2003, 2005 Interface Corporation. All rights reserved.
36
弊社ライブラリを使用したシステムからの移行
„
対応ポート数の増加による修正(xxxCheckData 関数)
C(98)/ISA から PCI/CompactPCI への移行に伴って、シリアル通信ライブラリが対応するポート数
が増加しています。
以下に例を示します。
カテゴリ
C(98)/ISA
PCI/CompactPCI
型式
VCD-4101
VCD-4105
VND/VED-4111
VCD-4112
VCD-4113
VND/VED-4131
VCD-4137
VCD-4140
VCD-4141
VCD-4201
VCD-4205
GPD-4101
GPD-4141
対応ポート数
14
14
16
7
7
2
14
7
4/6/20/28
32
32
64
255
このポート数増加により影響を受けるのは、全ポートのデータ有無検査を行う関数
(ComhgCheckData や ComvCheckData 等)に渡す、配列の大きさです。
例を挙げます。
以下は、VCD-4101 で全ポートのデータ有無検査を行う関数を呼び出す例です。
int anPortCheckArray[14];
/* 結果を受け取る配列の宣言 */
ComhgCheckData(anPortCheckArray); /* 関数の呼び出し */
結果を受け取る配列の要素数が 14 に宣言されている事に注意してください。
次に、GPD-4101 で記述した場合の例を挙げます。
int anPortCheckArray[64];
/* 結果を受け取る配列の宣言 */
ComhgCheckData(anPortCheckArray); /* 関数の呼び出し */
配列の要素数が 64 に増えています。
対応ポート数が増加している為、このような書き換えが必要となります。
© 2003, 2005 Interface Corporation. All rights reserved.
37
弊社ライブラリを使用したシステムからの移行
„
タイマ機能を有効にした場合の挙動の変化(GPD-4101 のみ)
先の、「オープン関数によるボード指定方法の違い(xxxOpenPort 関数)」にて、GPD-4101 にはタ
イマ選択の設定(第 5 引数:uTimer)がある事を述べました。
この設定を使用/未使用にした時、どんな変化が現れるのか以下に示します。
変化する項目
項目
2 線式半二重通信時、RS(C)信 タイマ使用時
号の挙動が変化する
(ComhgConfigPort の初期化文
字列「/HALF」にて設定できま タイマ未使用時
す)
受信タイムアウトの機能が変 タイマ使用時
化する
(ComhgConfigPort の初期化文 タイマ未使用時
字列「/Tn」にて設定できます)
ComhgSendBreak 関数の引数の タイマ使用時
意味が変化する
タイマ未使用時
説明
データ送信時、RS(C)信号の ON/OFF を自動
的に行う。
(C(98)/ISA 用ライブラリと同じ)
データ送信時、RS(C)信号の ON/OFF を自動的
には行わない。
RS(C)信号とデータの同期が必要ならば、
ComhgCtrlPort 関数と組み合わせて使用する。
受信タイムアウトの設定が有効になる。
(C(98)/ISA 用ライブラリと同じ)
受信タイムアウトの設定は無効。
ブレーク信号出力時間を引数にて設定する。
(C(98)/ISA 用ライブラリと同じ)
ブレーク信号の送信/停止を引数にて設定する。
変化する項目に当てはまる処理を行いたい場合、タイマ使用に設定される事をお奨めします。
„
ボードの設定変更関数に渡す初期化情報文字列の修正(xxxConfigPort)
ボードの設定変更を行う関数(ComhgConfigPort や ComvConfigPort 等)では、ポートに対する各種
設定を、初期化情報文字列と呼ぶパラメータにて指定します。
C(98)/ISA 拡張ボード用ライブラリと、PCI/CompactPCI 拡張ボード用ライブラリでは、これらパ
ラメータの値が、各ライブラリによって異なる事があります。
以下では、異なる点について列挙します。
VCD-4101 と GPD-4101 との比較>
項目
ボーレート設定
基準クロック設定
VCD-4101
/R75 ∼ /R76800
/C0 外部クロック
/C1 4.9152MHz
/C2 1.8432MHz
/C3 4.096MHz
GPD-4101
/R4 ∼ /R136530
/C0 外部クロック
/C1 4.9152MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 8.0MHz
/C5 9.8304MHz
/C6 14.7456MHz
© 2003, 2005 Interface Corporation. All rights reserved.
38
-
弊社ライブラリを使用したシステムからの移行
VCD-4105 と GPD-4101/4141 との比較>
項目
ボーレート設定
基準クロック設定
VCD-4105
/R75 ∼ /R76800
/C1 9.8304MHz
/C2 7.3728MHz
/C3 8.192MHz
受信クロック設定
/RTIN
内部クロック
/RTOUT 外部 RT 信号
/RTST
外部 ST 信号
/STIN 内部クロック
/STOUT 外部 ST 信号
/STRT 外部 RT 信号
送信クロック設定
GPD-4101
/R4 ∼ /R136530
/C0 外部クロック
/C1 4.9152MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 8.0MHz
/C5 9.8304MHz
/C6 14.7456MHz
/RCIN 内部クロック
/RCRT 外部 RT 信号
/RCST 外部 ST2(ST)信号
/SCIN 内部クロック
/SCST 外部 ST2(ST)信号
/SCRT 外部 RT 信号
GPD-4141
/R2 ∼ /R921600
/C1 14.7456MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 7.3728MHz
/C5 4.9152MHz
/C6 8.0MHz
/C7 12.288MHz
-
GPD-4101
/R4 ∼ /R136530
/C0 外部クロック
/C1 4.9152MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 8.0MHz
/C5 9.8304MHz
/C6 14.7456MHz
GPD-4141
/R2 ∼ /R921600
/C1 14.7456MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 7.3728MHz
/C5 4.9152MHz
/C6 8.0MHz
/C7 12.288MHz
-
VND/VED-4111 と GPD-4101/4141 との比較>
項目
ボーレート設定
基準クロック設定
VND/VED-4111
/R75 ∼ /R76800
/CIN
内部クロック
/COUT 外部クロック
VCD-4112 と GPD-4141 との比較>
項目
ボーレート設定
基準クロック設定
VCD-4112
/R75 ∼ /R230400
/C1 14.7456MHz
/C2 1.8432MHz
/C3 4.096MHz
受信 FIFO 割り込み設定
/L0 割り込みを使用しない
/L1 1 バイト蓄積で発生
/L4 4 バイト蓄積で発生
/L8 8 バイト蓄積で発生
/L14 14 バイト蓄積で発生
-
-
GPD-4141
/R2 ∼ /R921600
/C1 14.7456MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 7.3728MHz
/C5 4.9152MHz
/C6 8.0MHz
/C7 12.288MHz
指定は可能だが、
8 バイト固定
VCD-4113 と GPD-4141 との比較>
項目
ボーレート設定
基準クロック設定
VCD-4113
/R75 ∼ /R230400
/C1 14.7456MHz
/C2 1.8432MHz
/C3 4.096MHz
受信 FIFO 割り込み設定
/L0 割り込みを使用しない
/L1 1 バイト蓄積で発生
/L4 4 バイト蓄積で発生
/L8 8 バイト蓄積で発生
/L14 14 バイト蓄積で発生
-
-
© 2003, 2005 Interface Corporation. All rights reserved.
39
GPD-4141
/R2 ∼ /R921600
/C1 14.7456MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 7.3728MHz
/C5 4.9152MHz
/C6 8.0MHz
/C7 12.288MHz
指定は可能だが、
8 バイト固定
弊社ライブラリを使用したシステムからの移行
VND/VED-4131 と GPD-4101/4141 との比較>
項目
ボーレート設定
基準クロック設定
VND/VED-4131
なし
(ボード上の DSW にて設定)
-
GPD-4101
/R4 ∼ /R136530
/C0
/C1
/C2
/C3
/C4
/C5
/C6
外部クロック
4.9152MHz
1.8432MHz
4.096MHz
8.0MHz
9.8304MHz
14.7456MHz
GPD-4141
/R2 ∼ /R921600
/C1
/C2
/C3
/C4
/C5
/C6
/C7
14.7456MHz
1.8432MHz
4.096MHz
7.3728MHz
4.9152MHz
8.0MHz
12.288MHz
VCD-4137 と GPD-4101/4141 との比較>
項目
ボーレート設定
基準クロック設定
VCD-4137
/R75 ∼ /R76800
/C0 外部クロック
/C1 4.9152MHz
/C2 1.8432MHz
/C3 4.096MHz
GPD-4101
/R4 ∼ /R136530
/C0 外部クロック
/C1 4.9152MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 8.0MHz
/C5 9.8304MHz
/C6 14.7456MHz
GPD-4141
/R2 ∼ /R921600
/C1 14.7456MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 7.3728MHz
/C5 4.9152MHz
/C6 8.0MHz
/C7 12.288MHz
VCD-4140 と GPD-4101 との比較>
項目
ボーレート設定
基準クロック設定
VCD-4140
/R75 ∼ /R76800
-
GPD-4101
/R4 ∼ /R136530
/C0 外部クロック
/C1 4.9152MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 8.0MHz
/C5 9.8304MHz
/C6 14.7456MHz
-
VCD-4141 と GPD-4141 との比較>
項目
ボーレート設定
基準クロック設定
VCD-4141
/R75 ∼ /R230400
/C1 14.7456MHz
/C2 1.8432MHz
/C3 4.096MHz
受信 FIFO 割り込み設定
/L0 割り込みを使用しない
/L1 1 バイト蓄積で発生
/L4 4 バイト蓄積で発生
/L8 8 バイト蓄積で発生
/L14 14 バイト蓄積で発生
-
-
© 2003, 2005 Interface Corporation. All rights reserved.
40
GPD-4141
/R2 ∼ /R921600
/C1 14.7456MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 7.3728MHz
/C5 4.9152MHz
/C6 8.0MHz
/C7 12.288MHz
指定は可能だが、
8 バイト固定
弊社ライブラリを使用したシステムからの移行
VCD-4201 と GPD-4101/4141 との比較>
項目
ボーレート設定
基準クロック設定
VCD-4201
/R75 ∼ /R19200
/CIN
内部クロック
/COUT 外部クロック
デリミタ設定
/Dn
n=デリミタ
GPD-4101
/R4 ∼ /R136530
/C0 外部クロック
/C1 4.9152MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 8.0MHz
/C5 9.8304MHz
/C6 14.7456MHz
/SDn n=デリミタ
GPD-4141
/R2 ∼ /R921600
/C1 14.7456MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 7.3728MHz
/C5 4.9152MHz
/C6 8.0MHz
/C7 12.288MHz
/SDn n=デリミタ
※VCD-4201 では、初期化情報文字列を ComfzdOpenPort で指定します。
VCD-4205 と GPD-4101/4141 との比較>
項目
ボーレート設定
基準クロック設定
VCD-4205
/R75 ∼ /R38400
/CIN
内部クロック
/COUT 外部クロック
デリミタ設定
/Dn
n=デリミタ
GPD-4101
/R4 ∼ /R136530
/C0 外部クロック
/C1 4.9152MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 8.0MHz
/C5 9.8304MHz
/C6 14.7456MHz
/SDn n=デリミタ
※VCD-4205 では、初期化情報文字列を ComnvdOpenPort で指定します。
© 2003, 2005 Interface Corporation. All rights reserved.
41
GPD-4141
/R2 ∼ /R921600
/C1 14.7456MHz
/C2 1.8432MHz
/C3 4.096MHz
/C4 7.3728MHz
/C5 4.9152MHz
/C6 8.0MHz
/C7 12.288MHz
/SDn n=デリミタ
弊社ライブラリを使用したシステムからの移行
3.7 シリアル通信(LAP-B)用ライブラリからの移行
LAP-B 通信に対応した、弊社シリアル通信ボードに対応するライブラリソフトウェアには以下
のものがあります。
C(98)/ISA バス用
PCI/CompactPCI バス用
VCD-4115 / VCD-4215
GPD-4115
ここでは、LAP-B 通信に対応したシリアル通信ボード用の C(98)/ISA 拡張ボード用ライブラリか
ら PCI/CompactPCI 拡張ボード用ライブラリに移植する際の注意点を列挙します。
3.7.1
関数 比較一覧
双方のライブラリの、関数の比較一覧を示します。
表 3-11 LAP-B 用ライブラリの新旧比較
機 能
ボード情報の定義
ボードを開放
プロトコルの初期化
プロトコルの終了処理
ポートの初期化情報取得
フレームの送信
受信フレーム数の所得
フレーム長の取得
バッファからフレームの取得
ステータスの取得
制御信号の状態変更
通信ヒストリの取得
割込みイベントマスクの設定
割込みイベントマスクの取得
割込みイベントのコールバック
関数の登録
コールバック関数の削除
VCD-4115
LapbnInit
LapbnEnd
LapbnOpenPort
LapbnClosePort
LapbnGetPortData
LapbnSendData
LapbnGetFrameCnt
LapbnGetFrameLen
LapbnReceiveData
LapbnGetStatus
LapbnControlPort
LapbnGetHistory
LapbnSetEventMask
LapbnGetEventMask
GPD-4115
LapbnInit
LapbnEnd
LapbnOpenPort
LapbnClosePort
LapbnGetPortData
LapbnSendData
LapbnGetFrameCnt
LapbnGetFrameLen
LapbnReceiveData
LapbnGetStatus
LapbnControlPort
LapbnGetHistory
LapbnSetEventMask
LapbnGetEventMask
LapbnSetEvent
LapbnSetEvent
LapbnKillEvent
LapbnKillEvent
◎
◎:完全互換 ○:ほぼ互換
機 能
ボード情報の定義
ボードを開放
プロトコルの初期化
プロトコルの終了処理
ポートの初期化情報取得
フレームの送信
受信フレーム数の所得
フレーム長の取得
バッファからフレームの取得
ステータスの取得
制御信号の状態変更
通信ヒストリの取得
VCD-4215
LapbnvdInit
LapbnvdEnd
LapbnvdOpenPort
LapbnvdClosePort
LapbnvdGetPortData
LapbnvdSendData
LapbnvdGetFrameCnt
LapbnvdGetFrameLen
LapbnvdReceiveData
LapbnvdGetStatus
LapbnvdControlPort
LapbnvdGetHistory
GPD-4115
互換性
LapbnInit
○
LapbnEnd
◎
LapbnOpenPort
◎
LapbnClosePort
◎
LapbnGetPortData
◎
LapbnSendData
◎
LapbnGetFrameCnt
◎
LapbnGetFrameLen
◎
LapbnReceiveData
◎
LapbnGetStatus
◎
LapbnControlPort
◎
LapbnGetHistory
◎
◎:完全互換 ○:ほぼ互換
© 2003, 2005 Interface Corporation. All rights reserved.
42
互換性
○
◎
◎
◎
◎
◎
◎
◎
◎
◎
◎
◎
◎
◎
◎
弊社ライブラリを使用したシステムからの移行
3.7.2
移行時の注意点
双方の関数名は、一部を除いて ほぼ同一です。
一部の関数は、ボードを特定する為の引数が追加されています。
„
ボード情報の定義関数(LapbnInit, LapbnvdInit)
関数宣言の比較>
<GPD-4115>
<VCD-4115>
int LapbnInit(
int maxport,
unsigned int dpadr,
unsigned int *ioadr,
unsigned int *irqno,
int timertype,
unsigned int tadr,
int Tirq
);
int LapbnInit(
/*
/*
/*
/*
/*
/*
/*
使用する最大ポート数 */
DPRAM アドレスのセグメント値 */
I/O ポートベースアドレス */
割り込み番号 */
タイマの選択 */
タイマの I/O ポートアドレス */
タイマの割り込み番号 */
int Port,
/* 使用するポート数 */
unsigned int *DeviceID,
/* デバイス ID */
unsigned int *SubsystemID, /* サブシステム ID */
unsigned int *BoardID,
/* ボード ID */
unsigned int *ChannelNumber /* チャンネル番号 */
);
<VCD-4215>
int LapbnvdInit(
int maxport,
unsigned int dpadr,
unsigned int ioadr,
int timertype,
unsigned int tadr,
intTirq
);
/*
/*
/*
/*
/*
/*
使用する最大ポート数 */
DPRAM アドレスのセグメント値 */
I/O ポートベースアドレス */
タイマの選択 */
タイマの I/O ポートアドレス */
タイマの割り込み番号 */
VCD-4115/4215 では使用する拡張ボードを特定させる為、第 2∼4 引数にて DPRAM のセグメン
トアドレス、I/O ポートアドレス、割り込み番号を指定する必要がありますが、GPD-4115 では
代わりに拡張ボードを特定するデバイス ID、サブシステム ID、ボード ID(第 2∼4 引数)を指定
します。
VCD-4115/4215 にあったタイマ関連の設定は、PCI/CompactPCI 拡張ボード自身にインターバル
タイマが内蔵された為、削除されました。
移植例>
AZI-4115 から PCI-4115, 4156 へ移行する例です。
2 つのポートを設定しています。
int
unsigned int
uIoAdr[0]
uIrqNo[0]
uIoAdr[1]
uIrqNo[1]
=
=
=
=
int
unsigned int
unsigned int
uDeviceId[0]
uSubsystemId[0]
uBoardId[0]
uChannelNum[0]
uDeviceId[1]
uSubsystemId[1]
uBoardId[1]
uChannelNum[1]
nRet;
uIoAdrs[2], uIrqNo[2];
0x00D0;
3;
0x01D0;
5;
使わない指定。
nRet;
uDeviceId[2], uSubSystemId[2], uBoardId[2];
uChannelNum[2];
= 4115;
ポート 1 に、PCI-4115 の
= 0x0001;
= 0;
チャンネル 1 を割り当てている。
= 1;
= 4156;
ポート 2 に、PCI-4156 の
= 0x0101;
= 1;
チャンネル 1 を割り当てている。
= 1;
nRet = LapbnInit( 2, uDeviceID, uSubsystemID, uBoardID, uChannelNum);
nRet = LapbnInit(2 , 0xD000 , uIoAdrs, uIrqNo , 0 , 0 , 0);
I/O ポートアドレス等を
指定する代わりに、
デバイス ID 等を指定。
© 2003, 2005 Interface Corporation. All rights reserved.
43
弊社ライブラリを使用したシステムからの移行
移植のポイントは、以下の通りです。
・ 拡張ボードの I/O ポートアドレス等を直接指定からデバイス ID 等を指定に変更
・ タイマ種別の指定は無い(拡張ボード内部のインターバルタイマが使用される)
„
受信クロックの設定(LapbnOpenPort, LapbnvdOpenPort)
プロトコルの初期化を行う関数(LapbnOpenPort, LapbnvdOpenPort)では、オープンするポートの設
定を初期化用の構造体(LapbnPORTINITDATA, LapbnvdPORTINITDATA)にて行います。
この構造体中に、送受信クロックの設定を行うメンバ変数(ClockType)があります。
この内、C(98)/ISA 拡張ボードと PCI/CompactPCI 拡張ボードとでは、受信クロックの設定範囲が
異なります。
値
説明
10h
20h
30h
40h
50h
RT 信号を受信クロックとする
DPLL 回路より生成されるクロックを受信クロックとする
ボーレート範囲に違いがある他は、上と同じ
APLL 回路より生成されるクロックを受信クロックとする
ボーレート範囲に違いがある他は、上と同じ
VCD-4115
VCD-4215
○
○
○
○
○
GPD-4115
○
○
○
×
×
VCD-4115/4215 で APLL を使用している場合は、GPD-4115 では DPLL を使用するように変更し
てください。
なお、C(98)/ISA 拡張ボードでは DPLL を使用した場合、設定可能なボーレートの最高速度が
500kbps でしたが、PCI/CompactPCI 拡張ボードでは 2Mbps(RS-232C 使用時は 1Mbps)まで設定可
能となっています。
© 2003, 2005 Interface Corporation. All rights reserved.
44
拡張ボードを直接制御したシステムからの移行
第4章 拡張ボードを直接制御したシステムからの移行
本章では、「1.3 システム移行のケース例」の「ケース 2 既存のシステムは、拡張ボードを直接
制御していた」で示した、C(98)/ISA 拡張ボードに対して直接制御している既存システムを、
PCI/CompactPCI 拡張ボードに変更する際の注意点などについて説明します。
4.1 移行の概要
システム移行時に問題となるであろう項目は、以下の通りです。
1. 使用する拡張ボードの選択
2. PCI/CompactPCI 拡張ボードに割り当てられたリソースを取得する
3. PCI/CompactPCI 拡張ボードに搭載されたメモリへのアクセス
4. 共有割り込み処理
「1.使用する拡張ボードの選択」については、
「2.3 使用する PCI/CompactPCI 拡張ボードの選択」
を参照してください。
次に、「2. PCI/CompactPCI 拡張ボードに割り当てられたリソースを取得する」と
「3. PCI/CompactPCI 拡張ボードに搭載されたメモリへのアクセス」、「4. 共有割り込み処理」
についてですが、これらは、弊社より提供している以下のサービスソフトウェアを使う事で移植
作業を効率的に行う事ができます。
表 4-1 サービスソフトウェアの一覧
問題事項
PCI/CompactPCI 拡張ボードに割
り当てられたリソースを取得した
い
PCI/CompactPCI 拡張ボードに搭
載されたメモリへのアクセスをし
たい
共有割り込み処理をしたい
型式
BPD-0805
BPD-0806
BPD-0811
説明
DOS 用リソース取得ライブラリ
PC DOS(MS-DOS)から、PCI/CompactPCI 拡張ボードのリ
ソース割り当て情報を取得するためのライブラリです。
DOS 用 4G メモリアクセスツール
PC DOS(MS-DOS)から、1MByte 以上のメモリ空間をア
クセスするためのツールとライブラリです。
DOS 用割り込み登録ライブラリ
PC DOS(MS-DOS)上で、割り込みチェイン処理を容易に
実現するためのライブラリです。
★各種サービスソフトウェアの入手について
上表の各種サービスソフトウェアは、弊社 Web site より無償でダウンロードできます。
弊社 Web site:www.interface.co.jp
© 2003, 2005 Interface Corporation. All rights reserved.
45
拡張ボードを直接制御したシステムからの移行
4.2 PCI/CompactPCI 拡張ボードに割り当てられたリソースを取得
する
何故、PCI/CompactPCI 拡張ボードに割り当てられたリソースを取得しなければならないか?に
ついては、「2.1 PCI/CompactPCI 拡張ボードは、如何にしてリソースを設定するのか?」を参照
してください。
ここでは、PCI/CompactPCI 拡張ボードのリソースを取得する為に、「BPD-0805 DOS 用リソース
取得ライブラリ」を使用した例を紹介します。
BPD-0805 は、以下に示す関数を提供します。
関数名
PciGetConfigReg
機能
ベンダ ID とデバイス ID から、PCI/CompactPCI 拡張ボードに割り当てられた、
I/O ポートアドレス、メモリアドレス、割り込み番号を取得します。
ベンダ ID とデバイス ID、サブベンダ ID、サブシステム ID から、PCI/CompactPCI
拡張ボードに割り当てられた、I/O ポートアドレス、メモリアドレス、割り込み
番号ならびに、全コンフィギュレーションレジスタを取得します。
PciGetConfigRegEx
通常であれば、PciGetConfigReg 関数で十分な情報が得られます。プログラム側で PCI/CompactPCI
拡張ボードと CompactPCI 拡張ボードを区分けして認識したいとか、全コンフィギュレーション
レジスタを取得したい場合に PciGetConfigRegEx 関数を使います。
以下に、システム内の PCI-2702C のリソース情報を取得する例を示します。
#include <stdio.h>
#include <dos.h>
#include "GETBAR.H"
int main(void)
{
リソースを取得する PCI 拡張ボードの指定。
unsigned long ulBaseAdrs[6];
unsigned short uIoAdrs;
char
nIrqNo;
int
nRswNo;
ここでは PCI-2702C を指定。
/* リソースの取得 */
if(PciGetConfigReg(1, 0x1147, 2702, ulBaseAdrs, &nIrqNo) <> 0){
printf(“fail get PCI resource¥n”);
リソース取得に成功すると、
return –1;
値が格納される。
}
uIoAdrs = (unsigned short)(ulBaseAdrs[0] & 0x3L);
/* I/O ポートアドレス */
nRswNo = inp(uIoAdrs + 0xf) & 0x0f;
printf("I/O ポートアドレス:%4x¥n", uIoAdrs);
/* ボード識別用 RSW の値 */
printf("割り込み番号:%d¥n", nIrqNo);
printf("ボード識別用 RSW:%x¥n", nRswNo);
return 0;
}
ところで、システム内に PCI-2702C が複数枚 実装されている時、
どうすれば良いのでしょうか?
同一型式で複数枚の情報を取得するには、第 1 引数の値をインクリメントして取得します。
© 2003, 2005 Interface Corporation. All rights reserved.
46
拡張ボードを直接制御したシステムからの移行
以下に、修正したコードの例を示します。
#include <stdio.h>
#include <dos.h>
#include "GETBAR.H"
int main(void)
{
unsigned long
unsigned short
char
int
ulBaseAdrs[6];
uIoAdrs;
nIrqNo;
nRswNo, nRet, i;
何枚目のリソースを取得するか、
この引数の値で指定する。
for(i = 1; ; i++){
/* リソースの取得 */
nRet = PciGetConfigReg(i, 0x1147, 2702, ulBaseAdrs, &nIrqNo);
if(nRet == -3) break;
if(nRet < 0){
printf(“fail get PCI resource¥n”);
return –1;
}
uIoAdrs = (unsigned short)(ulBaseAdrs[0] & 0x3L); /* I/O ポートアドレス */
nRswNo = inp(uIoAdrs + 0xf) & 0x0f;
/* ボード識別用 RSW の値 */
printf("%d 番目のリソース情報¥n", i);
printf("I/O ポートアドレス:%4x¥n", uIoAdrs);
printf("割り込み番号:%d¥n", nIrqNo);
printf("ボード識別用 RSW:%x¥n", nRswNo);
}
return 0;
}
このコードは、コンピュータ内の全ての PCI-2702C のリソースを列挙します。
4.3 PCI/CompactPCI 拡張ボードに搭載されたメモリへのアクセス
をする
メモリの搭載された PCI/CompactPCI 拡張ボードのリソース情報を取得した時、メモリアドレス
が 1Mbyte 以上のアドレス空間に設定される事に気付かれると思います。
PCI/CompactPCI 拡張ボードは、4Gbyte のメモリアドレス空間を持つ為 このように設定されるの
ですが、通常の DOS アプリケーションで 1Mbyte 以上のメモリ空間にアクセスするのは少々手
間な作業を必要とします。
この問題に対処する為、弊社では 4Gbyte のメモリ空間に自由にアクセスできるサービスソフト
ウェア「BPD-0806 DOS 用 4G メモリアクセスツール」を提供しております。
© 2003, 2005 Interface Corporation. All rights reserved.
47
拡張ボードを直接制御したシステムからの移行
パソコンのメモリ空間
BPD-0806 を使うことで、この
FFFFFFFFh
空き領域
メモリへアクセスすることが可能に
なります。
PCI 拡張ボードに
割り当てられる
メモリ領域
通常の PC DOS(MS-DOS)の
プログラムは、このメモリ領域より
パソコン本体の
00100000h
上にアクセスするのは難しい。
内蔵メモリ
000FFFFFh
1MByte
00000000h
図 4-1 BPD-0806 により、上位のメモリにアクセスできる
ここでは、「BPD-0806 DOS 用 4G メモリアクセスツール」を使い、PCI/CompactPCI 拡張ボード
のメモリにアクセスする例を示します。
BPD-0806 には、FBIMEM4G.COM というツールと、4Gbyte メモリ空間へアクセスする補助関数
が用意されています。
FBIMEM4G.COM は、CPU の REAL モード時のセグメントリミットを 64Kbyte から 4Gbyte に拡
張する処理を行います。
その結果、32 ビットレジスタを使い、4Gbyte 空間へのアドレス参照を可能にします。
REAL モード時のセグメントリミットは
64Kbyte の為、このコードは アクセス
<FBIMEM4G.COM 適用前>
例外を招きます。
MOV
AX, 0000H
MOV
FS, AX
MOV
DWORD PTR FS:[00400000H], 12345678H
セグメントリミットを 4Gbyte に拡張
<FBIMEM4G.COM 適用後>
した為、このコードは実行できます。
MOV
AX, 0000H
MOV
FS, AX
MOV
DWORD PTR FS:[00400000H], 12345678H
なお、FBIMEM4G.COM がセグメントリミットを 4Gbyte に拡張するセグメントレジスタは、DS,
ES,FS,GS レジスタです。
★FBIMEM4G.COM の制限
FBIMEM4G.COM を実行する際、CPU を REAL モードにする必要があります。
仮想 86 モードでは動作しませんので ご注意ください。
© 2003, 2005 Interface Corporation. All rights reserved.
48
拡張ボードを直接制御したシステムからの移行
BPD-0806 は、FBIMEM4G.COM 実行後、4Gbyte のメモリ空間にアクセスする補助関数を用意し
ております。
関数名
UioPeekByte
UioPokeByte
UioPeekWord
UioPokeWord
UioPeekDword
UioPokeDword
機能
指定したメモリから
指定したメモリに、
指定したメモリから
指定したメモリに、
指定したメモリから
指定したメモリに、
1 バイト(8 ビット)データを読み込みます
1 バイト(8 ビット)データを書き込みます
1 ワード(16 ビット)データを読み込みます
1 ワード(16 ビット)データを書き込みます
1 ダブルワード(32 ビット)データを読み込みます
1 ダブルワード(32 ビット)データを書き込みます
お客様は、これらの補助関数を用いてプログラムを行います。
以下に、PCI-4116 のメモリ領域の先頭 4Kbyte に FFh を書き込むコード例を示します。
#include
#include
#include
#include
<stdio.h>
<dos.h>
"GETBAR.H"
“FBIUIO.H”
int main(void)
{
unsigned long
unsigned short
char
int
ulBaseAdrs[6], ulMemAdrs;
uIoAdrs;
nIrqNo;
i;
/* リソースの取得 */
if(PciGetConfigReg(1, 0x1147, 4116, ulBaseAdrs, &nIrqNo) <> 0){
printf(“fail get PCI resource¥n”);
return –1;
}
uIoAdrs
= (unsigned short)(ulBaseAdrs[0] & 0x3L);
/* I/O ポートアドレス */
ulMemAdrs = ulBaseAdrs[1] & 0xfL;
/* メモリアドレス */
outp(uIoAdrs + 0, 0x2);
for(i = 0; i < 4096; i++){
UioPokeByte(ulMemAdrs + i, 0xff);
}
return 0;
}
/* リセット発行 */
/* FFh でフィルする */
PCI-4116 の先頭 4Kbyte の
メモリ領域を FFh でフィル。
4.4 共有割り込み処理をする
「1.2 ソフトウェア面から見た C(98)/ISA と PCI/CompactPCI の違い」で触れたように、
PCI/CompactPCI 拡張ボードは 1 つの割り込みを複数枚で共有する事ができます。
1 つの割り込みを共有できる事で、C(98)/ISA 拡張ボードを使用していた時に頭を悩ませていた、
割り込みリソースの不足という問題は解消されました。
ただし、ソフトウェア側で割り込みの共有処理を追加する必要がでてきます。
ここで、割り込み共有をする場合の問題を、もう少し詳細に解説します。
C(98)/ISA 拡張ボードでは 1 つの割り込みに対して、1 つの拡張ボードしか割り当てられません。
© 2003, 2005 Interface Corporation. All rights reserved.
49
拡張ボードを直接制御したシステムからの移行
この為、例えば IBX-2702C が IRQ3 の割り込みを使用するに設定し、実際に IRQ3 のハードウェ
ア割り込みが発生した時、システムは IBX-2702C から割り込みが発生したと断定できます。
IBX-2702C
IRQ3
IBX-xxxx
IRQ9
IRQ3 の割り込みが発生
CPU
IBX-xxxx
IRQ11
割り込みを出したのは、
IBX-xxxx
IRQ12
IBX-2702C と断定できる。
図 4-2 C(98)/ISA 拡張ボードは割り込みは 1 対 1
PCI/CompactPCI 拡張ボードでは 1 つの割り込みに対して、複数の拡張ボードを割り当てる事が
できます。この為、例えば PCI-2104C と PCI-2702C が IRQ3 の割り込みを使用していた場合、実
際に IRQ3 のハードウェア割り込みが発生した時、システムは PCI-2104C か PCI-2702C のどちら
が割り込みを発生させたのか わかりません。
PCI-2702C
IRQ3
PCI-2104C
IRQ3 の割り込みが発生
IRQ3
CPU
PCI-xxxx
IRQ11
割り込みを出したのは、
PCI-xxxx
IRQ12
PCI-2104C か PCI-2702C の
いずれか。
図 4-3 PCI/CompactPCI 拡張ボードは割り込みは 1 対 n
割り込みを発生させたボードを特定するには、もう少し情報が必要です。
その情報とは割り込みステータスです。PCI 拡張ボードが割り込みを発生した場合、その
PCI/CompactPCI 拡張ボードは割り込みステータスに、自身が割り込みを発生した印を書き込み
ます。ソフトウェアは この情報を得る事で、その PCI/CompactPCI 拡張ボードが割り込みを発生
したと断定する事ができます。
© 2003, 2005 Interface Corporation. All rights reserved.
50
拡張ボードを直接制御したシステムからの移行
PCI-2702C
IRQ3
割り込みステータス:ON
IRQ3 の割り込みが発生
CPU
PCI-2104C
IRQ3
割り込みステータス:OFF
PCI-2702C の割り込みステー
PCI-xxxx
IRQ11
タスが ON になっているので、
PCI-2702C が割り込みを
出したと断定できる。
PCI-xxxx
IRQ12
図 4-4 PCI/CompactPCI 拡張ボードは割り込みステータスでボードを特定
この問題に対処する為、弊社では割り込み処理を簡易に記述する為のサービスソフトウェア
「BPD-0811 PCI DOS 用割り込み登録ライブラリ」を提供しております。
BPD-0811 は割り込み発生時、ユーザが登録する関数を呼び出す機能を提供します。
以下に提供している関数を示します。
関数名
PciSetInterrupt
PciKillInterrupt
機能
ユーザ割込み処理関数を登録します。
ユーザ割込み処理関数を削除します。
ここで、BPD-0811 付属のサンプルプログラムから、PCI-6103 でインターバルタイマの割り込み
回数をカウントするコード(smp フォルダの SMP6103.C)を説明します。
まず、コード全体を以下に示します。
List 4-1 SMP6103.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* ======================================================================== */
/*
*/
/* PCI-6103 MS-DOS用 インターバルタイマ 割り込みサンプルプログラム
*/
/*
*/
/*
Copyright (C) 2001 Interface Corporation.
*/
/*
*/
/* ======================================================================== */
#include
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<conio.h>
<dos.h>
"getbar.h"
#include
"pci_isr.h"
unsigned short timer;
/* ------------------------------------------------------------------------ */
/*
PCI 割り込み処理ルーチン
*/
© 2003, 2005 Interface Corporation. All rights reserved.
51
拡張ボードを直接制御したシステムからの移行
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/* ------------------------------------------------------------------------ */
int far user_func(int handle, short user1, long user2)
{
unsigned char stat;
unsigned short port;
port = user1;
stat = inp(port + 0x02);
if (stat & 0x10) {
timer++;
return 1;
}
return 0;
// 割り込みステータスの確認
// 割り込み処理の正常終了
// 他のデバイスによる割り込み
}
/* ------------------------------------------------------------------------ */
/*
メイン処理
*/
/* ------------------------------------------------------------------------ */
void main(void)
{
unsigned long bar[6];
unsigned char irq;
unsigned short handle, port;
int
r;
r = PciGetConfigReg(1, 0x1147, 6103, bar, &irq);
if (!r) {
port = bar[0] & 0xfffc;
printf("BAR0 = %04XH ¥n", port);
printf("IRQ = %d
¥n", irq);
// PCI リソースの取得
handle = PciSetInterrupt(irq, user_func, port, 0L); // 割り込み処理の登録
if (handle !=
outp(port
outp(port
outp(port
outp(port
outp(port
0xffff)
+ 0x04,
+ 0x05,
+ 0x06,
+ 0x03,
+ 0x07,
{
0x00);
0x00);
0x01);
0x10);
0x02);
// インターバルタイマの設定
// 割り込みマスクのオープン
// インターバルタイマの開始
while (1) {
printf("TIMER = %04XH¥r", timer);
if (kbhit()) {
getch();
printf("¥n");
break;
}
}
outp(port + 0x07, 0x00);
outp(port + 0x03, 0x00);
// インターバルタイマの停止
// 割り込みマスクのクローズ
PciKillInterrupt(handle);
// 割り込み処理の削除
}
}
}
© 2003, 2005 Interface Corporation. All rights reserved.
52
拡張ボードを直接制御したシステムからの移行
ソースコードの内、重要な個所は、22∼34 行目の割り込み処理ルーチンと、52 行目と 72 行目の
割り込み処理ルーチンの登録と削除呼び出しです。
52 行目の PciSetInterrupt 関数呼び出しは、割り込み番号とユーザ関数を指定して登録します。ラ
イブラリは指定されたハードウェア割り込みを検出した時、登録されたユーザ関数を呼び出すよ
うになります。
この関数は、同じ割り込み番号に対して複数のユーザ関数を登録する事ができます。
次に、22∼34 行目の割り込み処理ルーチンの内、28 から 33 行目の処理の流れに注目してくださ
い。ここでは、PCI-6103 の割り込みステータスレジスタにアクセスし、この割り込みが PCI-6103
から発せられたものかチェックを行っています。
もし、この割り込みが PCI-6103 から発せられたと判れば 1 を返し(31 行目)、ライブラリに対し
て この割り込み処理ルーチンが割り込み処理した事を伝えます。
PCI-6103 から発せられてなければ 0 を返し(33 行目)、この割り込み処理ルーチンは何もしなか
った事を伝えます。
ライブラリは、ユーザ関数からの 1 か 0 のリターン値により、発生した割り込みの処理完了を知
る事ができます。
例えば、IRQ3 の割り込みに対して、A,B,C の 3 つの割り込み処理ルーチンが登録されたとし
ます。IRQ3 の割り込みが発生した時、ライブラリは各々の割り込み処理ルーチンを順次呼び出
します。呼び出した割り込み処理ルーチンが 1 を返せば、ライブラリは割り込み処理が完了した
と判断し、割り込みコントローラへの完了処理(EOI)を行って処理を終了します。
割り込み処理ルーチンが 0 を返せば、ライブラリは次に登録された割り込み処理ルーチンを、順
次呼び出します。
72 行目の PciKillInterrupt 関数呼び出しは、52 行目で登録したユーザ関数を登録削除します。登
録したら この関数で登録削除するようにして下さい。
© 2003, 2005 Interface Corporation. All rights reserved.
53
索引
[索引]
B
LapbnvdInit ......................................................................... 43
LapbnvdOpenPort ............................................................... 44
BPD-0805 ....................................................................... 5, 45
BPD-0806 ....................................................................... 5, 45
BPD-0811 ....................................................................... 5, 45
P
PCI BIOS............................................................................... 8
PciGetConfigReg ................................................................ 46
PciGetConfigRegEx............................................................ 46
PciKillInterrupt ................................................................... 51
PciSetInterrupt..................................................................... 51
PCI コンフィギュレーションレジスタ ........................... 6
C
CompactPCI........................................................................ 12
D
DioDisableInterrupt ............................................................ 18
DioEnableInterrupt ....................................................... 17
DioSetup ............................................................................. 16
T
F
さ
FBIMEM4G.COM ............................................................. 48
最大ボーレート ................................................................. 30
サブシステム ID.................................................................. 7
送受信バッファ ................................................................. 30
TUT-0017............................................................................... 5
G
GPD-2000 ........................................................................... 15
GPD-3100 ........................................................................... 18
GPD-3100 WaveDriver ...................................................... 19
GPD-3300 ........................................................................... 22
GPD-3300 WaveDriver ...................................................... 23
GPD-3500 ........................................................................... 26
GPD-3500 WaveDriver ...................................................... 27
GPD-4101 ........................................................................... 30
GPD-4115 ........................................................................... 42
GPD-4141 ........................................................................... 30
た
デバイス ID.......................................................................... 7
転送レート ........................................................................... 2
は
波形メモリ .............................................................20, 23, 28
ベンダ ID.............................................................................. 7
ボード識別用ロータリスイッチ....................................... 9
I
わ
INT ファンクション............................................................8
割り込みステータス ........................................................... 3
割り込みの共有 ................................................................... 3
割り込み番号 ....................................................................... 2
L
LapbnInit............................................................................. 43
LapbnOpenPort................................................................... 44
© 2003, 2005 Interface Corporation. All rights reserved.
54
技術資料一覧
技術資料紹介
弊社では下記の技術資料を提供しております。
詳しくは、弊社 Web site(www.interface.co.jp)、または弊社窓口までお問い合わせ下さい。
カタログ
PRM-0058
インタフェース総合カタログ
チュートリアル
TUT-0014
Microsoft Visual Studio .NET 移行ガイド
TUT-0006
C(98)/ISA 製品から PCI/CompactPCI 製品への移行チュートリアル(DOS 編)
TUT-0007
拡張ユニット チュートリアル(入門編)
TUT-0008
拡張ユニット チュートリアル(問題解決編)
TUT-0009
システムユニット チュートリアル
TUT-0025
Visual Basic による DIO 入門書
TUT-0016
Visual Basic による PPI 入門書
TUT-0021
Visual Basic による AD 入門書
TUT-0023
Visual Basic による DA 入門書
TUT-0029
Visual Basic による HDLC 入門書
TUT-0027
Visual Basic による GP-IB 入門書
TUT-0033
Visual Basic による メモリンク 入門書
TUT-0031
Visual Basic による エンコーダカウンタ 入門書
TUT-0019
Visual Basic による モータコントローラ 入門書
TUT-0024
Visual C++ による DIO 入門書
TUT-0034
Visual C++ による PPI 入門書
TUT-0020
Visual C++ による AD 入門書
TUT-0022
Visual C++ による DA 入門書
TUT-0028
Visual C++ による HDLC 入門書
TUT-0026
Visual C++ による GP-IB 入門書
TUT-0032
Visual C++ による メモリンク 入門書
TUT-0030
Visual C++ による エンコーダカウンタ 入門書
TUT-0018
Visual C++ による モータコントローラ 入門書
TUT-0015
モーションコントロール チュートリアル
TUT-0053
モーションコントロール チュートリアル(PCI/CompactPCI)
TUT-0001
弊社バスブリッジを使用した PCI バスによる C バスボード制御 手順書
TUT-0002
弊社バスブリッジを使用した PCI バスによる ISA バスボード制御 手順書
TUT-0003
Linux による PCI/CompactPCI/CardBus 制御 入門書
TUT-0017
システム事例 メモリンクを使用した負荷分散システム チュートリアル
TUT-0036
RTLinux による PCI/CompactPCI/CardBus 制御入門書(導入編)
TUT-0037
RTLinux による HDLC ボード制御プログラミング チュートリアル
TUT-0038
RTLinux による DIO ボード制御プログラミング チュートリアル
TUT-0039
RTLinux による AD ボード制御プログラミング チュートリアル
TUT-0043
RTLinux による調歩同期シリアル通信ボード制御プログラミング チュートリアル
TUT-0040
RTLinux による DA ボード制御プログラミング チュートリアル
TUT-0041
RTLinux による GP-IB ボード制御プログラミング チュートリアル
TUT-0044
RTLinux によるメモリ共有インタフェースボード制御プログラミング チュートリアル
TUT-0048
RTLinux によるカウンタボード制御プログラミング チュートリアル
TUT-0050
RTLinux によるモーションコントローラボード制御プログラミング チュートリアル
TUT-0054
CAN チュートリアル
TUT-0055
チュートリアル 画像入力ボード
技術情報資料(セミナ資料)
初めての CAN インタフェース
Linux, リアルタイム Linux 移植(SH-4)経験談及び当社の今後の取り組みについて
Linux から PCI/CompactPCI ボードを制御する方法
ActiveX コントロールによるシステム組み込み技術
CompactPCI への置き換え+システム構築/移行ガイド
MS-DOS から PCI/CompactPCI ボードを制御する方法
© 2003, 2005 Interface Corporation. All rights reserved.
55
参考文献
参考文献
大川 善邦 著:PCI バスによる I/O 制御(オーム社:1999 年)
Edward Solari、George Willse 著:PCI ハードウェアとソフトウェア(インフォ・クリエイツ:1995 年)
© 2003, 2005 Interface Corporation. All rights reserved.
C(98)/ISA 製品から PCI/CompactPCI 製品への移行チュートリアル DOS 編
2005 年 3 月 Ver. 1.2
発行
発行所
〒732-0828
広島県広島市南区京橋町 10-21
TEL 082-262-7777
FAX 082-262-5066
ISD-7079-12
価格
¥2,100 (定価 ¥2,000 + 消費税 ¥100)
本書の内容の一部または全部を、無断で転載することを禁止します。
本書の内容は、将来予告なく変更することがありますので、あらかじめご了承ください。
© 2003, 2005 Interface Corporation. All rights reserved.
C(98)/ISA 製品から PCI/CompactPCI 製品への移行チュートリアル DOS 編
TUT-0006 Ver.1.2
www.interface.co.jp
Fly UP