Tài liệu Lập trình hệ thống - Chương 4: Giao tiếp cổng hệ thống

Tóm tắt Tài liệu Lập trình hệ thống - Chương 4: Giao tiếp cổng hệ thống: ... sử dụng cho các chương trình nhỏ. ActiveX MsComm được bổ sung vào một Visual Basic Project thông qua menu Project > Components: Hình 4.5 – Bổ sung đối tượng MsComm vào VBP Biểu tượng của MsComm: và các thuộc tính cơ bản mô tả như sau: Thuộc tính Mô tả CommPort Số thứ tự cổng truyền t...N 10 C+ 1 C1- 3 C2+ 4 C2- 5V+ 2 V- 6 R1OUT 12 R 2O U T 9 T1OUT 14 T 2O U T 7 MAX2325 9 4 8 3 7 2 6 1 DB9 C25 10u C26 10u C27 10u VCC C28 10u C29 10u TxD RxD 4.7K TxD 1 6 2 5 4 4N35 16 2 5 4 4N35 1K VCC 4.7K 68K RxD_PC TxD_PC 5 9 4...- Để hoạt động đúng, modem cần có các thông số xác định. Nếu không có sự thay đổi cần thiết, modem hoạt động theo giá trị mặc định(default). Nếu thông số trong lệnh bị bỏ qua, giá trị thông số mặc định là 0. 6.2. Các lệnh cơ bản của Modem Lệnh Mô tả +++ Chuyển Modem sang chế độ lệnh A/ L...

pdf41 trang | Chia sẻ: havih72 | Lượt xem: 286 | Lượt tải: 0download
Nội dung tài liệu Tài liệu Lập trình hệ thống - Chương 4: Giao tiếp cổng hệ thống, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
= 1095 
 End 
 Begin VB.Label lblLED 
 BackStyle = 0 'Transparent 
 Caption = "LED6" 
 Height = 375 
 Index = 6 
 Left = 240 
 TabIndex = 6 
 Top = 3000 
 Width = 975 
 End 
 Begin VB.Label lblLED 
 BackStyle = 0 'Transparent 
 Caption = "LED5" 
 Height = 375 
 Index = 5 
 Left = 240 
 TabIndex = 5 
 Top = 2520 
 Width = 975 
 End 
 Begin VB.Label lblLED 
 BackStyle = 0 'Transparent 
 Caption = "LED4" 
 Height = 375 
 Index = 4 
 Left = 240 
 TabIndex = 4 
 Top = 2040 
 Width = 975 
 End 
 Begin VB.Label lblLED 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 99 
 BackStyle = 0 'Transparent 
 Caption = "LED3" 
 Height = 375 
 Index = 3 
 Left = 240 
 TabIndex = 3 
 Top = 1560 
 Width = 975 
 End 
 Begin VB.Label lblLED 
 BackStyle = 0 'Transparent 
 Caption = "LED2" 
 Height = 375 
 Index = 2 
 Left = 240 
 TabIndex = 2 
 Top = 1080 
 Width = 975 
 End 
 Begin VB.Label lblLED 
 BackStyle = 0 'Transparent 
 Caption = "LED1" 
 Height = 375 
 Index = 1 
 Left = 240 
 TabIndex = 1 
 Top = 600 
 Width = 975 
 End 
 Begin VB.Label lblLED 
 BackStyle = 0 'Transparent 
 Caption = "LED0" 
 Height = 375 
 Index = 0 
 Left = 240 
 TabIndex = 0 
 Top = 120 
 Width = 975 
 End 
 Begin VB.Shape shpLED 
 BorderColor = &H000000FF& 
 FillColor = &H000000FF& 
 FillStyle = 0 'Solid 
 Height = 375 
 Index = 7 
 Left = 840 
 Shape = 3 'Circle 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 100 
 Top = 3480 
 Width = 375 
 End 
 Begin VB.Shape shpLED 
 BorderColor = &H000000FF& 
 FillColor = &H000000FF& 
 FillStyle = 0 'Solid 
 Height = 375 
 Index = 6 
 Left = 840 
 Shape = 3 'Circle 
 Top = 3000 
 Width = 375 
 End 
 Begin VB.Shape shpLED 
 BorderColor = &H000000FF& 
 FillColor = &H000000FF& 
 FillStyle = 0 'Solid 
 Height = 375 
 Index = 5 
 Left = 840 
 Shape = 3 'Circle 
 Top = 2520 
 Width = 375 
 End 
 Begin VB.Shape shpLED 
 BorderColor = &H000000FF& 
 FillColor = &H000000FF& 
 FillStyle = 0 'Solid 
 Height = 375 
 Index = 4 
 Left = 840 
 Shape = 3 'Circle 
 Top = 2040 
 Width = 375 
 End 
 Begin VB.Shape shpLED 
 BorderColor = &H000000FF& 
 FillColor = &H000000FF& 
 FillStyle = 0 'Solid 
 Height = 375 
 Index = 3 
 Left = 840 
 Shape = 3 'Circle 
 Top = 1560 
 Width = 375 
 End 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 101 
 Begin VB.Shape shpLED 
 BorderColor = &H000000FF& 
 FillColor = &H000000FF& 
 FillStyle = 0 'Solid 
 Height = 375 
 Index = 2 
 Left = 840 
 Shape = 3 'Circle 
 Top = 1080 
 Width = 375 
 End 
 Begin VB.Shape shpLED 
 BorderColor = &H000000FF& 
 FillColor = &H000000FF& 
 FillStyle = 0 'Solid 
 Height = 375 
 Index = 1 
 Left = 840 
 Shape = 3 'Circle 
 Top = 600 
 Width = 375 
 End 
 Begin VB.Shape shpLED 
 BorderColor = &H000000FF& 
 FillColor = &H000000FF& 
 FillStyle = 0 'Solid 
 Height = 375 
 Index = 0 
 Left = 840 
 Shape = 3 'Circle 
 Top = 120 
 Width = 375 
 End 
