VB2008にてRS232C通信をするソフトを作成

このQ&Aのポイント
  • VB2008を使用してRS232C通信をするソフトを作成しました。通信相手はボードで、アスキーコマンドを送信します。
  • 通信は問題なく動作しますが、1時間程度経つとソフトがフリーズする現象が発生します。
  • フリーズする原因は特定できず、ポートの開閉タイミングやUSB-232C変換ケーブルの問題などが考えられます。何かヒントがあれば教えてください。
回答を見る
  • ベストアンサー

VB2008にてRS232C通信をするソフトを作ってみました。

VB2008にてRS232C通信をするソフトを作ってみました。 通信する相手はボードで、ボードに対してコマンド(アスキー)を送信します。 送信した際に、ボードより回答は有るのですが特に受信の処理はしていません。 ノートPCなのでUSB-232C変換ケーブル(秋月電子の物)にて通信しております。 とりあえず通信は出来て、思った通りに動くのですが、1時間ほど経つとソフトがフリーズ する現象が起きます。 特に大量の通信をしている訳ではなく、3~4回ほど5文字位を送信しているだけです。 ソフトが立ち上がっている際は、常に通信ポート(例えばCOM3)は開いたままにして いる事に問題が有るのでしょうか? USB-232C変換ケーブルが悪いのでしょうか? それとも、ボードよりの返信がPCの何処かのバッファに溜まってしまうのでしょうか? フリーズする時は、特にボードに対して送信はしていないタイミングです。 1時間ほど通信したままにしてほったらかしにしている状態です。 これだけでは、解らないかも知れませんが、フリーズしてしまう要因で思い当たる事に 気づいた事が有りましたら何でも良いので、教えて下さい。 当方、この通信は初めてなもので、知らない事が多いかと思います。 ちなみにポートを閉じるタイミングはソフトを落としたときです。

質問者が選んだベストアンサー

  • ベストアンサー
  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.3

>初めは、Windwsが立ち上がり砂時計が消えて、ハードディスクのチカチカという初期動作の前に >USBを挿入していたら、アプリが良くフリーズしていました。 >Windwsが完全に立ち上がってからUSBを入れるように使用するようにお願いしました所、 ちょっと待った これは都度変換機を抜き差ししてるってことですか? (つけっぱなしじゃ駄目なのですか?) 今回違うと思いますが少なくても通信中に抜き差しするとアプリがロックします  接触不良で外れかかったため止まったという話も  あるかもしれません  VBよく知らないんですがオープンとかでエラー起こしても  突き進んでるような(この場合もロックするのではないかという気がします) また別のUSBポートにさした場合ポート番号が変化します PC設定やソフト以前にその変換機が安定して動作してるのか 自体を確認した方がいいような気もします (PC-PC間で1日ぐらい通信し続けてみるとか) なんとなくハード要因の気がします

J-Wave-M
質問者

補足

ご指摘有難うございます。 通信中に抜き差しは、しておりません。 私もUSB-RS232Cのケーブルが、ちょっと疑わしい気もします。 (ちょっと手元に無いので実験出来ないのですが) 確かに、アプリでポートを開いたままUSBを抜き差しするとおかしな事になります。 これは当然の結果でしょうが。 またお気づきの事が有りましたら教えて頂ければ幸いです。

その他の回答 (2)

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.2

>ソフトが立ち上がっている際は、常に通信ポート(例えばCOM3)は開いたままにして >いる事に問題が有るのでしょうか? いいえ  それが普通です その昔自分が通信のデータ送信するときだけポートオープン・クローズ 繰り返してデータが受け取れないとか騒いでいる人間を見ましたが プログラムを見て呆然としたことがあります >ボードよりの返信がPCの何処かのバッファに溜まってしまうのでしょうか? これはありますがオーバーランでデータが破壊されるだけでアプリが フリーズするとか言うことは無いはずです フリーズってどんな状況なんでしょうかね? 通信が止まるだけ?それともアプリがうんともすんとも言わなくなる? 通信でフロー制御してる場合バッファが一杯になると通信が止まりますが これはアプリのハングとは違います 状況が良く分かりませんが可能性という意味では 受信データ読み捨てて様子見ては?

