• ベストアンサー

VisuaBasic SerialPort

SerialPortを使用してRS232Cアプリケーション(9600bpsフロー制御無し)を作成しました。 ハードをUSB接続しては送信受信共に問題無く動作しています。 ハードをUSB未接続で送信データを入力して送信すると大抵の場合にフリーズします。 フリーズしない場合でも2回目を送信すると確実にフリーズします。 フリーズの原因やその対策方法をご存知でしたら教えて頂きたく。 よろしくお願い致します。 (Windows10、Microsoft Visual Basic 2010 Express を使用)

noname#230818
noname#230818

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

  • ベストアンサー
  • lumiheart
  • ベストアンサー率48% (1102/2295)
回答No.1

>ハードをUSB未接続で送信データを入力して送信すると大抵の場合にフリーズします。 このハードとは「USB-シリアル変換器」の事ですよね? http://buffalo.jp/product/cable/usb/bsusrc06/ みたいな そしてパソコンに「USB-シリアル変換器」は挿してあるんですよね? フリーズするのは「USB-シリアル変換器」を挿してドライバが認識して RS232Cクロスケーブルを外してある場合です http://www.data-link.co.jp/faq/RS232C.htm フリーズするのは仕様です <正常動作で待機してるダケ (フリーズしてると思い込んでるだけで、実際にはフリーズしてません) RS232Cポート http://www.nahitech.com/nahitafu/mame/mame5/rs232c.html https://ja.wikipedia.org/wiki/RS-232 ピン番号6、DSR データ・セット・レディ ピン番号8、CTS 送信可能 このCTSがOFFだと送信できません <待機状態になる CTSがONすると送信開始します これは送信中でも有効です 送信中にCTSがOFFすると送信を中断して待機します その後CTSがONすると送信を再開します この待機状態を「フリーズ」と思い込んでるダケでしょう

noname#230818
質問者

お礼

USBシリアル変換器は外してある状態です。 アプリだけを動作させた時の話です。 フリーズとの表現は不適切でした。 アプリのフリーズと思っていましたが待機中だったのですね。 ありがとうございました。

