サイト検索 サイトマップ 会社案内 通信販売 求人情報
製品情報 テクニカルサポート ダウンロード カタログ請求 ホームページ

aPCI-P31A入力32点/出力32点絶縁型パラレルI/Oボード
aPCI-P54入出力48点TTLレベルパラレルI/Oボード
aPCI-R47入力16点絶縁型/出力16点リレー
aPCI-A3512ビット8ch A/Dコンバータ
aPCI-M594軸ステップ/サーボモータコントローラボード
aPCI-G01GP-IBインターフェース
 
テクニカルQ&A
■aPCI-P31A 入力32点/出力32点絶縁型パラレルI/Oボード

Question  
Q1. ボードを実装していないパソコン環境でプログラムを動作させることが出来ますか?
Q2. apci31DllOpenを使用しましたがリンクが解決しません。
Q3. PC起動時のデバイスの確認時( PCI/AGP device listing... )に認識されません。

Answer  

A1. ボードを実装していないパソコン環境でプログラムを動作させることが出来ますか?

ボードを実装していないパソコン環境でプログラムを動作させると”apci31a.dllが見つからなかったため、アプリケーションを開始できませんでした。”と表示されます。
回避策を教えてください。
 PCIボードでは、ボードが拡張スロットに挿入されていない状態ではドライバがロードされませんので、上記の様なエラーが表示されます。
 解決策としては、アプリケーションソフトで、ボードの有り/無しにより処理を分岐すれば良く、具体的な例としては、if文等で dllOpenの結果(TRUE or FALSE)によって処理を分岐させ、 ボードが存在しない = FALSEの場合は、当該ボードにアクセスしない様にすれば上記エラーは回避出来ます。

A2. apci31DllOpenを使用しましたがリンクが解決しません。

apci31DllOpenを使用しましたがリンクが解決しません。どのようにすれば良いでしょうか?(ラッパー関数は、使用していません)
 ラッパー関数を使用しますと、DLL へのリンクがアプリケーション起動時ではなく任意のタイミングで行えるようになるため、ボードが実装されていない環境でDLLオープン時にエラーが発生した場合でも、柔軟に対応することが可能です。 また、アプリケーション異常終了によるデバイスを開放しない状態も、回避することが可能です。
 以上のメリットがありますので、ラッパー関数をお使いいただくことをお奨めいたします。ラッパー関数使用例は、ドライバ配布形式の"Sample\VC" フォルダをご参照ください。
 また、MFC でラッパー関数を使用する時の注意点は以下のURL をご参照ください。

MFC実装手順 http://cpi-tec.jp/adtek/support/tech/prog_2.html

A3. PC起動時のデバイスの確認時( PCI/AGP device listing... )に認識されません。

OS上では認識し、ドライバのインストールは問題無く完了するのですが、なぜ起動時には認識されないのでしょうか?
 OS上で認識され、かつアクセスができているのであれば問題は有りません。 BIOS上で表示されるPCIボードは、主にディスプレイ・カードやSCSIボード等ボード上にBIOS ROMが搭載されている場合です。
 また、PCI-PCIブリッジなどPCI規格で定義される一般的なクラス・コードを持っているボードも表示される場合があります。 APIC21が使用されるような特殊用途のボードは数多くあり、BIOS上では識別/管理ができないため表示を省いているものと思われます。
(なお、「不明なボード」として表示される場合もあります。)

 
テクニカルQ&A
■aPCI-P54 入出力48点TTLレベルパラレルI/Oボード

Question  
Q1. ローカルバス側(I/O側)のアクセス速度はどれくらいでしょうか?
Q2. 現在の出力状態を取得するには、どうすれば良いのでしょうか?
Q3. 直接LED制御は可能でしょうか。
Q4. ソースは組み込まないでリンク時に解決する事はできないのですか?
Q5. 入力ICが、LS244となっていますがLVTTL(3.3V)でのドライブが可能でしょうか。
Q6. 出力モードで使用した場合の作れる最小のパルス幅はどのくらいですか?