End 
Attribute VB_Name = "Form1" 
Attribute VB_GlobalNameSpace = False 
Attribute VB_Creatable = False 
Attribute VB_PredeclaredId = True 
Attribute VB_Exposed = False 
Private Sub cmdExit_Click() 
If MSComm1.PortOpen Then 
 MSComm1.PortOpen = False 
End If 
End 
End Sub 
Private Sub cmdSend_Click() 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 102 
Dim t As Integer 
Dim i As Integer 
t = 0 
For i = 0 To 7 
 t = t + (2 ^ i) * (1 - shpLED(i).FillStyle) 
Next i 
MSComm1.Output = Chr(t) 
End Sub 
Private Sub Form_Load() 
MSComm1.Settings = "9600,N,8,1" 
MSComm1.CommPort = 1 
MSComm1.PortOpen = True 
End Sub 
Private Sub lblLED_Click(Index As Integer) 
shpLED(Index).FillStyle = 1 - shpLED(Index).FillStyle 
End Sub 
Private Sub MSComm1_OnComm() 
Dim t As String 
Dim n As Integer 
Dim i As Integer 
If MSComm1.CommEvent = comEvReceive Then 
 n = Asc(MSComm1.Input) 
 For i = 0 To 7 
 chkSW(i).Value = n Mod 2 
 If chkSW(i).Value = 0 Then 
 chkSW(i).Caption = "Switch " & Str(i) & 
" off" 
 Else 
 chkSW(i).Caption = "Switch " & Str(i) & 
" on" 
 End If 
 n = Fix(n / 2) 
 Next i 
