Nếu nhấn Đóng Port, đóng port và chuyển thành Mở Port.. Textbox txtSend Textbox txtReceive - Nhấn Send: gởi nội dung trong txtSend ra port nối tiếp - Nếu có dữ liệu đến port nối tiếp thì
Trang 11 Serial
2 InstrumentLab
BÀI 7: GIAO TIẾP NỐI TIẾP
1 Bài 7
14:31:59
Serial
09:56:11
Giao diện thiết kế:
- Nhấn Mở Port: mở port, sau đó chuyển thành Đóng Port Nếu nhấn Đóng Port,
đóng port và chuyển thành Mở Port.
Textbox txtSend
Textbox txtReceive
- Nhấn Send: gởi nội dung trong txtSend ra port nối tiếp
- Nếu có dữ liệu đến port nối tiếp thì hiện nội dung lên txtReceive.
1
2
Trang 2Bài 7 3
Serial
09:56:11
Quy trình sử dụng cổng nối tiếp:
- Cấu hình cổng: tốc độ, tên cổng, …
- Mở cổng
- Truyền / nhận dữ liệu
- Đóng cổng
Serial
09:56:11
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles
Me.Load
For Each sp As String In My.Computer.Ports.SerialPortNames
comboPort.Items.Add(sp)
Next
Try
comboPort.SelectedIndex = 0
Catch
MessageBox.Show("Không có cổng COM" + vbCrLf + "Kết thúc
3
Trang 3Bài 7 5
09:56:11
For Each sp As String In My.Computer.Ports.SerialPortNames
comboPort.Items.Add(sp)
Next
Tìm tất cả các cổng nối tiếp có trong máy tính:
Try
comboPort.SelectedIndex = 0
Catch
MessageBox.Show("Không có cổng COM" + vbCrLf + "Kết thúc
chương trình", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error)
End
End Try
Nếu không có cổng nối tiếp nào thì kết thúc chương trình:
09:56:11 Try
' code
' Có thể dùng Exit Try để kết thúc khối lệnh và khôi phục sau End Try
Catch
' Định nghĩa các kiểu ngoại lệ và hành động xử lý
Finally
' Định nghĩa các hành động cuối cùng làm ở đây
End Try
5
6
Trang 4Bài 7 7
Private Sub comboPort_SelectedIndexChanged(sender As Object, e As
EventArgs) Handles comboPort.SelectedIndexChanged
SerialPort1.PortName = comboPort.Text
End Sub
09:56:11 Chọn cổng:
Mở / đóng cổng:
Private Sub bttOpenPort_Click(sender As Object, e As EventArgs)
Handles bttOpenPort.Click
If bttOpenPort.Text = "Mở port" Then
If Not SerialPort1.IsOpen Then
SerialPort1.Open()
bttOpenPort.Text = "Đóng port"
comboPort.Enabled = False
Else
MessageBox.Show(("Cổng đã sử dụng" + vbCrLf + "Chọn
cổng khác", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error))
End If
Else
SerialPort1.Close()
bttOpenPort.Text = "Mở port"
comboPort.Enabled = True
End If
End Sub
09:56:11 Truyền dữ liệu:
Nhận dữ liệu: nếu có dữ liệu đến cổng nối tiếp thì đọc dữ liệu và gán vào textbox
Private Sub bttSend_Click(sender As Object, e As EventArgs) Handles
bttSend.Click
SerialPort1.Write(txtSend.Text)
End Sub
Private Sub SerialPort1_DataReceived(sender As Object, e As
SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Rx = SerialPort1.ReadExisting
Me.Invoke(New EventHandler(AddressOf SetText))
7
Trang 5Bài 7 9
15:20:54 Kết thúc chương trình:
Private Sub bttExit_Click(sender As Object, e As EventArgs)
Handles bttExit.Click
End
End Sub
Private Sub Form1_Closed(sender As Object, e As EventArgs) Handles
Me.Closed
If SerialPort1.IsOpen Then SerialPort1.Close()
End Sub
15:54:14
Bổ sung thêm:
- 1 checkbox: cho phép gởi liên tục hay không
- 1 textbox: nhập thời gian delay giữa 2 lần truyền
Bổ sung thêm:
- 1 textbox: cho phép nhập start string
- 1 textbox: cho phép nhập stop string
- Cấu trúc gởi dữ liệu: start_data_stop
9
10
Trang 6Bài 7 11
15:54:14
Xử lý dữ liệu nhận:
- Giả sử cấu trúc dữ liệu nhận có dạng STARTdataSTOP,
viết đoạn chương trình lấy dữ liệu và bỏ qua các giá trị
nhập không đúng
Xử lý dữ liệu nhập:
- Giả sử cấu trúc nhận có dạng STARTdata1data2STOP, trong đó
data1 có chiều dài 3 chứa thông tin nhiệt độ, data2 có
chiều dài 3 chứa thông tin độ ẩm, viết đoạn chương trình
lấy dữ liệu và bỏ qua các giá trị nhập không đúng
- VD: Nhận START290505STOP nhiệt độ = 29.0, độ ẩm = 50.5%
Xây dựng chương trình theo yêu cầu:
- VB1: nhấn Send sẽ truyền chuỗi “START” để yêu cầu quá trình
truyền đến VB2
- VB2 gởi lại chuỗi “OK” để bắt đầu quá trình
- VB1 sau khi nhận chuỗi “OK” sẽ bắt đầu quá trình truyền và
kết thúc bằng chuỗi “STOP”
- VB2 sau khi nhận “STOP” thì kết thúc truyền (lưu nội dung
đã nhận vào file text)
15:20:54 11
Trang 7Bài 7 13
15:54:14
http://www.mitov.com/products/instrumentlab#downloads
Download:
Cài đặt
InstrumentLab
InstrumentLab
14:15:23
Led:
Led1.Value = True Led1.Value = False
MultiLed:
13
14
Trang 8Bài 7 15
InstrumentLab
09:56:11
MultiLed:
MultiLed1.States(1).Value = True
MultiLed1.States(0).Value = True
MultiLed1.States(2).Value = True
MultiLed1.States(3).Value = True
InstrumentLab
09:56:11
s1.Value.set_Values(1, True)
s1.Value.set_Values(1, True)
s1.Value.set_Values(3, True)
15
Trang 9Bài 7 17
InstrumentLab
14:47:02
SegmentGauge:
InstrumentLab
14:49:21
SegmentGauge:
SegmentGauge1.Value = 10
17
18
Trang 10Bài 7 19
InstrumentLab
09:56:11
Thermometer:
Thermometer1.Value = 60
Thermometer1.Max = 100
Thermometer1.Min = 0
09:56:11 InstrumentLab
Thiết kế chương trình như hình vẽ, dữ liệu nhận từ cổng nối tiếp
có dạng STARTdata1data2STOP, trong đó data1 có chiều dài 3 chứa
thông tin nhiệt độ, data2 có chiều dài 3 chứa thông tin độ ẩm
START367456STOP
19