Cổng LPT của máy tính (hay còn gọi là PC Parallel Port) là một đầu cắm cái gồm 25 chân (25 pin female – DB25) [21]. Cấu tạo của nó như sau:
Hình 1: Cấu tạo cổng LPT
2. Điều khiển cổng LPT
Như trên hình vẽ ta thấy từ chân 2 đến chân 9 của cổng LPT là 8 bit dữ liệu đầu ra (tương ứng từ D0 đến D7). Các chân đầu ra này có dạng TTL, nghĩa là trạng thái dữ liệu ở các mức 0 hoặc 1. Để điều khiển được các thiết bị qua cổng này, ta phải tạo được các mức điện áp ra tương ứng tại các chân mà ở đó có thiết bị cần điều khiển.
Như vậy ta cần phải đưa được các mức điện áp tại đầu ra dữ liệu theo ý muốn. Với hệ điều hành Windows 2k/XP nguyên bản, ta không thể truy xuất trực tiếp phần cứng qua các hàm in/out port được, nghĩa là không thể gọi trực tiếp các hàm API để thực hiện lệnh in/out dữ liệu tại cổng LPT được. Chính vì vậy ta phải tạo một thư viện chứa các hàm API mà ở đó ta có thể gọi chúng để thực hiện các lệnh in/out port theo yêu cầu. Để thực hiện được việc này ta lưu file inpout32.dll của thư viện truy cập LPT trên Win2k/XP vào thư mục hệ thống của Windows theo đường dẫn: C:\Windows\system32
Công việc tiếp theo là tạo một COM để truy xuất phần cứng. Công nghệ lập trình tạo COM tương đối phức tạp, để đơn giản hóa, ta có thể hiểu COM là một đối tượng mà người lập trình tạo ra nhằm mục đích thực hiện một công việc gì đó. Việc sử dụng COM đơn giản chỉ là cung cấp các tham số, gọi hàm và nhận kết quả. Trong lập trình ASP thì việc sử dụng COM được thực hiện bởi lệnh như sau:
Khai báo COM: Dim obj[tên_COM] Ví dụ: Dim objLPT
Tham chiếu đến COM: Set obj = CreateObject(“tên _COM_đăng_ký”)
Ví dụ: Set
objLPT=Server.CreateObject("LPTControlCOM")
Gọi một hàm của COM: obj[tên_COM].tên_hàm(tham_số…) Ví dụ: objLPT.InPort(STATUS)
Sau đây là ví dụ về việc tạo một COM để truy xuất cổng LPT bằng Visual Basic 6.0 trong bộ Visual Studio 6.0 của Microsoft:
Project mới được mở ra có dạng như sau:
Ta có thể đặt tên cho COM này bằng bất kỳ tên nào tùy ý, ví dụ ta đặt tên cho COM là LPTControlCOM trong cửa sổ Name Properties
và viết Code cho nó như sau:
Private Declare Function Inp Lib "inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As Integer Private Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
Function InPort(PortAddress) InPort = Inp(PortAddress) End Function
Sub OutPort(PortAddress, Value) Out PortAddress, Value
Lưu Project vào thư mục C:\Minh\
với tên Class là C:\Minh\LPTControl.cls
và tên Project là C:\Minh\LPTControlCOM.vbp
Tiếp theo ta sẽ cho Visual Basic biên dịch Project
Cách biên dịch như sau:
Vào Menu File và chọn Make LPTControlCOM.dll
Lưu vào thư mục C:\Windows\system32
Sở dĩ ta lưu vào thư mục này vì LPTControlCOM.dll được coi như là một file hệ thống của Windows
Bước tiếp theo ta sẽ đăng ký LPTControl.dll với Windows, ta sẽ mở cửa sổ lệnh (Command Windows) và gõ lệnh:
C:\>regsvr32 :\windows\system32\LPTControl.dll
Khi đó Windows sẽ có thông báo:
Nghĩa là ta đã đăng ký thành công một COM với Windows.
Với lập trình trên Internet bằng ngôn ngữ ASP có sử dụng các script (Java script hoặc VB script) thì ta có thể gọi COM này để truy xuất đọc và ghi (read/write) các thanh ghi trạng thái của LPT bằng những câu lệnh đơn giản.
Ví dụ ta dùng ngôn ngữ kịch bản VB script thì các câu lệnh sẽ như sau:
Khởi tạo COM như sau: Set
Với địa chỉ các thanh ghi trạng thái của LPT (hệ Hexa) DATA = 378
STATUS = 379 CONTROL = 37a
thì ta có thể đọc thanh ghi trạng thái STATUS như sau: x= objLPT.InPort(&H379)
hoặc ghi dữ liệu ở các đầu ra bằng lệnh: objLPT.OutPort(&H378,y)
Để kết thúc việc truy xuất LPT, ta dùng câu lệnh như sau: Set objLPT = Nothing
Việc xác định giá trị bit cho các chân của LPT được cung cấp bởi bảng sau [28]:
Chân Bit Giá trị
2 D0 1 3 D1 2 4 D2 4 5 D3 8 6 D4 16 7 D5 32 8 D6 64 9 D7 128
3. Kiểm tra
Để kiểm tra đầu ra TTL của cổng LPT, ta có thể dùng đồng hồ đo (VOM kế) đo điện áp đầu ra của các chân dữ liệu hoặc lắp một mạch điện tử đơn giản để kiểm tra một cách trực quan theo sơ đồ nguyên lý được cung cấp sau đây:
(Các chân từ 18 đến 25 của cổng LPT phải được nối với mass)
Chương 4: Thực nghiệm
ĐIỀU KHIỂN CÁC THIẾT BỊ
CHO NGÔI NHÀ THÔNG MINH CỦA THẾ KỶ XXI
1. Giới thiệu:
Như đã đề cập đến ở phần trước, ta có thể điều khiển cổng LPT của máy tính bằng việc truy xuất phần cứng thông qua COM và lập trình ASP. Điều đó có nghĩa là ta hoàn toàn có thể sử dụng web để điều khiển được mức điện áp ra TTL của các chân Data (D0 đến D7). Từ đó, ta có thể ứng dụng để điều khiển từ xa (thông qua web) một số thiết bị điện trong gia đình hay công sở …, nghĩa là ta có thể nối các thiết bị điện này vào cổng LPT, rồi thông qua web, ta có thể ngồi bất cứ nơi đâu truy cập Internet để điều khiển các thiết bị này qua trang web đã được xác định mà không phải có mặt trực tiếp tại nơi lắp đặt thiết bị.
2. Mô hình § Ì n1 § Ì n2 Qu¹ t B×nhNL TBx Hub/Switch Internet Modem/Router Modem/Router Hub/Switch Server Client
Như mô tả trên mô hình, thì các thiết bị sử dụng điện trong ngôi nhà thông minh của chúng ta được nối trực tiếp với một máy tính đặt tại nhà, mà ta tạm coi đó là một Server. Các thiết bị này có thể là các thiết bị sử dụng điện thông thường như đèn, quạt, hay bình nước nóng hoặc bất cứ thiết bị nào đó mà ta cần để điều khiển tắt hoặc bật từ xa. PC làm Server này sẽ được cài đặt các phần mềm cần thiết, được cấu hình để thực hiện những yêu cầu mà chúng ta đặt ra.
Còn Client là một máy tính PC bình thường ở bất cứ nơi nào, miễn là máy tính đó được nối mạng Internet. Người sử dụng là chúng ta sẽ ngồi trên máy Client ở xa hoặc rất xa máy Server ở nhà có thể bật trình duyệt Web, quan sát ngôi nhà của mình và điều khiển các thiết bị điện nối vào máy Server qua chính Client đó.
3. Giải pháp thực hiện:
Tuy nhiên, khi thực hiện điều đó cũng cũng làm nảy sinh một vấn đề, đó là các thiết bị này luôn đòi hỏi dòng lớn và thường điện áp cung cấp cho nó phải là nguồn xoay chiều 220V. Để giải quyết được vấn đề này thì ta sẽ lắp một mạch ngoài điều khiển gián tiếp các thiết bị, đảm bảo an toàn cho PC mà vẫn cung cấp nguồn cho các thiết bị theo đúng điện áp và đủ dòng điện. Như vậy ta sẽ xây dựng một mạch điện điểu khiển đóng mở các Rơle theo như sơ đồ sau đây và lúc này thì việc cấp nguồn cho các thiết bị sẽ phụ thuộc vào chế độ đóng mở của các Rơle trong mạch
R¬ le
Ch©n d÷ liÖu LPT (Di)
Ch©n Mass LPT (18->25) Nguån cung cÊp
Vcc
Nguồn cung cấp cho mạch là nguồn nuôi từ ngoài PC, dải điện áp có thể từ 5V đến 24 V (phụ thuộc vào loại Rơle mà ta sử dụng). Transistor là loại switching, còn các diode dùng để bảo vệ các cuộn dây của Rơle, Transistor và chính cổng LPT của PC.
Việc xây dựng một mạch điện để điều khiển các thiết bị có thể được đơn giản hóa bằng một IC tích hợp, với thiết kế nhỏ gọn, mức tín hiệu đầu vào TTL phù hợp với đầu ra từ cổng LPT của PC. Có hai loại IC có thể được sử dụng cho mục đích này là ULN2003 hoặc ULN2803, cấu trúc của từng loại như sau:
Như ta thấy trên hình vẽ thì hai loại IC này tương đương nhau, chỉ khác là UNL2003 gồm 16 chân với 7 lối vào, tương ứng với nó là 7 lối ra trong khi ULN2083 có 18 chân với 8 lối vào và cũng tương ứng là 8 lối ra.
Đặc điểm của hai IC này là tích hợp sẵn Diode bảo vệ bên trong, nên ta có thể sử dụng trong mạch mà không cần phải lắp thêm linh kiện gì cho nó, điện áp sử dụng có dải rộng phù hợp để điều khiển các loại Rơle từ 5V đến 24V, lắp mạch đơn giản, hoạt động với độ tin cậy cao.
Hiện nay, trên thị trường Việt Nam thì loại IC ULN2003 phổ biến, mặc dù ngõ vào điều khiển ít hơn so với ULN2803, nhưng do tính thông dụng của nó nên ta sẽ xây dựng mạch điện điều khiển các thiết bị theo IC ULN2003.
Sơ đồ nguyên lý của mạch điện như sau:
4. Các bước tiến hành:
Với sơ đồ nguyên lý được cung cấp như trên, ta sẽ lắp lắp một mạch điện tử để thực hiện mục đích của mình, có thể sử dụng Orcad, Protel, Winboard hay bất cứ chương trình phần mềm nào khác để vẽ mạch in rồi sau đó tiến hành lắp ráp theo đúng sơ đồ trên. Sử dụng IC ULN2003 ta sẽ có 7 đầu vào điều khiển cùng với 7 đầu ra TTL tương ứng, như vậy ta sẽ điều khiển được 7 thiết bị sử dụng điện trong nhà bằng mạch điện vừa chế tạo được.
Sau khi lắp lắp xong mạch điện, như vậy đã đảm bảo rằng ta đã hoàn thành các bước chuẩn bị cho phần cứng. Bước tiếp theo ta sẽ chuẩn bị các phần mềm và thực hiện các thao tác để cho mạch điện có thể hoạt động theo ý muốn của chúng ta.
Cấu hình của phần cứng yêu cầu:
- CPU: tốc độ tương đối để truy cập Internet và xử lý dữ liệu Khuyến nghị: Ram >= 256 MB
Chip Pentium IV >= 1.8GHz - Hệ điều hành: Windows XP (hoặc 2k)
- Kết nối Internet thông qua ADSL, modem ADSL
- Webcam hoặc IP camera (kèm theo Video Capture Card) - Các thiết bị sử dụng điện thông thường trong gia đình.
4.1. Cài đặt IIS
Để có thể sử dụng được ngôn ngữ ASP (Active Server Page) cho lập trình Web thì ta phải cài đặt IIS (Internet Information Service) cho máy tính, bởi vì thông thường các trình duyệt không hiểu được các mã lệnh của ASP. Việc cài đặt IIS sẽ tạo trên các máy đơn một Web Server ảo (hay còn gọi là Web Server địa phương- Localhost) [2], từ đó ta có thể thử nghiệm các trang .asp hoặc có thể tạo một Server để có thể truy cập từ các Client ở xa đến máy tính mà ta sẽ sử dụng làm máy chủ.
Cách cài đặt như sau:
Vào Setting -> Control Panel -> Add or Remove Programs -> Add/Remove Windows Components, màn hình hiện lên như sau:
Chọn Finish, ta đã hoàn thành việc cài đặt IIS cho máy tính, lúc này trên máy tính sẽ xuất hiện thư mục C:\Inetpub, trong thư mục Inetpub
chứa thư mục con wwwroot, tại nơi đây chứa các file mà chúng được coi như trong một server, nhưng là trong server ảo. Ta có thể thử nghiệm hoạt động của IIS bằng cách vào chương trình soạn thảo văn bản
notepad.exe tạo một file hello.asp chứa đoạn code như sau: <%
Response.write “Hello World” %>
Lưu file này trong thư mục C:\Inetpub\wwwroot, sau đó mở trình duyệt Internet (có thể là Internet Explorer, Opera hoặc Mozilla Firefox…), gõ địa chỉ http://localhost/hello.asp, màn hình hiện lên dòng chữ như sau:
Điều đó có nghĩa là IIS của ta đã chạy tốt, tiếp theo ta sẽ lập trình để có thể sử dụng cổng LPT cho điều khiển thiết bị.
4.2. Lập trình điều khiển
Dùng trình soạn thảo Microsoft FrontPage, Microsoft Visual InterDev hoặc Notepad để tạo một đoạn Code như sau:
<%
' Địa chỉ các thanh ghi Const DATA =&H378
Const STATUS =&H379 Const CONTROL =&H37a Dim objLPT Dim pin1 Dim pin2 Dim pin3 Dim pin4 Dim pin5 Dim pin6 Dim pin7 Dim pin8 Dim pin9 Dim pin10 Dim pin11 Dim pin12 Dim pin13 Dim pin14 Dim pin15 Dim pin16 Dim pin17 Dim reg Set objLPT=Server.CreateObject("MyLPTCOM.LPTAccess") ' Write to LPT If Request("Submit")<>"" Then pin2=IIf(Request("pin2")="1",1,0) pin3=IIf(Request("pin3")="1",2,0) pin4=IIf(Request("pin4")="1",4,0) pin5=IIf(Request("pin5")="1",8,0) pin6=IIf(Request("pin6")="1",16,0) pin7=IIf(Request("pin7")="1",32,0) pin8=IIf(Request("pin8")="1",64,0) pin9=IIf(Request("pin9")="1",128,0)
reg=pin2 Or pin3 Or pin4 Or pin5 Or pin6 Or pin7 Or pin8 Or pin9
' Write to DATA port objLPT.OutPort DATA, reg
pin1=IIf(Request("pin1")="1",1,0) pin14=IIf(Request("pin14")="1",2,0) pin16=IIf(Request("pin16")="1",4,0) pin17=IIf(Request("pin17")="1",8,0) reg=pin1 Or pin14 Or pin16 Or pin17 ' Write to CONTROL port
objLPT.OutPort CONTROL, reg
End If
' Read from LPT
reg=objLPT.InPort(STATUS)
If((reg AND &H40)=&H40) Then pin10="checked"
End If ' inverted
If((reg AND &H80)=0) Then pin11="checked"
End If
If((reg AND &H20)=0) Then pin12=""
Else
pin12="checked" End If
If((reg AND &H10)=0) Then pin13=""
Else
pin13="checked" End If
If((reg AND &H8)=&H8) Then pin15="checked"
End If
reg=objLPT.InPort(CONTROL) If((reg AND 1)= 1) Then pin1="checked"
End If
If((reg AND 2)= 2) Then pin14="checked"
If((reg AND 4)= 4) Then pin16="checked"
End If
If((reg AND 8)= 8) Then pin17="checked"
End If
objLPT.OutPort CONTROL, reg reg=objLPT.InPort(DATA)
If((reg AND &H01)=0) Then pin2=""
Else
pin2="checked" End If
If((reg AND &H02)=0) Then pin3=""
Else
pin3="checked" End If
If((reg AND &H04)=0) Then pin4=""
Else
pin4="checked" End If
If((reg AND &H08)=0) Then pin5=""
Else
pin5="checked" End IF
If((reg AND &H10)=0) Then pin6=""
Else
pin6="checked" End IF
If((reg AND &H20)=0) Then pin7=""
Else
pin7="checked" End If
If((reg AND &H40)=0) Then pin8=""
Else
pin8="checked" End If
If((reg AND &H80)=0) Then pin9=""
Else
pin9="checked" End If
Set objLPT= Nothing
Function IIf(condition,value1,value2)
If condition Then IIf = value1 Else IIf = value2 End Function
%>
<html> <head>
<title> Website điều khiển các thiết bị qua LPT
</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head> <body>
<h2><strong> Điều khiển các thiết bị </strong> <strong> qua Web </strong></h2>
<h3> (Chọn các thiết bị cần Bật hoặc Tắt)
</h3> <table> <td></td>
<form method="post"" action="dieukhienTB.asp"> <td>
<table width="300" border="1"> <tr>
<td width="90">
<p align="center">Đầu ra T/B</p> </td>
<td width="104">
<p align="center">Mô tả chi tiết</p> </td> <td width="84"> <p align="center">Vị trí lắp đặt</p> </td> </tr> <tr> <td width="90"><input name="pin2"
type="checkbox" value="1" <%=pin2%>> Thiết bị 1</td> <td width="104"> Đèn tuýp 1 </td> <td width="84"> <p align="center">Phòng khách </td> </tr> <tr>
<td width="90"><input name="pin3"
type="checkbox" value="1" <%=pin3%>> Thiết bị 2 </td> <td width="104"> Đèn tuýp 2 </td> <td width="84"> <p align="center">Phòng ăn</p> </td> </tr> <tr> <td width="90"><input name="pin4"
type="checkbox" value="1" <%=pin4%>> Thiết bị 3 </td> <td width="104"> Đèn tuýp 3 </td> <td width="84"> <p align="center">Phòng ngủ </td> </tr> <tr> <td width="90"><input name="pin5"
type="checkbox" value="1" <%=pin5%>> Thiết bị 4 </td> <td width="104"> Đèn tuýp 4 </td> <td width="84"> <p align="center">Phòng học </td> </tr> <tr> <td width="90"><input name="pin6"
type="checkbox" value="1" <%=pin6%>> Thiết bị 5 </td> <td width="104"> Quạt 1</td> <td width="84"> <p align="center">Phòng khách</p> </td> </tr> <tr> <td width="90"><input name="pin7"
type="checkbox" value="1" <%=pin7%>> Thiết bị 6 </td> <td width="104"> Quạt 2 </td> <td width="84"> <p align="center">Phòng ăn</p> </td> </tr>
<tr>
<td width="90"><input name="pin8"
type="checkbox" value="1" <%=pin8%>> Thiết bị 7 </td> <td width="104"> Điều hòa </td> <td width="84"> <p align="center">Phòng ngủ</p> </td> </tr> <tr> <td width="90"><input name="pin9"
type="checkbox" value="1" <%=pin9%>> Thiết bị 8 </td> <td width="104"> Bình nước nóng</td> <td width="84"> <p align="center">Phòng tắm</p> </td> </tr> <tr>
<td colspan="3" align="center" valign="middle" width="290"><input type="submit" name="Submit"
value="Xác lập đầu ra"></td> </tr>
</table> </form> </table>
<h3> (Chủ nhà: Nguyễn Công Minh)</h3>
<h3>   ; </h3>
</body>
Lưu vào máy tính với tên file là DieukhienTB.asp trong thư mục
C:\Inetpub\wwwroot. Sau khi hoàn tất, đóng cửa sổ soạn thảo lại và thử nghiệm kết quả:
Mở trình duyệt và gõ địa chỉ như sau:
http://localhost/dieukhienTB.asp
Màn hình có giao diện như trên, với các thiết bị cụ thể và từng vị trí lắp đặt thiết bị được mô tả chi tiết, ta sẽ chọn các thiết bị cần Bật hoặc Tắt bằng cách Click vào các nút (Button) tương ứng, sau đó Click vào Tab
Ví dụ ta muốn bật Đèn tuýp của Phòng khách để khi đi làm về mở cửa ra là đèn trong nhà đã sáng thì ta chọn như sau:
Rồi xác định trạng thái ra bằng cách Click vào Tab
Như vậy ta đã hoàn tất việc điều khiển thiết bị qua cổng LPT. Tuỳ thuộc vào mục đích và yêu cầu sử dụng, ta có thể chọn các chủng loại thiết bị và bị trí lắp đặt sao cho phù hợp nhằm tối ưu hóa trong quá trình sử dụng. Việc thay đổi cũng có thể tiến hành một cách dễ dàng
5. Cấu hình WebServer:
Phần trên đã trình bày về các thao tác thực hiện để điểu khiển thiết bị sử dụng điện qua cổng LPT bằng lập trình ASP chạy trên ứng dụng Web.