End If 
End Sub 
6. Giao tiếp với MODEM 
6.1. Giao tiếp 
Quá trình trao đổi dữ liệu giữa máy tính và Modem được thực hiện theo cơ chế bắt 
tay phần cứng hay phần mềm. 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 103 
- Bắt tay phần cứng: máy tính muốn truyền dữ liệu thì cho RTS = 1 và chờ 
Modem trả lời bằng tín hiệu CTS. Ngược lại, Modem muốn truyền dữ liệu thì cho 
DSR = 1 và chờ tín hiệu DTR từ máy tính. 
- Bắt tay phần mềm: dùng ký tự Xon (Ctrl-S) và Xoff (Ctrl-Q) để bắt đầu truyền 
hay kết thúc truyền. 
Các giao thức truyền dữ liệu trên Modem: 
- XModem: chia thành khối 128 byte, mỗi khối chèn thêm CRC 4 byte. 
- YModem: khối 1024 byte. 
- ZModem: khối có kích thước thay đổi tuỳ theo đường truyền. 
Quy tắc truyền lệnh trên Modem: 
- Mỗi dòng lệnh của modem bắt đầu bằng ký tự AT, ngoại trừ lệnh A/ và +++. 
- Dòng lệnh có thể chứa nhiều lệnh. 
- Kết thúc lệnh bằng ký tự Enter (mã ASCII là 13) ngoại trừ lệnh A/ và +++. 
- Dòng lệnh cuối cùng được lưu trong modem. Có thể dùng lệnh A/ để thực hiện lại 
lệnh này. 
- Thông báo kết quả thực hiện lệnh của modem có thể ở dạng từ chữ hay số( giá trị 
mặc định là chữ). Có thể sử dụng lệnh V để lựa chọn dạng thông báo là chữ hay 
số. 
- Để hoạt động đúng, modem cần có các thông số xác định. Nếu không có sự thay 
đổi cần thiết, modem hoạt động theo giá trị mặc định(default). Nếu thông số trong 
lệnh bị bỏ qua, giá trị thông số mặc định là 0. 
6.2. Các lệnh cơ bản của Modem 
Lệnh Mô tả 
+++ Chuyển Modem sang chế độ lệnh 
A/ Lặp lại lệnh trước 
A Cho phép kết nối và phát tín hiệu sóng mang. Modem sẽ báo tín hiệu CONNECT 
nếu thu được tín hiêu sóng mang từ modem đầu cuối. Nếu không thu được sóng 
mang, modem sẽ gác máy và thông báo NO CARRIER 
DPn Quay số điện thoại n dạng xung 
DTn Quay số điện thoại n dạng tone 
H0 Gác máy 
H1 Nhấc máy 
O0 Chuyển về chế độ dữ liệu 
O1 Chế độ điều chỉnh Modem 
Q0 Cho phép Modem gởi thông báo đến DTE (mặc định) 
Q1 Cấm Modem gởi thông báo 
Q2 Gởi thông báo khi Modem chủ động kết nối, không gởi khi Modem nhận cuộc 
gọi 
V0 Nhận thông báo dạng số 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 104 
V1 Nhận thông báo dạng ký tự (mặc định) 
Sn = V Nạp giá trị V vào thanh ghi Sn 
S0 = V: chờ V hồi chuông trước khi trả lời, V = 0 – 255 (mặc định V = 0: không 
trả lời) 
S6 = V: chờ V giây trước khi quay số (mặc định V = 2) 
S7 = V: chờ V giây kể từ lúc gọi đến lúc nhận được tín hiệu, nếu không sẽ thông 
báo lỗi 
Sn? Đọc nội dung thanh ghi Sn 
Z0 Reset Modem về cấu hình 0 
Z1 Reset Modem về cấu hình 1 
L0, L1, 
L2, L3 
Âm lượng loa Modem 
M0 Tắt loa 
M1 Mở loa cho đến khi nhận dược sóng mang (măc định) 
M2 Mở loa 
M3 Tắt loa khi quay số và nhận sóng mang 
6.3. Các thanh ghi thông dụng trên modem 
Thanh ghi S0: xác định số hồi chuông nhận được mà sau đó modem sẽ trả lời một 
cách tự động. Giá trị trong thanh ghi này có thể thay đổi trong khoảng từ 0-255. mặc định 
giá trị là 0 (không trả lời). 
Thanh ghi S1: Thanh ghi S1 chỉ có tác dụng khi thanh ghi S0 khác 0, dùng để đếm 
số hồi chuông thu được. 
Thanh ghi S2: xác định giá trị thập phân của các ký tự (mã ASSCII) được dùng làm 
ký tự thoát, Giá trị mặc định là 43(+) 
Thanh ghi S3: xác định ký tự được dùng để kết thúc một dòng lệnh, mặc nhiên là 13 
(tương ứng là Enter) 
Thanh ghi S4: xác định ký tự xuống dòng sau ký tự kết thúc, giá trị mặc nhiên là 10 
(line feed) 
Thanh ghi S5: xác định phím xoá lui, giá trị mặc nhiên là 8 (backspace) 
Thanh ghi S6: xác định thời gian đợi sau khi truy cập đường điện thoại và trước khi 
tiến hành quoay digit đầu tiên trong một lệnh quay số. Ðây là thời gian trì hoãn cho phép để 
dial tone cung cấp từ đường truyền. Giá trị mặc nhiên và tối thiểu là 2s. 
Thanh ghi S7: xác định thời gian mà modem đợi tín hiệu sóng mang trước khi gác 
máy. Giá trị mặc định là 30s. 
Thanh ghi S8: xác định thời gian tạm dừng cho mỗi dấu phẩy ',' trong chuỗi lệnh 
quay số. Giá trị mặc định là 2s 
Thanh ghi S9: xác định thời gian mà tín hiệu sóng mang phải hiện diện để modem 
có thể nhận biết được, giá trị mặc định là 600ms. Giá trị này nếu quá lớn sẽ gây lỗi trong dữ 
liệu truyền. 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 105 
Thanh ghi S10: xác định thời gian cho phép tín hiệu sóng mang có thể biến mất 
trong chốc lát nào đó mà không cắt cuộc nối. Ổn định trong khoảng 100-25500ms, giá trị 
mặc nhiên tùy vào khả năng chống nhiễu của từng modem, thường là 700ms. 
Thanh ghi S11: xác định tốc độ quay số khi sử dụng phương pháp quay số tone, giá 
trị mặc nhiên tùy vào modem, thường vào khoảng 70ms. 
Thanh ghi S12: xác định thời gian an toàn khi truy nhập vào ký tự thoát (+++). Nếu 
giá trị nhỏ quá có thể nhập không kịp, giá trị lớn quá so với tốc độ nhập cũng không thể 
thoát được. 
6.4. Các thông báo của Modem 
Dạng ký tự Dạng số Ý nghĩa 
OK 0 Lệnh thành công 
CONNECT 1 Kết nối 300 bps 
RING 2 Có tín hiệu chuông 
NO CARRIER 3 Không có sóng mang 
ERROR 4 Lỗi: nhận lệnh không giá trị, sai kiểm tra, hàng lệnh quá dài
CONNECT 1200 5 Kết nối 1200bps 
NO DIAL TONE 6 Không có âm hiệu mời quay số 
BUSY 7 Máy bận 
NO ANSWER 8 Không có tín hiệu trả lời 
CONNECT 2400 10 Kết nối 2400bps 
CONNECT 4800 11 Kết nối 4800bps 
CONNECT 9600 12 Kết nối 9600bps 
CONNECT 14400 13 Kết nối 14400bps 
CONNECT 19200 14 Kết nối 19200bps 
CONNECT 16800 15 Kết nối 16800bps 
CONNECT 57600 18 Kết nối 57600bps 
CONNECT 7200 24 Kết nối 7200bps 
CONNECT 12000 25 Kết nối 12000bps 
CONNECT 28800 32 Kết nối 28800bps 
CONNECT 115200 33 Kết nối 115200bps 
CARRIER 300 40 Phát hiện sóng mang 
CARRIER 9600 50 Phát hiện sóng mang 
CARRIER 28800 58 Phát hiện sóng mang 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 106 
Ví dụ lập trình điều khiển Modem như sau: 
Hình 4.13 – Giao tiếp và điều khiển Modem 
Chương trình nguồn: 
VERSION 5.00 
Object = "{648A5603-2C6E-101B-82B6-
000000000014}#1.1#0"; "MSCOMM32.OCX" 
Object = "{F9043C88-F6F2-101A-A3C9-
08002B2F49FB}#1.2#0"; "COMDLG32.OCX" 
Begin VB.Form frmModem 
 Caption = "Modem example" 
 ClientHeight = 4065 
 ClientLeft = 60 
 ClientTop = 345 
 ClientWidth = 5925 
 LinkTopic = "Form1" 
 ScaleHeight = 4065 
 ScaleWidth = 5925 
 StartUpPosition = 3 'Windows Default 
 Begin VB.CommandButton cmdSave 
 Caption = "Save" 
 Height = 495 
 Left = 4320 
 TabIndex = 14 
 Top = 1320 
 Width = 1095 
 End 
 Begin VB.TextBox txtReceive 
 Height = 375 
 Left = 960 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 107 
 TabIndex = 12 
 Top = 1320 
 Width = 3015 
 End 
 Begin VB.Timer Timer1 
 Enabled = 0 'False 
 Interval = 1000 
 Left = 4920 
 Top = 2400 
 End 
 Begin VB.CommandButton cmdExit 
 Caption = "Exit" 
 Height = 495 
 Left = 4560 
 TabIndex = 10 
 Top = 2880 
 Width = 975 
 End 
 Begin VB.TextBox txtDial 
 Height = 375 
 Left = 960 
 TabIndex = 7 
 Top = 2400 
 Width = 2895 
 End 
 Begin VB.CommandButton cmdDial 
 Caption = "Dial" 
 Height = 495 
 Left = 1680 
 TabIndex = 5 
 Top = 3000 
 Width = 1095 
 End 
 Begin VB.CommandButton cmdSend 
 Caption = "Send" 
 Height = 495 
 Left = 4320 
 TabIndex = 4 
 Top = 720 
 Width = 1095 
 End 
 Begin VB.CommandButton cmdOpen 
 Caption = "Open Port" 
 Height = 495 
 Left = 240 
 TabIndex = 3 
 Top = 3000 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 108 
 Width = 1215 
 End 
 Begin VB.CommandButton cmdBrowse 
 Caption = "Browse" 
 Height = 495 
 Left = 4320 
 TabIndex = 1 
 Top = 120 
 Width = 1095 
 End 
 Begin MSComDlg.CommonDialog diagSend 
 Left = 4200 
 Top = 3120 
 _ExtentX = 847 
 _ExtentY = 847 
 _Version = 393216 
 End 
 Begin VB.TextBox txtSend 
 Height = 375 
 Left = 960 
 TabIndex = 0 
 Top = 360 
 Width = 3015 
 End 
 Begin MSCommLib.MSComm MSComm1 
 Left = 5160 
 Top = 3000 
 _ExtentX = 1005 
 _ExtentY = 1005 
 _Version = 393216 
 DTREnable = -1 'True 
 Handshaking = 2 
 NullDiscard = -1 'True 
 RThreshold = 1 
 RTSEnable = -1 'True 
 End 
 Begin VB.Label Label3 
 Caption = "File receive:" 
 Height = 375 
 Left = 0 
 TabIndex = 13 
 Top = 1320 
 Width = 855 
 End 
 Begin VB.Label lblReceive 
 Caption = "Receive file !!! Select 