Answer  

A1. ローカルバス側(I/O側)のアクセス速度はどれくらいでしょうか?

aPCI-P54のPCI側にウェートは入りますか?ローカルバス側(I/O側)のアクセス速度はどれくらいでしょうか?
aPCI-P54搭載のPCI Bridge PLX9050の設定で、Waitは以下の通り1または2wait入る様に設定されております。
  R/W Address to Data    = 2wait
  R/W Strobe  to Delay   = 1wait
  R/W Data    to Address = 1wait
  Write Cycle Hold       = 1wait
ローカルバス側(I/O側)のアクセス速度は、ソフトの介在しない、バス上での1バイトあたりのアクセス時間は約1μsです。

A2. 現在の出力状態を取得するには、どうすれば良いのでしょうか?

 aPCI-P54の出力データは、ハード的に読み出す事が可能です。詳しくはマニュアルP28をご覧下さい。
 また、出力状態の読み出しには、入力関数の "Apci54InPort" をご利用ください。

A3. 直接LED制御は可能でしょうか。

 規定の電流以内で使っていただければ可能です。”規定電流”はテクニカルガイド中の製品仕様の「バッファIC出力電流」に示される値です。
  IOL=23.5mA(MAX)
  IOH=-15.0mA(MAX)

A4. ソースは組み込まないでリンク時に解決する事はできないのですか?

Buildvc.TXTの記載で、”全ソースリスト(4個)をプロジェクトに組み込む”とありますが、\LIBのフォルダーにaPCI54.LIBみつけたのですが、 ソースは組み込まないでリンク時に解決する事はできないのですか?
 サンプルソースを構築する場合、ラッパー関数部がダイナミックにDLL をリンクしますので、LIB ファイルはプロジェクトに組み込む必要はございません。 従って、サンプルプロジェクトを構築する場合はプロジェクトに、
  • apci54s.c
  • apci54w.c
  • apci54w.h
  • apci54.h
を組み込み、ビルドを行うことになります。LIB ファイルはラッパー関数を使用せず、DLL を直接アクセスしたい場合に使用します。
 また、ラッパー関数をユーザプログラムで使用する場合は、プロジェクトに、
  • apci54w.c
  • apci54w.h
  • apci54.h
を組み込み使用してください。

A5. 入力ICが、LS244となっていますがLVTTL(3.3V)でのドライブが可能でしょうか。

aPCI-P54の入力レベルHighスレッショルドは2Vですので、それ以上であればドライブ可能ですが、5V電源に10Kのプルアップ抵抗が接続されており、 LVTTL側に5Vの電圧がかかります。ご使用のLVTTLが問題無いか確認が必要です。

A6. 出力モードで使用した場合の作れる最小のパルス幅はどのくらいですか?

aPCI-P54の出力制御は、すべてソフトで行いますので、タイミングはOS環境に依存します。
以前にaPCI-P54で実測を行った結果では、1000回 OUTの平均では、 1回あたり21.4μsでした。
  テスト環境:
 CPU : PentiumMMX 166MHz
  RAM : 74MB
  OS  : WindowsNT4.0

 
テクニカルQ&A
■aPCI-R47 入力16点絶縁型/出力16点リレー

Question  
Q1. UNIX系ドライバ製作のための技術情報がいただきたいのですが。
Q2. B接点出力は行えるのでしょうか?

Answer  

A1. UNIX系ドライバ製作のための技術情報がいただきたいのですが。

 aPCI-R47のドライバ製作のための技術情報です。

 デバイスID=0x9047、ベンダID=0x136C

 ・I/Oポートアクセスのための、ベースI/OアドレスはPCIバスコンフィグレーションレジスタ空間の、base address2の値のビット0をマスクした値を使用します。
  (例)base address2=0x00007601 の時、ベースI/Oアドレス=0x00007600 を使用します。

 ・ボード上のI/Oポートのマッピングは、マニュアルに記載されている通りです。
  使用しているPCIバスコントローラチップはPLX9050です。

