Các ứng dụng cơ bản RSView32

Một phần của tài liệu kl le huu tai 710097d (Trang 106 - 125)

A Mục đích

Bài này mang tính chất là một bài toán quản lý thuần túy, nó sẽ giúp làm quen với việc lập trình cho một hệ thống hoàn chỉnh có sự kết hợp với VBA và Access.Xp để quản lý cơ sở dữ liệu.

B Lý thuyết

1 Visual Basic và Access.Xp 1.1 Giới thiệu

Visual Basic là ngôn ngữ dùng để viết ra các chương trình ứng dụng chạy trên máy tính có cài hệ điều hành Windows. Đây là ngôn ngữ lập trình dễ học, dễ ứng dụng và cung cấp cho người lập trình nhiều phương tiện, công cụ và thư viện để thực hiện dễ dàng các công việc.

1.2 Cửa sổ thuộc tính ( Properties)

* Cửa sổ này liệt kê các thuộc tính Form hay các đối tượng (Label, Textbox …) đã được chọn và cho phép sửa đổi các giá trị thuộc tính theo yêu cầu thiết kế.

* Một số thuộc tính thường dùng:

Name: để xác định một đối tượng nào đó. Tên đặt sao cho dễ đọc, dễ gợi nhớ.

Caption: dùng gõ tiêu đề đối với Form, gõ nội dung văn bản đối với Label.

1.3 Hộp công cụ Toolbox

Toolbox chứa các công cụ thiết kế, thường nằm bên trái màn hình. Để làm việc với công cụ ta chọn công cụ và vẽ lên nền Form.

1.3.1 Đối tượng Label (nhãn)

* Dùng để xuất dữ liệu. Người sử dụng không thể thay đổi nội dung văn bản.

* Một số thuộc tính:

Name: tên Label.

Caption: gõ nội dung trình bày.

1.3.2 Đối tượng Textbox (hộp văn bản)

* Dùng xuất, nhập dữ liệu, thường dùng nhận thông tin mà người sử dụng nhập vào

* Một số thuộc tính:

Name: tên Textbox.

Multiline: cho phép hiển thị một dòng hay nhiều dòng.

1.3.3 Đối tượng Command Button (nút lệnh)

* Người dùng có thể bấm chuột vào (hay nhấn Enter) để thi hành một công việc hoặc kết thúc một công việc

* Một số thuộc tính:

Name: tên nút lệnh.

Caption: nhãn của nút lệnh trên nền Form.

1.4 Hằng – CONSTANT

* Hằng là đại lượng không thay đổi giá trị trong suốt chương trình.

* Cú pháp:

Const tên hằng = giá trị của hằng 1.5 Biến – VARIABLE

* Biến là đaị lượng có thể thay đổi khi thực thi chương trình và có thể thực hiện các phép toán trên biến.

* Biến được đặt theo nguyên tắc: bắt đầu bằng chữ và không có khoảng trắng.

* Cú pháp:

Dim tên biến As kiểu dữ liệu

1.6 Lệnh gán

* Gán giá trị của một biểu thức cho biến hoặc một thuộc tính của đối tượng.

* Cú pháp:

Biến / Tên đối tượng .Tên thuộc tính = biểu thức 1.7 Lệnh mở Form

* Dùng mở một Form khi xảy ra một sự kiện do người lập trình quy định.

* Cú pháp:

Tên Form . Show 1.8 Hàm MSGBox

* Tạm dừng chương trình hiển thị hộp thông báo cho người xem.

* Cú pháp:

Msgbox “Message”, Type, Title Message : thông báo cần hiển thị Title: tiêu đề Msgbox

Type: mã biểu tượng + nút lệnh 1.9 Lệnh IF

Thi hành một nhóm lệnh có điều kiện dựa vào giá trị của một biểu thức:

If điều kiện Then Lệnh 1 → Lệnh n Else

Lệnh 1 → Lệnh n End if

1.10 Lệnh lặp Do While … Loop

* Làm khi điều kiện đúng còn khi điều kiện sai thì dừng.

* Cú pháp:

Do While điều kiện

Các lệnh thực hiện Loop

2 Mô hình thí nghiệm bãi giữ xe tự động

* Ngày nay với sự phát triển của các ngành công nghiệp ở các thành phố lớn và sự phát triển về mật độ dân số. Đặc biệt là sự gia tăng đột ngột về số lượng xe, điều này đã gây khó khăn cho nhà nước trong việc quản lý và kiểm soát số lượng xe. Vì thế ngày càng nhiều thành phố xây dựng hệ thống giữ xe tự động để tiết kiệm thời gian và tiền bạc trong việc giữ xe.

