Xây dựng giao diện

Một phần của tài liệu đồ án vi điều khiển thiết kế máy chấm công dùng công nghệ RFID (Trang 77)

Visual Csharp hiện là ngơn ngữ lập trình được sử dụng rộng rãi nhất để viết các ứng dụng chạy trên hệ điều hành windows. Visual Csharp cho phép phát triển nhanh chĩng các ứng dụng truyền thống được thiết kế theo mơ hình đặc trưng của windows. Với Csharp người thiết kế cĩ thể rất nhanh chĩng và dễ dàng tạo ra được một giao diện trực quan thân thiện với người sử dụng. Ngồi ra các cú pháp trong Csharp cũng khá giống với ngơn ngữ hướng đối tượng C++. Nên khi sử dụng qua ngơn ngữ này người lập trình sẽ cĩ cái nhìn tổng quan hơn về lập trình hướng đối tượng, một xu hướng trong nghành cơng nghệ thơng tin.

Visual Csharp cĩ khá nhiều ưu điểm khiến tơi phải lựa chọn sử dụng nĩ trong đồ án này . Các ưu điểm của nĩ cĩ thể kể đến như:

Visual Csharp là một ngơn ngữ lập trình cĩ cấu trúc tương đối đơn giản

Ngơn ngữ này là lý tưởng để phát triển các giao diện đồ họa người dùng (GUI).

Các thư viện MSDN trực tuyến cung cấp một tương tác tồn diện và hệ thống trợ giúp trực tuyến.

Dễ dàng xây dựng các phần mềm quản lý giao tiếp giữa máy tính và thiết bị ngoại vi thơng qua các chuẩn như RS232, USB 2.0 chỉ đơn giản bằng cách gọi các hàm WIN API đã cĩ sẵn trong hệ điều hành windows.

2.3.2 Xây dựng cơ sở dữ liệu

Cơ sở dữ liệu mà ta sẽ lựa chọn sử dụng ở đây là MySQL. MySQL là giải pháp nhanh nhất để sử dụng hệ thống quản lý dữ liệu quan hệ RDMS. MySQL là một phần mềm mã nguồn mở mạnh mẽ được cấp phép của tổ chức GPU,nên người dùng khơng phải trả phí.Ngồi ra nĩ khá dễ dàng trong việc cài đặt và sử dụng nên rất phù hợp với các ứng dụng khơng địi hỏi tính chuyên nghiệp caọ MySQL bao gồm một MySQL server, và một số chương trình tiện ích giúp quản lý cơ sở dữ liệu

MySQL như workbench giúp người dùng tạo cơ sở dữ liệu với giao diện sử dụng rất thân thiện.

Ta sẽ thiết kế một cơ sở dữ liệu nhỏ cĩ tên là “rfid” bao gồm hai bảng dữ liệu để

lưu trữ thơng tin cá nhân và thơng tin bệnh án ,đĩ là các bảng cĩ tên là “PersonalDetail” và “MedicalDetail”.Với bảng thơng tin cá nhân ta cần phải đề cập đến các mục :

Tên nhân viên (‘firstname’) Họ nhân viên (‘lastname’) Địa chỉ (‘ađress’)

Ngày sinh (‘dateofbirth’) Số điện thoại (‘phone’)

Cịn với bảng thơng tin bệnh án ta phải đề cập đến các mục như : Ngày đi lamg (‘presentcomplaint’)

Ngày (‘date’)

Qúa trinh lịch sử (‘fmhistory’)

Dữ liệu ảnh trong quá trình là việc (‘pictureurl’)

Bây giờ ta sẽ đi vào cụ thể ,xây dựng ra cơ sở dữ liệu chỉ ra ở trên bằng các lệnh trong màn hình quản trị DOS:

Chúng ta sẽ bắt đầu MySQL bằng cách gõ vào dịng lệnh dưới đây:

Mysql – u root –p fake_password

Để tạo ra cơ sở dữ liệu cĩ tên ‘rfid’ ta dung lệnh:

CREATE DATABASE RFID

Trước khi ta đi vào tạo một bảng dữ liệu, chúng ta phải lựa chọn cơ sở dữ liệu sử dụng bằng lệnh sau:

USE RFID;

Bảng thơng tin cá nhân và thơng tin bệnh án sẽ được tạo ra thơng qua các lệnh dưới đây :

