以下のプログラムでGPIBでつないだヒーターから温度を受け取りたいのですがうまくいきません。
ibdevでdctに数値が入る(正の値)ので初期化はできていると思います。ibrdでタイムアウトしています。
GPIB診断プログラムでは値が帰ってきますのでプログラムに問題があると思うのですが原因がまったくわかりません。一行ごとにストップさせましたが時間は関係ないようです。
帰ってくる値300K(27℃)のときR+3000です。

dim dtc as integer
dim RD as string

private sub button1_click...
ibdev(0,24,0,T10s,1,0,dtc)
ibclr(dtc)
ibwrt(dtc,"$C3")
ibwrt(dtc,"$Q2")
RD=space$(20) 'これがないとタイムアウトしませんが値は帰ってきません。
ibwrt(dtc,"R2")
ibrd(dtc,RD)
textbox1.text=RD
以上

A 回答 (1件)

> ibdevでdctに数値が入る(正の値)ので初期化はできていると思います。



初期か出来たかどうかの判断はibdevの帰り値を確認するのでは?
ヘルプ、リファレンスを確認して、ibdevの帰り値が正常終了かどうか確認してください。

以降、ibclr、ibwrtも同様で、こういうケースでは「初期化出来ていないのに、出来ていると思い込んでいた。」というケースが多いです。

この回答への補足

初期化できていないかもしれません。
装置の電源が入っていなくても同じ値が帰ってきました。

補足日時:2005/04/19 12:43
    • good
    • 0
この回答へのお礼

初心者なのでよくわかりませんが値は31256が帰ってきます。
電流計と電圧計もつないでいますが電流計のみ使うときは電流計の返り値が31256となって、電流計と電圧計の両方を使うときは先に初期化したほうが31256であとのが31257になります。
電流計と電圧計は制御できます。

お礼日時:2005/04/18 17:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QGPIBインターフェイスの今後。

レコーダー(オシロスコープ)とPCのインターフェイスにGPIBを用いることがありますが、計測機器を使う分野では今後どのように進むのか、どなたか教えてください。
(今、レコーダのデータ処理をGPIBを使って取り込んでます。型も古くなってきたのですが、やはりインターフェイスはGPIBなので・・・。安い買い物ではないだけに慎重になってまして。)

Aベストアンサー

制御屋から見るといいかげんGP-IBもやめて欲しい所ですが、多分計測スタンダードとしてかなり先まで続くと思います。
先のことは多分誰もわからないでしょうが、5年は無くならないとおもいます。

今後LANが発達して10BASE-Tあたりが標準になれば本当のオープンネットワークとして使えると思いますが・・・
制御業界でも毎年新しい規格や通信手段が出てきては衰退してきていますが、バックボーンがなんとなくイーサネットに決まるような雰囲気があります(私個人の感想です)。

QVB6変数の宣言dim j,k,p,m,n as Integerは良くない?

お世話になります。

VB暦1年です。

汎用の変数宣言でタイトルのように
dim j,k,p,m,n as Integer
dim ssa,ssb as String

など、カンマ区切りで変数宣言を使っていたのですが
最近、知人にasの手前の変数は型どおり宣言されるが
その手前の変数はVariant型で宣言されてしまうと指摘されました。

指摘されるまで気にはしていませんでしたが
ウォッチで確認すると変数に代入されるまでは
型がVariant/Emptyとなってます。

以後、気をつければいいのですが
過去にコーディングしたプログラムにも多少、使用していて客先に納品してしまっているものもあります。
後々、問題になるのかな?

Aベストアンサー

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというようなバグの原因になりやすいので、型を明示できるような状況で敢えてVariant型を使うべきではないです。

しかし、すでに納品してしまったコードについては、問題はメモリを余計に使ってしまうことくらいではないでしょうか?
他の人が気づかなかったことから考えるに、多分狭いスコープで使っていますよね? 比較対象や代入するべき型を誤るというようなロジックの誤りがない限り、少なくとも動作上の問題は発生しないと思います。ただ、直せる機会があるのであれば、直した方がいいとは思いますが。

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというよう...続きを読む

QGPIB制御

計測器を購入しGPIB制御をしようとしてます。
予備知識がありません。既に出来上がった測定系を使用し測定したことがある程度です。今回は1から自力でする必要があります。メーカがGPIB用のコマンドを用意してる事を知っている程度です。

