• ベストアンサー

SerialPortで期待バイト数が送りきれない

C#(VS2005)でSerialPortクラスのWriteで4790byteを指定して一括で送りましたが相手に届いたのが2624byteしか送れませんでした。 通信条件 ボーレートは、19200 データ長は、8 パリティは、無 XON/OFFは、無 信号制御は、無 垂れ流し状態です。

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

  • ベストアンサー
  • okweb-goo
  • ベストアンサー率29% (283/952)
回答No.1

もっと詳しく状況を教えてくれなければ判断がつきませんが、たとえば、送信したいデータの途中になんらかの制御コードがあり、それが誤作動しているとか。

MAX_sugi
質問者

お礼

早速の回答ありがとうございます。 詳しく状況ですが あるファイルCSVをバイナリ化してバイト配列にします そのバイト配列は、4790byteです。 特に途中に制御コードがある訳でもありません。 受信側(ラインモニタ)で確認した所、最初と最後のデータは正しい 値(送信元と同じ)でした。 どうも途中で中抜けをしているようなんですけど・・・

関連するQ&A

  • VB.NET(2005)の"SerialPort" RTSラインを制御

    VB.NET(2005)の"SerialPort" RTSラインを制御したいです。 やりたい事は、「パソコンから通信相手の機器へデータを送信している間だけ、RTSをHIGHにする」ということです。データ送信完了と共に、RTS信号をLOWにしなくてはなりません。 SerialPortにあるRtsEnableをTrueにして、オシロで確認してみたのですが、RTS信号はHIGHに張り付いてしまっていて、全く動いていませんでした。 同じくDtrEnableをTrueにしても、同じでした。 Handshakeプロパティを"RequestToSend"に設定してみたのですが、これもまた同じ結果でした。 どなたかご存知の方がおられましたら、解決策をご教授いただければ幸いです。

  • 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は何か特別な仕様なのでしょうか? 何か見落としている設定項目ありますでしょうか? どうぞアドバイスよろしくお願い致します。

  • パリティビット有無での速度

    初めまして、現在私はLINUX PCで 開発環境QTを使用しプログラムを組んでいます。 今回シリアル通信の速度について疑問が生まれましたので質問させていただきました。 ボーレート値:230400bps データ長:8bit で通信を行っているのですが、 今回の仕様としまして10秒ごとに190011バイト送信するようなプログラムを組んでいます。 また190011バイトを受信するようなプログラムも作成しています ノンパリティ設定で そこで処理速度を見ていると、 送信側のプログラムで、最初のデータ送信開始から最後のデータ終了までの時間を見ると9300msでした 受信側は9400msでした。 次にパリティビット有の設定で、上記と同じ試験を行ったのですが、送信側の処理速度が9300ms 受信側は9400msでした。 質問ですが、パリティを付加すると今回の場合で行くと190011バイトを10秒ごと(一気に送信は到底無理なので分けて送信しています)に送信するので、パリティビットが付加されると、単純に190011ビット増えることになります。今回のボーレート値は230400bpsなので、パリティ有とパリティなしでは0.7秒も差があることが計算でわかりました。 しかし今回の値を見るとさほど時間が変化していないことがわかりました。 そのようなことがあるのかわかりません。理由があるのならばわかりたいと思い質問させていただきました。 どうかよろしくお願いします。

  • マイコンで電流・電圧制御のやり方

    マイコンで、シリアル通信で、他の機器を制御したいのですが、やりたいことを書きますと、 1、電圧(電流?)を制御して、モーターの回る速度を調節 2、ライトの光量の強弱の変化 on/offは、トランジスタを使ってできているのですが、上記のは、なんの部品をつければ可能でしょうか? 一応、on/offの信号を高速で変えて、モーターを遅くしたりはできているのですが、これだと強引で、寿命が縮みそうなので・・・

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

    現在、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を使っています。 宜しくお願いします。

  • VB2005でシリアル通信

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

  • 三菱MELDAS 60 のDNC運転について

    三菱MELDAS60のNC装置がついた庄田鉄工のNCをDNC運転させたいのですがうまく動いてくれません。 RS232Cシリアル通信にてデータを送っているのですが、後数行というところでPCからのデータが途絶えて最後まで加工ができません。NC装置に記憶させて動かすメモリー運転用のデータ転送では問題なく最後まで通信し最後まで送信できます。短い加工データならばメモリー運転でいいのですが複雑な(データ容量の大きな)物はDNCで動かすしかありません。 NC自体は90年代の物でシリアル通信でしかファイルのやり取りができません。 PCはWIN10でUSBからシリアルへの変換ケーブルを使って通信しております。 NC装置側の設定はメモリー運転用のデータ入力通信設定とDNC運転用の通信設定は共に同じ設定をしており問題はないように思います。三菱にも問い合わせましたが設定が同じならばそれで動くはずですとしか回答がありませんでした。どなたかわかる方いらっしゃいませんでしょうか? <通信設定値> 通信速度 2400bps ストップビット 2bit パリティ 有 evenパリティ 偶数 キャラクタ長 8bit データコード ASCII ハンドシェイク方式 DC制御(XON/OFF)

  • RS232C通信ポート(COM1)が開かない

    Windows2000をシステムとする、旧型 IBM Think Padを使って通信ポート(9ピン)に、RS232C クロスケーブルで 富士電機プロコン(シーケンサー)と接続し、ONLINEにしたいのですが、<通信ポートをオープンできません>というメッセージが表示され、接続されません。 それで、Windowsのデバイスマネイジャーで、パソコン側の通信ポート(COM1)のプロバティをみると、<このデバイスは正常に作動しています。>とあります。 富士電機のサポートセンターに状況を問い合わせた所、パソコン本体側にエラーと思われるとの回答でした。 復旧の仕方がわかりません。 どなたさまかご教示くだされたく、お願い申しあげます。 使用状態 パソコンの使用状況、ウィルスチェッカー:ESET Smart Security 4 インストール。インターネットは、ドコモFomaの データ通信をUSBに接続してアクセス。 RS232C通信ポートは、富士プロコンのみで使用しています。 その他設定  1.アプリケーションソフトの<通信ポート設定>     PCとのポート(P): COM 1    ポートの設定(M): ビット/秒(B) 19200   データビット(D): 8     パリティ(P): なし               ストップビット(S): 1    フロー制御(F): なし    2.ローダアダプタのディップSW設定 ⇒ 1,2,3,4,5,6 OFF 7,8 ON 即ち ☆パソコンローダモード     ☆データビット: 8   ☆パリティビット有無: 無           ☆パリティビット奇偶: 奇数  ☆ボーレート: 19200    

  • .NETのシリアルポートの送信で困っています

    環境はwindowsXP、C#、.NET Framework 2.0です。 rs232cを使ってデータを別のPCのアプリ(windowsXP、C)と送受信するプログラムを 作っています。 System.IO.Ports.SerialPort クラスを使用しており、 通常は問題なく送受信できます。でも、送信するデータを 10240バイト(10キロバイト)にすると受信側が4096バイトしか受信できません。 SerialPort.Write (Byte[10240], 0, 10240) で送信し、 WriteBufferSizeは1024×11に設定しています。(関係ないかも しれませんがReadBufferSizeも10240以上に設定 ) 送受信データを監視する別ツールで確認しても、送信側が4096しか 送れていないです。 他に設定を変更すべき所があるのでしょうか?要因が分からず 困っています。ご教授ください。

  • 資格試験の問題ではないのですがデータ表し方の問題です。

    基本情報の試験の問題とかではないのですが、どこのトピックスに質問していいか わからなかったのでとりあえずコンピューターの問題なのでここに質問させてもらいました。 (1)0から999までの値を取り扱うとき、最低でも何ビット必要ですか? また、最低何バイト必要ですか? (2)赤、黄色、緑、の信号をオンとオフだけで制御するには何ビット必要ですか? (3)3原色を3ビットで表したとき、何通りの色を作ることができますか? という問題なのですが、 (1)はビットからバイトに直すのはわかりますが その肝心のビットをどうやって出すのかわかりません。 (2)はどういう風にしていけばいいのかまったく検討がつかず、というか「オンとオフだけで制御する」という問題の意味がわかりません。 「オンとオフ」がビットに関係あるんですか??? (3)はRGBの色の事かなぁ~?ということぐらいしかわかりません。 どういう風にしたらいいのでしょうか?