RS232CでのRFIDリーダライタの制御プログラムについて

このQ&Aのポイント
  • RS232Cを使用してRFIDリーダライタを制御するプログラムを作成しましたが、レスポンスが返ってきません。
  • 購入したRFID評価キットTR3-D002Aには、通信プロトコルが正しく設定されており、デモソフトと同じ信号を出力しています。
  • プログラミング初心者であり、どのような原因が考えられるかわかりません。また、特殊な機器を制御するには別売のSDKが必要なのでしょうか。
回答を見る
  • ベストアンサー

RS232CでのRFIDリーダライタの制御プログラム。

研究用にタカヤ製品http://www.takaya.co.jp/enterprise/rf/rfid/module.htm のRFID評価キットTR3-D002Aを購入しました。 ↓のようなVB6.0で16進数のバイト列を送信してレスポンスをえるプログラムを作りました。 MSComm1.CommPort = 1 MSComm1.Settings = "9600,n,8,1" MSComm1.Handshaking = comNone MSComm1.PortOpen = True Dim Send(7) As Byte Send(0) = &H2 Send(1) = &H0 Send(2) = &H4F Send(3) = &H1 Send(4) = &H0 Send(5) = &H3 Send(6) = &H55 Send(7) = &HD MSComm1.Output = Send 通信プロトコルはあっていると思うし、COMモニタでみても、ついてきたデモソフトと同じ信号が出力されているので、 リーダライタからレスポンスのデータが帰ってくると思うのですが、COMモニタでみる限り何もレスポンスはないです。 プログラミングは初めてなのもあり、困っています。 何か特殊なことをしないと、こういうSDKが別売であるような機器を制御するのは無理なのでしょうか? また、原因は何が考えられるでしょうか?

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

  • ベストアンサー
  • byhky
  • ベストアンサー率100% (1/1)
回答No.2

どうもです。 COMモニタというのは、RS232Cラインモニタのことですよね? デモプログラムと同様の送信をおこなって、同様のレスポンスを 得られないのであれば、 1.ケーブルはRF-Reader付属品を使用していますか?(ストレート接続・クロス接続の確認の為) 2.送信データの送信タイミングがデモソフト送信と異なる?   時間的制約(キャラクタ間時間など) が再現できているか。 3.EVENパリティ や ODDパリティ また stop=2 であるなど   通信パラメータが異なっていないか? 出来ればオシロスコープなどで、送信・受信データの波形を 確認されてはいかがでしょうか。 デモプログラムでの波形と今回のプログラムで波形を見比べて 見てください。 また、送信は 02 00 4f 01 00 03 55 0D ですが 受信はどうなるはずですか?

kiyume
質問者

お礼

回答ありがとうございます。 バイナリモードでの受信、通信プロトコルの見直し、 などプログラムをもう一度きちんと整形しなおしてみると きちんと動作しました。 おさがわせいたしました。

その他の回答 (1)

  • byhky
  • ベストアンサー率100% (1/1)
回答No.1

バイナリモードでの受信設定と、受信イベント発生の為の設定 InputMode = comInputModeBinary RThreshold = 1 をやってみたらどうかな。

参考URL:
http://www.google.com/search?hl=ja&lr=lang_ja&ie=SJIS&oe=SJIS&num=100&q=comInputModeBinary
kiyume
質問者

補足

回答ありがとうございます。 バイナリでの受信設定もやってみたのですが、無理でした。 データ送信後にMSComm1.InBufferCountで受信バッファを表示させて みたのですが、0になっているみたいです。 つまり、機器自体がなにもレスポンスを返してないという事で、 信号が送信されているかどうかも危ういみたいです。 送信データが送信バッファにたまって、送信されていないなどという事もありうるのでしょうか?

