• 締切済み

Visual Basic 2005でRS-232Cを用いて機器を制御する際のエラーについて

現在,ディジタルマルチメータを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) '直流電圧を測定(エラーが出る) 原因などが分かれば,教えてください. よろしくお願いします.

みんなの回答

回答No.3

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

R_Nakao
質問者

補足

Write()を使って命令を送信するには, SerialPort.Write("MEAS:VOLT:DC? 10V,0.003V" & vbCrLf) でよろしいのでしょうか?また,NewLineでの指定は SerialPort.NewLine = vbCrLf でよろしいですか? この設定で間違いが無いのであれば,これでもエラーが出るため,別の原因ではないかと思うのですが…

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

WriteLineでやってるなら vbCrLfを付加しなくてもいいのではないでしょうか 余分に CRLFが出力されているため マルチメータがエラーになってるとか …

R_Nakao
質問者

補足

もし,CrLfを余分に出力しているためエラーが出るのだとすると,最初のマルチメータをリモートにする時にエラーが出ないのはなぜでしょうか? リモートにする命令,電圧測定をさせる命令からそれぞれvbCrLfを削除して試してみましたが,やはり同じタイミングでエラーが出るようです.

回答No.1

.StopBits = StopBits.One 多分、これが足りないのでは?

R_Nakao
質問者

補足

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

関連するQ&A