* Hệ thống bãi giữ xe được quản lý bởi việc sử dụng phần mềm RSView32 và RSlogix 500 để thiết lập các chế độ ràng buộc cho bãi giữ xe như:

Quy định số xe tối đa trong bãi giữ xe.

Khi không có xe vào đóng cửa, khi có xe vào mở cửa.

Khi không có xe ra đóng cửa, khi có xe ra mở cửa.

Đếm số lượng xe trong bãi giữ xe.

Hiện đèn báo để xe có được vào hay không.

3 Thiết bị

Hai đèn báo cho biết xe được vào hay không.

Hai thanh gạt để đóng mở cho phép xe vào ra hay không.

Bốn cảm biến để đóng mở thanh gạt ngõ vào ra.

Bốn nút nhấn để điều khiển xe vào ra.

4 Quy định các ngõ vào ra

* Ngõ vào

B3:0/0: Start cho phép xe vào B3:0/1: Stop ngừng xe vào B3:0/5: Start cho phép xe ra B3:0/6: Stop ngừng xe ra I:0/0: cảm biến vào 2 I:0/1: cảm biến vào 1 I:0/2: cảm biến ra 2 I:0/3: cảm biến ra 1

* Ngõ ra

O:0/0: tạo chuyển động cho xe vào O:0/1: tạo chuyển động cho xe ra

O:0/4: đèn báo hết chỗ O:0/5: đèn báo còn chỗ 5 Giản đồ quá trình

5.1 Ngõ vào

5.2 Ngõ ra

6 Nguyên lý hoạt động

Khi nhấn Start xe đi vào. Khi cảm biến thứ nhất phát hiện có xe vào thì hiện thông báo nhập số xe và sau đó mở cổng cho xe vào. Khi cảm biến thứ hai phát hiện xe đã vào thì cho đóng cổng ngõ vào. Trong quá trình xe đi vào nếu nhấn Stop thì xe ngừng ở vị trí nhấn và trạng thái bãi giữ xe được giữ nguyên. Quá trình này tương tự cho ngõ ra. Đếm số xe có trong bãi và hiện đèn báo.

C Thực hành

1 Tạo một file RSlogix 500.

2 Thiết lập cấu hình truyền thông.

3 Lập trình PLC.

* Kích Timer cho quá trình xe vào:

* Reset để kết thúc quá trình xe vào:

* Kích Timer cho quá trình xe ra và Reset quá trình xe ra:

* Đếm số xe trong bãi giữ xe:

* Hiện đèn báo cho biết xe có được vào không:

4 Download chương trình.

5 Tạo một file RSView 32.

6 Thiết lập kênh truyền thông Channel.

7 Thiết lập Node.

8 Tạo các Tag Database:

STT Tag Name Type Address

1 Cbra1 Digital I:0/3

2 Cbra2 Digital I:0/2

3 Cbv1 Digital I:0/1

4 Cbv2 Digital I:0/0

5 Kichtimera1 Digital O:0/0 6 Kichtimevao1 Digital O:0/1 7 Startra1 Digital B3:0/5

8 Startv1 Digital B3:0/0

9 Stopra12 Digital B3:0/6

10 Stopv12 Digital B3:0/1

11 Timera Analog T4:1.ACC

12 Timevao Analog T4:0.ACC 13 Denbaoconcho Digital O:0/5 14 Denbaohetcho Digital O:0/4

Bảng 4.7: Tag Database bãi giữ xe 9 Tạo mới một Display.

10 Thiết lập giao diện như hình vẽ:

Hình 4.40: Giao diện bãi giữ xe

11 Tạo thuộc tính cho cảm biến ngõ vào.

11.1 Cảm biến phát hiện xe vào.

* Right click lên cảm biến → Animation → Color → Trong khung Expression chọn Tag cbv2

Tag cbv2 = 0 có màu xám Tag cbv2 = 1 có màu vàng

11.2 Cảm biến phát hiện xe đã vào và đóng cổng.

* Right click cảm biến → Animation → Color → Trong khung Expression chọn Tag cbv1

Tag cbv1 = 0 có màu xám Tag cbv1 = 1 có màu vàng

12 Tạo thuộc tính cho thanh gạt ngõ vào.

* Right click → Animation → Rotation → Trong khung Expression chọn Tag (Timevao>5) and (Timevao<9)

+ Rotation ( Degrees ) At minimum: 0 At maximum: 9000

+ Center of Rotation: chọn điểm quay ở vị trí cuối cùng góc bên phải.

13 Tạo thuộc tính cho xe ngõ vào.

