第8回 パラメータを組み合わせるアクセス制御術


西村 泰洋
富士通株式会社
マーケティング本部
フィールドイノベーション
プロジェクト員
2008年8月26日

 サンプルプログラムのソースを読む

 それでは、このプログラムのソースを見てみましょう。基本的には、「タグ検知」「タグ読込み」「タグ書込み」「終了」ボタンのClickプロシージャとして定義されています。

・ISO 18000-6 TypeBかISO 18000-6 TypeCか

 富士通のリーダ/ライタはISO 18000-6 TypeBタグにもISO 18000-6 TypeCタグにもアクセス可能となっています。しかしながら、現在、一般的に入手可能なISO 18000-6 TypeCタグは書き込みができません。そこで、ソース最初の部分で「タグ種別」にISO 18000-6 TypeCがチェックされていたら、読み込みと書み込みの機能を対象外とするようにしています。続いて、タグのフォーマット適用もIfステートメントで分岐させています。

Private Sub button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReadTagID.Click, btnReadTag.Click, btnWriteTag.Click

  ExecuteButton(sender)

End Sub

Public Sub ExecuteButton(ByVal ButtonType As System.Object)

  Try
    '画面項目クリア
    ClearResult()

    'タグ種別設定
    If Me.rdbTagTypeC.Checked = True Then

      'TypeCの場合は読み書き機能は対象外
        If ButtonType Is Me.btnReadTag Or ButtonType Is Me.btnWriteTag Then
          MessageBox.Show(EdgeBaseConstant.ERROR_MESSAGE3, "TypeC TagFormat Error", _
            MessageBoxButtons.OK, MessageBoxIcon.Error)
          Exit Sub
        End If

        EBMain.TagFormat = EdgeBaseConstant.TAG_FORMAT_C    'TypeC用タグフォーマット
      Else
        EBMain.TagFormat = EdgeBaseConstant.TAG_FORMAT_B    'TypeB用タグフォーマット
      End If
End Sub

・同期か非同期か

 同期か非同期かの判断は、画面の「非同期処理を行う」にチェックをすることで、EBMain.AsyncFlagにTrueかFalseを設定します。

'同期/非同期 種別設定
If Me.chkAsync.Checked = True Then
  EBMain.AsyncFlag = True    '非同期
Else
  EBMain.AsyncFlag = False    '同期
End If

 今回のサンプルプログラムでは「同期」で実行しているので、EBMainのサブルーチンAsyncFlagにFalseが設定されて、EdgeBase関数のEBSR_ReadTagIDが実行されます。参考として対象部分のソースを見てみましょう。resultCodeはこの後も頻出するので注意してください。

If blAsyncFlag = False Then
  '同期
  '引数:1(R/W ID),2(タグフォーマットID),3(フィルタID),4(TID取得有無),5(動作条件指定),6(アクセス条件指定)
  resultCode = EBaplIF.EBSR_ReadTagID(RWIDName, strTagFormatID, "", 0, MoveEnv, AccessEnv)

Else
  '非同期
  '引数:1(R/W ID),2(タグフォーマットID),3(フィルタID),4(TID取得有無),5(動作条件指定),6(アクセス条件指定)
  resultCode = EBaplIF.EBSR_AsyncReadTagID(RWIDName, strTagFormatID, "", 0, MoveEnv, AccessEnv)

End If

・タグアクセス関数定義

 タイムアウト指定、タグ枚数指定、そしてメインであるタグアクセス関数が設定されます。ここでは「タグ検知」を実行するので、EBMainのサブルーチンFunctionTypeに EdgeBaseConstant.FNCTYPE.ReadTagIDが設定されます。「読込み」の場合はReadTag、「書込み」はWriteTagが選択されますが、いずれもEdgeBaseで提供されている関数です。

  '動作条件取得(タイムアウト指定)
  If Me.rdbTimeout.Checked = True Then
    'タイムアウト値をセットする
    EBMain.TimeOut = Integer.Parse(Me.txtTimeOut.Text)

  Else
    'タイムアウト指定なし
    EBMain.TimeOut = -1

  End If

  '動作条件取得(タグ枚数指定)
  If Me.rdbTargetCount.Checked = True Then
    '枚数をセットする
    EBMain.TargetTagCount = Integer.Parse(Me.txtTargetCount.Text)

  Else
    '枚数指定なし
    EBMain.TargetTagCount = -1

  End If

  '関数種別設定
  If ButtonType Is Me.btnReadTagID Then
    EBMain.FunctionType = EdgeBaseConstant.FNCTYPE.ReadTagID

  ElseIf ButtonType Is Me.btnReadTag Then
    EBMain.FunctionType = EdgeBaseConstant.FNCTYPE.ReadTag

  ElseIf ButtonType Is Me.btnWriteTag Then
    EBMain.FunctionType = EdgeBaseConstant.FNCTYPE.WriteTag

  End If

  EBMain.FunctionNumber = EBMain.FunctionType

  '関数実行
  resultCode = EBMain.ExecuteAccessTag()

  '結果表示
  If Me.chkAsync.Checked = True Then    '非同期

    If resultCode <> 0 Then
      '非同期コマンド失敗時
    Exit Sub
    End If

    Me.btnReadTagID.Enabled = False
    Me.btnReadTag.Enabled = False
    Me.btnWriteTag.Enabled = False
    Me.btnCancel.Enabled = True

  Else    '同期
      '復帰値に関わらず、結果を表示
      DisplayResult(resultCode)

  End If
End Sub

・結果表示

 最後に「タグ検知」コマンドボタンをクリックした結果表示のソースです。リストビュー形式で結果の表示をします。