file name." 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 109 
 ForeColor = &H000000FF& 
 Height = 375 
 Left = 840 
 TabIndex = 11 
 Top = 1920 
 Visible = 0 'False 
 Width = 2895 
 End 
 Begin VB.Label lblStatus 
 Caption = "Disconnected" 
 Height = 375 
 Left = 120 
 TabIndex = 9 
 Top = 3720 
 Width = 5775 
 End 
 Begin VB.Label Label2 
 Caption = "Dial:" 
 Height = 375 
 Left = 120 
 TabIndex = 8 
 Top = 2400 
 Width = 735 
 End 
 Begin VB.Label Label1 
 Caption = "File send:" 
 Height = 375 
 Left = 120 
 TabIndex = 6 
 Top = 360 
 Width = 735 
 End 
 Begin VB.Label lblSize 
 ForeColor = &H00FF0000& 
 Height = 375 
 Left = 960 
 TabIndex = 2 
 Top = 840 
 Width = 1815 
 End 
End 
Attribute VB_Name = "frmModem" 
Attribute VB_GlobalNameSpace = False 
Attribute VB_Creatable = False 
Attribute VB_PredeclaredId = True 
Attribute VB_Exposed = False 
Private Connected As Boolean 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 110 
Private SendFlag As Boolean 
Private ReceiveFlag As Boolean 
Private FileReceive As Integer 
Private CRFlag As Boolean 
Private Sub cmdBrowse_Click() 
On Error GoTo Loi 
diagSend.FileName = "" 
diagSend.Filter = "All files(*.*)|*.*" 
diagSend.InitDir = App.Path 
diagSend.ShowOpen 
txtSend.Text = diagSend.FileName 
lblSize.Caption = Str(Round(FileLen(txtSend.Text) / 
1024, 2)) + "KB" 
Exit Sub 
Loi: 
lblSize.Caption = "0 KB" 
txtSend.Text = "" 
End Sub 
Private Sub cmdDial_Click() 
If Not MSComm1.PortOpen Then 
 MsgBox "Comm Port Closed. Open first!!!", 