* Right click → Animation → Vertical Slider → Trong khung Expression chọn Tag Timevao

Vertical Offset (Pixels) At minimum: 0 At maximum: -6400

14 Tạo thuộc tính cho đèn báo xe được phép vào.

* Right click → Animation → Color → Trong khung Expression chọn Tag Denbaoconcho

Tag Denbaoconcho = 0 có màu xám Tag Denbaoconcho = 1 có màu xanh

15 Tạo thuộc tính cho đèn báo xe không được phép vào.

* Right click → Animation → Color → Trong khung Expression chọn Tag Denbaohetcho

Tag Denbaohetcho = 0 có màu xám Tag Denbaohetcho = 1 có màu đỏ 16 Tạo thuộc tính cho cảm biến ngõ ra.

17.1 Cảm biến phát hiện xe ra.

* Right click → Animation → Color → Trong khung Expression chọn Tag cbra2 Tag cbra2 = 0 có màu xám

Tag cbra2 = 1 có màu vàng

17.2 Cảm biến phát hiện xe đã ra và đóng cổng.

* Right click → Animation → Color → Trong khung Expression chọn Tag cbra1 Tag cbra1 = 0 có màu xám

Tag cbra1 = 1 có màu vàng 18 Tạo thuộc tính cho thanh gạt ngõ ra.

* Right click → Animation → Rotation → Trong khung Expression chọn giá trị Tag (Timera >2 ) and (Timera<5)

+ Rotation ( Degrees ) At minimum: 0 At maximum: -9000

+ Center of Rotation : Chọn điểm quay ở vị trí cuối cùng góc bên trái

19 Tạo thuộc tính cho xe ngõ ra.

* Right click → Animation → Vertical Slider → Trong khung Expression chọn Tag Timera

Vertical Offset (Pixels) At minimum: 0 At maximum: 6400

20 Tạo một file Access.Xp có tên “baigiuxe.mdb” gồm 2 Table “xevao” và “xera”.

20.1 Table “xevao” với các Field:

20.2 Table “xera” với các Field:

21 Lập trình VBA cho This project.

* Khi TV = 5 và cambienv2 = 1 (cảm biến xe vào) thì mở Form nhập số xe vào.

Public Sub openformv1()

Dim t As Tag ‘ biến Timer vào Dim stopv As Tag ‘ biến Stop vào

Dim cambienv2 As Tag ‘ biến cảm biến vào 2 (cảm biến xe vào) Set cambienv2 = gTagDb("cbv2")

Do While cambienv2 <> 1 Set t = gTagDb("timevao") If t = 5 Then

Set stopv = gTagDb("stopv12")

stopv = 1 End If Loop

UserForm1.Show ‘ mở Form nhập số xe vào End Sub

* Khi TR = 2 và cambienra2 = 1 (cảm biến xe ra) thì mở Form nhập số xe ra.

Public Sub openformra1()

Dim t As Tag ‘ biến Timer ra Dim stopra As Tag ‘ biến Stop ra

Dim cambienvr2 As Tag ‘ biến cảm biến ra 2 (cảm biến xe ra) Set cambienr2 = gTagDb("cbra2")

Do While cambienr2 <> 1 Set t = gTagDb("timera") If t = 2 Then

Set stopra = gTagDb("stopra12") stopra = 1

End If Loop

UserForm2.Show ‘ mở Form nhập số xe ra End Sub

* Mở Table “xevao” từ file Access “baigiuxe.mdb” để xem dữ liệu.

Public Sub OpenDataxevao()

gCommand.Execute "AppStart Đường dẫn chứa file Access\baigiuxe.mdb"

DoCmd.OpenTable "xevao", acViewNormal, acReadOnly End Sub

* Mở Table “xera” từ file Access “baigiuxe.mdb” để xem dữ liệu.

Public Sub OpenDataxera()

gCommand.Execute "AppStart Đường dẫn chứa file Access\baigiuxe.mdb"

DoCmd.OpenTable "xera", acViewNormal, acReadOnly End Sub

22 Tạo một Form ngõ vào như hình:

23 Lập trình cho Form ngõ vào:

* Khai báo liên kết truyền dữ liệu giữa VB và Access cho Form ngõ vào.

Public Sub openConnection(ByRef db As ADODB.Connection)

Set db = New ADODB.Connection ‘cấp phát vùng nhớ cho biến bộ mẫu tin db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = Đường dẫn chứa file Access \baigiuxe.mdb" ‘provider: tên trình kết nối dữ liệu OLEDB End Sub

* Đóng liên kết VB và Access.