J-Wave-M
質問者

補足

経緯を補足します。アプリがフリーズします。 初めは、Windwsが立ち上がり砂時計が消えて、ハードディスクのチカチカという初期動作の前に USBを挿入していたら、アプリが良くフリーズしていました。 (ユーザーがせっかちだったので) Windwsが完全に立ち上がってからUSBを入れるように使用するようにお願いしました所、 フリーズしなくなったとの事でした。 しかし、先日受けた報告で1時間ほどほったらかしにしておいたらフリーズしたとの事でした。 実は、状況を直接見たわけではなく、その使用者にも使い方に問題が有るのかも知れませんが、 私もこの様な通信のソフトは、初めてだった為おかしな所が有るのか??と思い、ご存知の方々に ご教授をお願いしました。 すいません。別の方への補足に簡略化しましたソースを記載しました。 気が付いた所が有りましたら教えて頂ければ幸いです。 ポートをオープンにしたままでもソフトがアプリがフリーズする事は無いんですね。 気になるのは、ポートをオープンしたままの際に、パソコンの電源の管理とかスクリーンセーバなどです。 一応、ざっくりは止めてきたはずなのですが、もしかしたらその設定が止められてないものが有るかもしれません。 こんな設定も、関係はしますでしょうか? 私の考えは、PCの設定が怪しいかと思っていたのですが・・・ アプリにも原因が有るかも・・・と見ていたのですが、見つけられずです。

回答No.1

この手の質問をなさる場合は、ソースコードをさらすことが鉄則です。 ソースを読まずに、どのようなアドバイスができると思いますか? RS-232C周りのプログラムだとそれほどたいした規模にならないのですから 適当なところにアップロードして取得できるようにしてください。

J-Wave-M
質問者

補足

'この命令はForm1のものですが、Form3のポートのコマンドを使ってます。まずはここでポートをオープンします。 Private Sub Form3_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Form3_Button.Click Dim Settei As String 'シリアルポートを設定。 Form3.SerialPort1.PortName = SerialPortComboBox.Text Form3.SerialPort1.BaudRate = SerialBpsComboBox.Text Form3.SerialPort1.Parity = IO.Ports.Parity.None Form3.SerialPort1.DataBits = SerialDataBitsComboBox.Text Form3.SerialPort1.StopBits= IO.Ports.StopBits.None ' RTSラインを有効にする Form3.SerialPort1.RtsEnable = True '送信タイムアウト Form3.SerialPort1.WriteTimeout = 3000 Try Form3.SerialPort1.Open() End Try 'シリアルポート送信データの文字エンコードをSJISに指定する。 Form3.SerialPort1.Encoding = System.Text.Encoding.GetEncoding(932) Settei = "AAA" 'いざ送信 Form3.SerialPort1.Write(Settei) '送信バッファが空になるまで待って、 While Form3.SerialPort1.BytesToWrite > 0 My.Application.DoEvents() End While Me.Close() 'Form1をクローズ End Sub ------------------------------------------------------------------- 'Form3の命令です。 Private Sub Button_Speed_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Speed.Click Dim Speed_B As String Speed_B = "S" 'いざ送信 SerialPort1.Write(Speed_B) '送信バッファが空になるまで待って、 While SerialPort1.BytesToWrite > 0 My.Application.DoEvents() End While End Sub ------------------------------------------------------------------- 後はソフトを閉じるときにポートをクローズするだけです。 それまではポートを開きっぱなしです。 命令は他にもあるのですが、すべて同じようにしております。 基本的には送りっぱなしです。 コマンドを送った後には、相手から何かしら返してきているのですが 特にその処理はしていません。 すいません。 下手なソースで。

