• ベストアンサー

VB 8byte受信して6yte目選ぶ

今現在,重量計で計った重さを,RS-232Cで受信するプログラムを作成中です。 8byteを受信しているのですが,6byte目の重量のデータしか必要がありません。6yte目のみ取り出せるのですか? 宜しく御願いします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

無理です RS-232Cはシリアル通信ですよ 受信バッファがあってもFIFOバッファですから受信したデータを6バイト以前の5バイトを受信処理しないと6バイト目は取得出来ません VBのバージョンは何でしょう? 6.0か2005/2008でしょうけど MSCommを使っている場合送信元から必ず8バイト取りこぼし無く受信出来るのであれば RThresholdを8にして受信待機し Byte配列に Inputメソッドで読み込み 6バイト目だけ返すようにしてはいかがでしょう

hiroki1227
質問者

お礼

有難うございます。 受け取っているデータが,テキストなのでString型で受け取ればいいみたいです。 もっと勉強したいと思います。

hiroki1227
質問者

補足

ありがとうございます。VB6.0のMSCommを使用しています。 もう一点質問があるのですが, 重量計のデータは44バイトで送られて来るのですが,必要なのは5バイト~10バイト目のデータだけなのです。まず44バイトのデータを変数に格納してから,必要な位置のデータだけ抜き出せるような関数はあるのですか?