A2. B接点出力は行えるのでしょうか?

aPCI-R47では、B接点出力(ノーマリクローズ)は行えるでしょうか?
 リレー出力の方式は、ジャンパソケットの切り替えによりノーマリ・オープンノーマリ・クローズの切り替えが可能です。 詳しくはaPCI-R47のマニュアル 8ページをご覧下さい。

 
テクニカルQ&A
■aPCI-A35 12ビット8ch A/Dコンバータ

Question  
Q1. 複数枚ボードの使用について。
Q2. 取得したデータの単位は何でしょうか?
Q3. アナログデータ(最大15V程度)を取り込みたい。

Answer  

A1. 複数枚ボードの使用について。

 aPCI-A35を現在1枚使用していますが、今後複数枚を使用できるようににしたいと考えていますがいくつか不明な点があります。
  1. 複数枚使用するときはBSN (Board Select Number) を設定するとのことですが、具体的にはどのように設定したらよろしいでしょうか?
  2. 2枚目以降のボードを制御するには、プログラムでどのように記述したらいいのでしょうか?
  3. 1枚と複数枚とを使い分けるために、ボード数の取得は可能でしょうか?
  1. ボード上にあるBSNスイッチの値が重複しないように設定してください。例えば、1枚目を"E"、2枚目を"F"、というように設定します。

  2. デバイス制御を開始するための引数として、「 wLogSlot: 論理スロット番号 」 があります。
  3. 例:PCにボードが2枚インストールされている場合 : 論理スロット番号は "0" か "1" を指定可能です。
    1. 論理スロット番号に"0"を指定してApci35wCreate( ) 関数でデバイスを確保します。
    2. 論理スロット番号に"0"を指定してApci35wGetSwitchValue( ) 関数でBSN値を取得します。
    3. 希望するBSNであった場合、その論理スロット番号"0"を指定してデバイスの制御を行います。
    4.  希望するBSNでなかったら、その論理スロット番号"0"指定してApci35wClose( ) 関数でデバイスを破棄し、論理スロット番号に"1"を指定してApci35wCreate( ) 関数でもう片方のデバイスを確保します。
       この後、論理スロット番号に"1"を指定してApci35wGetSwitchValue( ) 関数でBSN値を取得し、希望するBSNであることを確認してください。

     重要なのは「論理スロット番号とBSNの関係は必ずしも一定でない」ということです。
    これは、ある時プログラムを動かした際に、
     BSN論理スロット番号
    1枚目E0
    2枚目F1
    となったとしても、別の時にプログラムを動かした際には、
     BSN論理スロット番号
    1枚目E1
    2枚目F0
    になることがあるという事です。この事ふまえてプログラミングする必要があります。

  4. ボード枚数を直接取得するAPIはありませんが、Apci35wCreate( ) 関数で確保できたデバイスの数から判断することは可能です。

A2. 取得したデータの単位は何でしょうか?

サンプリングを取って表示させていますが、単位を教えて下さい。取得したHEX(ヘキサ)データはどの様に電圧値に変換するのでしょうか?
例として、aPCI-A35/2の入力電圧範囲は 0V〜+10Vとなっておりますので、計算式は以下の通りになります。
  Vin =FS・CD/4096[V]

    Vin:入力電圧
    FS:フルスケール電圧 (aPCI-A35/2では10V)
    CD:取得したデジタルコード(10進数)
    4096:2の12乗(12ビットA/Dの分解能)
詳しくは、aPCI-A35 取り扱い説明書の、”3-3-2. ユニポーラ入力の電圧換算”をご覧下さい。

A3. アナログデータ(最大15V程度)を取り込みたい。

aPCI-A35を使用してアナログデータ(最大15V程度)をデジタル変換しパソコンに取り込む事は可能でしょうか。その場合、外部からの電源が必要でしょうか?
分圧抵抗等をaPCI-A35の入力に取り付けることにより、0〜15Vの電圧をパソコンに取り込むことは可能です。なお、外部からの電源は必要ありません。

 
テクニカルQ&A
■aPCI-M59 4軸ステップ/サーボモータコントローラボード

