• ベストアンサー

シリアル通信におけるバイトデータの送受信(VB.NET)

Visual Basic .NETで、WriteLine("テキスト")やReadLineを使えば、テキストデータは送受信できますが、バイトデータはどのようにすれば送受信できるのでしょうか?具体的なコードを知っている方がいたら教えて頂きたいです。

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

  • ベストアンサー
  • miyuyu
  • ベストアンサー率61% (30/49)
回答No.1

こんにちは http://msdn2.microsoft.com/ja-jp/library/ms143551(VS.80).aspx そこまでご存知でしたらあともうひと調べでしたね。

Rossana
質問者

お礼

回答ありがとうございます。URLを拝見させて頂きましたが、これでできそうな感じがしますね。 オフセットとあるのですが、どういう意味でしょうか。具体的な使用方法はどのようになるのでしょうか?サンプルコードなどありましたらお願いします。

関連するQ&A

  • シリアル通信でのバイナリデータの送受信方法

    visual studio 2008 c++ を用いて 0x00~0xFFの任意のバイトをシリアル通信で送受信するプログラムを書いています。 0x00(NUL)を含んだ文字列は、文字列処理関数では処理出来ないので、以下のようにプラグラムを書くと文字列の最後を示すのに NULL を使っている処理系なので、文字列として読み込みをしているため,NULLで止まってしまいます。 -------------------------------------------------------- 略 DWORD dwWritten; char sendBuf[32]={0}; sendBuf[0] = 0x02; //02 STX sendBuf[1] = 0x00; //00 長 sendBuf[2] = 0xC0; //C0 取得コマンド sendBuf[3] = 0x10; //10 取得コマンド sendBuf[4] = 0x03; //03 ETX sendBuf[5] = 0xD0; //D0 Sum WriteFile(hComm, sendBuf, 6, &dwWritten, NULL); //hComm 指定ポート, 略 -------------------------------------------------------- そこで,送信データをバイナリデータとして扱う関数を使う必要があると思います。 ただ,いろいろ調べたのですが,バイナリデータとして読み書きする関数が分からず困っています。 そのため,バイナリデータとして扱う関数とその使用例を教えていただきたいです。 プログラム初心者のため,問題解決のために必要なコードや情報が不足していることがあるかと思います。 その際にはご指摘いただきたいと思います。

  • データの送受信

    データの送受信について質問があります。 現在フレッツISDNにてネットをしているのですが, ある程度時間が経過するとネットは繋がっているにも関わらずデータの送受信をしない症状が出てしまいます。 ネットが切断するのではなく、データの送受信をしなくなる現象です。 ある程度と書きましたが、1時間で成るときもあれば最長でも4時間でこの症状が出てしまいます。 親機を本体のボタン操作で初期化すると直るのですが、また同じ症状が出てしまいます。 自分の中の感じでは、データの送受信量で満杯になり送受信しないように思えます。(詳しいことはわかりませんが・・・) HPを見る等別のアクションをしてもまったくデータの 送受信を行いません。 具体的に書くと最初はさくさくと見る事が出来るのですが、 時間が経つとデータの送受信をしなくなりHPをみたり、メールの確認もこの症状のためにできなくなります。 一回ネットに接続したら切断されない限りデータの 送受信を行い、極端ですが、ずっとネットを 出来る用にしたいです。 この症状を直す手立てがありますか? 返答の程お願いします。 プロバイダ biglobe TA NEC Aterm IW50/D,RS20(ワイヤレスセット2)   親機IW50/D 子機RS20(USB1.1にて接続)   親機、子機ともファームウェアは最新版です OS WindowsXP SP1 PC NEC ノートパソコンLL500/6

  • シリアル通信でのデータ分け

    プログラミングをしていて詰まったところがあるので教えていただけると幸いです。 開発環境はWindows XPでVisual C++ 2005 です。 シリアル通信において次々と送られてくるデータを1データずつ間違いがないように受信することを考えます。 例えば1つのデータが10バイトからなっていて、そのはじめが 0x10というものだったとすれば、 0x10を検出し、その10個分先の0x10の1つ前までが1データ分となると思います。 これを繰り返して全てのデータを正しく取得したいのですが、プログラムの方法が思い浮かびません。 こんなプログラムの方法はどうか、こんな関数を使ってみてはどうか、などありましたらご教授下さい。 よろしくお願いいたします。

  • シリアルポート通信

    VB6でシリアルポート通信を行っているものです。 22byteと26byteのデータをバイナリ受信したいのですが、異なるデータ長のデータをうまく取り込む方法がわかりません。 現状は、26byteのみで運用していたため InputLen=26 RThreshold=25 として運用していました。 22byteのときも26byteの時もスタートコード(02h)とエンドコード(0dh)が付きます。 この手のソフト制作が得意な方がいらっしゃいましたら、ご教示いただきたく。 InputLenとRThresholdの意味合いについてもご存じでしたら、教えてください。

  • C言語とシリアル通信の送受信データの概念

    C言語とシリアル通信の送受信データの概念 今シリアル通信で基盤上のデータを読み書きするツールを作っています。 基盤はまだ手元にないので、先にプログラムと、基盤の動作を模したプログラムを作るつもりです。 基盤の説明にはデータはバイナリで送るようにと書かれていたので、 文字列で1バイトずつ割り当てようと考えました。 しかし、どうやって1234などの数値を1バイトずつ割り振るのか、 バイナリって何だっけと調べているうちにわけが分からなくなってきました。 たとえば1234という10進数の数値を送りたいとき、 現状ではchar型の文字列"1234"を渡しています。 もしかしてこれは間違っていて、本当は char s[] = { 1, 2, 3, 4 }; 16進数の場合はabcdなら char s[] = { 0xa, 0xb, 0xc, 0xd }; として渡すのが正しいのでしょうか。 これでprintfを使うと文字化けして何だかバイナリっぽいぞと感じましたが。 また、バイナリ以外ならどんな送り方があるのでしょう?

  • データの送受信について

    データの送受信について質問があります。 現在フレッツISDNにてネットをしているのですが, ある程度時間が経過するとネットは繋がっているにも関わらずデータの送受信をしない症状が出てしまいます。 ネットが切断するのではなく、データの送受信をしなくなる現象です。 ある程度と書きましたが、1時間で成るときもあれば最長でも4時間でこの症状が出てしまいます。 親機を本体のボタン操作で初期化すると直るのですが、また同じ症状が出てしまいます。 自分の中の感じでは、データの送受信量で満杯になり送受信しないように思えます。(詳しいことはわかりませんが・・・) 一回ネットに接続したら切断されない限りデータの 送受信を行う風にしたいです。 この症状を直す手立てがありますか? 返答の程お願いします。 プロバイダ biglobe TA NEC Aterm IW50/D,RS20(ワイヤレスセット2)   親機IW50/D 子機RS20(USB1.1にて接続)   親機、子機ともファームウェアは最新版です OS WindowsXP SP1 PC NEC ノートパソコンLL500/6   

  • シリアル受信データをファイルに書き出したい

    マイコンとPCをCOMポートで通信し、受信データをファイルに書き出したいのです。 やってみたこと1.と2.の間を埋める技術についてアドバイスをお願いします。 1.キーボード入力したテキストボックスの内容をファイルに書き出す ⇒書けました、OK     Dim xxx As New System.IO.StreamWriter("e:xxx.txt", False, System.Text.Encoding.Default) xxx.WriteLine(TextBox1.Text) xxx.Close() 2.サンプルコードでシリアル通信 ⇒受信データがテキストボックスに表示されました、OK     以下サイトを参考に勉強中、テキストボックス部分を抜粋させて頂きます     (http://www.kana-soft.com/tech/sample_0008_4.htm#1) 3.2.で表示されたテキストボックスの内容を、1.のように書き出したいのですが   上手くいきません。'■から'■間に xxx.WriteLine(RcvTextBox.Text) 書いてみましたが   e:xxx.txtは作成されません。delegate、invokeの理解不足が原因かと思うのですが、   調べ回るうちに・・・限界みたいです。(^_^;) (抜粋) '===== Private Delegate Sub Delegate_RcvDataToTextBox( data As String ) '===== Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Try '受信データを読み込む. Dim data As String data = SerialPort1.ReadExisting() '受信したデータをテキストボックスに書き込む. Dim args(0) As Object args(0) = data Invoke(New Delegate_RcvDataToTextBox(AddressOf Me.RcvDataToTextBox), args) Catch ex As Exception MsgBox( ex.Message ) End Try End Sub '===== Private Sub RcvDataToTextBox( data As String ) '受信データをテキストボックスの最後に追記する. If IsNothing( data ) = False Then RcvTextBox.AppendText( data ) End If '■     Dim xxx As New System.IO.StreamWriter("e:xxx.txt", False, System.Text.Encoding.Default) xxx.WriteLine(RcvTextBox.Text) xxx.Close()     '■ End Sub ===== 以上、駄目出しをよろしくお願いします。

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

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

  • シリアル通信プログラミングでのバイナリデータ送信

    UNIX系環境(IRIX)でのシリアル通信プログラムを作成していて、 バイナリデータの送信方法がわからず困っています。 write関数を使い、テキストデータの送信は出来ます。 write(fd,"テキスト",byte)のように。 ただ、今回はバイナリデータ送信を考えており、 例えば1byteのデータ00000001(01H)を送りたいと思っています。 このデータを送る場合、write関数で実現出来るのでしょうか? write(fd,0x01,1)←イメージです。 色々ネットで調べても出てきません。 開発がWindows環境ではないので、API関数が使えない状況で困っています(MsComm等が使えない)。また、fwrite関数は使用してはいけないみたいです。教えてください。宜しくお願いします。

  • シリアル通信の方法(VB)

    VisualBasicを使ってシリアル通信(受信のみ)を考えている初心者です。 現在、フォームのデザイナーからSerialportをドラッグしプロパティを設定しました。 コードでは、ポートを開き、受信の命令をしていますが ".readline"の文のところでフリーズしてしまいます。 ---------- SerialPort1.Open() Dim receivedata As String = "" receivedata = SerialPort1.Readline ---------- 原因がつかめず困っています。 何がいけないのでしょうか?詳しい方、是非ご教授お願いします。