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...
= 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:
tai_lieu_lap_trinh_he_thong_chuong_4_giao_tiep_cong_he_thong.pdf