If blAsyncFlag = False Then
  '同期
  '引数:1(R/W ID),2(タグフォーマットID),3(フィルタID),4(TID取得有無),5(動作条件指定),6(アクセス条件指定)
  resultCode = EBaplIF.EBSR_ReadTagID(RWIDName, strTagFormatID, "", 0, MoveEnv, AccessEnv)

Else
  '非同期
  '引数:1(R/W ID),2(タグフォーマットID),3(フィルタID),4(TID取得有無),5(動作条件指定),6(アクセス条件指定)
  resultCode = EBaplIF.EBSR_AsyncReadTagID(RWIDName, strTagFormatID, "", 0, MoveEnv, AccessEnv)

End If

 このように富士通製リーダ/ライタでは、EdgeBaseというミドルウェアが提供している豊富な関数群を利用することで、さまざまなパターンのモードとアクセスメソッドを定義できます。シンプルなコードで限定された処理を選ぶか、多少複雑なコードとなるものの多様な処理を実行できるものが良いか、開発者の好みが分かれるところでしょう。

  Public Sub DisplayResult(ByVal resultCode As Integer)

    Dim iTagCount As Integer    '読取りタグ枚数

    Try

      '処理(メソッド)名称
      Me.lblFuncName.Text = EBMain.getFunctionName

      '処理時間表示
      Me.lblProcessTime.Text = EBMain.ProcessTime

      'タグデータ取得(キャンセル系は取得なし)
      If EBMain.FunctionNumber = EdgeBaseConstant.FNCTYPE.ReadTagIDCancel Or _
        EBMain.FunctionNumber = EdgeBaseConstant.FNCTYPE.ReadTagCancel Or _
        EBMain.FunctionNumber = EdgeBaseConstant.FNCTYPE.WriteTagCancel Then

        If TagDatas.Count <> 0 Then TagDatas.Clear() '前のデータが存在するときはクリア
        Exit Sub

      Else
        TagDatas = EBMain.GetTagDatas

      End If

      'タグ件数表示
      iTagCount = TagDatas.Count
      Me.lblTagCount.Text = Convert.ToString(iTagCount)

      '結果データをリストビューへ表示
      SetListView()
    End Try
  End Sub

  Private Sub SetListView()

    Dim i, j As Integer    'カウンタ(i→タグ枚数、j→要素数)
    Dim strTagResult(6) As String    'リストビュー表示用
    Dim strUserData As String    'UserData格納用
    Dim TagData As New F5FVEBsrvcDll.TagData    'タグ情報(1データ分)
    Dim UserData As New F5FVEBsrvcDll.UserDataList    'タグ要素データ情報(1データ分)

    'データ存在する時のみ表示
    If TagDatas.Count <> 0 Then

      'タグ枚数分だけ処理
      For i = 0 To TagDatas.Count - 1

        '1明細分を代入
        TagData = CType(TagDatas.Item(i), F5FVEBsrvcDll.TagData)

        strTagResult(0) = TagData.m_TagID  'タグID
        strTagResult(1) = TagData.m_AccessResult.m_PhysicalRWID  '物理R/W‐ID
        strTagResult(2) = TagData.m_AccessResult.m_AntennaID  'アンテナID
        strTagResult(3) = Convert.ToString(TagData.m_ResultCode)  '結果コード
        strTagResult(4) = TagData.m_ProcessDate.ToString  '処理日時

        'リストビューに追加
        Me.lvwTagResult.Items.Add(New ListViewItem(strTagResult))

      Next

    End If
End Sub

 多くのエンジニアに興味を持って欲しい

 本連載では、RFIDシステム開発の際のプログラミングの実装において、各メーカーによってクセがあるということを解説してきました。

 しかし、各社のモードやアクセスメソッドなど、勘所を押さえた上で、提供されている開発環境やツールへの理解を進めていけば、開発は決して難しいものではないということが理解いただけたかと思います。

 これまで「RFIDシステム導入バイブル」「RFIDプロフェッショナル養成バイブル」、そして「RFIDシステムプログラミングバイブル」というタイトルで、RFIDシステムの導入から開発までを連載をしてまいりました。最初の連載開始から2年以上が経過していますが、その間にさまざまなビジネスシーンでRFIDシステムが利用されるようになりました。

 RFIDシステムに関して多くのエンジニアに興味を持っていただくこと、そしてできればRFIDシステムの普及にともに携わっていただくことを目標にしてシリーズ連載を進めてきましたが、その目標は達しつつあります。

 長きにわたり、ご愛読ありがとうございました。また本連載を支えていただいた@IT編集部にも御礼申し上げます。

2/2
 

Index
パラメータを組み合わせるアクセス制御術
  Page1
富士通製RFIDシステムの特徴
サンプルプログラムのユーザーインターフェイス
Page2
サンプルプログラムのソースを読む
多くのエンジニアに興味を持って欲しい

Profile
西村 泰洋(にしむら やすひろ)

富士通株式会社
マーケティング本部
フィールドイノベーション
プロジェクト員

物流システムコンサルタント、新ビジネス企画、マーケティングを経て2004年度よりRFIDビジネスに従事。

RFIDシステム導入のコンサルティングサービスを立ち上げ、自動車製造業、流通業、電力会社など数々のプロジェクトを担当する。

著書に「RFID+ICタグシステム導入構築標準講座(翔泳社)」がある。

RFIDシステムプログラミングバイブル 連載インデックス


RFID+IC フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

Master of IP Network 記事ランキング

本日 月間
ソリューションFLASH