Public Sub closeConnection(ByRef db As ADODB.Connection) db.Close

End Sub

* Lưu dữ liệu từ VB qua Access cho Form ngõ vào.

Public Sub addData(ByRef db As ADODB.Connection, ngay As Date, soxe As String)

Dim rs As ADODB.Recordset Dim sql As String

soxe = txtsoxe.Text

sql = "select * from xevao" ‘ chọn các fields trong Table “xevao”

Set rs = openRecordset(db, sql) ‘ khai báo biến Recordset

rs.AddNew ‘ thêm một mẫu tin

rs.Fields("ngay").Value = ngay ‘ gán dữ liệu vào fields rs.Fields("soxe").Value = soxe ‘ gán dữ liệu vào fields rs.UpdateBatch ‘ cập nhật mẫu tin

rs.Close ‘ đóng kết nối Recordset

End Sub

* Khai báo Recordset cho việc lưu dữ liệu.

Public Function openRecordset(ByRef db As ADODB.Connection, ByRef sql As String) As ADODB.Recordset

Dim rs As ADODB.Recordset ‘ khai báo biến bộ mẫu tin

Set rs = New ADODB.Recordset ‘cấp phát vùng nhớ cho biến bộ mẫu tin rs.ActiveConnection = db ‘ xác định đối tượng kết nối

rs.CursorLocation = adUseClient ‘ con trỏ kết nối dữ liệu được tạo ở máy trạm rs.CursorType = adOpenStatic ‘ bộ mẫu tin sẽ được tạo ở máy trạm rs.LockType = adLockOptimistic ‘ cập nhật từng mẫu tin

rs.Open (sql)

Set openRecordset = rs End Function

* Chấp nhận lưu dữ liệu và tiếp tục quá trình xe vào.

Private Sub cmdok_Click()

Dim t As Tag ‘ biến thời gian xe vào Dim stopv As Tag ‘ biến Stop xe vào Dim starv1 As Tag ‘ biến Start xe vào Dim cambienv1 As Tag ‘ biến cảm biến xe vào

Dim db As ADODB.Connection ‘ biến kết nối ADO để gọi CT con Call openConnection(db)

Call addData(db, Now, txtsoxe.Text) Call closeConnection(db)

Set stopv = gTagDb("stopv12")

stopv = 0 ‘ xe chạy sau khi nhấn ok chấp nhận số xe vào Unload Me ‘ đóng Form ngõ vào

Set cambienv1 = gTagDb("cbv1")

Do While cambienv1 <> 1 ‘ khi cảm biến 1 = 1 thì cho xe chạy Set t = gTagDb("timevao")

If t = 6 Then

stopv = 1 ‘ khi t=6 thì ngừng xe End If

Loop stopv = 0

Do While cambienv1 <> 0 ‘ khi cảm biến vào 1 = 0 thì cho xe chạy Set t = gTagDb("timevao")

If t = 8 Then

stopv = 1 ‘ khi t=8 thì ngừng xe End If

Loop stopv = 0 Do While t <> 10

Set t = gTagDb("timevao") Loop

Set starv1 = gTagDb("startv1")

starv1 = 0 ‘ Khi t = 10 kết thúc một quá trình xe vào End Sub

24 Tạo một Form ngõ ra như hình sau:

25 Lập trình cho Form ngõ ra.

Lưu ý: chương trình Form ngõ ra gần giống Form ngõ vào chỉ cần Copy và sửa cho giống như chương trình dưới đây.

* Khai báo liên kết truyền dữ liệu giữa VB và Access cho Form ngõ ra.

Public Sub openConnection(ByRef db As ADODB.Connection)

Set db = New ADODB.Connection ‘cấp phát vùng nhớ cho biến bộ mẫu tin db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Đường dẫn chứa file Access\baigiuxe.mdb" ‘provider: tên trình kết nối dữ liệu OLEDB End Sub

* Đóng liên kết VB và Access.

Public Sub closeConnection(ByRef db As ADODB.Connection) db.Close

End Sub

* Lưu dữ liệu từ VB qua Access cho Form ngõ ra.

Public Sub addData(ByRef db As ADODB.Connection, ngay As Date, soxe As String)

Dim rs As ADODB.Recordset Dim sql As String

soxe = txtsoxe.Text

sql = "select * from xera" ‘ chọn các fields trong Table “xera”

Set rs = openRecordset(db, sql) ‘ khai báo biến Recordset

rs.AddNew ‘ thêm một mẫu tin

