Giáo trình Lập trình hệ thống - Chương 4: Giao tiếp cống nối tiếp

1. Cấu trúc cổng nối tiếp

Cổng nối tiếp được sử dụng để truyền dữ liệu hai chiều giữa máy tính và ngoại vi, có

các ưu điểm sau:

- Khoảng cách truyền xa hơn truyền song song.

- Số dây kết nối ít.

- Có thể truyền không dây dùng hồng ngoại.

- Có thể ghép nối với vi điều khiển hay PLC (Programmable Logic Device).

- Cho phép nối mạng.

- Có thể tháo lắp thiết bị trong lúc máy tính đang làm việc.

- Có thể cung cấp nguồn cho các mạch điện đơn giản

Các thiết bị ghép nối chia thành 2 loại: DTE (Data Terminal Equipment) và DCE

(Data Communication Equipment). DCE là các thiết bị trung gian như MODEM còn DTE là

các thiết bị tiếp nhận hay truyền dữ liệu như máy tính, PLC, vi điều khiển, Việc trao đổi

tín hiệu thông thường qua 2 chân RxD (nhận) và TxD (truyền). Các tín hiệu còn lại có chức

năng hỗ trợ để thiết lập và điều khiển quá trình truyền, được gọi là các tín hiệu bắt tay

(handshake). Ưu điểm của quá trình truyền dùng tín hiệu bắt tay là có thể kiểm soát đường

truyền.

Tín hiệu truyền theo chuẩn RS-232 của EIA (Electronics Industry Associations).

Chuẩn RS-232 quy định mức logic 1 ứng với điện áp từ -3V đến -25V (mark), mức logic 0

ứng với điện áp từ 3V đến 25V (space) và có khả năng cung cấp dòng từ 10 mA đến 20 mA.

Ngoài ra, tất cả các ngõ ra đều có đặc tính chống chập mạch.

Chuẩn RS-232 cho phép truyền tín hiệu với tốc độ đến 20.000 bps nhưng nếu cáp

truyền đủ ngắn có thể lên đến 115.200 bps.

Các phương thức nối giữa DTE và DCE:

- Đơn công (simplex connection): dữ liệu chỉ được truyền theo 1 hướng.

- Bán song công ( half-duplex): dữ liệu truyền theo 2 hướng, nhưng mỗi thời điểm

chỉ được truyền theo 1 hướng.

- Song công (full-duplex): số liệu được truyền đồng thời theo 2 hướng.

pdf41 trang | Chuyên mục: Lập Trình Hệ Thống Và Mạng | Chia sẻ: yen2110 | Lượt xem: 403 | Lượt tải: 0download
Tóm tắt nội dung Giáo trình Lập trình hệ thống - Chương 4: Giao tiếp cống nối tiếp, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
rang 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:

  • pdfgiao_trinh_lap_trinh_he_thong_chuong_4_giao_tiep_cong_noi_ti.pdf
Tài liệu liên quan