Question  
Q1. 動作中に加減速時間(加速度)の変更は可能でしょうか?
Q2. 供給電流は何Aですか?

Answer  

A1. 動作中に加減速時間(加速度)の変更は可能でしょうか?

 動作中に加減速時間(加速度)の変更は可能です。
 出力パルス数をソフトで読み出すことは可能ですが、ハードウェアであらかじめ設定したパルス数と実際の出力パルス数をコンパレートするような機能はありません。 時間に関しては本ボードでは管理しませんので、アプリケーション側で管理することになります。

A2. 供給電流は何Aですか?

aPCI-M59のCN1ピンA31,A43,B31,B43の内部5V電源出力の供給電流は何Aですか?
 1PinあたりのMAXは0.5Aとなります。ただし、合計1A以内でお使い下さい。

 
テクニカルQ&A
■aPCI-G01 GP-IBインターフェース

Question  
Q1. マルチラインメッセージの送信を行う際の具体的な方法とは。
Q2. N88BASICの大まかな命令とそれをVBで再現しようとしたときのコードなのですがエラーになってしまいます。
Q3. ボードをパソコンに挿してWindowsにログインした後に電源が落ちるのですが。
Q4. DLLオープン/クローズについて。
Q5. 文字列の送信方法について
Q6. サンプルにVBの作成例のApci01wDllについて。
Q7. 動作確認用プログラムを実行したところ、Spoll の項目で Errtimeout が出る。

Answer  

A1. マルチラインメッセージの送信を行う際の具体的な方法とは。

 マルチラインメッセージ(バスコマンド)の送信を行う際に以下の内容で試しましたがダメでした。
 GP-IBコマンドをラッパー関数 Apci01wSendCmd で使用するのだと思うのですが、具体的な方法とは?
 実際に行いたい内容はN88BASICではWBYTE文を用いて記述するので、アドレス5の機器にトリガとかける場合、WBYTE &H25, &H8;
(このWBYTE文では送信したいマルチラインコマンドに該当するASCIIコードを16進数で記述)
 VBサンプル中にあるDLL定義apci01.bas中の
'-------------------------------------------------
' マルチラインメッセージ(GPIBコマンド)指定
'-------------------------------------------------
Global Const LA_0 = &H20 ' Listener Addr
Global Const TA_0 = &H40 ' Talker Addr
Global Const UNL = &H3F ' UNListen
Global Const UNT = &H5F ' UNTalk
Global Const GTL = &H1 ' Go To Local
 以下はVisualBasicでのコマンド送出方法のサンプルです。ご参考ください。
'----------------------------------------------------
' Apci8201SendCmd 使用例
'----------------------------------------------------
Private Sub Form_Load()
Dim wLogSlot As Integer ' デバイスを格納
' :
' 中略
' :
Dim CmdBuff() As Byte ' コマンドバッファ

'----------------------------------------------------
' DLL 使用宣言
'----------------------------------------------------
If Apci8201wDllOpen() = False Then
ErrorMessage(APCI8201_SLOT_AUTO)
Exit Sub
End If
' :
' 中略
' :

'-----------------------------------------------------
' コマンド送信
' UNL,GET,TA_0,LA_0等の値は何らかのファイルで定義されていること
'-----------------------------------------------------
ReDim CmdBuff(4)

CmdBuff(0) = UNL ' UNL=&H3f
CmdBuff(1) = MyAdrs or TA_0 ' 自分のアドレス or TA_0(&H40)
CmdBuff(2) = &H5 or LA_0 ' トリガをかける機器のアドレス or

LA_0(&H20)
CmdBuff(3) = GET ' GET=&H8

If Apci8201wSendCmd(wLogSocket, CmdBuff, 4) = False Then
ErrorMessage (wLogSocket)
Exit Sub
End If

ResultMessage ("コマンド送信成功")
' :
' 中略
' :
End Sub