関連するQ&A

  • USBからRS232Cに変換するケーブルを教えて…

    USBからRS232Cに変換するケーブルを教えて下さい。 最近のパソコンとマシニングセンターの RS232Cのポートをつなぎたいのです。 送信ソフトからMCにデータを送るためです。 USBからRS232Cに変換するケーブルで 通信において特にエラーがでなかったなど、  おすすめのやつがあったら教えて頂けないでしょうか? よろしければ、売っているとこなども教えて頂けると 助かります。  よろしくお願いします。

  • RS-232C

    パソコンからシリアル通信で制御したい装置が2台あります。どちらも特殊装置でパソコンから直接は接続できず、間に変換回路を自作します。 変換回路はそれぞれ違います。 両方の通信が重なることはなく、通信のタイミングはパソコン側で制御可能です。 この様な場合、パソコン側で拡張ボードを使い232Cのportを増やす方法が考えられますが、232Cの相手側(変換回路側)で二系統に分離することは可能でしょうか? 拡張I/Oボードは使いますので、分離信号を出力することは可能です。 どちらが良いか、また二系統に分けるICなど、ご存知の方、教えてください。

  • VBでRS232Cの制御について。

    通信のデータ長やパリティ、ポーレート等の設定を”SETTINGS”でおこない、ポートをオープンして外部機器にデータを送る際、ここでは、データをバイナリデータで送らなければなりません。 STX,アドレス,チェックサム,ETXの順にそれぞれアスキーコードで16進数に変換して送ってますが、うまく通信できません。 教えて頂けませんか。 素人でごめんなさい。 この部分のサンプルプログラムがあれば最高なんですが・・・。

  • WIN XP ハイパーターミナルでRS232C送信について 

    パソコンWIN XPからハイパーターミナルを使用してRs232C通信、送信相手はPLC(シーケンサ)を行おうと試みていますが、送信動作をすると”無効なメッセージ形式”と出て送信出来ません。 送信ファイルはメモ帳で作成しテキスト、ASCIIコード等色々な文字を記入して試みていますが、駄目です。 パソコンにはCOMポートが無いので、USBをシリアル変換ケーブルを使用して通信しています。 RS232Cの配線(クロス)、通信設定、COMポート選択に間違いが無いかも確認していますが、問題ないと思っています。 USBシリアル変換ケーブルが原因かとも思いますが、”無効なメッセージ形式”なので、送信するデータ形式に問題があるのではと考えていますが、正しくはどの様な形式のものをファイルの送信にすれば宜しいでしょうか。またファイルの送信設定で、色々なプロトコル選択があります。どれを選べば宜しいでしょうか。 通信ポートの設定は9600,N,8,1です。 ご回答、宜しくお願い致します。

  • RS232C通信の際、085アラームが出てPC-…

    RS232C通信の際、085アラームが出てPC-NCへ送信できなくなりました RS232C通信で、PC-NCへ送信する際に、アラーム(アラーム番号085)が出て通信で きません。 前日まで受信・送信共に問題無く通信していましたが、翌日から085アラームが出る ようになり、送信が全くできなくなりました。 *********************************************************************** NCフライス ファナック6M ケーブルは自作(知人に作ってもらった物) USB接続RATOC REX-USB60F 通信ソフトは竜の子さんのComnc2を使用しています。 通信速度 4800(ソフト、REX-USB60Fは4800に設定。パラメータ311番は10011001) ストップビット 2 送信バッファ 2 *********************************************************************** 【送信の場合】 NC側 … リード操作をしたらすぐに アラーム085がでる。 PC側 … <送信中> いつも4行目で止まっている。      データは全く送られていない。 *********************************************************************** 【受信の場合】 NC側 … 通信が終わった後にアラーム85がでる PC側 … 挿入 データは正常に受信できている *********************************************************************** パラメータの設定はよく分からないんですが、 先日まで問題無く通信できていたので、他に原因があるのでしょうか? 考えられる原因をアドバイスいただきたいです。 記載すべき情報で足りない項目があれば教えてください。よろしくお願いします。

  • RS-232Cのハードプロテクトが挿せない

    過去ログあさったのですが、適当なものを見つけられず・・・ 業務用ソフトになりますが、 BENTLEYの3D CADでマイクロステーションというものがありますが、 そのバージョンが古いのでハードウェアプロテクトキー(ライセンスキー)が、 RS-232C(25ピン)で、 新しいパソコン(DELL Dimension9200)にポートがなく挿せません。 市販のシリアルポート増設ボードは、 9ピンがほとんどみたいですが、 PCIスロットに挿せる増設ボードで、 (1)25ピンのもの (2)9ピンのもの+25→9ピン変換ケーブル (3)その他の回避策 でおすすめのものはないでしょうか。 ※USB変換という手は考えておりません。  (認識するか微妙、というかダメな気が・・・) よろしくお願いいたします。 ネットワークキーでもないので、 他の端末に挿す方法もとれません(ーー;)

  • USB-RS232C変換ケーブルが動作しない

    USB- RS232C変換ケーブルで”USB-CVRS9”というサンワサプライのケーブルをTOSHIBAの32bit版のノートPCでWindows Vista Home Premiumのものを接続しましたが、デバイスマネジャにCOMポートが出てくるのですが、実際にケーブルにRS-232Cの端末を接続しても9600bpsでのテキストデータが受信できません。 このUSB- RS232C変換ケーブルのドライバはこちらのサイトからダウンロードしています。 http://www.sanwa.co.jp/support/download/dl_driver_ichiran.asp?code=USB-CVRS9 Windows Vista(32bit版) のドライバファイルをインストールしています。 ダウンロード時に、このノートPCにインストールされているウイルスセキュリティが、このファイルをウイルス検知してしまい隔離してしまっていたので、ドライバインスト-ル時にウイルスセキュリティの”すべての機能を無効”を行ってからダンロードしてからは隔離はなくなったのですが、COMポートが表示されてもデータの受信ができていません。 ノートPCでRS-232C通信をするソフトを起動した際に端末に対してデータを送る動作があるのですが、その際にはこの変換ケーブルに付いているLEDが点滅動作するので、データはノートPCから端末に対して送信している感じがしますが、このソフトに端末からのでデータが受信しないようです。 どなたか他に解決方法などご存じの方いらっしゃいませんでしょうか? どうぞ、よろしくお願い致します。

  • VBで16進数をバイナリ変換しRS232通信

    VB CommunityでRS232C通信プログラムを作成しています。 OKWaveをみて、ポート接続などはできたのですが、 データ送信でつまづいてます。 16進数をバイナリ変換し送信したいのです。 その部分ですが、16進数で[11]をバイナリに変換して送信したい場合、 Dim command(0) As Byte command(0) = &H11 SerialPort1.Write(command, 0, 1) としても、16進数で[11]を送ったときの動作を行いません。。 VectorなどでのRS232通信テストツールでは反応あるのですが。。 初歩的ですみませんが、よろしくお願いします。

  • PCMCIAカードでRS232C通信

    古いマシニングセンターと最近のノートPCをRS232通信 したいのです。 USB変換でRS232C通信するよりもPCMCIAカードでRS232C 通信する方が安定すると聞きました。 機械側は25ピンのオス 指定された、ケーブルは9ピン25ピンのメスの ケーブルです。 これをノートPCと接続しRS232C通信するための、PCMCIAカード でお勧めのをご存知なら教えて頂けないでしょうか? お願いします。

  • RS232CとRS422の接続について

    シュナイダー製タッチパネルGP4000のCOM2ポート(RS422)と安川電機製PLC GL60のIF60通信カード(RS232C)を接続し、PLCの内容をタッチパネルに表示したいと考えています。タッチパネルのCOM1ポートは既に使用済。ケーブル距離は20m程度。 いろいろなRS232C-RS422変換コネクタなどが販売されていますが、RS422のケーブルは規格化されていない様で、どのようなケーブル・コネクタ・変換器を使用して接続すれば良いのかわからず困っています。 すみません、詳しい方、ご教授ください!

専門家に質問してみよう