BÁO cáo THỰC HÀNH lập TRÌNH hệ THỐNG visual basic 6.0 - Pdf 27

I. Lý thuyết chung về cổng COM
1. Cổng nối tiếp (cổng COM)
Cổngnốitiếpđượcsử dụngđểtruyềndữliệuhaichiềugiữamáytínhvàngoạivi,

cácưuđiểm
sau:
- Khoảngcáchtruyềnxahơntruyềnsong
song;
- Sốdâykếtnối
ít;
- Cóthểtruyềnkhôngdâydùnghồng
ngoại;
- CóthểghépnốivớiviđiềukhiểnhayPLC(ProgrammableLogic
Device);
- Chophépnối
mạng;
- Cóthểtháolắpthiếtbịtronglúcmáytínhđanglàm
việc;
- Cóthểcungcấpnguồnchocácmạchđiệnđơn
giản.
Cácthiếtbịghépnốichiathành2loại:DTE(DataTerminalEquipment)và
DCE
(DataCommunicationEquipment).DCElàcácthiếtbị
trunggiannhưMODEMcònDTE

cácthiếtbịtiếpnhậnhaytruyềndữliệunhưmáytính,PLC,viđiềukhiển,…Việctrao
đổi
tínhiệuthôngthườngqua2 chânRxD(nhận)vàTxD(truyền).Cáctínhiệucònlạicó
chức
nănghỗtrợđểthiếtlậpvàđiềukhiểnquátrìnhtruyền,đượcgọilà cáctín hiệubắt
tay

D3
D4
D5
D6
D7
P
Stop
0 1
Khi không truyền dữ liệu, đường truyền sẽ ở trạng thái mark (điện áp -10V). Khi
bắt đầu truyền, DTE sẽ đưa ra xung Start (space: 10V) và sau đó lần lượt truyền từ
D0 đến D7 và Parity, cuối cùng là xung Stop (mark: -10V) để khôi phục trạng thái
đường truyền.
Các đặc tính kỹ thuật của chuẩn RS-232 như sau:
1
Chiềudàicablecực
đại 15m
Tốcđộdữliệucực
đại
20
Kbps
Điệnápngõracực
đại
±
25V
Điệnápngõracó
tải
±5Vđến±
15V
Trởkháng
tải

3 TxD DTE  DCE Transmitted Data: dữ liệu truyền
4 DTR DTE  DCE Data Terminal ready: DTE sẵn sàng làm
việc
5 GND - Ground: nối đất (0V)
6 DSR DCE  DTE Data set ready: DCE sẵn sàng làm việc
7 RTS DTE  DCE Request to send: DTE yêu cầu truyền dữ
liệu
8 CTS DCE  DTE Clear to send: DCE sẵn sàng nhận dữ liệu
9 RI DCE  DTE Ring Indicator: báo chuông
2
2. Truyền thông giữa hai nút.
Các sơ đồ khi kết nối dùng cổng nối tiếp:
Hình 2 – Kết nối đơn giản trong truyền thông nối tiếp.
Khithựchiệnkếtnốinhưtrên,quátrìnhtruyềnphảibảođảmtốcđộởđầuphát

thugiốngnhau.KhicódữliệuđếnDTE,dữliệunàysẽđượcđưavàobộđệmvàtạo
ngắt.Ngo
ài ra khi thực hiện kết nối giữa 2 DTE, ta còn dùng sơ đồ sau:
Hình 3 –Kết nối trong truyền thông nối tiếp dùng tín hiệu bắt tay.
KhiDTE1cầntruyềndữliệuthìchoDTRtíchcựctácđộnglênDSRcủa
DTE2
chobiếtsẵnsàngnhậndữliệuvàchobiếtđãnhậnđượcsóngmangcủaMODEM(ảo).
Sau
đó,DTE1tíchcựcchânRTSđểtácđộngđếnchânCTScủaDTE2chobiếtDTE1có
thể
nhậndữliệu.KhithựchiệnkếtnốigiữaDTEvà DCE,do tốcđộ truyềnkhácnhaunên
phải
thựchiệnđiềukhiểnlưulượng.Quátrinhđiềukhiểnnàycóthểthựchiệnbằngphần
mềm
hayphầncứng.Quátrìnhđiềukhiểnbằngphầnmềmthựchiệnbằnghaikýtự Xonvà