CREATE TABLE PERSONALDETAILS ( LASTNAME VARCHAR (50) NOT NULL, FIRSTNAME VARCHAR(50) NOT NULL, DATEOFBIRTH VARCHAR(20) NOT NULL, AĐRESS VARCHAR(100) NOT NULL, PHONE VARCHAR(15) NOT NULL,

PATIENTID VARCHAR(8) NOT NULL, PRIMARY KEY(PATIENTID) );

CREATE TABLE MEDICALINFO ( PRESENTCOMPLAINT TEXT,

FMHISTORY TEXT NOT NULL, PICTUREURL VARCHAR(100), DATE VARCHAR(30) NOT NULL, ID VARCHAR(8) NOT NULL,

PRIMARY KEY(ID) );

Như vậy cơ sở dữ liệu ‘rfid’ đã sẵn sàng cho chúng ta sử dụng trong ứng dụng . (adsbygoogle = window.adsbygoogle || []).push({});

2.3.3 Giao tiếp với cơ sở dữ liệu

Ta sẽ sử dụng ngơn ngữ PHP để tương tác với cơ sở dữ liệu MySQL và để tự động sinh ra các trang web động phù hợp.Trong ứng dụng này, PHP được sử dụng với các chức năng là:

Cập nhật cơ sở dữ liệu bệnh nhân do bác sĩ gửi lên.

Sinh ra các trang web động để hiển thị thơng tin về một bệnh nhân.

Ở đây ta sẽ chỉ ra một số thao tác cơ bản với cơ sở dữ liệu trong php.Đĩ là các thao tác lấy thơng tin về từ cơ sở dữ liệu,và thao tác cập nhật mới lên cơ sở dữ liệụCĩ một điều cần chú ý ở đây là, số ID dùng để truy nhập vào cơ sở dữ liệu chính là mã số thẻ mà ta cĩ được ở các khâu trước trong giao diện C#. Sau đĩ ta cĩ thể thực hiện truyền biến chứa giá trị mã thẻ đĩ đến trang php hay trang html cần thiết bằng lệnh đơn giản sau:

UrlString=http : //local h o s t / u p d a t e p ers o n al_ p r o ce s s. ph p + ”?” + “number=” +TagNum

Khi đĩ trong trang updatepersonal_process.php ta cĩ thể lấy giá trị biến chứa giá trị mã thẻ như sau:

//Get the patient tag number from the URL

$id = $_GET['number'];

Để hiển thị ta phải thực hiện hai việc.Một là, thực thi câu lệnh sql để lấy về các thơng tin cần thiết của một bệnh nhân. Hai là, xây dựng một trang web động để hiển thị kết quả như dưới đây:

//Display patient's lastname

$sql = "SELECT lastname FROM PersonalDetails where id = '$id'"; $result = mysql_query($sql) or die("Debug: Couldn't execute query"); $row = mysql_fetch_array($result);

echo "<h2>Lastname:</h2> <h3>{$row['lastnamé]}</h3><br>";

//Display patient's firstname

$sql = "SELECT firstname FROM PersonalDetails where id = '$id'"; $result = mysql_query($sql) or die("Debug: Couldn't execute query"); $row = mysql_fetch_array($result);

echo "<h2>Firstname:</h2> <h3>{$row['firstnamé]}</h3><br>";

//Display patient's ađress

$sql = "SELECT ađress FROM PersonalDetails where id = '$id'"; $result = mysql_query($sql) or die("Debug: Couldn't execute query"); $row = mysql_fetch_array($result);

echo "<h2>Ađress:</h2> <h3>{$row['ađress']}</h3><br>";

Cịn để thực hiện thao tác cập nhật cơ sở dữ liệu ,đầu tiên ta phải lấy về giá trị các biến từ các form nhập trong trang HTML gửi lên máy chủ.Ví dụ, ở đây ta sẽ lấy giá trị các biến từ trang html nhập thơng tin cá nhân do bác sĩ nhập vào và gửi lên máy chủ như sau:

//The request function retrieves the variables posted from the previous

