Professional Documents
Culture Documents
Tong Quan Ve Daq Data Acquisition PDF
Tong Quan Ve Daq Data Acquisition PDF
chất lượng
xin hãy thông báo để chúng tôi sửa chữa hoặc thay thế bằng một tài liệu
cùng chủ đề của tác giả khác.
Bạn có thể tham khảo nguồn tài liệu được dịch từ tiếng Anh tại đây:
http://mientayvn.com/Tai_lieu_da_dich.html
Gmail: frbwrthes@gmail.com
Tài liệu:
TỔNG QUAN VỀ DAQ (DATA
ACQUISITION AND
CONTROL)
Tài liệu DAQ Chương 1
Chương 1
TỔNG QUAN VỀ DAQ (DATA ACQUISITION AND
CONTROL)
1. Định nghĩa và khái niệm
Thu thập dữ liệu (data acquisition) là quá trình chuyển tín hiệu vật lý từ thế giới
thực thành tín hiệu điện để đo lường và chuyển sang tín hiệu số cho quá trình xử lý,
phân tích và lưu trữ bằng máy tính.
Trong hầu hết các ứng dụng, hệ thu thập dữ liệu (Data Acquisition (DAQ)
System) được thiết kế không những chỉ để thu thập dữ liệu mà còn cả chức năng điều
khiển. Vì vậy khi nói hệ DAQ thường hàm ý cả chức năng điều khiển (Data
Acquisition and Control)
các thiết bi độc lập từ xa có thể điều khiển và định cấu hình từ máy tính qua chuẩn
giao tiếp IEEE-488.
- Cần bộ chuyển đổi từ RS-232 sang RS-485 do hầu hết các máy chủ không
hỗ trợ chuẩn RS-485.
Hình 1.4 - Sử dụng card PCMCIA để nhập dữ liệu từ bộ điều khiển / đăng nhập
độc lập
Hình 1.5 - Sơ đồ bộ thu thập dữ liệu độc lập qua giao tiếp nối tiếp RS-232
Hình 1.6 - Kết nối bộ thu thập dữ liệu độc lập qua mạng điện thoại hay radio
Chương 2
XỬ LÝ TÍN HIỆU NGÕ VÀO CHO HỆ DAQ
(SIGNAL CONDITIONING)
1. Giới thiệu
Tín hiệu điện ngõ ra của bộ chuyển đổi / cảm biến cần được biến đổi cho phù
hợp với ngõ vào của phần cứng DAQ. Ngoài ra, một số bộ chuyển đổi / cảm biến cần
nguồn kích thích hoặc cầu Wheaston và tuyến tính hóa để tín hiệu đo được chính xác.
Hầu hết các hệ DAQ đều bao gồm khâu xử lý tín hiệu dưới một hình thức nào
đó.
Các hình thức cơ bản mà khâu xử lý tín hiệu có thể thực hiện là:
- Khuếch đại
- Cách ly
- Lọc
- Kích thích
- Tuyến tính hóa
Khâu xử lý tín hiệu của hệ DAQ phải thực hiện nhiệm vụ nào và cách thức thực
hiện là gì phụ thuộc vào số lượng và loại của bộ chuyển đổi / cảm biến, yêu cầu về
nguồn kích thích và nối đất cho cảm biến, đồng thời không kém phần quan trọng là
khoảng cách từ cảm biến tới máy chủ trung tâm.
nhiễu trong tín hiệu này cũng được khuếch đại như tín hiệu cần đo. Nếu nhiễu so sánh
được với tín hiệu cần đo (SNR thấp) sẽ dẫn đến sai số lớn cho phép đo và phép đo là
vô nghĩa.
Tăng SNR bằng cách khuếch đại tín hiệu nhỏ ở đầu ra cảm biến trước khi
truyền.
Ví dụ: Cặp nhiệt loại J có độ nhạy 50uV/0C. Nếu tín hiệu đầu ra cặp nhiệt được
truyền trong môi trường có nhiễu lớn với khoảng cách 10m, nhiễu đặt lên tín hiệu của
cặp nhiệt có thể lên đến 200uV dẫn đến sai số đến 4oC. Nếu khuếch đại tín hiệu tại đầu
ra cặp nhiệt lên 500 lần thì độ nhạy lúc này là 25mV/0C, sai số đo nhiễu lúc này (hàng
uV) là rất nhỏ.
2.2. Cách ly
Cách ly dùng Opto : thường dùng cho tín hiệu số
Cách ly bằng phương pháp từ trường/điện trường: dùng cho tín hiệu tương
tự, thực hiện bằng cách điều chế tín hiệu điện áp thành tần số, sau đó truyền tín
hiệu tần số và biến đổi tần số thành điện áp ở đầu ra
Cách ly bằng biến áp:
Cách ly giúp bảo vệ thiết bị phần cứng DAQ, PC cũng như người vận hành khỏi
điện áp cao trong quá trình quá độ, sét hay tĩnh điện cũng như hỏng hóc của các thiết
bị cao áp. Các bộ bảo vệ quá áp được đặt ở đầu vào của khâu xử lý tín hiệu để bảo vệ
khâu này. Cách ly còn nhằm đảm bảo vòng nối đất không ảnh hưởng đến tín hiệu đo.
Tín hiệu đã được xử lý được truyền về phần cứng hệ DAQ tại máy chủ bằng 2
dây, tín hiệu truyền có thể là điện áp hoặc mạch vòng dòng điện (4-20 mA).
Tín hiệu truyền điện áp (± 10V hoặc 0-10V) tương thích với hầu hết với đầu
vào các mạch DAQ cho phép giao tiếp dễ dàng với các board DAQ hiện đại.
Tuy nhiên hạn chế của tín hiệu này là sụt áp trên dây truyền ở khoảng cách xa
nên chỉ dùng phương pháp truyền điện áp khi đường truyền ngắn.
Tín hiệu dòng điện có khả năng miễn nhiễm với nhiễu cao và có thể truyền với
khoảng cách hàng trăm m (lên đến 1000m). Bộ thu chuyển dòng sang áp để đưa
vào ADC. Bộ thu thường là một điện trở khoảng 500 / 10V (dòng 20 mA).
Mỗi cặp cáp truyền cho một cảm biến riêng lẻ nhiều cáp kết nối đến máy chủ.
Nguồn cung cấp (15-40V) cần đủ công suất cung cấp dòng cho các modules
theo yêu cầu.
Sơ đồ khối của một bộ phát 2 dây trực tiếp như hình
Mạch xử lý tín hiệu vào/ra phân tán sử dụng bộ phát số riêng biệt
Chương 3
GIAO TIẾP GIỮA HỆ DAQ VỚI MÁY TÍNH
1. Chuyển đổi AD (Analog to Digital)
1.1. Nguyên lý
Chuyển đổi AD là qua trình chuyển từ tín hiệu tương tự từ các nguồn bên ngoài
thành dạng tín hiệu số để máy tính có thể xử lý được.
Quá trình chuyển đổi AD bao gồm:
- Lấy mẫu tín hiệu (Sampling).
- Lượng tử hóa (Quantizing).
- Mã hóa (Coding).
Phổ của tín hiệu lấy mẫu là tích chập của S(f) và U(f), do đó:
1 n
Ss(f) = S(f)*U(f) =
T n
S(f )
T
(3.3)
s
f
t 0
f
t
0 1/T
Hình 3.1 – Tín hiệu lấy mẫu và phổ
Quá trình lấy mẫu mô tả ở trên là quá trình lấy mẫu lý tưởng. Trong thực tế, do
tín hiệu u(t) là các xung lấy mẫu với chu kỳ T, độ rộng và biên độ a nên phổ tín hiệu
thực tế sẽ không chỉ là hàm S(f) mà là:
sin(f)
S(f)a (3.4)
f
nT / 2
(do giá trị lấy mẫu là a s(t )dt )
nT / 2
fs = 16f fs = 8f
fs = 4f fs = 2f
Hình 3.2 – Lấy mẫu tín hiệu với các tần số khác nhau
Như vậy, ta thấy rằng nếu tần số lấy mẫu càng cao thì dạng của tín hiệu càng có
khả năng khôi phục giống như tín hiệu gốc. Tuy nhiên, nếu tần số càng cao thì cần
phải dùng dung lượng lớn hơn để lưu trữ và đồng thời tốc độ xử lý sẽ chậm lại do cần
xử lý số lượng dữ liệu lớn. Từ đó, ta cần xác định tần số lấy mẫu sao cho có thể khôi
phục lại gần đúng dạng tín hiệu với yêu cầu tốc độ xử lý giới hạn trong mức cho phép.
Định lý lấy mẫu
Định lý lấy mẫu xác định điều kiện để một tập mẫu có thể cho phép khôi phục
lại chính xác tín hiệu trước khi lấy mẫu. Như khảo sát ở trên (hình 3.1), phổ của tín
hiệu lấy mẫu là tín hiệu có chu kỳ trên miền tần số. Để khôi phục lại dạng của tín hiệu,
ta chỉ cần giới hạn phổ tần của tín hiệu. Quá trình này có thể thực hiện bằng một mạch
lọc thông thấp với hàm truyền:
1 fs
0f
H(f) = f s 2 (3.5)
0 f
f s
2
Hay:
sin(t / T)
h(t) = (3.6)
t / T
Phổ của tín hiệu sau khi khôi phục là:
S(f) = Ss(f)H(f) (3.7)
Hay:
sin(( t t ' ) / T)
s(t) = n
s( t ' )( t 'nT)
( t t ' ) / T
dt'
sin ( t / T n )
s(t) = s(nT)
n ( t / T n )
(3.8)
s
Ss
f
0 fs = 1/T t
h
H
fs/2
f
0 t
t
0
Hình 3.3 - Khôi phục tín hiệu sau khi lấy mẫu
Như vậy, ta có thể khôi phục lại tín hiệu trước khi lấy mẫu khi phổ tín hiệu sau
khi qua mạch lọc phải giống hệt với phổ tín hiệu gốc. Theo hình 3.3, điều kiện này
thoả mãn khi phổ tín hiệu gốc không chứa thành phần tần số lớn hơn f s/2.
Trong trường hợp ngược lại, phổ của tín hiệu lấy mẫu sẽ bị méo dạng nên khi
sử dụng mạch lọc để khôi phục tín hiệu thì tín hiệu này sẽ khác với tín hiệu gốc, hiện
tượng này gọi lài chồng phổ (aliasing).
Ss
1
sq(n)
-1
-2
-3
-4
-5
-6 -4 -2 0 2 4 6
s(n)
Một phương pháp khác có thể sử dụng là dùng hàm cắt, nghĩa là các giá trị trong
khoảng [nq,(n+1)q) sẽ làm tròn thành n.
10
-2
-4
5
-6
4
-8
3
-10
20 1 2 3 4 5 6
-1
-2
Hình 3.6 – Lỗi lượng tử
Như vậy, quá trình lượng tử hóa sẽ làm méo dạng tín hiệu và xem như tồn tại
-3
một tín hiệu nhiễu. Sự méo dạng này gọi là méo lượng tử hay còn gọi là nhiễu lượng
tử. -4
Biên độ của tín hiệu nhiễu lượng tử sẽ nằm trong khoảng (-q/2,q/2). Do sai số
lượng tử không biết trước nên việc mô tả sai số lượng tử mang tính thống kê. Tổng
quát, ta có thể xem e(n) là chuỗi các biến ngẫu nhiên trong đó:
- Thống kê của e(n) không thay đổi theo thời gian (nhiễu lượng tử hóa là
quá trình ngẫu nhiên dừng).
- Nhiễu lượng tử e(n) là chuỗi các biến ngẫu nhiên không tương quan.
- Nhiễu lượng tử e(n) không tương quan với tín hiệu ngõ vào s(n).
- Hàm mật độ xác suất của e(n) phân bố đều trên tầm các giá trị của sai
số lượng tử.
Như vậy, nhiễu lượng tử được phân bố đều trên khoảng (-q/2,q/2) và có phương
sai (công suất nhiễu lượng tử) là:
q2
2
e (3.10)
12
Tín hiệu được lấy mẫu và lượng tử hóa bao gồm một tập hợp các số và được
lưu trữ ở dạng nhị phân. Đối với số nhị phân N bit sẽ có tối đa 2 N giá trị khác nhau ứng
với 2N mức lượng tử khác nhau. Như vậy, phạm vi lượng tử sẽ bị giới hạn trong
khoảng từ q đến 2Nq, bất kỳ biên độ tín hiệu nào vượt quá giá trị này thì sẽ bị cắt bỏ.
Giả sử tín hiệu mã hóa có biên độ trong khoảng [-Am,Am]:
Am = 2Nq/2 (3.11)
Từ đó, giả sử công suất tín hiệu là s2 thì tỷ số tín hiệu trên nhiễu lượng tử hóa
(SQNR – Signal to Quantizing Noise Ratio) là:
s2 A
SQNR [dB] = 10 log 2 = 6.02(N-1) + 10.79 - 20 log m (3.12)
e s
1.1.3. Mã hóa
Tín hiệu ở ngõ ra bộ lượng tử hóa được đưa đến bộ mã hóa, bộ mã hóa sẽ gán
một số nhị phân cho mỗi mức lượng tử. Quá trình này gọi là mã hóa.
Có nhiều phương pháp mã hóa khác nhau nhưng trong đa số hệ thống xử lý tín
hiệu số sử dụng phương pháp bù 2. Một ví dụ đối với N = 3 như sau:
Ngoài phương pháp mã hóa tuyến tính như trên (các mức lượng tử có cùng số
bit nhị phân bằng nhau), ta còn sử dụng phương pháp mã hóa phi tuyến. Phương pháp
này sử dụng các bước lượng tử thay đổi theo biên độ tín hiệu.
26 17
27 IN0 D0 14
28 IN1 D1 15 U4
1 IN2 D2 8
2 IN3 D3 18 6 18
IN4 D4 7 +IN DB0 17
3 19 -IN DB1
4 IN5 D5 20 16
IN6 D6 9 DB2 15
5 21 VREF/2 DB3
IN7 D7 14
4 DB4 13
12 7 CLKIN DB5
16 REF+ EOC 19 12
REF- CLKR DB6 11
2 DB7
10 RD
CLK 3 5
1 WR INTR
25 CS
24 A0
23 A1 20
A2 VCC/VREF
22
9 ALE
6 OE ADC0804
START
11
VCC
ADC0809
2
+5V
1
10K
1 16
2 15
3 14
4 13
5 12
6 11
+5V 7 10
8 9
R-PACK
P1 ADC0804 PORT A
+5V 6 18
7 +IN DB0 17 1
R3 -IN DB1 16 2
1.13K 9 DB2 15 3
+5V 19 VREF/2 DB3 14 4
R1 4 CLKR DB4 13 5
1K CLKIN DB5 12 6
C3 1 DB6 11 7
CS DB7 8
1 nF 2 A
4
3 RD 5 R6 10K
WR INTR +5V
2 - +5V J1
P2 1 R5 10K
+5V
3 +
B
C R4 10K
+5V
GV: Phạm Hùng Kim Khánh
JR4558 J2
4
8
P3 6 - S1
7
5 + START
R2 -5V
8
1K
Chương 3
-5V
Hình 3.9 – Sơ đồ mạch ứng dụng ADC0804
Tài liệu DAQ Chương 3
R/2
DAC R-2R
Phương pháp này chỉ dùng các điện trở có giá trị R và 2R. Giống như phần trên,
phương pháp này cũng dùng ngõ vào số và điện áp chuẩn V REF để tạo dòng IT tại ngõ
ra.
15
14
5
6
7
8
9
10
11
12
A1
A2
A3
A4
A5
A6
A7
A8
U4
VR-
VR+
DAC0808
COMP
IOUT
IOUT
2
4
16
2.3. Một số vi mạch DAC
R13
OUT +
R16
DAC0808 2.7K 4
4
12 4 2 - R14 5.35K
8 PB0 A8 IOUT
PB1 11 1 6 -
7 10 A7 3 + 7
6 PB2 A6 OUT -
PB3 9 2 5.35K 5 +
5 8 A5 IOUT
4 PB4 A4
8
PB5 7 R12
3 A3
8
Thanh ghi
dữ liệu
Thanh ghi
trạng thái
Thanh ghi
CONNECTOR DB25
điều khiển
P1
1
13
25
12
24
11
23
10
22
21
20
19
18
17
16
15
14
Chân số 9 8 7 6 5 4 3 2
Chú ý rằng chân BUSY được nối với cổng đảo trước khi đưa vào thanh ghi
trạng thái, các bit SELECTIN , AUTOFEED và STROBE được đưa qua cổng đảo
trước khi đưa ra các chân của cổng máy in.
Thông thường tốc độ xử lý dữ liệu của các thiết bị ngoại vi như máy in chậm hơn PC nhiều
nên các đường ACK , BUSY và STR được sử dụng cho kỹ thuật bắt tay. Khởi đầu, PC đặt
dữ liệu lên bus sau đó kích hoạt đường STR xuống mức thấp để thông tin cho máy in biết
rằng dữ liệu đã ổn định trên bus. Khi máy in xử lý xong dữ liệu, nó sẽ trả lại tín hiệu ACK
xuống mức thấp để ghi nhận. PC đợi cho đến khi đường BUSY từ máy in xuống thấp (máy in
không bận) thì sẽ đưa tiếp dữ liệu lên bus.
9 8
1 STROBE
10K1
14
2 3 2 9
15 4 D0 Q0 5 8
3 7 D1 Q1 6 7
16 8 D2 Q2 9 6
4 13 D3 Q3 12 5 VCC
17 14 D4 Q4 15 4
5 17 D5 Q5 16 3
18 18 D6 Q6 19 2 1
6 D7 Q7
19 11
7 CLK
20 1
8 OE
21
9 74LS374
22
10 ACK
23
11 PAPER EMPTY 74LS257 SW0-7
10K
24
12 SELECT 4 2 2 3 9
25 74LS06 7 1Y 1A 5 5 Q0 D0 4 8
13 9 2Y 2A 11 6 Q1 D1 7 7
BUSY 2 1 12 3Y 3A 14 9 Q2 D2 8 6
4Y 4A 12 Q3 D3 13 5 VCC
3 15 Q4 D4 14 4
74LS06 1B 6 16 Q5 D5 17 3
2B 10 19 Q6 D6 18 2 1
AUTO FEED 3 4 3B 13 Q7 D7
4B 11
1 CLK
74LS06 A/B 15 1
G OE
SELECT IN 5 6
74LS374
Hình 3.14 – Mạch giao tiếp đơn giản thông qua cổng máy in
Giao diện:
Hình 3.15 – Giao diện của chương trình giao tiếp với cổng máy in
Chương trình giao tiếp trên VB sử dụng thư viện liên kết động để trao đổi dữ
liệu với cổng máy in. Thư viện IO.DLL bao gồm các hàm sau:
- Hàm PortOut: xuất 1 byte ra cổng
Private Declare Sub PortOut Lib "IO.DLL" (ByVal
Port As Integer, ByVal Data As Byte)
End
Begin VB.CheckBox chkSW
Height = 375
Index = 7
Left = 1800
TabIndex = 17
Top = 3480
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 6
Left = 1800
TabIndex = 16
Top = 3000
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 5
Left = 1800
TabIndex = 15
Top = 2520
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 4
Left = 1800
TabIndex = 14
Top = 2040
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 3
Left = 1800
TabIndex = 13
Top = 1560
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 2
Left = 1800
TabIndex = 12
Top = 1080
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 1
Left = 1800
TabIndex = 11
Top = 600
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 0
Left = 1800
TabIndex = 10
Top = 120
Width = 1575
End
Begin VB.CommandButton cmdExit
Caption = "Exit"
Height = 495
Left = 2400
TabIndex = 9
Top = 3960
Width = 975
End
Begin VB.CommandButton cmdSend
Caption = "Send"
Height = 495
Left = 0
TabIndex = 8
Top = 3960
Width = 1095
End
Begin VB.Label lblLED
BackStyle = 0 'Transparent
Caption = "LED7"
Height = 375
Index = 7
Left = 240
TabIndex = 7
Top = 3480
Width = 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
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
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
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
'IO.DLL
Private Declare Sub PortOut Lib "IO.DLL" (ByVal
Port As Integer, ByVal Data As Byte)
Private Declare Function PortIn Lib "IO.DLL"
(ByVal Port As Integer) As Byte
'Variable
Private BA_LPT As Integer
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 Sub
1
14
2
15
3
16
4
17
5
18
6
19
7
20
8
21
9
22
10
23
11
24
12
25
13
RESET-DRV
AEN
IOW
IOR
D0
D1
D2
D3
D4
D5
D6
D7
A4
A3
A2
A1
A0
CS
+5 V+1 2V-12V
-5V
RESET-DRV
IOR
IOW
AEN
D0
D1
D2
D3
D4
D5
D6
D7
CS
A0
A1
A2
A3
A4
18
17
16
15
14
13
12
11
U1
B1
B2
B3
B4
B5
B6
B7
B8
74 LS 245
10
12
2
8
DIR
U3A U3B U3C U3D U3E U3F U4A U4B U4C U4D
A1
A2
A3
A4
A5
A6
A7
A8
74 07 74 07 74 07 74 07 74 07 74 07 74 07 74 07 74 07 74 07
CAÙC CHAÂN TREÂN SLOT
2
3
4
5
6
7
8
9
19
1
11
13
9
A27
A31
A30
A29
A28
B14
B13
A11
CAÙC CHAÂN TREÂN SLOT
B2
B14
A9
A8
A7
A6
A5
A4
A3
A2
A 11
A0 A1 A2 A3 A4 IOR IOW A EN RES E T-DRV
D0D1D2D3D4D5D6D7 IOR
CS19
U2
P =Q
16
15
14
13
12
11
10
74 LS 688
9
S1
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
P0
P1
P2
P3
P4
P5
P6
P7
S W DIP -8
G
2
4
6
8
11
13
15
17
3
5
7
9
12
14
16
18
1
2
3
4
5
6
7
8
SL0
SL1
SL2
SL3
SL4
SL5
SL6
SL7
SL0
SL1
SL2
SL3
SL4
SL5
SL6
SL7
CAÙC CHAÂN TREÂN SLOT
A26
A25
A24
A22
A21
A20
A19
A23
SL0
SL1
SL2
SL3
SL4
SL5
SL6
SL7
R1
10 K x 8
A 5A 6A 7A 8A 9A 10
A 11
A 12 A EN
+5 V
U3
U3C U3B
IOW 5
74 04
6 3
74 04
4
IOW
U3D U3E
IOR 9
74 04
8 11 10
IOR
74 04
P1
1 D0
14 D1 A0
2 D2 A1
15 D3
U4 A2
3 D4
16 D5 CLOCK 18 2 CLK A3
AEN B1 A1 AEN CLK
4 D6 17 3
RS
17 D7 A3 16 B2 A2 4 A3
B3 A3 CS A EN
5 CS 15 5
18 +5 V A2 14 B4 A4 6 A2
6 +5 V A1 13 B5 A5 7 A1
19 +1 2V A0 12 B6 A6 8 A0
7 RS 11 B7 A7 9 RS
20 -12V B8 A8
8 RS -5V RS A4 19 A3
R1 56 0 G
21 AEN AEN 1
9 IOW IOW R2 56 0 DIR
22 IOR IOR R3 22 0
10 CLOCK CLOCK
R4 22 0 74 LS 245 CS U2C
R5 22 0
23 A4 A4 A3 9
11 A3 A3 R6 56 0 8 30 0H ->3 07H
A2 R7 56 0 CS1
24 A2 U3A 10
12 A1 A1 R8 56 0
25 A0 A0 R9 56 0 1 2
R10 56 0 74 LS 32
13 CS CS
R11 56 0
3 13 CS2
A4 2
74 LS 32
74 LS 32
U2B
U3F CS 4
6 31 0H ->3 1FH
13 12 /A4 5 CS3
74 LS 32
74 04
Chương 3
Tài liệu DAQ Chương 4
Start D0 D1 D2 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. Dạng
tín hiệu truyền mô tả như sau (truyền ký tự A):
Các tốc độ truyền dữ liệu thông dụng trong cổng nối tiếp là: 1200 bps, 4800 bps,
9600 bps và 19200 bps.
Sơ đồ chân:
Cổng COM có hai dạng: đầu nối DB25 (25 chân) và đầu nối DB9 (9 chân) mô tả như
hình 4.2. Ý nghĩa của các chân mô tả như sau:
Hình 3.20 – Kết nối đơn giản trong truyền thông nối tiếp
Khi thực hiện kết nối như trên, quá trình truyền phải bảo đảm tốc độ ở đầu phát và
thu giống nhau. Khi có dữ liệu đến DTE, dữ liệu này sẽ được đưa vào bộ đệm và tạo ngắt.
Ngoài ra, khi thực hiện kết nối giữa hai DTE, ta còn dùng sơ đồ sau:
TxD TxD
RxD RxD
GND GND
RTS RTS
CTS CTS
DSR DSR
DCD DCD
DTR DTR
DTE1 DTE2
Hình 3.21 – Kết nối trong truyền thông nối tiếp dùng tín hiệu bắt tay
Khi DTE1 cần truyền dữ liệu thì cho DTR tích cực tác động lên DSR của DTE2
cho biết sẵn sàng nhận dữ liệu và cho biết đã nhận được sóng mang của MODEM (ảo). Sau
đó, DTE1 tích cực chân RTS để tác động đến chân CTS của DTE2 cho biết DTE1 có thể
nhận dữ liệu. Khi thực hiện kết nối giữa DTE và DCE, do tốc độ truyền khác nhau nên phải
thực hiện điều khiển lưu lượng. Quá trinh điều khiển này có thể thực hiện bằng phần mềm
hay phần cứng. Quá trình điều khiển bằng phần mềm thực hiện bằng hai ký tự Xon và Xoff.
Ký tự Xon được DCE gởi đi khi rảnh (có thể nhận dữ liệu). Nếu DCE bận thì sẽ gởi ký tự
Xoff. Quá trình điều khiển bằng phần cứng dùng hai chân RTS và CTS. Nếu DTE muốn
truyền dữ liệu thì sẽ gởi RTS để yêu cầu truyền, DCE nếu có khả năng nhận dữ liệu (đang
rảnh) thì gởi lại CTS.
Giao tiếp nối tiếp trong máy tính sử dụng vi mạch UART với các thanh ghi cho trong
bảng sau:
Offset DLAB R/W Tên Chức năng
0 W THR Transmitter Holding Register (đệm truyền)
0 0 R RBR Receiver Buffer Register (đệm thu)
1 R/W BRDL Baud Rate Divisor Latch (số chia byte thấp)
0 R/W IER Interrupt Enable Register (cho phép ngắt)
1
1 R/W BRDH Số chia byte cao
R IIR Interrupt Identification Register (nhận dạng ngắt)
2
W FCR FIFO Control Register
3 R/W LCR Line Control Register (điều khiển đường dây)
4 R/W MCR Modem Control Register (điều khiển MODEM)
5 R LSR Line Status Register (trạng thái đường dây)
6 R MSR Modem Status Register (trạng thái MODEM)
7 R/W Scratch Register (thanh ghi tạm)
Các thanh ghi này có thể truy xuất trực tiếp kết hợp với địa chỉ cổng (ví dụ như thanh
ghi cho phép ngắt của COM1 có địa chỉ là BACOM1 + 1 = 3F9h.
D7 D6 D5 D4 D3 D2 D1 D0
- - POW HBR MODEM LINE TxEMPTY RxRDY
Cho phép kiểu Cho phép khi lỗi Cho phép khi
công suất thấp modem THR rỗng
D7 D6 D5 D4 D3 D2 D1 D0
- - - LOOP OUT2 OUT1 RTS DTR
Mode loopback:
kiểm tra hoạt Điều khiển 2 ngõ ra Điều khiển tín hiệu
đọng của UART OUT1, OUT 2 của RTS và DTR
UART
D7 D6 D5 D4 D3 D2 D1 D0
RLSD RI DSR CTS RLSD RI DSR CTS
Trạng thái của CD, RI, 1: nếu có thay đổi các tín hiệu so với lần đọc trước
DSR và CTS RI: = 1 nếu có xung dương tại RI
D7 D6 D5 D4 D3 D2 D1 D0
FIE TSRE THRE BI FE PE OE RxDR
BI: Break Interrupt (=1 khicó sự gián đoạn khi truyền, nghĩa là tồn tại mức logic 0
trong khoảng thời gian dài hơn khoảng thời gian truyền 1 byte và bị xoá khi CPU đọc LSR)
FE: Frame Error (=1 khi có lỗi khung truyền và bị xoá khi CPU đọc LSR)
PE: Parity Error (=1 khi có lỗi parity và bị xoá khi CPU đọc LSR)
OE: Overrun Error (=1 khi có lỗi thu đè, nghĩa là CPU không đọc kịp dữ liệu làm cho
quá trình ghi chồng lên RBR xảy ra và bị xoá khi CPU đọc LSR)
RxDR: Receiver Data Ready (=1 khi đã nhận 1 ký tự và đưa vào RBR và bị xoá khi
CPU đọc RBR).
LCR (Line Control Register):
D7 D6 D5 D4 D3 D2 D1 D0
DLAB SBCB PS2 PS1 PS0 STB WLS1 WLS0
DLAB (Divisor Latch Access Bit) = 0: truy xuất RBR, THR, IER, = 1 cho phép đặt
bộ chia tần trong UART để cho phép đạt tốc độ truyền mong muốn.
UART dùng dao động thạch anh với tần số 1.8432 MHz đưa qua bộ chia 16 thành tần
số 115,200 Hz. Khi đó, tuỳ theo giá trị trong BRDL và BRDH, ta sẽ có tốc độ mong muốn.
Ví dụ như đường truyền có tốc độ truyền 2,400 bps có giá trị chia 115,200 / 2,400 = 48d =
0030h BRDL = 30h, BRDH = 00h.
Một số giá trị thông dụng xác định tốc độ truyền cho như sau:
SBCB (Set Break Control Bit) =1: cho phép truyền tín hiệu Break (=0) trong khoảng
thời gian lớn hơn một khung
PS (Parity Select):
PS2 PS1 PS0 Mô tả
X X 0 Không kiểm tra
0 0 1 Kiểm tra lẻ
0 1 1 Kiểm tra chẵn
1 0 1 Parity là mark
1 1 1 Parity là space
STB (Stop Bit) = 0: 1 bit stop, =1: 1.5 bit stop (khi dùng 5 bit dữ liệu) hay 2 bit stop
(khi dùng 6, 7, 8 bit dữ liệu).
WLS (Word Length Select):
Một ví dụ khi lập trình trực tiếp trên cổng như sau:
.MODEL SMALL
.STACK 100h
.DATA
Com1 EQU 3F8h
Com_int EQU 08h
Buffer DB 251 DUP(?)
Bufferin DB 0
Bufferout DB 0
Char DB ?
Seg_com DW ? ; Vector ngắt cũ
Off_com DW ?
Mask_int DB ?
Msg DB 'Press any key to exit$‟
.CODE
Main PROC
MOV AX,@DATA
MOV DS,AX
MOV AH,35h
MOV AL,Com_int
INT 21h
MOV Seg_com,ES ; Lưu vector ngắt cũ
MOV Off_com,BX
PUSH DS
MOV BX,CS
MOV DS,BX
LEA DX,Com_ISR
MOV AH,35h ;Gán vector ngắt mới
MOV AL,Com_int
INT 21h
POP DS
MOV DX,Com1+1
MOV AL,00h ; Gởi byte cao 000Ch: xác định
OUT DX,AL ; tốc độ truyền 9600bps
Lap:
MOV AH,0Bh
INT 21h
CMP AL,0FFh
JE Exit
MOV AL,bufferin
CMP AL,bufferout
JE Lap
MOV AL,buffer[bufferout]
MOV char,AL
INC bufferout
MOV AL,bufferout
CMP AL,251
JNE Next
MOV bufferout,0
Next:
MOV DL,char ; Xuất giá trị ra màn hình
MOV AH,02h
INT 21h
MOV DX,Off_com
MOV BX,Seg_com
MOV DS,BX
MOV AH,35h ;Khôi phục vector ngắt
MOV AL,Com_int
INT 21h
MOV AH,4Ch
INT 21h
Main ENDP
Com_ISR PROC
MOV DX,Com1+5 ; Đọc nội dung LSR
IN AL,DX
AND AL,1 ; Nếu D0 = 1 thì có dữ liệu
JZ exit_ISR
MOV DX,Com1
IN AL,DX
MOV buffer[bufferin],AL
INC bufferin
MOV AL,bufferin
CMP AL,251
JNE Exit_ISR
MOV bufferin,0
Exit_ISR:
MOV AL,20h ; Báo cho PIC kết thúc ngăt
OUT 20h,AL
IRET
Com_ISR ENDP
END Main
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 thông
Input Nhận ký tự từ bộ đệm
Output Xuất ký tự ra cổng nối tiếp
PortOpen Mở / đóng cổng
Settings Xác định các tham số truyền
Thuộc tính này kết hợp với InputLen để xác định số ký tự đọc vào. Nếu InputLen = 0
thì sẽ đọc toàn bộ dữ liệu có trong bộ đệm.
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.
VD: Đọc toàn bộ nội dung trong bộ đệm nhận nếu có dữ liệu
MSComm1.InputLen = 0
If MSComm1.InBufferCount <> 0 Then
InputString = MSComm1.Input
End If
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.
CDHolding:
Xác định trạng thái CD, trả về giá trị True hay False.
DTREnable:
Đặt hay xoá tín hiệu DTR để báo sự tồn tại của DTE. Cú pháp:
MSComm1.DTREnable = True | False
RTSEnable:
Đặt hay xoá tín hiệu RTS để yêu cầu truyền dữ liệu đến DTE. Cú pháp:
MSComm1.RTSEnable = True | False
NullDiscard:
Cho phép nhận các ký tự NULL (rỗng) hay không (= True: cấm). Cú pháp:
MSComm1.NullDiscard = True | False
SThreshold:
Số byte trong bộ đệm truyền làm phát sinh sự kiện OnComm. Nếu giá trị này bằng 0
thì sẽ không tạo sự kiện OnComm. Cú pháp:
MSComm1.SThreshold = NumChar
HandShaking:
Chọn giao thức bắt tay khi thực hiện truyền dữ liệu. Cú pháp:
MSComm1.HandShaking = Protocol
Các giao thức truyền bao gồm:
Protocol Giá trị Mô tả
ComNone 0 Không băt tay (mặc định)
ComXon/Xoff 1 Bắt tay phần mềm (Xon/Xoff)
ComRTS 2 Bắt tay phần cứng (RTS/CTS)
ComRTSXon/Xoff 3 Bắt tay phần cứng và phàn mềm
CommEvent:
Trả lại các lỗi truyền thông hay sự kiện xảy ra tại cổng nối tiếp
Các sự kiện:
Sự kiện Giá trị Mô tả
ComEvSend 1 Đã truyền ký tự
ComEvReceive 2 Khi có ký tự trong bộ đệm nhận
ComEvCTS 3 Có thay đổi trên CTS (Clear To Send)
ComEvDSR 4 Có thay đổi trên DSR (Data Set Ready)
ComEvCD 5 Có thay đổi trên CD (Carrier Detect)
Textbox chứa
các ký tự gởi Đối tượng
MSComm
Textbox chứa
các ký tự nhận
End
Begin VB.TextBox txtReceive
Height = 735
Left = 1320
Locked = -1 „True
TabIndex = 3
Top = 1080
Width = 2535
End
Begin VB.TextBox txtTransmit
Height = 735
Left = 1320
TabIndex = 0
Top = 240
Width = 2535
End
Begin MSCommLib.MSComm MSComm1
Left = 3960
Top = 240
_ExtentX = 1005
_ExtentY = 1005
_Version = 393216
DTREnable = -1 „True
RThreshold = 1
End
Begin VB.Label Label2
Caption = “Receive:”
Height = 375
Left = 240
TabIndex = 2
Top = 1200
Width = 855
End
Begin VB.Label Label1
Caption = “Transmit:”
Height = 375
Left = 240
TabIndex = 1
Top = 240
Width = 975
End
End
Attribute VB_Name = “Form1”
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
2 C2+
R2IN
T2IN
V+ 5 C29
C26 C2- 10u
10u
8
9
10
VCC
C27
10u
Tuy nhiên, khi sử dụng mạch chuyển mức logic dùng các vi mạch thì đòi hỏi phải
dùng chung GND giữa máy tính và vi mạch có khả năng làm hỏng cổng nối tiếp khi xảy
ra hiện tượng chập mạch ở mạch ngoài. Do đó, ta có thể dùng thêm opto 4N35 để cách ly về
điện. Sơ đồ mạch cách ly mô tả như sau: VCC
1K
TxD
6 1
5 VCC
4 2
.
68K
DTR 4N35
1 4.7K
6
2 RxD_PC
7
3 TxD_PC 1 6
8 5 RxD
4 4.7K
9 2 4
5
4N35
RTS
2.2K
T2IN
10
VCC RST
C27
10u AT89C51
33p
11.059MHz
C31
Chương 4
Tài liệu DAQ Chương 3
Receive:
JNB RI,Transmit ; Có dữ liệu hay không
CLR RI
MOV A,SBUF ; Nếu có thì xuất ra LED
MOV P1,A
Transmit:
JNB TI,Receive ; Đã truyền xong chưa
CLR TI
MOV A,P2 ; Nếu xong thì truyền trạng
thái
MOV SBUF,A ; của công tăc SW DIP-8
JMP Receive
ClientLeft = 60
ClientTop = 345
ClientWidth = 4020
LinkTopic = "Form1"
ScaleHeight = 4665
ScaleWidth = 4020
StartUpPosition = 3 'Windows Default
Begin VB.CheckBox chkSW
Height = 375
Index = 7
Left = 1800
TabIndex = 17
Top = 3480
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 6
Left = 1800
TabIndex = 16
Top = 3000
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 5
Left = 1800
TabIndex = 15
Top = 2520
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 4
Left = 1800
TabIndex = 14
Top = 2040
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 3
Left = 1800
TabIndex = 13
Top = 1560
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 2
Left = 1800
TabIndex = 12
Top = 1080
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 1
Left = 1800
TabIndex = 11
Top = 600
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 0
Left = 1800
TabIndex = 10
Top = 120
Width = 1575
End
Begin VB.CommandButton cmdExit
Caption = "Exit"
Height = 495
Left = 1680
TabIndex = 9
Top = 3960
Width = 975
End
Begin MSCommLib.MSComm MSComm1
Left = 3360
Top = 3960
_ExtentX = 1005
_ExtentY = 1005
_Version = 393216
DTREnable = -1 'True
RThreshold = 1
End
Begin VB.CommandButton cmdSend
Caption = "Send"
Height = 495
Left = 240
TabIndex = 8
Top = 3960
Width = 1095
End
Begin VB.Label lblLED
BackStyle = 0 'Transparent
Caption = "LED7"
Height = 375
Index = 7
Left = 240
TabIndex = 7
Top = 3480
Width = 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
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
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
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
shpLED(Index).FillStyle = 1 - shpLED(Index).FillStyle
End Sub
Song công:
Đố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:
1
2
3
1 4 6 120 4
6 DI A 7 5
2 13 12 3 B 6
7 R1IN R1OUT VCC 2 DE 1 7
3 14 11 RE RO 8
8 T1OUT T1IN
4 1 MAX485
9 C+ CON8
5 6 MAX232 3
V- C1- 10u
DB9 10u 4 6 4
R2OUT
T2OUT
2 C2+ 7 A DI
R2IN
T2IN
V+ 5 B 3
C2- 10u 1 DE 2 120
10u RO RE
8
9
10
VCC
MAX485
10u
Chương 4
TỔNG QUAN VỀ SCADA (SUPERVISORY
CONTROL AND DATA ACQUISITION)
1. Giới thiệu
SCADA là hệ thống cho phép người điều hành giám sát và điều khiển các quá
trình được phân bố trong các nơi ở xa.
Có nhiều quá trình sử dụng hệ thống SCADA như: thủy điện, các khâu xử lý và
phân phối nước, khí tự nhiên, v.v…Các hệ thống SCADA cho phép các nơi xa liên lạc
với phương tiện điều khiển và cung cấp dữ liệu điều khiển cần thiết cho các quá trình
điều khiển. Khi khoảng cách đến các nơi xa tăng thì càng khó truy cập hơn, khi đó
SCADA trở thành sự chọn tốt nhất cho người điều hành để điều chỉnh và quan sát.
Khoảng cách và sự ở xa là hai yếu tố chính để cài đặt các hệ thống SCADA .
Các hệ thống SCADA hiện đại có nhiều đặc tính tiên tiến như: kiến trúc phân bố,
cơ sở dữ liệu phân bố, giao tiếp đồ họa với người sử dụng (GUI = Graphic User
Interface), các đơn vị đo lường từ xa thông minh v.v…
Hệ SCADA thường được dùng để chỉ tất cả các hệ thống máy tính được thiết kế
để thực hiện các chức năng sau:
- Thu thập dữ liệu từ các thiết bị công nghiệp hoặc các bộ cảm biến / chuyển đổi
năng lượng.
- Xử lý và thực hiện các phép tính trên dữ liệu thu thập được.
- Hiển thị dữ liệu thu thập và dữ liệu đã xử lý.
- Nhận lệnh từ người điều hành và thực hiện gởi các lệnh điều khiển đến các
thiết bị.
- Xử lý các lệnh điều khiển tự động hoặc bằng tay đúng lúc và tin cậy.
Các hệ thống như vậy có thể được gọi bằng các tên khác trong các tình huống và
các công nghệ khác như: DAC (Data Acquition and Control = Điều khiển và thu thập dữ
liệu), DCS (Distributed Control Systems = Các hệ thống điều khiển phân bố), … Tất cả
các hệ thống này về cơ bản thực hiện cùng các chức năng. Tùy theo ứng dụng cụ thể, các
đặc điểm sau dùng để phân biệt các hệ thống:
- Vị trí và sự phân bố các nguồn dữ liệu công nghiệp.
- Lượng dữ liệu được thu thập.
- Tốc độ thu thập dữ liệu.
- Mức độ tự động của các lệnh điều khiển.
- Kiểu tính toán và vị trí mà tác động điều khiển được thực hiện.
Hệ thống SCADA có 4 phần tử chính: người điều hành (operator), phần tử thiết bị
đầu cuối chính MTU (Master Terminal Unit), truyền thông liên lạc và phần tử thiết bị đầu
cuối ở xa RTU (Remote Terminal Unit). Người điều hành thực hiện điều khiển qua thông
tin được mô tả trong khối hiển thị hình ảnh VDU (Video Display Unit). Phần nhập của hệ
thông thường xuất phát từ người điều hành qua bàn phím của MTU. Thông tin từ các nơi
ở xa được MTU giám sát và hiển thị các thông tin này cho người điều hành.
MTU (Master Terminal Unit)
IOS HMI
HDC GW APPS
Hình 4.3: Kiến trúc tiêu biểu của một hệ SCADA phân bố.
IOS: Data Input/Output Modules
HMI: Human Machine Interface Module
HDC: Historical Data Collection and Storage Module
GW: Gateway for inter LAN communications
APPS: Application Calculations and Processing Module.
- Tạo và sửa đổi các màn hình hiển thị trực tiếp ở hệ thống.
Có những hiệu ứng đặc biệt để tăng khả năng phân biệt rõ dữ liệu (ví dụ các màu
khác nhau cho các lô khác nhau trong một đường ống dẫn dầu).
Với các VDU hoạt động trong môi trường Windows hay X-Windows, người điều
hành cũng có thể:
- Xem trên cùng một VDU nhiều mảng thông tin trải ra trên nhiều màn hình hiển
thị.
- Trên cùng màn hình, truy cập được các dữ liệu nằm rải rác theo vùng hoặc các
dữ liệu thuộc các cơ sở dữ liệu khác nhau.
Do đó, những phương tiện HMI hiện đại cho phép người điều hành truy cập số
lượng thông tin lớn dễ hơn và nhanh hơn.
Về các RTU, không còn là những thiết bị thụ động nữa mà chúng làm nhiệm vụ
thu thập và lưu giữ dữ liệu vùng. Nhiều mức xử lý dữ liệu và điều khiển được thực hiện
tại các RTU.
Nhiều loại thiết bị có thể được nối vào các RTU như: PLC, máy đo lưu lượng,
thiết bị lấy chuẩn trong các bin hay các bồn chứa… Các RTU có thể được kết nối theo
kiểu phân bố hoặc kiểu phân cấp. Dữ liệu của các RTU được xử lý tại trạm chủ.
Về cơ sở dữ liệu, các dữ liệu được lưu trữ không chỉ là dữ liệu đo đạc từ xa được tính
toán mà còn là các thông số bảo vệ, các sự kiện, các mẫu tin cũng như các cảnh báo. Do
tính chất phân bố của SCADA nên cơ sở dữ liệu cũng được phân bố. Cơ sở dữ liệu cũng
có thể liên hệ với hệ thống quản trị thông tin (Managerment Information System) và hệ
thống thông tin địa lý GIS (Geographic Information System). Ngoài ra, các dữ liệu có thể
được bảo mật bằng các password.
theo chương trình được đặt sẵn. Đối với những sự cố lớn máy tính sẽ báo cho người theo
dõi biết và tạm dừng hoạt động của hệ thống để chờ quyết định của người điều hành.
Vì vậy, bên cạnh khả năng hoạt động toàn hệ thống theo một chương trình định
trước, hệ SCADA còn cho phép người vận hành quan sát được trạng thái làm việc của
từng thiết bị tại các trạm cơ sở, đưa ra các cảnh báo, báo động khi hệ thống có sự cố và
thực hiện các lệnh điều khiển can thiệp vào hoạt động của hệ thống khi có tình huống bất
thường hay có sự cố
xuất hay có thể trực tiếp sản xuất theo yêu cầu của khách hàng từ nơi bán hàng hay phòng
thiết kế. Do được kết nối mạng nên chúng ta có thể điều khiển từ xa các thiết bị công tác
mà điều kiện nguy hiểm (như làm việc ở nơi có môi trường phóng xạ, nơi có từ trường
mạnh …) không cho phép con người đến gần
Phương pháp thứ hai là sử dụng một công cụ phần mềm chuyên dụng (ví dụ FIX,
InTouch,WinCC,Lookout,…), gọi tắt là phần mềm SCADA. Các công cụ này có chứa
các thư viện thành phần cho việc xây dựng giao diện người –máy cũng như phần mềm
kết nối với các thiết bị cung cấp dữ liệu thông dụng. Nhiều công cụ định nghĩa một ngôn
ngữ riêng (thường gọi là script) phục vụ các mục đích này , tuy nhiên độ phức tạp của
chúng cũng rất khác nhau. Gần nay, xu hướng đơn giản hoá việc tạo dựng một ứng dụng
SCADA thể hiện ở sự kết hợp phương pháp lập trình hiển thị với sử dụng một ngôn ngữ
script thông dụng như Visual Basic for Application(VBA) và VBScript, tương tự như
việc soạn thảo một văn bản. Một số công cụ còn đi xa hơn nữa, cho phép ta sử dụng các
biểu tượng, ký hiệu đồ hoạ vừa để xây dựng giao diện người – máy vừa để biểu diễn sự
liên quan logic giữa các thành phần của một chương trình dưới dạng biểu đồ khối chức
năng (FBD) quen thuộc, không cần tới một dòng lệnh kể cả script. Người ta cũng nói đến
khái niệm tạo lập cấu hình (configuring) thay cho lập trình (programming).