1.必要なハード
パソコン、GPIBカード、GPIBケーブル
この程度と思ってますが、これでいいですか?

2.ソフト
何を用意すればいいでしょうか?VisualBasicですか?使ったことはありません。

3.勉強方法
ここが一番問題です。GPIBは書籍を探してもなかなかありません。ホームページではなく出来ればまとまった書籍がありがたいのですが。。。何か無いでしょうか?

Aベストアンサー

参考情報として

『GP‐IBインターフェイスの使い方』
『IEEE‐488(GPIB)とその応用』―標準ディジタル・バスの使い方から設計法まで
両方とも新本は在庫無し、Amazonで中古本が出品されています、検索してください。

『Excel実験データ処理』
http://www.interface.co.jp/whatsnew/press_release/book.asp
GPIBサンプルプログラムが添付されています。
VisualBasicの知識は必要のようです。

Qマクロで100マス計算! Dim i,j As Integer For i = 2 ToRang

マクロで100マス計算!

Dim i,j As Integer

For i = 2 ToRange(”A1”).End(xlDown).Row
For j=2 To Range(”B1”).End(xlToRight).Column

Cells(i,j).Value = Cells(i,1).Value * Cells(1,j).Value
Next j
Next i
Endsub

上記のように記述しましたが、
iの最終行が2となってしまっていますがなぜこのコードが間違っているのか分からないです。。どなたか教えていただけたら嬉しいです!

Aベストアンサー

確認してはいませんが…


>改行、スペースは実際にはきちんととっていますので気にしないでください
とのことなので、違っているのかもしれませんが、

>For i = 2 ToRange(”A1”).End(xlDown).Row
         ↓
 For i = 2 To Range(”A1”).End(xlDown).Row
で、うまくいきませんか?
100マス(10×10)と最初から決まっているので、範囲は 2 To 11 でも良いように思いますが…

改行、スペースなどが正しくなっているなら、Range(”A1”).End(xlDown).Rowの値が2以下になっている可能性が考えられます。(ということは、A1が空白セル、または、A3が空白セルなどなど・・)
A1が空白セルの場合は、
 For i = 2 To Range(”A2”).End(xlDown).Row
とするか、
 For i = 2 To 11
などとすることで、動作するのではないかと推測します。