vbOKOnly + vbCritical, "Error" 
ElseIf Trim(txtDial.Text) = "" Then 
 MsgBox "Enter phone's number!!!", vbOKOnly + 
vbCritical, "Error" 
Else 
 If cmdDial.Caption = "Dial" Then 
 MSComm1.Output = "ATDT" & Trim(txtDial.Text) 
+ vbCr 
 cmdDial.Caption = "Hang up" 
 lblStatus.Caption = "Dialing ..." 
 Else 
 MSComm1.Output = "ATH1" + vbCr 
 cmdDial.Caption = "Dial" 
 lblStatus.Caption = "Hang up" 
 End If 
End If 
End Sub 
Private Sub cmdExit_Click() 
If MSComm1.PortOpen Then 
 MSComm1.PortOpen = False 
End If 
End 
End Sub 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 111 
Private Sub cmdOpen_Click() 
MSComm1.PortOpen = Not MSComm1.PortOpen 
If MSComm1.PortOpen Then 
 cmdOpen.Caption = "Close Port" 
 MSComm1.Output = "ATS0=5" + vbCr 
 Call Form_Load 
Else 
 cmdOpen.Caption = "Open Port" 
 lblStatus.Caption = "Disconnected" 
End If 
End Sub 
Private Sub cmdSave_Click() 
 FileReceive = FreeFile 
 ReceiveFlag = True 
 Timer1.Enabled = False 
 Do 
 diagSend.FileName = "" 
 diagSend.ShowSave 
 If Trim(diagSend.FileName) = "" Then 
 MsgBox "File name error!!", 