関連するQ&A

  • RS-232Cのハードウェアフロー制御について

    「一般的な」パソコンで、RS-232Cのハードウェアフロー制御を行う場合、使用されるフロー制御信号は何になるか、ご存知の方教えていただけないでしょうか。 (どう接続するかはともかく。。。) RTS、CTS、DTR、DSR、DCD、RI全て使用するのでしょうか。 資料等調べるのにも、機器によりバラバラだと思うので何を調べてよいかもわからない状態です。 宜しくお願い致します。

  • シリアル通信(タブレット、シーケンサー)

    現在、WindowsXP + VB6 + MSComm <ー> FXn2-16MR(RS232Cユニット)を シリアル通信で制御しています。これをWindows8.1(タブレット) + VB2013で全面的に 書き換えを行っています。テスト用のパソコンとは何の問題間無く通信は通りますが、 対シーケンサーだと送信はしているようだが、受信が全くできない状態です。 制御パラメータは、SerialPort1.Handshake=None, DtrEnable=True, RtsEnable=True 送信時のプロトコルは、<ENQ> + データ(ASCコード) 受信時のプロトコルは、<STX> + データ(ASCコード)+ <ETX> VB6は、この設定で動作しています。 VB2013では、制御パラメータは同じし送受信では普通に SerialPort1.Write、SerialPort1.ReadLineを使っています。 宜しくお願いします。

  • PCと機器のシリアル通信について

    現在、PCとある機器でシリアル通信を行うための プログラムを作成しています。 開発環境はVisual C++ 2008 Express Editionで、 serialportクラスを使って作成しています。 その機器のマニュアルには、 PCからENQを送信する前に機器からPCに対して DRチェック(通信可チェック) という記述がありました。 これはRS232Cケーブルをつなげば、 自動でやってくれるものなのでしょうか? それともPC、あるいは機器側で何かしなければならないのでしょうか? わかる方、ご教授お願いします。

  • USB2.0ポートが4つあっても、合計最大転送速度は480bpsですか

    USB2.0ポートが4つあっても、合計最大転送速度は480bpsですか? 私のPCにはUSB2.0が4つ標準で付いています。制御するプロセッサというかコントローラーは1つです。 仮に、転送速度480bpsの機器があったとします。それを各ポートに1つ、合計4つ接続したとします。 その場合、合計最大転送速度は480bpsですか? それとも1,920bpsですか? その転送速度になる理由も教えて下さい。 半二重通信だからとか480bpsは理論値だとか、細かい事は無しで、単純な理屈でお願いします。

  • Visual BasicのAPIビューワについて

    Microsoft Visual Basic 2008 Express Editionを使って、API関数を使用し始めた初心者です。  Microsoft Visual Basicには、APIビューワがあると聞きましたが、私の使っているMicrosoft Visual Basic 2008 Express Editionにはどこを探しても、アドインやそれらしいものは見つかりません。Microsoft Visual Basic 2008 Express EditionにはAPIビューワが実装されていないのでしょうか?  よろしくお願いします。

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

  • 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通信テストツールでは反応あるのですが。。 初歩的ですみませんが、よろしくお願いします。

  • VB2005でシリアル通信

    QNo.2434041で質問した者です。 ご回答いただきました内容に従って通信を試みましたが、うまく行きません。 PCとある制御ボードを接続し、 「接続」すなわち、call SerialPort1.Open()を行なうとボード上のLEDが点灯し、 「切断」すなわち、call SerialPort1.Close()を行なうとボード上のLEDが消灯するので、 一応接続はできているようなのです。 (SerialPortコントロールを追加して、プロパティのDtrEnableとRtsEnableをTrueにしています。) しかし、SerialPort1.WriteLine(TextBox2.Text) を実行してもボードが思った動きをしてくれません。 どうも信号が出ていないような気がしています。 どうしてなのでしょうか? MSCommコントロールを使用しなければならないのでしょうか?

  • USB機器をRS232Cポートに接続して使用する為のコンバーターを探し

    USB機器をRS232Cポートに接続して使用する為のコンバーターを探しています。 http://www.sanwa.co.jp/product/syohin.asp?code=USB-CVRS9 上記URLのように、RS232C接続の機器をUSBポートに接続する為の機器はすぐに見つかるのですが、逆の機器が見つかりません。 PCのRS232Cポートにシリアルケーブルを接続し、コンバータ等を介してUSB機器を制御したいと考えています。 そういった機器をご存知の方いらっしゃいましたらご教示願います。

  • teratermではシリアル通信出来るのですが・・

    現在アームロボットをPCからシリアルで送って制御するプログラムを作りたいと思っております。 現在Teratermからコマンドを送ってアームロボットが動く事は確認出来ております。 ただ、そこからC#にてプログラムを作成して動かそうとするとどうしてもコマンドを受け付けてくれません。 Teratermの設定は  ボーレート9600bps  データ長8bit  パリティnone  ストップビット 1bit  フロー制御 non です。 これで接続して「NT」と打ってリターンを押すと ロボットが原点復帰動作をします。 一方C#では  SerialPort port = new System.IO.Ports.SerialPort("COM2",9600,Parity.None,8,StopBits.One);  port.Open();  port.Write("NT");  port.Close();  port.Dispose(); と記述して実行しますが動きません。 改行コードが怪しいと思い、teratermで改行コードを CRからCR+LFに変更してみましたが問題なく動きます。 teraterm以外にもシリアル通信チェッカーv4.1.0 を試しましたが動きませんでした。 teratermは何か特別な仕様なのでしょうか? 何か見落としている設定項目ありますでしょうか? どうぞアドバイスよろしくお願い致します。

専門家に質問してみよう