rs.Fields("ngay").Value = ngay ‘ gán dữ liệu vào fields rs.Fields("soxe").Value = soxe ‘ gán dữ liệu vào fields rs.UpdateBatch ‘ cập nhật mẫu tin

rs.Close ‘ đóng kết nối Recordset End Sub

* Khai báo Recordset cho việc lưu dữ liệu.

Public Function openRecordset(ByRef db As ADODB.Connection, ByRef sql As String) As ADODB.Recordset

Dim rs As ADODB.Recordset ‘ khai báo biến bộ mẫu tin

Set rs = New ADODB.Recordset ‘cấp phát vùng nhớ cho biến bộ mẫu tin rs.ActiveConnection = db ‘ xác định đối tượng kết nối

rs.CursorLocation = adUseClient ‘con trỏ kết nối dữ liệu được tạo ở máy trạm rs.CursorType = adOpenStatic ‘bộ mẫu tin sẽ được tạo ở máy trạm

rs.LockType = adLockOptimistic ‘ cập nhật từng mẫu tin rs.Open (sql)

Set openRecordset = rs End Function

* Chấp nhận lưu dữ liệu và tiếp tục quá trình xe ra.

Private Sub cmdok_Click()

Dim t As Tag ‘ biến thời gian xe ra

Dim stopra As Tag ‘ biến Stop xe ra

Dim startr1 As Tag ‘ biến Start xe ra

Dim cambienra1 As Tag ‘ biến cảm biến xe đã ra

Dim db As ADODB.Connection ‘ biến kết nối ADO để gọi CT con Call openConnection(db)

Call addData(db, Now, txtsoxe.Text) Call closeConnection(db)

Set stopra = gTagDb("stopra12")

stopra = 0 ‘ xe chạy sau khi nhấn ok chấp nhận số xe ra Unload Me ‘ đóng Form ngõ ra

Set cambienra1 = gTagDb("cbra1")

Do While cambienra1 <> 1 ‘ khi cảm biến ra 1 = 1 thì cho xe chạy Set t = gTagDb("timera")

If t = 3 Then

stopra = 1 ‘ khi t =3 thì ngừng xe End If

Loop stopra = 0

Do While cambienra1 <> 0 ‘ khi cảm biến ra 1 = 0 thì cho xe chạy Set t = gTagDb("timera")

If t = 4 Then

stopra = 1 ‘ khi t =4 thì ngừng xe End If

Loop stopra = 0

Do While t <> 10

Set t = gTagDb("timera") Loop

Set startr1 = gTagDb("startra1")

startr1 = 0 ‘ Khi t = 10 kết thúc một quá trình xe ra End Sub

26 Tạo sự kiện cho nút Start để cho phép xe vào.

* Right click → Animation → Touch

Press action: &Set startv1 1;VbaExec openformv1 27 Tạo sự kiện cho nút Stop xe vào.

* Right click → Animation → Touch Press action: &Set stopv12 1 Release action: &Set stopv12 1

28 Tạo thuộc tính cho nút mở Table xe vào từ file Access để xem dữ liệu.

* Left double click + Right click lên nút nhấn → Edit Button → Trong thẻ General: chọn 3D

Action → Chọn Command → Trong khung Press action bấm vào nút có biểu tượng 3 chấm → Chọn All command and macro → Trong khung kế bên chọn lệnh Vbaexec → Next → Trong khung code chọn OpenDataXeVao → Finish

* Tương tự làm cho nút phía dưới chỉ khác trong khung code chọn OpenDataXeRa

29 Tạo sự kiện cho nút Start để cho phép xe ra

* Right click → Animation → Touch

Press action: &Set startra1 1;VbaExec openformra1

30 Tạo sự kiện cho nút Stop xe ra

* Right click → Animation → Touch Press action: &Set stopv12 1 Release action: &Set stopv12 1 31 Chạy chương trình

D Câu hỏi

1 Nhập số xe sao cho đúng nguyên tắc, nếu không đúng thì báo lỗi?

2 Xe chạy nhờ thời gian của Timer có độ phận giải 1s. Lập trình PLC và VBA để chuyển độ phân giải Timer 1ms để xe chạy nhuyễn hơn?

3 Lập trình cho nút Cancel (Khi xe có tín hiệu xe vào mà xe không vào thì đóng Form nhập số xe và Reset Timer)?

4 Khi xe chạy đến khoảng giữa cảm biến 2 và cảm biến 1. Lập trình cho trường hợp cảm biến 2 = 0 và cảm biến 1 = 1 thì xe mới chạy tiếp?

Một phần của tài liệu kl le huu tai 710097d (Trang 106 - 125)

Tải bản đầy đủ (PDF)

(174 trang)