驪戻 麗全 黎新

ちょっとした質問用スレッド

54 MAKI 2006/10/23(月) 18:34
以下の環境でESPEC社の小型恒温槽ミニサブゼロMC-710を
制御したいと思っています。

言語:VB6.0
OS:Wndows XP
GPIBボード:PCMCIA-GPIB(NI社)
その他環境:プロトコルコンバータPMS-CAにGPIBにてコマンドを
      送信し、PMS-CAからE-BUS(?)というのを経由して、
      恒温槽を制御したいです

 N88-BASICのプログラムがあったので、VB6.0で書き直して
 実行してみたのですが、動きません。
 どなたか、VBにて上記のような制御をされている方がおられましたら、
 助言ください。

      
      

55 &◆PNoCmXUc 2006/10/24(火) 14:46
>動きません。

 動きません、っていうのがどういう状態なのか、

 ・たとえば GPIB のバスエラーになる、
 ・VB 自体のエラーメッセージが出る

 などの状態がわかれば書いてみていただけると、
 上記のような制御をされている方以外でも
 なにかヒントをもらえるかもしれませんよ。

 それとも、PMS-CA や E-BUS(?) に関連する問題であること
 までは特定されているのでしょうか?

56 MAKI 2006/10/25(水) 10:34
ご指摘ありがとうございます。制御初心者なもので、すいません。
とりあえず、以下のような命令を送って、25℃定置運転
できないか試してみたのですが・・・

  'PMS-CA初期化コマンドの送信
  Call ibdev(0, PMS_CA_adr, 0, T1s, 1, 0, PMS_CA_dvn)
  
  ''PMS-CA初期化時のエラーチェック
   If 'PMS-CA_dvn < 0 Then
     MsgBox "GPIBの初期化エラー('PMS-CA)", vbOKOnly, "送信エラー"
   End If
  
  'デバイスの初期化('PMS-CA)
  Call ibclr(DL1200_dvn)

  '冷凍機(定置時REF1)25℃定置運転の命令
  Call ibwrt(PMS_CA_dvn, "##,SET,REF1")
  Call ibwrt(PMS_CA_dvn, "##,TEMP,S25")
 (call ibwrt(PMS_CA_dvn, "##,RUN PRGM, TEMP25 TIME0:30 REF1")
  という書き方もされていたので試してみましたが・・・)

 この命令を送ってみたところ、PMS-CAのLISTEN、REMOTEランプが
点灯し、エラーメッセージも一切表示されなかったのですが、肝心の
温度槽が25℃にならず、どういうわけか、槽内温度が見る見る上昇
していくという、暴走?してそうな感じです。

 PMS_CAの取説でかかれているGPIB設定の通りにしていますが、
E-BUSの通信がうまく行ってないような気がします。
 メーカに、「上記環境で制御するのに、特別なデバイスドライバか
何か必要ですか?」と聞いてみましたが、「必要ありません。
皆さんご指摘のような環境で制御できてるみたいですよ?」
 と言われました。というわけで、どうしたものかと・・・・。
     

57 匿名488 2006/10/25(水) 15:37
N88-BASICでPC-9801-29Nを用いて
PRINT@ 2;A$,B$,C$,D$
となっているところを、NI社製PCI-GPIBを用いてVC++で記述するには
どうすればいいのでしょうか?ibwrtだと、一度にデータを一つしか送れないように見えるのですが・・・

58 &◆PNoCmXUc 2006/10/25(水) 16:55
>>56

>この命令を送ってみたところ、PMS-CAのLISTEN、REMOTEランプが
>点灯し、エラーメッセージも一切表示されなかったのですが、肝心の
>温度槽が25℃にならず、どういうわけか、槽内温度が見る見る上昇
>していくという、暴走?してそうな感じです。

 上の状態を素人目から見ますと、
 コマンドとしては「正しく」認識しているのだけれど、
 温度設定が誤って伝わっている、あるいは
 違うコマンドになってしまっている、という感じでしょうか。

 NI 社の API は上記記事で書いていただけましたので、
 同じように元の N88BASIC 時のコマンドを併記しますと、
 両方を使用されている方から助言が
 (記述の移植に間違いがあるかないか等)得られるかと思います。

>>57

 文字列自体をあらかじめくっつけてしまえばいいのではないでしょうか?
 A$,B$,C$... に相当する C (C++ でも同様でしょう) の char[] を普通にくっつけるか、
 もし区切り文字が必要なら区切りを含めてあらかじめひとつの文字列にしてしまうのはいかがですか?

 C++ はわかりませんが、たとえば C なら

 sprintf(くっつけたあとの長い領域,"%s,%s,%s,%s",A$だったもの,B$だったもの,......) ;
 ibwrt(.......);

 みたいな感じです。上例では区切りがカンマですが、必要な区切り文字に変換してください。

59 匿名488 2006/10/26(木) 11:13
>>58
なるほど、その手段がありましたね。
アドバイスありがとうございます。

60 匿名488 2007/01/17(水) 14:43
2ちゃんねる関連スレ(サーバ移転)
ttp://science5.2ch.net/test/read.cgi/kikai/999980493/l50

61 匿名488 2007/01/20(土) 11:21
これからGPIB通信等を始める予定なんですが、
VISAとかSICLとかの基本的な知識が載っている
サイトってご存じないですか?
自分で勉強しようと思っています。

62 匿名488 2007/01/25(木) 15:05
Web から落とせる HP(Agilent) のライブラリ一式を
インストールされてみてはいかがでしょうか?
オンラインマニュアルがあります。

あるいは
ttp://www.kikusui.co.jp/download/jp/kivisa_j.html
にあります、KI-VISA のプログラミングガイドなどが
参考になるかと思います。

63 匿名488 2007/06/07(木) 22:36
古いマニュアルと最近のサンプルプログラムを比較すると
使われるコマンド類が変わっているのでよくわかりません。
例えば、ibwrtとilwrtの違いって何でしょうか。

当方VBA使いで、モジュールの動作を1つずつ追っていくと
・ibwrtは受け取った入力変数udに再帰代入している。
・ilwrtはFunctionなので演算結果を出力している。
と解釈できましたが、何が違うのでしょうか。

また、Option Explicitと型宣言を強制しておきながら
$や%といった型宣言文字を後付で使うのは何故なのでしょうか。

古い文法様式が混ざってるので初心者には辛い・・・

名前
mail
コメント



文責:計測制御技術ラウンジ, Powered by ©タカヒロ@みちのく掲示板 [12ch BBS 2.03]