A2. N88BASICの大まかな命令とそれをVBで再現しようとしたときのコードなのですがエラーになってしまいます。

 以下のコードはN88BASICの大まかな命令(行番号省略)と、それをVBで再現しようとした時のもので、コマンドとパラメータを送信して、データを複数(ここでは3つ)受信する流れになっています。
 しかし、型が一致しない等のエラーや、エラーが解決しても命令を受信しない事や、場合によっては受信しても実行しないなど様々な問題が起きます。
'----N88BASIC-----------------------------
AD=5 'アドレス番号代入
GPIB$="RRA" +"0" 'RRAというコマンドを代入、続いてパラメーター0を入れる
PRINT @AD;GPIB$ 'アドレス5の機器に送信
INPUT @AD;BUFF$(1),BUFF$(2),BUFF$(3) 'アドレス5の機器から3つデータを受信

'----VISUALBASIC--------------------------
'ボタンクリックイベント発生
Private Sub cmdSKIP_Click()
GPIB = "RRA" +"0" 'RRAはコマンド、0はパラメーター
MsgBox (GPIB) '←GPIBには"RRA0"という文字列が入る

Call Sousin(GPIB) 'SousinにGPIBを引き渡す
Call Jyusin() 'Function Jyusinを呼び出す

End Sub

'送信サブルーチン
Function Sousin(dat As String) As Byte 'GPIBはdatに変更


GpibAdrs = PRTADRS 'アドレス番号

' 送信文字数を保存
dwDataCnt = Len(GPIB)


GpibCmd = StrConv(GPIB,vbFromUnicode)

' データ送信実行
If Apci01wSendDataC(wLogSocket, wGpibAdrs, GpibCmd, dwDataCnt) =
False Then
ErrorMessage (wLogSocket)
Exit Sub
End If

strbuf = "指定機器へのデータ送信"
ResultMessage (strbuf)

'受信サブルーチン
Function Jyusin ()

wGpibAdrs = PRTADRS ' トーカのIBアドレス
dwDataCnt = 3 ' 受信するデータ個数

If Apci01wRecvDataC(wLogSlot, wGpibAdrs, Buff, dwDataCnt) = False
Then
ErrorMessage (wLogSlot)
Exit Sub
End If

strbuf = "指定機器からのデータ受信" + Chr(10) + Chr(10) + _
"DataCnt: " + Str(dwDataCnt) + Chr(10) + _
"Data :"

For i = 1 To dwDataCnt
strbuf = strbuf + Chr(Buff(i))
Next
 送受信バッファ用のバイト型配列をモジュールレベルで宣言しているため、配列の要素数決定=バッファ領域確保をおこなうタイミングが曖昧になっています。
 配列にデータを代入する前に初期化を行うのが一般的な手法といえますので、以下のようにしてお試し下さい。
  1. 送信/受信関数それぞれのなかでバッファ用のバイト配列をローカル宣言する。
  2. さらに受信する際には、Redimステートメントを用いて配列要素数を決定しバッファ領域をきちんと確保してから、RecvData関数に引き渡してください。
例:
Function Jyusin ()

Dim RecvBuff() as Byte '受信用バッファ

wGpibAdrs = PRTADRS 'トーカのIBアドレス
dwDataCnt = 3 '受信するデータ個数
Redim RecvBuff(1 To dwDataCnt) '受信用バッファ領域確保

If Apci01wRecvDataC(wLogSlot, wGpibAdrs, RecvBuff, dwDataCnt) =...

A3. ボードをパソコンに挿してWindowsにログインした後に電源が落ちるのですが。

 GP-IBボードをパソコン本体に挿入し、ドライバのインストールも成功したが、再起動後Windowsにログインしてから1分程度で突然電源が落ちるようになりました。ボードのスイッチ等はデフォルトの状態です。
カードをはずして再起動すると、特に電源が落ちるようなことは見られません。
 GP-IBケーブルの接続の有無に関わらず、ボードをパソコンに挿してWindowsにログインした後に電源が落ちますが、ログインしなければ電源が落ちることはありません。
