プロが教えるわが家の防犯対策術!

現在,ディジタルマルチメータをPCで制御するため,PCとディジタルマルチメータをRS-232Cケーブルで接続し,Visual Basic 2005を用いて制御しようとプログラムを作成しています.
以前は,Visual Basic 6.0で制御していたのですが,今後の為を考え,2005へ移行することにしました.

そこで,VB6のプログラムと同様の設定を用いて,同じ命令をマルチメータ側に送信しようとするのですが,マルチメータ側で命令を受信した後に,マルチメータがエラーを出してしまいます.
全ての命令に対してエラーを出すのではなく,マルチメータ側から返信を伴う命令に対してのみエラーが出るようです.

環境は,PC:Windows XP (Home),マルチメータ:Agilent 34401Aです.
以下がソースの一部です.

[VB6]
With SerialPort
.CommPort = 4
.Settings = "9600,n,8,1"
.Handshaking = comNone
.RThreshold = 1
.SThreshold = 1
.InputLen = 0
.PortOpen = True
End With

SerialPort.Output = ":SYST:REM" & vbCrLf 'マルチメータをリモートにする
SerialPort.Output = "MEAS:VOLT:DC? 10V,0.003V" & vbCrLf '直流電圧を測定


[VB2005]
With SerialPort
.PortName = "COM4"
.BaudRate = 9600
.DataBits = 8
.Parity = IO.Ports.Parity.None
.Handshake = IO.Ports.Handshake.None
.Open()
End With

SerialPort.WriteLine("SYST:REM" & vbCrLf) 'マルチメータをリモートにする(エラーは出ない)
SerialPort.WriteLine("MEAS:VOLT:DC? 10V, 0.003V" & vbCrLf) '直流電圧を測定(エラーが出る)

原因などが分かれば,教えてください.
よろしくお願いします.

A 回答 (3件)

#2の方が書いているように、


WriteLine()は、自動的にデリミタをつけます。
デリミタはSerialPort.NewLineで指定し、デフォルトはvbLfだったと思います。(今.NETの環境が無いので自信無し)
送信時にvbCrLfを付加するなら、Write()を使うと良いです。

この回答への補足

Write()を使って命令を送信するには,

SerialPort.Write("MEAS:VOLT:DC? 10V,0.003V" & vbCrLf)

でよろしいのでしょうか?また,NewLineでの指定は

SerialPort.NewLine = vbCrLf

でよろしいですか?
この設定で間違いが無いのであれば,これでもエラーが出るため,別の原因ではないかと思うのですが…

補足日時:2007/10/08 12:02
    • good
    • 0

WriteLineでやってるなら vbCrLfを付加しなくてもいいのではないでしょうか


余分に CRLFが出力されているため マルチメータがエラーになってるとか …

この回答への補足

もし,CrLfを余分に出力しているためエラーが出るのだとすると,最初のマルチメータをリモートにする時にエラーが出ないのはなぜでしょうか?

リモートにする命令,電圧測定をさせる命令からそれぞれvbCrLfを削除して試してみましたが,やはり同じタイミングでエラーが出るようです.

補足日時:2007/10/08 11:57
    • good
    • 0

.StopBits = StopBits.One



多分、これが足りないのでは?

この回答への補足

すみません.うっかり書き損じたようです.
ですが,他のVB2005の同じようなプログラムではストップビットの設定も行っていますが,こちらの方もエラーが出るようです.
他に原因は考えられないのでしょうか…?

補足日時:2007/10/08 02:20
    • good
    • 0

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