関連するQ&A

  • rs232cでのRfidリーダライタの制御方法

    研究用にタカヤ製品http://www.takaya.co.jp/enterprise/rf/rfid/module.htmのRFID評価キットTR3-D002Aを購入しました。 Visual Basicでリーダライタを制御するプログラムを作りたいと思っているのですが、プログラミングなどはした事もなく何から初めてよいのか途方にくれています。 通信コマンドは公開されているので、とりあえず、直接通信コマンドをRS232C経由でリーダライタに送って、リーダライタの読み取りモードを変更してみようと思っているですが、そのようにrs232cに繋いだ機器に直接通信コマンドを送るようなソフトはあるでしょうか? テキストデータを送受信するソフトはあるのですが、なにもレスポンスがありません。通信コマンドは STX アドレス コマンド データ長 ETX SUM CR などとなっているので、それらを送って機器からレスポンスを得たいのですが、、、、 おそらく質問の仕方もかなりずれていると思うのですが、お手柔らかに答えて頂けると幸いです。 また、参考になるサイトなどがあれば教えてください。 osはwindows2000です。よろしくお願いします。

  • RS232CでのRFIDリーダライタの制御

    研究用にタカヤ製品​http://www.takaya.co.jp/enterprise/rf/rfid/module.htm​のRFID評価キットTR3-D002Aを購入しました。 Visual Basicでリーダライタを制御するプログラムを作りたいと思っているのですが、プログラミングなどはした事もなく何から初めてよいのか途方にくれています。 とりあえず、rs232c通信のソフトで通信コマンドを直接送ってリーダライタを動かしてみようと思っているのですが、 通信コマンドが16進数で 02 00 4F 01 00 03 55 0Dのようにしめしてある場合、どのように機器に送信すればレスポンスが得られるのでしょうか? 2進数でバイナリに変換して送信するのでしょうか? アスキーでテキストボックスに入力して機器に送信するタイプのソフトでは反応させることは無理なのでしょうか? うまく質問できなくて申し訳ないのですが、よろしくお願いします。

  • 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

  • MSCommで、文字化け

    こんにちは。いつも質問ばかりで恐縮ですが・・・ VB6(SP5)で、プログラミングをしております。 MSCommが文字化けをして困っております。 TA=NTT:V70MAX Windows2000 下記の通り、プログラミングをしています。文字化けがしない時は、ずっと うまく行きます。が、一度文字化けをしてしまうと、Windowsの再起動等を しなければどうにもなりません。(“・エZ・”等になります) Private Sub Form_Load() ‘初期化 MSComm1.CommPort = 1 MSComm1.Settings = "9600,N,8,1" MSComm1.Handshaking = comRTS MSComm1.RThreshold = 1 MSComm1.InputLen = 0 MSComm1.PortOpen = True End Sub Private Sub MSComm1_OnComm() Dim wBuf As String If MSComm1.CommEvent = comEvReceive Then wBuf = MSComm1.Input Text1.Text = wBuf End If End Sub

  • MSCommでoutputできない

    VB6.0でMSCommを用いてシリアル(レーダとつながってる)にデータを送りたいんですがどうもうまく送れません.outputしてすぐoutbuffercountをチェックしてもcnt=0(cntは下記プログラム参照)のままでバッファにちゃんとデータが送れていないのでは?と悩んでいます. なにが原因なんでしょうか?もしくは,他に送信バッファにデータが届いてるかどうかをチェックする方法などご存知でないでしょうか?よろしくおねがいします. MSComm1.CommPort = 2 MSComm1.InputMode = 1 MSComm1.InputLen = 0 MSComm1.Settings = "9600,N,8,1" MSComm1.RThreshold = 1 MSComm1.PortOpen = True MSComm1.InBufferCount = 0 MSComm1.OutBufferCount = 0 Dim s(16) As Byte   ’←以下のデータを送りたいんですが・・ s(0) = &H2 s(1) = &H0 s(3) = &HA s(4) = &H0 s(5) = &H20 s(6) = &H0 s(7) = &H53 s(8) = &H49 s(9) = &H43 s(10) = &H4B s(11) = &H5F s(12) = &H4C s(13) = &H4D s(14) = &H53 s(15) = &HBE s(16) = &HC5 For j = 0 To 16 MSComm1.Output = s(j) cnt = MSComm1.OutBufferCount Next j End Sub あと,レーザーの説明書に ・レーザーに送信する2バイト間の時間間隔は6msを超えないように ・レーザーに送信する2バイト間の最小時間は55μs以上としてください という記述があるんですが,これを満たしてないという可能性も疑ってます. どうやれば,この時間のタイミングで送れるんでしょうか? 長くなってすいません,なにかヒントなどおねがいします.

  • MELSEC-QシーケンサをVBAで通信したい!

    三菱のシーケンサMELSEC-Qシリーズのシーケンサ「QJ71C24N」にエクセルVBAで 通信したいと考えています。なかなかうまくいかず、困り果てています・・・。 下記、進めてきた経緯と組んだプログラムを書きます。 どこがおかしいか、どなたか教えてください・・・ ■ゴール シーケンサ内部のM300という変数に格納されている値を、VBAで作成した テキストボックスに表示させたい。 1.使用するエクセルのバージョンは2003です。 MSCOMMが入ってなかったため、「vb6sp6rt4.exe」というランタイムを用いて MSCOMMはインストールできました。 2.以下プログラム Dim R As String Private Sub CommandButton1_Click() Sheets("Sheet1").Select MSComm1.DTREnable = True MSComm1.RTSEnable = True MSComm1.inputLen = 0 'Input プロパティ使用時に、バッファ全体を読み取る。 MSComm1.commport = 1 'これは必要かと考え、テキストにはないが追加。 MSComm1.Settings = "9600,N,8,1" MSComm1.portopen = True MSComm1.inbuffercount = 0 ' 0文字受信するまで待機 MSComm1.output = Chr$(H5) + "F90000FF0004010000D*0010200050" + Chr$(H31) + Chr$(H43) End Sub +でいいのでしょうか?&というのも見ましたが・・・。 一応下記の通りだと取扱説明書をみながら、進めました。 'chr$(H5):制御コードENQuiry(問合せ):ヘッダ 'F900:識別番号+フレーム+局番号 '00FF:ネットワーク番号+PC番号 '00:自局番号 '0401:コマンド(一括読み出し) '0000:サブコマンド(モニタ条件指定無し、デバイスメモリ拡張指定無し) 'D*:デバイスコード '001020:先頭デバイス '50:デバイス点数 ' Chr$(H31) + Chr$(H43):サムチェックコード ↓ここからが、テキストボックスへの表示になりますが・・・。これもうまくいかず。 Private Sub CommandButton2_Click() R = MSComm1.input text1.Text = R text2.Text = Mid$(R, 6, 4) End Sub そして、ポートオープン。これは、エラーが出ず、うまくいったと考えています。 Private Sub Form_Load() Sheets("Sheet1").Select MSComm1.DTREnable = True MSComm1.RTSEnable = True MSComm1.inputLen = 0 'Input プロパティ使用時に、バッファ全体を読み取る。 MSComm1.commport = 1 'これは必要かと考え、テキストにはないが追加。 MSComm1.Settings = "9600,N,8,1" MSComm1.portopen = True End Sub そして、ポートクローズ。こちらも、エラーが出ず、うまくいったと考えています。 Private Sub CommandButton3_Click() MSComm1.portopen = False End Sub 最大の問題は、しっかりとコードが送信できているのかというところです。 解らないところも多々あるため不明な点も多いですが、なにとぞ、教えてください。

  • rs232cでの受信データ(mscomm)の受信方法VB6

    VB6で、シリアル通信プログラムを作っています。 機器からレスポンスが、02 00 44 03 61 62 63 03 72 0Dと9バイトくるのですが、 8バイト受信した後に、また、最後の0Dを1バイト目として受信しているので困っています。 on commイベントで以下のようにして受信データをテキストボックスに表示しているのですが、 Select Case MSComm1.CommEvent   Case comEvReceive       Dim Buffer() As Byte       Buffer() = MSComm1.Input       For t = 0 To 6 + Buffer(3)  ,BUffer(3)はデータ長です。       Text1.Text = Text1.Text & Hex$(Buffer(t)) & Chr(&H3A)       Next t 8バイト表示した後、1バイト受信が起こるので、Buffer(3)が範囲外となりエラーが起こります。 inputLenは0にしています。 この問題は解決するにはどうしたらよいでしょうか? 0Dは終了コードです。0Dを受信するまで、きちんと1バイトづづ格納していくなどというようにできたらよいのですが、、、 他にも簡単な方法があったらよいのですが、、、 よろしくお願いいたします。

  • RFIDリーダライタを探しています。

    こんにちは。 13.56MHzのRFIDのリーダライタで OSがWindowsCEベースのものを探しています。 御存知の方がいらっしゃいましたら御教示ください。 よろしくお願いいたします。

  • こんにちは、VBはじめたての初心者です。MSCommコマンドを利用して

    こんにちは、VBはじめたての初心者です。MSCommコマンドを利用してマイコンと 通信するプログラムを作成中なのですが、わからないことがあるので質問させていただきます。 public aub form_load() MSComm1.CommPort = 3 'ポート番号設定 MSComm1.Settings = "115200,N,8,1" '設定 MSComm1.PortOpen = True 'ポートオープン MSComm1.Handshaking = comNone 'フロー制御無し MSComm1.RTSEnable = False 'RTS制御無し MSComm1.RThreshold = 1 '1バイト受信毎にOnCommイベント発生 Dim txBuffer As String End sub 'テキストに表示した受信文字列を変数に格納、さらに必要な文字列だけ抽出する Private Sub botan_Click() txBuffer = Text2.Text x = InStr(1, txBuffer, "e" & vbCrLf, 1) txBuffer = Mid(txBuffer, x + 3, (Len(txBuffer) - (x + 2))) Text1.Text = txBuffer 'txBufferの内容確認用 End Sub Private Sub cmdr_Click() Text2.Text = "" MSComm1.Output = "r a0 s 00 j ff" & Chr(13) 'マイコンのデータを読み込むコマンド End Sub Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive Buffer = MSComm1.Input Text2.Text = Text2.Text & Buffer ・ ・ ・ End Select End Sub おおざっぱですがこのようなプログラムをつくりました。 目的は受信された文字列(テキストに表示)を変数に格納、さらに必要な文字列だけ抽出する ことなのですが、このプログラムだとデータを読み込むコマンドを送るボタンとそのデータを 変数に格納して必要な部分を抽出するボタンを二回押さなければならず面倒なので、botan_Click() の中の命令をそのままcmdr_Click()に入れたのですが、そうするとエラーが出てしまいます。 いろいろと試したのですがどうやらtxBufferの中に受信データが入ってくれないみたいです。 原因は何か。何かいい方法がないかアドバイスいただけたら幸いです。 やりたいことは、一回のボタンクリックで変数に受信データのほしいとこだけを格納させることです。 よろしくお願いします。

  • RFIDのリーダライタの選択。

    現在、RFIDをテーマにして卒業研究を進めてるのですが、 リーダライタの選択に困っています。 目的としてはまだRFIDが導入されていない、あるいは研究段階にあるものについて、汎用のリーダライタとタグで使用実験をして、問題点を指摘し、研究する事です。 卓上型で、パソコンとシリアルかUSBなどで接続でき、読み取り距離が10cm程度はあるもの。そしてアンチコリジョン機能対応のもの汎用ソフトでサンプルプロラムの開発ができものを探しています。水や金属の近くなどで使うという予定はありません。また、研究費もあまり出ず、私にもそこまでの金銭的余裕はないため、できるだけ安価なものを探しています。(できれば5万円以内) モジュールとアンテナとタグのような評価キットでもよいのですが、よいものはないでしょうか?また、安物は使い物にならないというような気をつけた方が良いこともあれば教えて頂けると助かります。よろしくお願いいたします。

専門家に質問してみよう