
VBの5.0を使っています
RS232Cケーブルで計測器の制御・情報取得を目指していますが上手くいきません
このサイト(http://spectrum123.at.infoseek.co.jp/vb/vb_5/vb_ …)
を参考にしています
現状では実行すると制御機器が「Remote Mode」を表示するので何らかの信号が出ていることは間違いないのですが
計測器の説明書にしたがってコマンドを送信してもリアクションがありません
どうか、よろしくお願いします
No.4ベストアンサー
- 回答日時:
ハイパターミナルで通信するのであれば、ケーブルはほぼ問題がないと思います。
少し気になる点があるので、以下に述べますので、できたら答えて下さい。
(1) MSComm1.Output = ":SENS:SERNR?" & vbCr
どうして vbCr になっているのですか?
vbCrLf では駄目なのですか?
ハイパターミナルでは、終端文字はvbCrLfだったような気がするが?
(2) テキスト受信になっているので、本来なら問題のないはずだが、
念の為に以下の様に設定しても駄目か確認して下さい。
MSComm1.InputLen = 1
そんな事はないとおもうが、MSComm1.RThreshold = 1 になっているので
1文字受信するごとに割り込みイベントが発生するが、受信モードがテキスト
になっていると、変にOSの方で、よみ取れない時が過去にあったような気
がする。(たとえばCRLFがきないとよみとれないとか、
ある程度バファーに溜まらないと読み出せないとか)
MSComm1.InputLen = 1 にすると、MSComm1.Input は1文字でも強制的に
読み込む事が出来る様にするプロパティなので、一度設定して下さい。
(3) 勿論、記載されていないが、通信速度、パリティ、データビット長、ストップビット長
は機器とあっているのでしょうね。
(4) #1の回答でも述べた様に、MSComm1.Output = ":SENS:SERNR?" & vbCr
を実行した後、MSComm1.OutBufferCount の値はゼロになっていますか?
その当たりは確認されてのでしょうか?
(5) MSComm1.Output = ":SENS:SERNR?" 実行した後に、MSComm1_OnComm()の
イベントは発生するのでしょうか?。その当たりが詳しく書いていないですが。
全く、イベントは発生しないのですか?。
なにか手がかりを書いてください。
(6) 私の過去の顧客で
ハイパーターミナルでは受信するのに、アプリケーションででは受信しないことが
ありました。
ハイパーターミナルとコミュニケーション (MSComm) コントロールの違いはどこかと
いいますと、
ハイパーターミナルでCOMポートをオープンした時は、無条件でRTS信号がONになるが、
MSComm1.PortOpen でオープンした時は、RTS信号がOffになっている事です。
MSComm1.RTSEnable=true にすることで、解決した事があります。
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.RTSEnable=true <==追加されたらどうです。
MSComm1.RTSEnable=true
を追加するとコマンドを受け付けてくれました
リアクションもちゃんと帰ってきます
他の機械(電圧計)ではRTS信号がなくても動いていたので
そのままにしていましたがこちらでは必要だった様です
問題は解決しました
ありがとうございました
No.3
- 回答日時:
本当にそのケーブルと通信条件で通信出来ていますか?
OSがVISTAでなければ、アクセサリのハイパーターミナルを使って
正しく通信できることを確認したほうが良いです。
この回答への補足
確認したところハイパーターミナルに
*IDN?
THORLABS,PM30,M00228560,1.4 (Jan 03 2006)
:POWER?
2.152784e-07
といった風にリアクションしたので接続に問題はないと思います
No.2
- 回答日時:
#1の回答者です。
補足です。
相手の機器によって、ストレートケーブル、クロスケーブルと
使い分けしないといかないので、その当たりもどうなっている
のですか。
とりあえず、質問の情報が少なすぎます。単に通信できないでは
どう答えていいか迷います。もうすこし、詳しく述べて下さい。
出来たら、ソース、更に相手機器のケーブル結線図、通信手順の
情報があれば、もう少し具体的に述べる事ができます。
この回答への補足
ケーブルについては説明書からクロスケーブルだと確認しました
ちなみにケーブルは以下のようになっています
2RXD←------3TXD
3TXD------→2RXD
7RFR------→8CTS
8CTS←------7RFR
5GND--------5GND
4DTR------→1RLSD
6DSR
1RLSD←----4DTR
6DSR
9RI 9RI
コードは以下のように
Private Sub Form_Load()
' 表示文字の初期設定
Text1.Text = "コマンドを入力"
Text2.Text = ""
Label1.Caption = "送信文字"
Label2.Caption = "受信文字"
'(1)Loadイベントプロシージャ
'(2)テキストボックス1の文字設定
' テキストボックス2の文字設定
'(3)ラベル1の表示文字設定
' ラベル2の表示文字設定
' ラベル3の表示文字設定
Label3.Caption = "簡易通信テストプログラム MSComm"
Command1.Caption = "通信テスト開始"
' MSCommコントロールの初期設定
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
End Sub
'(4)コマンドボタンの表示文字設定
'(5)通信ポートCOM1を指定
'(6)通信条件設定
'(7)1バイト受信毎にOnCommイベント発生
' 送信バッファ空でOnCommイベント発生
Private Sub Command1_Click()
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
Text2.Text = ""
MSComm1.Output = ":SENS:SERNR?" & vbCr
End Sub
'(8)Command1のクリックイベントプロシージャ
'(9)シリアルポートのオープン
'(10)テキストボックス2の文字をクリア
'(11)データの送信 入力データ+リターン符号の付加
Private Sub MSComm1_OnComm()
Dim Buffer As Variant
Select Case MSComm1.CommEvent
Case comEvReceive
Buffer = MSComm1.Input
Text2.Text = Text2.Text & Buffer
'(12)送受信のOnCommイベント
'(13)受信バッファの変数宣言
'(14)CommEventプロパティに対する処理
'(15)受信データ有り
'(16)受信データをバッファに格納
'(17)受信データを順次表示する
Case comEvSend
Case comEvCTS
Case comEvDSR
Case comEvCD
Case comEvRing
Case comEvEOF '(18)他の通信イベントでは何もしない
Case comEventBreak
MsgBox "中断信号を受信", vbCritical
Case comEventCTSTO
MsgBox "CTSタイムアウト", vbCritical
Case comEventDSRTO
MsgBox "DSRタイムアウト", vbCritical
Case comEventFrame
MsgBox "フレーム エラー", vbCritical
Case comEventOverrun
MsgBox "ポート オーバーラン", vbCritical
Case comEventCDTO
MsgBox "CDタイムアウト", vbCritical
Case comEventRxOver
'(19)警告メッセージ アイコンを表示
MsgBox "受信バッファ オーバーフロー", vbCritical
Case comEventRxParity
MsgBox "パリティ エラー", vbCritical
Case comEventTxFull
MsgBox "送信バッファがいっぱい", vbCritical
Case comEventDCB
MsgBox "予期しないDCBエラー", vbCritical
Case Else
MsgBox "その他の通信エラー", vbCritical
End Select
End Sub
Private Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
End Sub
No.1
- 回答日時:
通常は手順通りにしておればいけるはずです。
チェックする項目はすべてチェックされたのでしょうか。
通信速度、パリティ、データビット長、ストップビット長
は正しく相手機器に合わしたのでしょううか?
その当たりが詳しく質問内容に記載されていないので、
どうされたのですか?。
ケーブルの結線状況はどうなのですか?。
機器によっては、RTS/CTS信号がないのがあります。
その場合、機器側からCTS信号が出ていない事があります。
もし、CTS信号が相手機器から出ていないと、パソコンから
データが送出出来ません。
この場合、RTSとCTSを結線するか、パソコンの
MSComm1.RTSEnable=true にするなどします。
MSComm1.CommPort のポート番号は確認しましたか?。
パソコンにシリアルポートがひとつしかない場合は、
システムのデバイスマネージャのプロパティで確認した
ポート番号を設定して下さい。
それでも行かない場合は、イベントプロシージャ MSComm1_OnComm()
内で、コマンド送信をした時、エラーがでてないか確認します。
コマンド送信後に、1秒位後に、MSComm1.OutBufferCount の値は
ゼロになっていますか?。これがゼロになっていないと、なんらかの
原因で相手側にコマンドが伝わっていないと思います。
この遅れなかった原因は、ケーブルの結線(CTS信号がONにならない)に問題があるか、
MSComm1.CommPortのポート番号が間違っている可能性があります。
この場合、通信速度、パリティ、データビット長、ストップビット長の設定が間違っていて
も、間違ってまた送信されるので、関係がないです。
DSR信号がOFFの場合も送出しないので、この場合、DSR信号とDTR信号を結線します。
上の確認をしてコマンドが送れているにも関わらず、相手機器からデータが送られてきない
場合、通信速度、パリティ、データビット長、ストップビット長の設定が間違っていて、
相手にコマンドが正しく認識されていない可能性があります。
また、RTS信号が相手に伝わっていない可能性があります。MSComm1.RTSEnable=true に
するなどして確認して下さい。
相手からデータを受信すると、イベントプロシージャ MSComm1_OnComm() が発生するので
その中で、MSComm1.InBufferCount の値が1以上になっているか確認します。
これが1以上にならないと、データを受信していない事になります。
以上をみても原因が追求できない時は、ラインモニタを間に入れて確認するのが
一番早いです。
また、ソフト的なラインモニタもありますのでそれをパソコンにインストールされて、
送受信状況を確認して下さい。
http://www.vector.co.jp/soft/winnt/hardware/se36 … でラインモニタ
は手にはいります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(開発・運用・管理) おんどとりWebStorage APIから温度情報を取得し表示したい 2 2023/08/03 09:53
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- Visual Basic(VBA) VBでExcelの表形式の様なデザインを作りDBと連携させる。 4 2023/02/28 11:39
- Visual Basic(VBA) VBプロジェクトでのフォルダ構成について 1 2023/07/22 03:49
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- 物理学 黄色マーカVbと書いてあるのですがVaの間違いですかね? また左の項ですと、積分範囲∫(r1→a)で 1 2023/06/21 15:29
- 世界情勢 ウクライナへの支援物資で必要な物は? 3 2022/03/27 18:34
- UNIX・Linux Zabbix監視エージェントをインストールしてもデータを収集できずアクティブにならない 1 2023/02/26 20:25
- 物理学 Va=1/4πε × (q1/a + q2/b + q3/c) Vc=1/4πε × (q1+q2+ 2 2023/04/16 14:08
- Wi-Fi・無線LAN ホームゲートウェイと無線ルーター間の接続用に「LANケーブルの買い換え」を検討しています。 8 2022/04/09 11:33
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
SerialPortのDataReceivedイベ...
-
「スイッチングハブのバッファ...
-
UDP処理のエラーについて
-
C#で通信処理。応答がない場合...
-
WriteFile()でのデータ送信がで...
-
TCPでの非同期型select関数につ...
-
シリアルポート通信
-
winsockでソケット通信の開発を...
-
mscommの受信バッファ異常について
-
Macターミナルで実行中のプログ...
-
バックグラウンドのプロセスの...
-
VBSの処理中一旦処理を止めて再...
-
フレームワーク「4.8.1」で、[S...
-
ソケットのクローズについて
-
VB.NETでMessageBoxを表示した...
-
非表示になったエクセルは?
-
C言語で途中までしか、プログラ...
-
レジスタマップって何ですか?
-
C言語で、メモリを解放しないで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
「スイッチングハブのバッファ...
-
winsockでソケット通信の開発を...
-
シリアル通信の出力バッファと...
-
WriteFile()でのデータ送信がで...
-
Linuxでのシリアル通信について...
-
WinsockAPIのrecvfromの受信デ...
-
socket: recvはいつ,どれだけ...
-
SerialPortのDataReceivedイベ...
-
ClearCommError呼び出し時のCE_...
-
TCPでの非同期型select関数につ...
-
シリアルポート通信
-
シリアル通信 大きいサイズの...
-
winsockの動作について。
-
ソケット通信内 read関数について
-
COMポートの同時オープン同時読...
-
SocketのSend関数でのCLOSEの検...
-
waveIn、waveOutでの音声録音・...
-
write関数でEAGAINのエラー発生...
-
rs232cでの受信データ(mscomm)...
おすすめ情報