関連するQ&A

  • シリアル通信 VB 受信したデータ

    初めまして。 今現在,RS-232Cのシリアル通信で,重量計で測定したデータ(990kg)をCOM1に取り込めるようにするプログラムを作成中です。 出力データのフォーマットは以下のようになっています。 ST   , GS   , +0012345  kg  CRLR  ヘッダ1  ヘッダ2   データ  単位  ターミネータ 18バイトのデータを受信していることになります。 ここで質問なのですが,プログラムでは1バイトずつイベントを発生させて1バイトずつ受信させているのですが,1バイト×18回 のデータをどのようにつなぎ合わせれば18バイトのデータとして扱えるようになるのですか? うまく説明できていないかも知れませんが,お分かりの方がいらっしゃいましたら宜しく御願いします。 VBではOnCommを使用しています。

  • バイト配列 抜き出す

    はじめまして。 VB6.0 MSCommを使用して,44バイトのデータを受信するプログラムを作成中です。 ここで質問なのですが, 44バイトのデータをバイト配列に格納するまでは良いのですが,必要なデータは(10バイト目~14バイト目)のデータしか必要がありません。この必要な部分だけ切り出せる関数などはありませんか? 宜しくお願いします。

  • RS-232C 2つのプログラム 受信 MSComm

    お世話になっております。 今現在VB6.0でMSCommを用いて通信系のプログラムを作成中です。 1台の重量計から、PCのCOM1にデータをと取り込んでいます。 取り込んだデータを解析するために、AというプログラムとBというプログラムを実行し、データがCOM1に受信されたら両方のプログラムにデータを受信させたいです。 しかし、COM1にデータが受信されるとどうしもAというプログラム側でのみ受信されてしまいます。プログラム的に不可能ではないと思うのですが。 そこで、重量計側のポートとCOM1,COM2をパラで繋いで2つに同じデータを受信させたいと考えております。1つのポートに対して、1つのPCを稼動させたいのです。 もし、このようなケーブルを知っておられる方いらっしゃいましたら、宜しくお願い致します。

  • VB RS-232C 通信プログラム

    何度もお世話になっております。(VB6.0 MSCommを使用した通信プログラムを作成中です。)私は新卒で食品会社に入社したのですが,プログラムの分かる上司が身近では誰1人といない状況で困っています。 今作成しているのは,重量計に荷物が乗った段階で作業者がデータ転送ボタン(重量計についている)を押すと,重量計のデータ(500kgというデータ)をシリアルでCOM1に取り込み,フォームにエクセルのセルを作成し(OLEを用いて)保存できるようにしたいと考えています。 (重量計から送られてくるデータのフォーマット) 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 S T , N T , + 0 0 1 2 . 3 4 k g CR LF ST ; ヘッダ1 NT ; ヘッダ2  CRLF ; ターミネータ                   の18バイトのデータです。 ここで質問なのですが (1) 以下のプログラムで重量はバイト配列に受信できていますでしょうか?(実際に重量計とPCを接続できれば良いのですが工場の稼動状況が関わっておりすぐにはできません。) (2) 18バイトのデータを受信するからと言って RThreshold = 18 として良いのでしょうか? 普通,データは1バイトずつ送られてくると思うので RThreshold = 1としてイベントを発生させる必要があるのかとも思うんですが。 'MSComm1,2(COM1,2)コントロールの初期設定 Private Sub Form_Load() MSComm1.CommPort = 1 '通信ポートを設定 MSComm1.Settings = "9600,n,8,1" '通信条件の設定 MSComm1.RThreshold = 18 '固定長のデータ End Sub Private Sub Port1_Click() 'Port1_Clickのクリックイベントプロシージャ If MSComm1.PortOpen = False Then 'シリアルポートのオープン MSComm1.PortOpen = True End If LPort1.Text = "" 'テキストボックスのクリア受信 End Sub Private Sub MSComm1_OnComm() '受信のOnCommイベント Dim Buffer1(0 To 17) As Byte '受信バッファの変数宣言(18バイト) Select Case MSComm1.CommEvent 'CommEventプロパティに対する処理 Case comEvReceive '受信データ有り    Buffer1 = MSComm1.Input '受信データをバッファに格納 'これより下は受信した18バイトから必要なデータ8バイト目から4バイト分切り出し,dという配列(4バイト)に格納できないかと考えました。 Dim i As Integer Dim d(0 To 3) As Byte d = MidB(Buffer1, 8, 4) LPort1.Text = d 'LPort1.Text = Buffer1 '受信データをテキストボックスに表示 End Sub

  • 0byteデータの送信と受信

    現在unixでsocketプログラムを書いています。 FTPライクなプログラムを書いているのですが、ファイルを送受信する場合、ファイルの終端をどうするかを考えています。 ファイルサイズを送るのはなしです。 sendで0byteのデータを送り、recvで0byteのデータを受信した場合にファイルの終端に達したとして処理を終らせたいと考えています。 実際、sendでは0byteのデータを送信してもエラーにはなりませんが、recvでは受信できません。 そのような処理はできるのでしょうか? よろしくおねがいします。

  • ネットワークでの受信バイト数

    Winsockを使用してデータの受信プログラムを作成していまが、以下の問題が出ています。 D/F/Hパソコンでテストを行うと1884バイトを一括で受信(GetData)できるのですが、HPパソコンで同じプログラムを動作させると1024バイトで分割されて受信されます。 バイト数は  Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long で取得しています。 1.Winsockで最大何バイトまで受信できるのでしょうか? 2.上記HPパソコンでどこか設定があるのでしょうか? 以上。よろしくお願いします。

  • VB6.0 RS-232C通信プログラム

    はじめまして。 以下に示したような通信プログラムを作成しなくてはならないのですが,VC6.0は若干かじった事がある程度で,VB6.Oは初心者のためどのように作成してよいのか分からない状況です(何から始めてよいのかわからない・・)。宜しければ,参考書やサイトなど知っておられる方がいらっしゃいましたら,御願いします。 (構成) (1) 重量計で測定したデータ(測定する毎に)をRS-232CでPC(XP)ポートに送り,データを収集するできるプログラム (2) 収集したデータをtxtで保存し,他のPCに送れるようにする(送信ボタンを作成して,ボタンを押すことで)

  • 受信したデータを出力したいのですが

    私は現在、GPSから受信したデータをRS232Cで接続したPCに表示させるプログラムを作成していたのですが、解決できないことがあり困っています。参考になる資料やHPをご存知な方がいらっしゃいましたらアドバイスをください。よろしくお願いします。 開発環境はUNIX C言語、GPSはGARMIN社 geko201(ハンディGPS)を使用し、RS232CでPCに接続して受信したNMEAセンテンス(ボーレート:4800)を表示したいのですが、 $GPGGA,0933……といったNMEAセンテンスではなく 2c8080803030301………といったデータが表示されてしまいます。 ポートの設定は以下で行っています。 newtio.c_cflag = B4800 | CS8 | CREAD | CLOCAL; newtio.c_iflag = 0; newtio.c_oflag = 0; newtio.c_lflag = 0; newtio.c_cc[VTIME]=1; RS232Cからデータを得て表示する部分のアルゴリズムで参考になるものがございましたらどうかご教授ください。

  • データ受信ができません

    現在、Turbo C++を用いてソフトを作っています。WinAPI関数を用いて、RS232Cによって電子回路とPC間でシリアル通信を行っています。デスクトップのパソコンでは通信はうまくできていたのですが、ノートパソコンに、USBとRS232Cの変換ケーブルを用いて同じプログラムを動かしたところ、データ受信が全くされません。CreateFile関数はエラーは出ませんが、ReadFile関数などは受信されずに待機しているような状況です。コムポートの設定も問題はないと思うのですが、他に何か問題はあるでしょうか。 予想できる範囲でわかる方お願いします。

  • GPSデータ(NMEA)受信

    USB接続のGPS受信機の購入を検討中で、 GPS受信機よりNMEAデータのUTCを取得したいと考えています、 NMEAデータ取得の方法について教えてください。 プログラム上(VB.net,C#)より RS232CのようにUSBのポートに接続し、 ボーレートを設定して受信すればよいのでしょうか? NMEAデータがRS232Cシリアル通信のように垂れ流されてくるイメージなのですが、 問題ないでしょうか?