vbCritical + vbOKOnly, "Error" 
 End If 
 Loop While Trim(diagSend.FileName) = "" 
 txtReceive.Text = diagSend.FileName 
 MSComm1.Output = "RECEIVE" + vbCr 
 Open Trim(txtReceive.Text) For Output As 
#FileReceive 
End Sub 
Private Sub cmdSend_Click() 
Dim FileNum As Integer 
Dim Buffer As String 
If Not MSComm1.PortOpen Then 
 MsgBox "Comm Port Closed. Open first!!!", 
vbOKOnly + vbCritical, "Error" 
ElseIf Not Connected Then 
 MsgBox "Not connected!!!", vbOKOnly + 
vbCritical, "Error" 
ElseIf Trim(txtSend.Text) = "" Then 
 MsgBox "Select a file to send!!!", vbOKOnly + 
vbCritical, "Error" 
Else 
 MSComm1.Output = "SEND" + vbCr 
 Do 
 DoEvents 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 112 
 Loop While Not SendFlag 
 FileNum = FreeFile 
 Open Trim(txtSend.Text) For Input As #FileNum 
 Do 
 Input #FileNum, Buffer 
 If Right(Buffer, 1) vbCr Then Buffer = 
Buffer + vbCrLf 
 MSComm1.Output = Buffer 
 Loop While Not EOF(FileNum) 
 MSComm1.Output = "END FILE" 
 Close #FileNum 
 SendFlag = False 
End If 
End Sub 
Private Sub Form_Load() 
Connected = False 
SendFlag = False 
ReceiveFlag = False 
CRFlag = False 
End Sub 
Private Sub MSComm1_OnComm() 
Dim Buffer As String 
Dim Buffer1 As String 
Dim Buff As String 
Dim i As Integer 
Select Case MSComm1.CommEvent 
 Case comEvRing 
 lblStatus.Caption = "Ringing..." 
 Case comEvCD 
 If MSComm1.CDHolding Then 
 lblStatus.Caption = "Connected" 
 Connected = True 
 Else 
 lblStatus.Caption = "Disconnected" 
 Connected = False 
 End If 
 Case comEvReceive 
 Buffer = MSComm1.Input 
 If InStr(Buffer, "SEND") Then 
 Timer1.Enabled = True 
 Exit Sub 
 End If 
 If InStr(Buffer, "RECEIVE") Then 
 SendFlag = True 
 Timer1.Enabled = False 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 113 
 Buffer = "" 
 Exit Sub 
 End If 
 If InStr(Buffer, "CONNECT") Then 
 Connected = True 
 lblStatus.Caption = "Connected" 
 Exit Sub 
 End If 
 If ReceiveFlag Then 
 Buffer1 = "" 
 For i = 1 To Len(Buffer) 
 Buff = Mid$(Buffer, i, 1) 
 If Buff = Chr$(13) Then 
 CRFlag = True 
 Buff = "" 
 ElseIf Buff = Chr$(10) Then 
 CRFlag = False 
 Buff = "" 
 If Not CRFlag Then 
 Buffer1 = Buffer1 + Buff 
 End If 
 Next i 
 Print #FileReceive, Buffer1 
 End If 
 If InStr(Buffer, "END FILE") Then 
 Close #FileReceive 
 Call Form_Load 
 End If 
 Case comEvEOF 
 lblStatus = "Disconnected" 
 Connected = False 