このような現象の報告がこれまでにあったか、またその対処法を教えて欲しいのですが。
 これまでにCOMPAQ社の一部の機種でこの様な現象が報告されています。
 対策としましては、ボード内に実装されているEEPROMのデータの書き換えをおこないますので、お手数ですが弊社テクニカルサポート宛ご送付ください。
 1〜2日営業日にてお返しいたします。

A4. DLLオープン/クローズについて。

 VisualBasic6.0でプログラムを組んでいますが、オープン〜クローズした後に、再度オープンしようとすると"使用可能なデバイスがみつかりません"というエラーが発生します。
  1. DLLOpen/Close はアプリケーションの開始/終了時に行ってください。
  2. 例:VB単一フォームのアプリケーションの場合 :
     Form_LoadイベントにDLLOpen
     Form_UnloadイベントにDLLClose

  3. 変数はできるだけ宣言を行って使用してください。
  4.  各モジュールの先頭に
     Option Explicit
     の1行を入れると変数の宣言が必須になり、宣言がない場合にコンパイルエラーになってくれます。

     また、メニューの[ツール]→[オプション]→[編集]タブで、「変数の宣言を強制する」というチェックボックスがありますので、こちらもチェックして置く事をお勧め致します。

A5. 文字列の送信方法について。

マルチラインメッセージの送信を行う際の具体的な方法はどのようにすれば良いでしょうか。
装置に文字列のデータを送信したいと思っているが、Apci01SendDataC の関数を使って送信する方法を教えて下さい。
 スレーブ機器へのデータ送信には Apci01SendDataC関数を用います。
 ドライバに同梱のサンプルプログラム(apci01s.bas) を例にしますと、データ送信は以下の手順となります。
  1. BYTE型の配列に送信文字列を格納します。
  2. Apci01wSendDataC 関数に、論理スロット番号・送り先機器アドレス・BYTE型配列・送信する文字数を渡して実行します。

A6. サンプルにVBの作成例のApci01wDllについて。

ドライバのサンプルにVBの作成例が入っておりますが、この中で、Apci01wDll の[w]には何を入力すれば良いでしょうか?
 VBのサンプル(apci01s.bas)中にある「Apci01wDll」等の「w」の意味ですが、これはラッパー(wrapper) 関数であることを示すためのものです。 この部分には数値や文字列を代入せず、そのままお使いください。
 ラッパー関数は、アプリから直接API関数を呼び出すことなしにドライバをお使いいただける様に弊社にて添付しているもので、 ラッパー関数部の具体的な中身については、サンプルと同じディレクトリの(apci01w.bas)をご参照ください。

A7. 動作確認用プログラムを実行したところ、Spollの項目で Errtimeout が出る。

FFTanalyzer とのデータのやりとりをおこなおうとしています。
添付動作確認用プログラムを実行したところ、Spoll の項目で Errtimeout また、Send Data の項目で ErrListner が出ます。これらの回避方法と、Spoll とは何かを教えて下さい。
 「Spoll」とはシリアルポールのことで、スレーブ機器からのサービスリクエスト(スレーブ機器がコントローラに対しスレーブ機器の状態変化を通知すること)によるステータスバイトの変化を読み出すための機能です。
 マスター機器はサービスリクエストを受けると、どの機器からのリクエストか各スレーブ機器に対し問い合わせを行いますが、順次問い合わせを行うためシリアルポールと呼びます。
 従って、サービスリクエスト(SRQ)を受け付けていない状態で(Spoll)シリアルポールを実行した場合は、上記の通りタイムアウトエラー「Errtimeout」となります。 サービスリクエスト機能を使用しない場合は、シリアルポールも実行する必要はありません。
 Send Data でリスナエラー(ErrListner)が発生する原因としましては、aPCI-G01とリスナ側機器=スレーブ側機器(FFTanalyzer)とのケーブル接続か、アドレスの不整合が考えられます。

テクニカルQ&A
サポート&サービス
Home Page