Microsoft Word - 9.doc

Similar documents
Microsoft Word - 小心翼翼的二十一點N.doc

Microsoft PowerPoint - VB14.ppt

TC35短信发送程序设计

Visual Basic D 3D

投影片 1

2

穨文件1

TwinCAT 1. TwinCAT TwinCAT PLC PLC IEC TwinCAT TwinCAT Masc

ThreeDtunnel.doc

投稿類別:電子工程類

27 :OPC 45 [4] (Automation Interface Standard), (Costom Interface Standard), OPC 2,,, VB Delphi OPC, OPC C++, OPC OPC OPC, [1] 1 OPC 1.1 OPC OPC(OLE f

VB控件教程大全

Microsoft PowerPoint - OPVB1基本VB.ppt

3 Driver do Microsoft Access (*.mdb) hisdata IFIX 1.4

2010年3月计算机等级考试四级网络工程师笔试

Microsoft Word - 專題製作研究報告書.doc


主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

多層次傳銷與獎金系統

IsPostBack 2

(Methods) Client Server Microsoft Winsock Control VB 1 VB Microsoft Winsock Control 6.0 Microsoft Winsock Control 6.0 1(a). 2

投影片 1








1

Outline USB Application Requirements Variable Definition Communications Code for VB Code for Keil C Practice

Visual Basic AD/DA Visual Basic 2

(陈其工、凌有铸)安徽省高等学校质量工程项目进展报告 自动化专业教学团队.doc

untitled

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>

吳元康

关于规范区委、区委办公室发文

Microsoft Word - ??山

Microsoft Word - 助理人員教育訓練-會計室.docx

PowerPoint Presentation

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

Excel VBA Excel Visual Basic for Application

untitled

2009年3月二级VB语言笔试真题

Microsoft Word - FPKLSC_21.docx

1 1 Excel VBA 說明 ( ) (_) STEP4 Excel 2 STEP5 A1 1 B2 2 C3 3 STEP6 A1 STEP7 > > 1-11

教 务 信 息 教 学 日 常 运 行 工 作 4 月 6 日, 教 务 部 高 丽 琴 老 师 参 加 南 昌 市 教 育 局 2016 年 中 小 学 教 师 资 格 认 定 工 作 培 训 会 2016 年 教 师 资 格 认 定 工 作 是 从 省 考 向 国 考 过 渡 后 的 第 一 次

Microsoft PowerPoint ?????????3 [Compatibility Mode]

派遣公司人力資源管理措施對派遣人員離職傾向之影響:

计算机网络与经济(二).doc

3.1 num = 3 ch = 'C' 2

VB程序设计教程

四川省普通高等学校

Visual C# 2005程式設計

2009年3月二级VB语言笔试真题

untitled

<4D F736F F D20B3CCD0F2D4B12DC9CFCEE7CCE2A3AD3037C9CF>

untitled

Microsoft PowerPoint - Chapter5

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

封面-12

MVB-1001.DOC

ActiveX Control

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

(Microsoft Word - \253\312\255\261)

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

Chapter 16 集合

Go构建日请求千亿微服务最佳实践的副本

Microsoft PowerPoint - VB5

全国计算机技术与软件专业技术资格(水平)考试

1

漳州卫生职业学院

ok = 1 142

PowerPoint Presentation

游戏厅捕鱼技巧_天天酷跑游戏技巧 2048游戏技巧,游戏厅打鱼技巧_

科学计算的语言-FORTRAN95

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

VHDL(Statements) (Sequential Statement) (Concurrent Statement) VHDL (Architecture)VHDL (PROCESS)(Sub-program) 2

不 知 肉 味 的 用 法 相 同? (A) 長 煙 一 空, 皓 月 千 里 (B) 五 臟 六 腑 裡, 像 熨 斗 熨 過, 無 一 處 不 伏 貼 (C) 兩 片 頑 鐵, 到 他 手 裡, 便 有 了 五 音 十 二 律 似 的 (D) 吾 觀 三 代 以 下, 世 衰 道 微 12. 文

穨ac3-3.PDF

untitled

Microsoft Word doc

一 個 SQL Injection 實 例 的 啟 示 頁 2 / 6 因 此, 在 知 名 網 站 上 看 到 SQL Injection, 讓 人 驚 心, 卻 不 意 外 網 站 專 案 外 包 是 目 前 業 界 的 常 態, 而 在 價 格 取 勝 的 制 度 下, 低 價 得 標 的 S

净, 保 持 面 部 整 洁 这 里 要 说 一 下 的 是, 很 多 男 生 注 意 了 胡 子, 却 忘 了 鼻 毛, 而 旁 人 或 者 同 学 往 往 也 不 好 意 思 提 醒 建 议 面 试 前 一 定 要 仔 细 照 一 照 镜 子, 好 好 检 查 一 下 有 些 人 讲 话 多 了

<4D F736F F D20B3CCD0F2D4B12DCFC2CEE7CCE2A3AD3037C9CF>

untitled

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

Microsoft Word - 2CA13內文.doc

概述


Microsoft Word - 序.DOC

5 功 能 选 择 键 10 电 源 指 示 灯 基 本 操 作 时 钟 设 置 时 钟 显 示 屏 闪 烁 说 明 没 有 显 示 正 确 的 时 间 通 过 以 下 步 骤 调 整 时 间 : 按 参 数 选 择 键 选 择 时 钟 图 标 ( 如 果 你 是 第 一 次 接 电 源 或 断 电

2014年全国计算机二级Access预测试卷 2

壹 前 言 解 開 2048 的 謎 一 研 究 動 機 最 近 我 們 都 很 熱 衷 於 2048 這 款 遊 戲, 遊 戲 方 法 非 常 簡 單, 但 是 想 要 達 成 2048 卻 很 難, 每 次 只 差 臨 門 一 腳 就 能 達 到 2048, 因 此 都 沒 有 成 功 過 於

CC213

<4D F736F F D B0D3B77EC3FEA7DEC3C0C476C1C9A5BFA6A1B8D5C3442DB57BA6A1B35DAD702DBEC7ACEC2E646F6378>

Fuzzy Highlight.ppt

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

Microsoft PowerPoint - vb_net5

Transcription:

捷運車票模擬 C H A P T E R

RFID 通訊網路與應用 一般人都有坐過捷運的經驗 在坐捷運時, 首先我們必須買車票, 然後將車票插入控制門的孔中, 如此才能通過 事實上, 這個車票就是 RFID 識別卡, 而車票插入控制門的孔中就是存在一個 RFID 讀卡器 只要你的車票一進入控制門的孔中, 則他將會被紀錄, 也就是你的車票內部會將一個特別的參數 ( 假設是 flag) 設定為 1, 待你從另一個車站出站時, 則此一車票才會正式被回收 對回數票的原理也是這樣, 只不過我們是要在進站與出站完成的動作中, 車票使用次數才會被扣除一次, 並顯示你還可以使用的車票次數 再者, 為了避免乘客買短程票坐長程區間, 因此在車票中都會檢查車票能使用的區間站是否正確, 如果不正確就會發出警告生提示給站務人員, 以供即時處理 為了完成此一程式, 首先我們必須在 Visual Basic 的 form 中, 加入圖 9.1 至圖 9.15 的元件及設定相對屬性 圖 9.1 9-2

捷運車票模擬 圖 9.2 圖 9.3 9-3

RFID 通訊網路與應用 圖 9.4 圖 9.5 9-4

捷運車票模擬 圖 9.6 圖 9.7 9-5

RFID 通訊網路與應用 圖 9.8 圖 9.9 9-6

捷運車票模擬 圖 9.10 圖 9.11 9-7

RFID 通訊網路與應用 圖 9.12 圖 9.13 9-8

捷運車票模擬 圖 9.14 圖 9.15 9-9

RFID 通訊網路與應用 緊接著我們為了使讀者更簡單的了解系統設計原理, 我們則利用圖 9.16 所示的流程圖來加以顯示系統設計過程 START 記錄 tag 通用起訖車站及乘車次數 flag=0 yes 設定 reader 車站 通用範圍內? no yes 可用次數減一,flag=1 no 終站 (flag=1)? yes 通用範圍內? yes flag=0 no 顯示警告訊息 end 圖 9.16 現在我們將要探討程式的設計內容, 所先我們定義一些全域參數如下 : Option Explicit Dim CardSerialNumber As Long Dim KeyValue(5) As Byte Dim DataBlock(15) As Byte Dim KeyType As Byte Dim BlockNo As Byte Dim SectorNo As Byte Dim flag As Integer Dim Waring As Integer 9-10

捷運車票模擬 Dim Waring2 As Integer Dim WS As Integer Dim Result As Byte 然後我們必須建立電腦連線, 在此一程式中我們首先設定 ComPort 的起始值 Private Sub Form_Load() cbocomport.clear cbocomport.additem "COM1" cbocomport.additem "COM2" cbocomport.listindex = 0 End Sub 緊接著我們必須啟動讀卡器, 這一部分前面章節已經敘述過很多次了, 讀者可以自行看看前面各章節, 其程式如下 : 1 Private Sub cmdopencard_click() 2 Data1.Recordset.MoveLast 3 Result = OpenCard(CardSerialNumber) 4 If Result = 0 Then 5 Text1(0).Text = Right("00000000" & Hex(CardSerialNumber), 8) 6 Else 7 MsgBox ("Error Code=" & Result) 8 End If 9 Text1(1).Text = Format(Now, "m/d/yy h:m:s") 10 Dim i As Integer 11 Dim j As Integer 12 Dim k As Integer 13 Dim uflag As Integer 14 Dim BlockArray(1) As Byte 15 Dim BlockArray2() As Byte 16 Dim GetData As String 17 Dim GetData2 As String 18 Dim MaxLength As Integer 19 Dim flags As String 20 Dim M1 As Integer 9-11

RFID 通訊網路與應用 21 Dim M2 As Integer 22 KeyValue(0) = &HFF 23 KeyValue(1) = &HFF 24 KeyValue(2) = &HFF 25 KeyValue(3) = &HFF 26 KeyValue(4) = &HFF 27 KeyValue(5) = &HFF 28 KeyType = 0 29 BlockNo = &H4 緊接著是我們最重要的部分, 在這裡除了要讀取識別卡中的內容外, 還需判斷車票是否有越區乘車 或票數不足等問題 首先, 利用卡片資料讀寫程式將資料輸入卡片內, 區塊 1 是 乘車次數, 區塊 2 是 flag, 區塊 4 是 起始車站, 區塊 5 是 終點車站, 區塊 6 以後是 中繼站, 區塊 62 是 Waring 30 For j = 0 To 5 31 BlockNo = j 32 Result = ReadCard(KeyType, KeyValue(0), BlockNo, DataBlock(0)) 33 If Result = 0 Then 34 GetData = "" 35 For i = 0 To UBound(DataBlock) 36 If DataBlock(i) >= 128 Then 37 BlockArray(0) = DataBlock(i) 38 BlockArray(1) = DataBlock(i + 1) 39 GetData = GetData & StrConv(BlockArray, vbunicode) 40 i = i + 1 41 Else 42 GetData = GetData & Chr(DataBlock(i)) 43 End If 44 Next i 45 Select Case BlockNo 46 Case 2 47 flag = Val(GetData) 48 Text2(1).Text = GetData 50 Case 5 51 Text2(2).Text = GetData 52 End Select 9-12

捷運車票模擬 53 End If 54 Next j 接著, 我們要讀取卡片資料, 並將其顯示在對應的文字框內, 並讓 flag = 區塊 2 的資料, 以便下面來判斷該卡片是進站或出站 (0 進 /1 出 ) 其中在識別卡資料讀取時, 僅讀取乘車次數 起迄車站以及中繼站 55 If flag = 0 Then 56 For j = 0 To 63 57 BlockNo = j 58 Result = ReadCard(KeyType, KeyValue(0), BlockNo, DataBlock(0)) 59 If Result = 0 Then 60 GetData = "" 61 For i = 0 To UBound(DataBlock) 62 Select Case BlockNo 63 Case 0, 2, 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 64 Case 47, 51, 55, 59, 62, 63 65 Case Else 66 If DataBlock(i) >= 128 Then 67 BlockArray(0) = DataBlock(i) 68 BlockArray(1) = DataBlock(i + 1) 69 GetData = GetData & StrConv(BlockArray, vbunicode) 70 i = i + 1 71 Else 72 GetData = GetData & Chr(DataBlock(i)) 73 End If 74 End Select 75 Next i 在判斷乘車次數是否足夠, 不足則令 Waring2 = 1,WS = 2; 反之則令 Waring2 = 0 9-13

RFID 通訊網路與應用 76 If BlockNo = 1 Then 77 Text2(0).Text = GetData 78 uflag = Val(GetData) 79 If uflag > 0 Then 80 Waring2 = 0 81 Else 82 Waring2 = 1 83 WS = 2 84 End If 85 End If 緊接著我們必須判別使用的車票是否在使用範圍內, 如果是, 則令 Waring = 0,flag = 1 並存入卡片內 ; 反之, 則令 Waring = 1 86 M1 = Val("&H" & GetData) 87 M2 = Val("&H" & Text3.Text) 88 If M1 = M2 Then 89 BlockNo = 2 90 flag = 1 91 flags = flag 92 For i = 0 To 15 93 DataBlock(i) = 0 94 Next i 95 MaxLength = Len(flags) 96 If MaxLength > 0 Then 97 i = 0 98 For k = 1 To Len(flags) 99 BlockArray2 = StrConv(Mid(flags, k, 1), vbfromunicode) 100 If BlockArray2(0) < 128 Then 101 If i >= 16 Then Exit For 102 DataBlock(i) = BlockArray2(0) 103 i = i + 1 104 Else 105 If i >= 15 Then Exit For 106 DataBlock(i) = BlockArray2(0) 107 i = i + 1 108 If i >= 16 Then Exit For 109 DataBlock(i) = BlockArray2(1) 9-14

捷運車票模擬 110 i = i + 1 111 End If 112 Next k 113 End If 114 Result = WriteCard(KeyA, KeyValue(0), BlockNo, DataBlock(0)) 115 Waring = 0 116 Exit For 117 Else 118 Waring = 1 119 End If 120 End If 121 Next j 接著要判別是否其他出錯的狀況發生, 如果過程中有出現錯誤, 如果 Waring = 1 則顯示 卡片使用範圍外, 並令 WS = 1 ; 如果 Waring2 = 1 則顯示 車票使用數不足, 並令 WS = 2 最後, 將 Text2(3) 文字框資料存入卡片 122 If Waring = 1 Then 123 MsgBox (" 卡片使用範圍外 ") 124 Text2(3).Text = " 卡片使用範圍外 " 125 BlockNo = 62 126 For i = 0 To 15 127 DataBlock(i) = 0 128 Next i 129 MaxLength = Len(Text2(3).Text) 130 If MaxLength > 0 Then 131 i = 0 132 For k = 1 To Len(Text2(3).Text) 133 BlockArray2 = StrConv(Mid(Text2(3).Text, k, 1), vbfromunicode) 134 If BlockArray2(0) < 128 Then 135 If i >= 16 Then Exit For 136 DataBlock(i) = BlockArray2(0) 137 i = i + 1 138 Else 139 If i >= 15 Then Exit For 140 DataBlock(i) = BlockArray2(0) 9-15

RFID 通訊網路與應用 141 i = i + 1 142 If i >= 16 Then Exit For 143 DataBlock(i) = BlockArray2(1) 144 i = i + 1 145 End If 146 Next k 147 End If 148 Result = WriteCard(KeyA, KeyValue(0), BlockNo, DataBlock(0)) 149 WS = 1 150 End If 151 If Waring2 = 1 Then 152 MsgBox (" 車票使用數不足 ") 153 Text2(3).Text = " 車票使用數不足 " 154 BlockNo = 62 155 For i = 0 To 15 156 DataBlock(i) = 0 157 Next i 158 MaxLength = Len(Text2(3).Text) 159 If MaxLength > 0 Then 160 i = 0 161 For k = 1 To Len(Text2(3).Text) 162 BlockArray2 = StrConv(Mid(Text2(3).Text, k, 1), vbfromunicode) 163 If BlockArray2(0) < 128 Then 164 If i >= 16 Then Exit For 165 DataBlock(i) = BlockArray2(0) 166 i = i + 1 167 Else 168 If i >= 15 Then Exit For 169 DataBlock(i) = BlockArray2(0) 170 i = i + 1 171 If i >= 16 Then Exit For 172 DataBlock(i) = BlockArray2(1) 173 i = i + 1 174 End If 175 Next k 176 End If 177 Result = WriteCard(KeyA, KeyValue(0), BlockNo, DataBlock(0)) 9-16

捷運車票模擬 178 WS = 2 179 End If 再者, 我們必須判斷為出站的狀況, 故須對識別卡進行讀取卡片資料, 此一資料僅讀取起迄車站以及中繼站 180 Else 181 For j = 0 To 63 182 BlockNo = j 183 Result = ReadCard(KeyType, KeyValue(0), BlockNo, DataBlock(0)) 184 If Result = 0 Then 185 GetData = "" 186 For i = 0 To UBound(DataBlock) 187 Select Case BlockNo 188 Case 0, 1, 2, 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 189 Case 43, 47, 51, 55, 59, 62, 63 190 Case 1 191 Text2(0).Text = GetData 192 Case Else 193 If DataBlock(i) >= 128 Then 194 BlockArray(0) = DataBlock(i) 195 BlockArray(1) = DataBlock(i + 1) 196 GetData = GetData & StrConv(BlockArray, vbunicode) 197 i = i + 1 198 Else 199 GetData = GetData & Chr(DataBlock(i)) 200 End If 201 End Select 202 Next i 以上在判別是否在使用範圍內, 是則 Waring = 0, 並跳出迴圈 ; 反之, 則 Waring = 1 9-17

RFID 通訊網路與應用 203 M1 = Val("&H" & GetData) 204 M2 = Val("&H" & Text3.Text) 205 If M1 = M2 Then 206 Waring = 0 207 Exit For 208 Else 209 Waring = 1 210 End If 211 End If 212 Next j 以上在判斷為使用範圍外, 顯示 卡片使用範圍外, WS = 1, 將 Text2(3) 文字框資料存入卡片 213 If Waring = 1 Then 214 MsgBox (" 卡片使用範圍外 ") 215 Text2(3).Text = " 卡片使用範圍外 " 216 BlockNo = 62 217 For i = 0 To 15 218 DataBlock(i) = 0 219 Next i 220 MaxLength = Len(Text2(3).Text) 221 If MaxLength > 0 Then 222 i = 0 223 For k = 1 To Len(Text2(3).Text) 224 BlockArray2 = StrConv(Mid(Text2(3).Text, k, 1), vbfromunicode) 225 If BlockArray2(0) < 128 Then 226 If i >= 16 Then Exit For 227 DataBlock(i) = BlockArray2(0) 228 i = i + 1 229 Else 230 If i >= 15 Then Exit For 231 DataBlock(i) = BlockArray2(0) 232 i = i + 1 233 If i >= 16 Then Exit For 234 DataBlock(i) = BlockArray2(1) 235 i = i + 1 236 End If 9-18

捷運車票模擬 237 Next k 238 End If 239 Result = WriteCard(KeyA, KeyValue(0), BlockNo, DataBlock(0)) 240 WS = 1 先判斷乘車次數是否足夠, 不足則 Waring2 = 1,WS = 2; 反之則 Waring2 = 0 乘車次數減 1 flag = 0, 顯示到對應文字框內, 並將乘車次數 flag 存入卡片資料內 241 Else 242 BlockNo = 1 243 Result = ReadCard(KeyType, KeyValue(0), BlockNo, DataBlock(0)) 244 GetData2 = "" 245 For i = 0 To UBound(DataBlock) 246 GetData2 = GetData2 & Chr(DataBlock(i)) 247 Next i 248 uflag = Val(GetData2) 249 If uflag > 0 Then 250 uflag = uflag - 1 251 GetData2 = uflag 252 Text2(0).Text = GetData2 253 BlockNo = 1 254 For i = 0 To 15 255 DataBlock(i) = 0 256 Next i 257 i = 0 258 For j = 1 To Len(GetData2) 259 BlockArray2=StrConv(Mid(GetData2, j, 1), vbfromunicode) 260 If BlockArray2(0) < 128 Then 261 If i >= 16 Then Exit For 262 DataBlock(i) = BlockArray2(0) 263 i = i + 1 264 Else 265 If i >= 15 Then Exit For 266 DataBlock(i) = BlockArray2(0) 267 i = i + 1 9-19

RFID 通訊網路與應用 268 If i >= 16 Then Exit For 269 DataBlock(i) = BlockArray2(1) 270 i = i + 1 271 End If 272 Next j 273 Result = WriteCard(KeyA, KeyValue(0), BlockNo, DataBlock(0)) 274 BlockNo = 2 275 flag = 0 276 flags = flag 277 For i = 0 To 15 278 DataBlock(i) = 0 279 Next i 280 MaxLength = Len(flags) 281 If MaxLength > 0 Then 282 i = 0 283 For k = 1 To Len(flags) 284 BlockArray2=StrConv(Mid(flags,k,1), vbfromunicode) 285 If BlockArray2(0) < 128 Then 286 If i >= 16 Then Exit For 287 DataBlock(i) = BlockArray2(0) 288 i = i + 1 289 Else 290 If i >= 15 Then Exit For 291 DataBlock(i) = BlockArray2(0) 292 i = i + 1 293 If i >= 16 Then Exit For 294 DataBlock(i) = BlockArray2(1) 295 i = i + 1 296 End If 297 Next k 298 End If 299 Result = WriteCard(KeyA, KeyValue(0), BlockNo, DataBlock(0)) 300 Waring = 0 301 Else 302 MsgBox (" 車票使用數不足 ") 303 Text2(3).Text = " 車票使用數不足 " 304 BlockNo = 62 9-20

捷運車票模擬 305 For i = 0 To 15 306 DataBlock(i) = 0 307 Next i 308 MaxLength = Len(Text2(3).Text) 309 If MaxLength > 0 Then 310 i = 0 311 For k = 1 To Len(Text2(3).Text) 312 BlockArray2 = StrConv(Mid(Text2(3).Text, k, 1), vbfromunicode) 313 If BlockArray2(0) < 128 Then 314 If i >= 16 Then Exit For 315 DataBlock(i) = BlockArray2(0) 316 i = i + 1 317 Else 318 If i >= 15 Then Exit For 319 DataBlock(i) = BlockArray2(0) 320 i = i + 1 321 If i >= 16 Then Exit For 322 DataBlock(i) = BlockArray2(1) 323 i = i + 1 324 End If 325 Next k 326 End If 327 Result = WriteCard(KeyA, KeyValue(0), BlockNo, DataBlock(0)) 328 Waring2 = 1 329 WS = 2 330 End If 331 End If 332 End If 接著我們撰寫程式來判斷是否有錯誤狀況發生, 即 Waring Waring2 是否為 1 如果沒有出錯狀況發生, 亦即 Waring 以及 Waring2 都為 0 時, 則 WS = 0 333 If Waring = 0 Then 334 If Waring2 = 0 Then 335 MsgBox ("PASS") 336 Text2(3).Text = "PASS" 9-21

RFID 通訊網路與應用 337 BlockNo = 62 338 For i = 0 To 15 339 DataBlock(i) = 0 340 Next i 341 MaxLength = Len(Text2(3).Text) 342 If MaxLength > 0 Then 343 i = 0 344 For k = 1 To Len(Text2(3).Text) 345 BlockArray2=StrConv(Mid(Text2(3).Text, k, 1), vbfromunicode) 346 If BlockArray2(0) < 128 Then 347 If i >= 16 Then Exit For 348 DataBlock(i) = BlockArray2(0) 349 i = i + 1 350 Else 351 If i >= 15 Then Exit For 352 DataBlock(i) = BlockArray2(0) 353 i = i + 1 354 If i >= 16 Then Exit For 355 DataBlock(i) = BlockArray2(1) 356 i = i + 1 357 End If 358 Next k 359 End If 360 Result = WriteCard(KeyA, KeyValue(0), BlockNo, DataBlock(0)) 361 WS = 0 362 End If 363 End If 另外我們也必須撰寫呼叫讀寫器示警程式, 給予數據 WS, 最後將版面文字框數據存到 Data1 內 364 Call Led_Display(WS) 365 Data1.Recordset.AddNew 366 Data1.Recordset.Update 367 End Sub 9-22

捷運車票模擬 同時也將輸入在 Text3 文字框的資料存到 Data2 內 Private Sub Command1_Click() Data2.Recordset.Edit Data2.Recordset.Update End Sub 其中 data1 以及 data2 在 Visual Basic 之 form 中的屬性設計則如圖 9.16 以及圖 9.17 所示 圖 9.16 9-23

RFID 通訊網路與應用 圖 9.17 接著我們要來撰寫讀寫器示警程式, 讓它依 Waring 的數據來做警示, 內定 0 是 Pass,1 是使用範圍外,2 是乘車次數不足 Private Sub Led_Display(ByVal Waring As Integer) Select Case Waring Case 0 Call DeviceBlinkControl(GREEN_On Or RED_Off Or YELLOW_Off Or SOUND_OFF, 10) Case 1 Call DeviceBlinkControl(GREEN_Off Or RED_ON Or YELLOW_Off Or SOUND_ON, 10) Case 2 Call DeviceBlinkControl(GREEN_Off Or RED_Off Or YELLOW_Flash Or SOUND_ON, 10) End Select End Sub 9-24

捷運車票模擬 至於關閉識別片的讀取程式則如下所示 Private Sub cmdclosecard_click() Call CloseCard MsgBox (" 關閉卡片成功 ") frastep4.enable = False frastep5.enable = False End Sub 而關閉讀寫器的程式則如下所示 Private Sub cmdclosereader_click() Call CloseReader MsgBox (" 關閉讀寫器成功 ") frastep1.enable = True frastep2.enable = False frastep3.enable = False frastep4.enable = False frastep5.enable = False End Sub 9-25

9-26 RFID 通訊網路與應用