truyền)
0 R RBR
ReceiverBufferRegister(đệm
thu)
1 R/W BRDL
BaudRateDivisorLatch(sốchiabyte
thấp)
1
0 R/W IER
InterruptEnableRegister(chophép
ngắt)
1 R/W BRDH
Sốchiabyte
cao
2
R
IIR
InterruptIdentificationRegister(nhậndạng
ngắt)
W FCR
FIFOControl
Register
3 R/W LCR
LineControlRegister(điềukhiểnđường
dây)
4 R/W MCR
ModemControlRegister(điềukhiển
MODEM)
5 R LSR
LineStatusRegister(trạngtháiđường

Thuộc
tính

tả
CommPort
Sốthứtựcổngtruyền
thông
Input
Nhậnkýtựtừbộ
đệm
Output
Xuấtkýtựracổngnối
tiếp
PortOpen
Mở/đóng
cổng
Settings
Xácđịnhcácthamsố
truyền
Hình 06: Các thuộc tính của đối tượng MSComm
4.2. Các thuộc tính:
- Settings:Xác định các tham số cho cổng nối tiếp.
5
Cú pháp:
MSComm1.Settings = ParamString
Trong đó: MSComm1: là tên đối tượng
ParamString: là một chuỗi có dạng như sau: "BBBB,P,D,S"
+ BBBB: tốc độ truyền dữ liệu (bps) trong đó các giá trị hợp lệ là:
110 2400 38400
300 9600 (măc định) 56000

6
InBufferCount: số ký tự có trong bộ đệm nhận.
Cú pháp:
Count = MSComm1.InBufferCount
Thuộc tính này cùng dược dùng để xoá bộ đệm nhận bắng cách gán giá trị 0.
MSComm1.InBufferCount = 0
InBufferSize: đặt và xác định kích thước bộ đệm nhận (tính bằng byte).
Cú pháp:
MSComm1.InBufferCount = NumByte
Giá trị măc định là 1024 byte. Kích thước bộ đệm này phải đủ lớn để tránh
tình trạng mất dữ liệu.
- Các thuộc tính xuất dữ liệu:Bao gồm các thuộc tính Output, OutBufferCount
và OutBufferSize, chức năng của các thuộc tính này giống như các thuộc tính nhập.
- CDTimeout: Đặt và xác định khoảng thời gian lớn nhất (tính bằng ms) từ lúc
phát hiện sóng mang cho đến lúc có dữ liệu. Nếu quá khoảng thời gian này mà vẫn
chưa có dữ liệu thì sẽ gán thuộc tính CommEvent là CDTO (Carrier Detect Timeout
Error) và tạo sự kiện OnComm.
Cú pháp:
MSComm1.CDTimeout = NumTime
- DSRTimeout:Xác định thời gian chờ tín hiệu DSR trước khi xảy ra sự kiện
OnComm.
- CTSTimeout: Đặt và xác định khoảng thời gian lớn nhất (tính bằng ms) đợi tín
hiệu CTS trước khi đặt thuộc tính CommEvent là CTSTO và tạo sự kiện OnComm.
Cú pháp:
MSComm1.CTSTimeout = NumTime
- CTSHolding: Xác định đã có tín hiệu CTS hay chưa, tín hiệu này dùng cho quá
trình bắt tay bằng phần cứng (cho biết DCE sẵn sàng nhận dữ liệu), trả về giá trị
True hay False.
- DSRHolding: Xác định trạng thái DSR (báo hiệu sự tồn tại của DCE), trả về
giá trị True hay False.

ComEvDSR 4 Có thay đổi trên DSR (Data Set
Ready)
ComEvCD 5 Có thay đổi trên CD (Carrier Detect)
ComEvRing 6 Phát hiện chuông
ComEvEOF 7 Nhận ký tự kết thúc file
Các lỗi truyền thông:
Lỗi Giá
trị
Mô tả
ComBreak 1001 Nhận tín hiệu Break
ComCTSTO 1002 Clear To Send Timeout
ComFrame 1004 Lỗi khung
ComOver 1006 Phần cứng không đọc ký tự trước khi gửi ký
tự kế
ComCDTO 1007 Carrier Detect Timeout
ComRxOver 1008 Tràn bộ đệm nhận
ComRxParity 1009 Lỗi Parity
ComTxFull 1010 Tràn bộ đệm truyền
8
4.3. Sự kiện OnComm:
Sự kiện OnComm xảy ra bất cứ khi nào giá trị của thuộc tính CommEvent thay
đổi. Các thuộc tính Rthreshold và Sthreshold = 0 sẽ cấm sự kiện OnComm khi thực
hiện nhận hay gửi dữ liệu. Thông thường, Sthreshold = 0 và Rthreshold = 1.
9
II. Giới thiệu phần mềm tạo cổng COM ảo “Virtual Serial Port Driver”.
1. Giao diện chương trình
2. Chức năng
- Không giới hạn số lượng cặp cổng nối tiếp ảo được tạo ra.
- Cổng nối tiếp ảo hoàn toàn giống với cổng thực nên các ứng dụng không thể
nhận biết được sự khác biệt.

End Sub
11
Private Sub cmdSend_Click()
MSComm1.Output = Text2.Text
GXLight2.LampOn = True
End Sub
Private Sub Form_Load()
cmdSend.Caption = "&Send"
Text1.Text = ""
Text2.Text = ""
Text1.Enabled = False
cmdExit.Caption = "&Exit"
With MSComm1
.Settings = "9600,N,8,1"
.CommPort = 1
.RThreshold = 1
.SThreshold = 0
.InputMode = comInputModeText
.InputLen = 0
.Handshaking = comNone
.InBufferSize = 1024
.OutBufferSize = 1024
If .PortOpen = False Then
.PortOpen = True
End If
End With
With MSComm2
.Settings = "9600,N,8,1"
.CommPort = 2
.RThreshold = 1

13
a) Code lệnh:
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
MSComm2.CommPort = 2
MSComm2.Settings = "9600,N,8,1"
MSComm2.PortOpen = True
End Sub
Private Sub MSComm2_OnComm()
If MSComm2.CommEvent = comEvReceive Then
Text1.Text = Str(Asc(MSComm2.Input) * 0.5)
End If
End Sub
Private Sub Timer1_Timer()
MSComm1.Output = Chr(GXSlider1.Value)
End Sub
14
Bài thực hành 3: Dùng các đối tượng Form, Label, Textbox, CommandButton,
Vscrollbar, Timer, MSComm để thiết kế chương trình thu phát một thông số qua
cổng COM2 với yêu cầu:Khung tin gồm một kí tự khởi đầu, một kí tự kết thúc. 4 ký
tự mang thông số trong đó 2 thông số đầu mang trạng thái của hai nút ấn, 2 thông
số sau chứa giá trị của 2 Vsrollbar trong khoảng 0 đến 200.
a) Giao diện chương trình:
b) Code lệnh:
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True

End Sub
16
Bài thực hành 4: Dùng các đối tượng Form, Label, Textbox, CommandButton,
Vscrollbar, Time,r MSComm để thiết kế chương trình thu phát một thông số qua
cổng COM với yêu cầu : Sx1x2y1y2E trong đó kí tự S và E là 2 kí tự khởi đầu và
kết thúc khung. các kí tự x1 x2 mang giá trị của 2 kênh tương tự , y1 y2 mang trạng
thái ON, OFF của hai tiếp điểm. Nếu chúng có kí tự 0 nghĩa là trạng thái OFF và
kí tự 1 nghĩa là trạng thái ON.
a) Giao diện chương trình:
17
b) Code lệnh:
Private Sub Form_load()
Dim a, b As Integer
With MSComm1
.CommPort = 1
.Settings = " 9600,n,8,1"
.RThreshold = 1
.SThreshold = 1
.PortOpen = True
End With
End Sub
Private Sub GXSwitch1_Click()
If GXSwitch1.SwitchOn = False Then
a = 0
18
Else
a = 1
End If
End Sub
Private Sub GXSwitch2_Click()

20


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status