End Select 
End Sub 
Private Sub Timer1_Timer() 
lblReceive.Visible = Not lblReceive.Visible 
End Sub 
Private Sub txtSend_LostFocus() 
On Error GoTo Loi 
lblSize.Caption = Str(Round(FileLen(txtSend.Text) / 
1024, 2)) + "KB" 
Exit Sub 
Loi: 
lblSize.Caption = "0 KB" 
txtSend.Text = "" 
End Sub 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 114 
7. Mạng 485 
Chuẩn RS232 dùng đường truyền không cân bằng vì các tín hiệu lấy chuẩn là GND 
chung nên dễ bị ảnh hưởng của nhiễu làm tốc độ và khoảng cách truyền bị giới hạn. Khi 
muốn tăng khoảng cách truyền, môt phương pháp có thể sử dụng là dùng 2 dây truyền vi sai 
vì lúc này 2 dây có cùng đặc tính nên sẽ loại trừ được nhiễu chung. Hai chuẩn được sử dụng 
là RS422 và RS485 nhưng thông thường sử dụng RS485. Điện áp vi sai yêu cầu phải lớn 
hơn 200mV. Nếu VAB > 200 mV thì tương ứng với logic 1 và VAB < -200 mV tương ứng với 
logic 0. Chuẩn RS485 sử dụng hai điện trở kết thúc là 120 Ω tại hai đầu xa nhất của đường 
truyền và sử dụng dây xoắn đôi. 
Hình 4.13 – Chuẩn giao tiếp RS422 
Hình 4.14 – Chuẩn giao tiếp RS485 
Các đặc tính kỹ thuật: 
Đặc tính RS422 RS485 
Số thiết bị truyền 1 32 
Số thiết bị nhận 10 32 
Tài liệu Lập trình hệ thống Chương 4 
Phạm Hùng Kim Khánh Trang 115 
Chiều dài cable cực đại 1200m 1200m 
Tốc độ truyền cực đại (từ 12 – 1200m) 10Mps – 100Kbps 10Mps – 100Kbps
Điện áp cực đại tại ngõ ra thiết bị truyền -0.25V ÷ 6V -7V ÷ 12V 
Điện áp ngõ vào thiết bị nhận -10V ÷ 10V -7V ÷ 12V 
Đối với chuẩn RS232, khoảng cách truyền không cho phép đi xa nên khi muốn thực 
hiện truyền ở khoảng cách xa thì phải chuyển từ RS232 sang chuẩn RS485 để truyền đi và 
sau đó chuyển từ RS485 sang RS232 để máy tính có thể nhận dạng được. Sơ đồ mạch 
chuyển đổi từ RS232 sang RS485 và ngược lại mô tả như sau: 
Hình 4.15 – Chuyển đổi từ RS323 sang RS485 và ngược lại 
RO
1
DI
4
RE
2DE
3
A
6
B
7
MAX485
120
120
VCC
1
2
3
4
5
6
7
8
CON8
R1IN
13
R
2I
N
8
T1IN
11
T
2I
N
10
C+
1
C1-
3
C2+
4
C2-
5V+
2
V-
6
R1OUT
12
R
2O
U
T
9
T1OUT
14
T
2O
U
T
7
MAX2325
9
4
8
3
7
2
6
1
DB9 10u
10u
10u
VCC
10u
10u
RO
1
DI
4
RE
2 DE
3
A
6
B
7
MAX485

File đính kèm:

  • pdftai_lieu_lap_trinh_he_thong_chuong_4_giao_tiep_cong_he_thong.pdf