$firstname = $_REQUEST['firstnamé]; $lastname = $_REQUEST['lastnamé]; $ađress = $_REQUEST['ađress']; $phone = $_REQUEST['phoné];

Sau đĩ là lệnh thực hiện cập nhật vào bảng dữ liệu ‘PersonalDetail’ của cơ sở dữ liệu ‘rfid’:

$sql = "UPDATE PersonalDetails SET firstname= '$firstnamé, lastname = '$lastnamé, ađress = '$ađress',phone = '$phoné WHERE id = '$id'"; $result=mysql_query($sql);

2.3.4 Quản lý kết nối USB giữa reader và máy tính

Phần quản lý kết nối USB giữa reader và máy tính, ta sẽ tích hợp nĩ vào bên trong phần mềm quản lý của ta ở trên. Chỉ đơn giản là ta sẽ thực hiện gọi các hàm

giao tiếp với thiết bị ngoại vi , mà hãng Microsoft đã cung cấp sẵn trong các lớp thư viện WINDOWS API của hệ điều hành windows. Bây giờ ta sẽ đi tìm hiểu qua về chúng.

API bao gồm các hàm, các thơng báo, các cấu trúc dữ liệu, các kiểu dữ liệu, mà chúng ta cĩ thể sử dụng để tạo ra các ứng dụng chạy trên hệ điều hành Windows. Các phần của API mà ta hay sử dụng nhất , đĩ là các mã phục vụ cho việc gọi các hàm API từ Windows. Cái này bao gồm, phần khai báo các thủ tục, phần định nghĩa các kiểu dữ liệu của người dùng, và phần khai báo các hằng số.

Trước khi một ứng dụng cĩ thể trao đổi dữ liệu với một HID, thì nĩ phải nhận dạng được thiết bị và lấy được các thơng tin về các report của thiết bị đĩ. Đầu tiên

ứng dụng sẽ tìm ra các HID được gắn vào hệ thống là gì. Sau đĩ, nĩ kiểm tra thơng tin về mỗi HID đĩ cho đến khi nĩ tìm thấy được một trong các thuộc tính mong muốn. Với các thiết bị truyền thống, ứng dụng cĩ thể tìm kiếm các thơng tin về mã số nhà phát hành và mã số sản phẩm. Hoặc ứng dụng cĩ thể tìm ra thiết bị đĩ là thuộc kiểu HID đặc biệt nào, chẳng hạn như HID mouse hay là HID joystick. Sau khi đã tìm ra được thiết bị, ứng dụng cĩ thể trao đổi thơng tin với thiết bị đĩ bằng cách gửi hoặc nhận các report. (adsbygoogle = window.adsbygoogle || []).push({});

Dưới đây là bảng danh sách các hàm API được sử dụng để thiết lập liên lạc thơng tin và trao đổi dữ liệu với một HID.

Bảng2.2 Danh sách các hàm API dùng cho kết nối usb trong windows

Các hàm API DLL Mục đích

HidD_GetHidGuid hid.dll Lấy GUID cho lớp HID

SetupDiGetClassDevs setupapịdll Trả về thơng tin của một thiết

bị từ một tập hợp chứa tất cả các thiết bị trong một lớp đặc biệt.

SetupDiEnumDeviceInterfaces setupapịdll Trả về thơng tin một thiết bị trong tập hợp thơng tin thiết bị.

CreateFile kernel32.dll Mở một kết nối truyền thơng

tới thiết bị.

HidD_GetAttributes hid.dll Trả về mã số nhà sản xuất, mã

số sản phẩm, và số phiên bản của sản phẩm.

HidD_GetPreparsedData hid.dll

HidP_GetCaps hid.dll Trả về một cấu trúc mơ tả các

khả năng của thiết bị.

WriteFile kernel32.dll Gửi một report ở đầu ra tới

ReadFile kernel32.dll Đọc một report đầu vào từ thiết bị.

HidD_SetFeature hid.dll Gửi một Feature report tới

thiết bị.

HidD_GetFeature hid.dll Đọc một Feature report từ

thiết bị.

CloseHandle kernel32.dll

2.4 Kết Luận

Như vậy ở chương này chúng ta đã đi thiết kế một hệ thống quản lý bệnh nhân bằng cơng nghệ RFID hồn chỉnh một cách chi tiết từ việc thiết kế reader đến thiết kế phần mềm chạy trên máy tính. Ở đây tơi xin phép được lưu ý rằng, trong quá trình thiết kế chúng ta cần đặc biệt chú ý tới anten cho reader. Tuy cách chế tạo nĩ khá đơn giản, chỉ là quấn dây đơng theo một hình trịn, hay hình vuơng,...Nhưng nếu tính tốn sai dẫn đến sai số quá lớn , cĩ thể khiến cho reader khơng thể đọc được thẻ. Vì vậy khi chế tạo anten cần cĩ các máy đĩ cần thiết để biết được một cách chính nhất cĩ thể giá trị độ tự cảm của cuộn dây anten.

TÀI LIỆU THAM KHẢO

[1] Sandip Lahiri, RFID Sourcebook. Upper Sađle River, NJ: Prentice Hall PTR, 2005.

[2] Himanshu Bhatt, Bill Glover, RFID Essentials. S e b as topo l , C A: ĨReilly, 2006. [3] Patrick J.Sweeney II, RFID For Dummies. Hobok e n , N J : Wiley, 2005.

[4] V.Daniel Hunt, Albert Puglia, Mike Puglia, RFID A Guide To Radio Frequence Identification. Hobo k e n, N J : Wiley, 2007.

[5] Frank Thornton, Brad Haines, Anand M Das, Hersh Bhargava, RFID Securitỵ

Rockland, Massachusetts: Syngress Publishing, 2006.

[6] http:// w ww . rf d es ignlin e .c om/howto/202101579 , truy nhập cuối cùng ngày 10/5/2010. (adsbygoogle = window.adsbygoogle || []).push({});

[7] http:// w ww . u s b . o r g/ , truy nhập cuối cùng ngày 10/5/2010.

[8] http:// w ww .e mmic r o e l ec t r onic . c om/ L ine .as p ?IdLine=3/,truy nhập cuối cùng ngày 1/5/2010.

[9] http:// w ikipedia . o r g/ , truy nhập cuối cùng ngày 10/5/2010.

[10] http:// w ww . mic r o c hi p .c om/ , truy nhập cuối cùng ngày 10/5/2010. [11] http:// w ww . my s q l .c om/ ,truy nhập cuối cùng ngày 10/4/2010.

[12] http://php.n e t/inde x . php/,truy nhập cuối cùng ngày 12/4/2010.

BẢNG ĐỐI CHIẾU CÁC THUẬT NGỮ VIỆT- ANH

Khả năng đánh địa chỉ Ađressability Dịng điện xoay chiều Alternating Current Điều chế biên độ A mplitude M odulation

Khĩa dịch biên Amplitude Shift Key

Các tiêu chuẩn cỡ dây của Hoa Kỳ American Wire Gauge

Giao diện lập trình ứng dụng Application Programming Interface

Tán xạ ngược Backscatter

Mã vạch Bar Code

Hai pha Biphase

Thẻ chặn (được sử dụng các thẻ RFID khác)

Blocker Tag

Đốt cháy (để thao tác ghi lên chip) Burn

Phân cực trịn Circular Polarization

Khối tách xung Clock Extractor

Lớp Class

Một loại cơng nghệ để chế tạo vi

mạch tích hợp Complementary Metal Oxide

Semiconductor

Sĩng liên tục Continuous Wave

Kiểm tra độ dư vịng Cyclic Redundancy Check

Bộ mơ tả Descriptor

Bộ mơ tả thiết bị (usb) Descriptor Device Bộ mơ tả các báo cáo (usb) Descriptor Report Bộ mơ tả chuỗi (usb) Descriptor String Bộ mơ tả các giao diện (usb) Descriptor Interface Bộ mơ tả các đặc tính vật lý (usb) Descriptor physical

Lưỡng cực Dipole

Dịng điện một chiều Direct Current

Lưỡng cực đơi Dual Dipole

Cơng xuất bức xạ đẳng hướng Equivalent Isotropic Radiated Power (adsbygoogle = window.adsbygoogle || []).push({});

Hiệu suất bức xạ Effective Radiated Power Được lập trình sẵn bởi nhà sản xuất Fac tory Pr ogr amme d

Phần mềm nhỏ được cài đặt trên vi điều khiển để nĩ cĩ thể chạy ngay khi khởi động Firmware Lưỡng cực gấp Folded Dipole Điều chế tần số (hay Điều tần) Frequency Modulation Khĩa dịch tần Frequency Shift Key Tốc độ đầy đủ (usb) Full Speed

Giao diện đồ họa người dùng Graphical User Interface Tần số cao

High Frequency

Thiết bị giao tiếp với con người Human Interface Device

Thiết bị chuột được hỗ trợ bởi lớp HID Thiết bị cần điều khiển được hỗ trợ bởi lớp HID Mouse HID HID Joystick

D a n h m c I t e

m Phân cực tuyến tính Linear Polarization Mạng nội bộ Local Area Network Tần số thấp Low Frequency Tốc độ thấ p (us b) Lo w Spe ed Phần mềm chịu trách nhiệm kết nối phần cứng RFID vào hệ thống Midleware Điều biên Modulator Khĩa on – off On Off K ey ing Mạng cá nhân P e rs onal Ar e a N e two r k Vịng khĩa pha pha P ha s e M odulation Khĩa dịch pha Phase Shift Key Cắm là chạy (usb) Plug And Play Phân cực Polarizat ion

Điều khiển / chỉnh lưu nguồn Power control/rectifier Bảng mạch in P r inted c i rc uit bo a r d Mã số sản phẩm Product

Mã hĩa khoảng xung Pulse Interval Encoding Nhận dạng tần số vơ tuyến Radio Frequency Identification Thiết bị đọc thẻ

Reader

Bộ nhớ chỉ đọc Read Only Memory Chỉ

Only Đọc – ghi Read -Writ e Thiết bị đọc thẻ nhanh lẹ R e ad e r Agile 91

Hệ thống quản lý dữ liệu cơ sở (trong hệ điều hành windows)

Relational Database Management System

Đoạn thơng tin Segment

Giao thức quản lý mạng đơn giản Simple Network Management

Pro toc ol Phân lớp Subclass Đa truy nhập phân chia theo thời gian Time Division Multiple Access Máy phát tín hiệu Transmitter Bộ phát đáp Transponder Tần số siêu cao Ultra High Frequency Buýt nối tiếp đa năng Universal Serial Bus Mã số thế hệ sản phẩm Version Mã số nhà sản xuất Vendor Bộ dao động được Voltage Controlled

Mạng khơng dây Wireless

Ghi một lần – đọc nhiều lần Write Once - Read Many Anten lưỡng cực gấp 2 dây 2-Wire Folded Dipole Antenna

Anten lưỡng cực gấp 3 dây 3-Wire Folded Dipole Antena

PHỤ LỤC A : MỘT SỐ MÃ NGUỒN

Trong phần phụ lục này tơi chỉ xin phép trích dẫn một số phần mã nguồn chương trình quan trọng. Trong đĩ phải kể đến là phần mã điều khiển đọc thẻ EM4100 và descriptor mơ tả thiết bị trong kết nối USB. Đĩ là hai tệp em4100.c

usb_descriptor.h Em4100.c :

// Purpose: Reads the ID number and data number // Inputs: A pointer to a 5 byte array to fill // * The first byte will have the ID // * The last 4 bytes will have the data

// Outputs: TRUE if read successful, FALSE if read failed int1 read_em4100(int8* data)

{ int8 i;

RF_get(sizeof(RFbuffer)*8, TRUE); // Fill the buffer with data for(i=0; i<2; ++i)

{

while(!END_OF_RFBUFFER) { (adsbygoogle = window.adsbygoogle || []).push({});

if(header_search_em4100()) // Try to find 9 consecutive 1s {

if(decode_data_em4100(data)) // Try to decode the data after the header {

RFbuffer_fill(0xAA); // Prevents false detection return TRUE; // Return sucessful read }

} }

RFbuffer_invert(); // Invert the buffer because the

} // Manchester encoded data could have

// been read starting at the wrong edge RFbuffer_fill(0xAA); // Prevents false detection

return FALSE; // Return error

// Purpose: Search for the header consisting of 9 ones // Inputs: None

// Outputs: TRUE if the header was found, FALSE if it was not found int1 header_search_em4100()

{

int bitCounter = 0;

// Loops until 9 consecutive 1s are found // or the end of the receive buffer is reached while(!END_OF_RFBUFFER) { if(RFbuffer_getBit() == 1) { if(++bitCounter == 9) { return TRUE; } } else { bitCounter = 0; } } return FALSE; }

// Purpose: Decodes the ID number and data number // Inputs: A pointer to a 5 byte array to fill

// * The first byte will have the ID // * The last 4 bytes will have the data

// Outputs: TRUE if read successful, FALSE if read failed int1 decode_data_em4100(int8* data)

{ int1 bit = 0; int8 count = 1; int1 parity = 0; int1 colParity1 = 0; int1 colParity2 = 0;

int1 colParity3 = 0;

Một phần của tài liệu đồ án vi điều khiển thiết kế máy chấm công dùng công nghệ RFID (Trang 77)