QPC9801(MS-DOS)+GPIB => Win98+GPIB(C

PC9801(MS-DOS)+GPIB => Win98+GPIB(CEC 488)に移行しました。

NECの9801に専用GPIBボードを挿して、N88Basicで複数の機器(デジタルマルチメータ等)の自動制御を行ってました。しかし、PC9801が壊れたため、Windows98のPCとUSBのGPIB(CEC488)システムに変更しました。そうしたら、今までコントロールできていた機器の一部がコントロールできなくなりました。
具体的には、送信は出来るのですが、受信が出来ないようです。メータは「Talk」マークを点灯させたままになります。GPIB(CEC488)のユーティリティーから直接制御しても同様の結果なので、プログラムの問題ではないようです。

何かアドバイスを宜しくお願いします。

http://www.mccdaq.com/usb-data-acquisition/USB-488.aspx

Aベストアンサー

PC-9801を買い直したら? その方が早いんじゃないの?
http://www.pc-98.jp/

Qプロシージャの引数の取り得る値がIntegerとDouble、両方ある

プロシージャの引数の取り得る値がIntegerとDouble、両方ある場合、

プロシージャの引数の型を、どう宣言しておけば良いのでしょうか。
型によって条件分岐し、それぞれの型に適したプロシージャを作り分けておくなんてことはないですよね?苦笑

If VarType(var) = vbInteger then
  Call FuncInteger(VarInt)
ElseIf VarType(var) = vbDouble then
  Call FuncDouble(VarDbl)
End If

FuncInteger(VarInt)と、FuncDouble(VarDbl)は、
引数の型が違うだけで、内容は同じ。

初歩的な質問で恐縮ですが、何卒宜しくお願い致します。

Aベストアンサー

>プロシージャの引数の取り得る値がIntegerとDouble、両方ある場合、
基本的には、一番、大きなデータ型(Double型やLong型)のデータ型で引数をあてます。

数値判定をして、
>  Call FuncDouble(VarDbl)

で送ります。

関数プロシージャやサブ・プロシージャの場合は、FuncDouble(ByVal arg As Double) とします。
あえてデータ型を変数に含めるなら、dblVar という書き方がよいでしょう。

Excel VBAでは、対ワークシート用で、本格的に作る場合は、Variant 型で受けるように作りますが、セルの値は、数字の場合と文字とエラーですから、プログラム内で分岐して、Double 型かLong型で扱います。場合によっては、Currency 型にしますが、Integer 型での扱いはしません。中級レベルぐらいまでは、そのような面倒なコードでは長くなりますし、プライベートで使うことが多いので、最初から決め打ちしてしまいますので、Variant型にするようなことはないはずです。分かっていてVariant 型にするのと、分からずにVariant 型にするのでは、雲泥の差があります。

一連の質問の様子からすると、今は、あまり細かいことにこだわらないほうが良いような気がします。

>プロシージャの引数の取り得る値がIntegerとDouble、両方ある場合、
基本的には、一番、大きなデータ型(Double型やLong型)のデータ型で引数をあてます。

数値判定をして、
>  Call FuncDouble(VarDbl)

で送ります。

関数プロシージャやサブ・プロシージャの場合は、FuncDouble(ByVal arg As Double) とします。
あえてデータ型を変数に含めるなら、dblVar という書き方がよいでしょう。

Excel VBAでは、対ワークシート用で、本格的に作る場合は、Variant 型で受けるように作りますが、セルの値は、数字の...続きを読む

QGPIBとPCIインターフェイスについて

装置の周辺機器の制御のために装置間のインターフェイスを作成しなければなりません。
自作装置はPCI、市販装置はGPIBで制御するのですが、
PCIとGPIB自体よくわかっていません。
インターフェイス・PCI・GPIBについて、どのようなものか、またどのように考えて理解したらよいかなど、教えていただけないでしょうか?

素人なもので質問が至らないかもしれませんが、よろしくお願いいたします。

Aベストアンサー

まあ理由はわかりましたけど

>その働きや使い方の違いが分からず
インターフェースカードに添付されているマニュアルを読む
としか言いようが無いですね。

ドライバーがあってPCIカードを制御していて
ドライバーに対してコマンドを投げればレスポンスが帰ってくる
と思うけど、型番も解らないPCIカードでは、回答は「マニュアルを読む」しかないです。

自作装置に関してはまったく内容はわかりません。

GP-IBに関してはGP-IBを経由して主に計測器とGP-IBというパラレルIOで通信をするものです。
通信コマンドを出して、アンサーデータが帰ってくるものです。
カードにはGP-IBのコマンドリファレンスが添付されているはず。
たとえば
http://cp.literature.agilent.com/litweb/pdf/04396-97054.pdf

QMicroSoft BasicのDim文とVisualBasicのDim文の違い

私が20年前にMicroSoft Basicを使っていたときは、DIM文はDIMENSIONの略で配列型変数の宣言に使っていました。

最近VisualBasicの勉強を始めたのですが、変数の宣言はすべてDim文になっており、昔のMS BasicのDim文と意味合いが変わっているのに驚いています。

ここで質問させてください。
・なぜ配列を意味するDimension文が変数の宣言なのか?
・どのバージョンのBasicからDim文の意味が変わったのか?

私が使用していたのはNEC N-Basic,N-88Basic,N-98Basicです。

Aベストアンサー

VISUAL BASIC のDimは ディメンジョンの略です。
私の経験ではVB2.0時代からありました。

配列0を考えた場合変数とおなじであるからだとおもいます

QGPIBとRS232Cの違いについて

GPIBとRS-232Cの違い、特徴について教えて下さい。いままでは、研究室でずっとGPIBで計測、制御していたのですが、結構遅いという話を聞いたことがあるくらいで、なぜこれを使っているのかという根本的なところが全く理解できていませんでした。また、GPIBの場合にはPCに専用のボードを挿す必要がありましたが、RS-232Cの場合はどうすればよいのでしょうか。非常に基礎的な質問ですいません。よろしくお願いします。

Aベストアンサー

計測装置でGPIBが使われる理由ですが、外部装置も多種多様になり”同時に複数のマシンをコントロールする場合にはどうしてもGPIBになってしまう”ってのが、主な理由なんでしょうか?
アドレスさえ割り当ててしまえばデイジーチェーンでいけますから・・・。
当方でも両方の環境が存在しますが、RS232C-WIN PCで制御情報の監視なんぞするときがあります。
お使いの機器によりますが、当方では232C25ピン-9ピンケーブルを使用してシリアルポートに入れています。
USB-232C変換プラグなんてのも売っていたりします。
簡単な制御でしたら、参考URLを参照願います。

参考URL:http://www.mescorp.co.jp/main/products/cctwin/index.html

QExcel VBAでグラフ作成。A,C列をx値, B,D列をy値にした複数プロット

ExcelのVBAでグラフをChartType = xlXYScatterLinesでグラフを作っています。仮に各列10行でAからF列までデータがあるとします。
Set chartObj = ActiveSheet.ChartObjects.Add(170, 170, 280, 170)
With chartObj.Chart
.ChartType = xlXYScatterLines
.SetSourceData Worksheets(1).Range("A1:F10"), _
PlotBy:=xlColumns
.HasLegend = False
End With

上記のようにしてしまうと、x値がA1:A10で、y値がB1:B10,C1:C10・・・・のプロットが5本作成されてしまいます。

以下のようにするにはどうすればよろしいでしょうか。
第一のプロットはx値をA1:A10, y値をB1:B10としてグラフを作成します。次にこのグラフにx値をC1:C10, y値をD1:D10とした第二のプロットを追加、同様に第三はx値をE1:E10, y値をF1:F10としてプロットを追加したグラフを作成したいのですが、このようなグラフはVBAで作成可能でしょうか。

本番のグラフは行数と列数はいろいろな場合があるので、行数と列数のパラメータに任意の値を代入し、Forループで様々な形態に対応できるものを作りたいと考えています。

ExcelのVBAでグラフをChartType = xlXYScatterLinesでグラフを作っています。仮に各列10行でAからF列までデータがあるとします。
Set chartObj = ActiveSheet.ChartObjects.Add(170, 170, 280, 170)
With chartObj.Chart
.ChartType = xlXYScatterLines
.SetSourceData Worksheets(1).Range("A1:F10"), _
PlotBy:=xlColumns
.HasLegend = False
End With

上記のようにしてしまうと、x値がA1:A10で、y値がB1:B10,C1:C10・・・・のプロットが5本作成されてしまいます。

以下のようにするにはどうすれ...続きを読む

Aベストアンサー

Dim chartObj As ChartObject
Dim r As Range
Dim i As Long

Set chartObj = ActiveSheet.ChartObjects.Add(170, 170, 280, 170)
Set r = Worksheets(1).Range("A1:F10")
With chartObj.Chart
  .ChartType = xlXYScatterLines
  .HasLegend = False
  For i = 1 To 5 Step 2
    With .SeriesCollection.NewSeries
      .XValues = r.Columns(i)
      .Values = r.Columns(i + 1)
    End With
  Next
End With

Set r = Nothing
Set chartObj = Nothing

...こんな感じ。
普通に手作業で作成するものをマクロ記録すればヒントになるでしょう。
後から系列を追加すればいいわけです。

>本番のグラフは行数と列数はいろいろな場合があるので...
...に対応させる一例としては以下。

Const MN = 1 'データ開始行
Const MX = 10 'データ個数
Dim chartObj As ChartObject
Dim x, y
Dim z As Long
Dim i As Long

x = VBA.Array(1, 3, 5) 'x値の列
y = VBA.Array(2, 4, 6) 'y値の列
Set chartObj = ActiveSheet.ChartObjects.Add(170, 170, 280, 170)
With chartObj.Chart
  .ChartType = xlXYScatterLines
  .HasLegend = False
  For i = 0 To UBound(x)
    With .SeriesCollection.NewSeries
      .XValues = Cells(MN, x(i)).Resize(MX)
      .Values = Cells(MN, y(i)).Resize(MX)
    End With
  Next
End With

Set chartObj = Nothing

Dim chartObj As ChartObject
Dim r As Range
Dim i As Long

Set chartObj = ActiveSheet.ChartObjects.Add(170, 170, 280, 170)
Set r = Worksheets(1).Range("A1:F10")
With chartObj.Chart
  .ChartType = xlXYScatterLines
  .HasLegend = False
  For i = 1 To 5 Step 2
    With .SeriesCollection.NewSeries
      .XValues = r.Columns(i)
      .Values = r.Columns(i + 1)
    End With
  Next
End With

Set r = Nothing
Set chartObj = Nothing

.....続きを読む


人気Q&Aランキング

おすすめ情報