Để thực hiện sơ đồ khối của chương trình tối ưu vị trí gửi xe đã được thiết kế ở chương 3, ta làm như sau:
Trước hết ta cần hiểu được các biến trong chương trình này. Hệ quản trị cơ sở dữ liệu SQL Server sử dụng trong đề tài này sẽ gồm có một bảng có tên là “RFID”. Trong bảng đó sẽ có các cột “vitri”, “mathe”, và “biensoxe”. Trong đó “vitri” là cột quản lý vị trí gửi hoặc lấy xe, “mathe” là cột quản lý mã của thẻ từ, “biensoxe” là cột quản lý biển số xe của khách hàng sau khi xử lý.
72 Chương trình tối ưu vị trí gửi xe được trình bày trong hình 4.8.
Hình 4.8: Chương trình tối ưu vị trí gửi xe
Chương trình này sẽ được truyền vào 2 tham số là a và b tương ứng với mã thẻ vừa quẹt và biển số xe đã được xử lý. Ở đây C# có hỗ trợ cho ta các hàm để có thể truy cập cơ sở dữ liệu (CSDL) SQL Server và ta có thể chọn, xóa, thêm và cập nhật lại dữ liệu theo ý muốn. Để thực hiện bất kỳ thao tác nào với dữ liệu trong CSDL ta phải các bước sau theo thứ tự: Tạo kết nối, mở kết nối, thực hiện thao tác với dữ liệu và đóng kết nối. Nếu muốn truy xuất dữ liệu ta có thể dùng lệnh
73 ExecuteScalar() để trả về giá trị đầu tiên, nếu muốn thêm, xóa hoặc chỉnh sửa dữ liệu thì ta có thể sử dụng hàm ExecuteNonQuery để thao tác mà không cần trả về giá trị gì cả. Đầu tiên, ta sẽ gọi vị trí của mã thẻ trong bảng RFID nếu trước đó mã thẻ đã được lưu trong CSDL rồi và lưu vào biến “ID”. Nếu ID khác NULL nghĩa là mã thẻ đã có trong CSDL rồi, ta tiến hành cập nhật vị trí mã thẻ đó thành NULL xem như là xóa mã thẻ đó khỏi CSDL, tương tự xóa biển số xe ở vị trí đó khỏi CSDL đồng thời trả về giá trị ID để C# có thể điều khiển PLC lấy hoặc trả xe với đúng vị trí đó. Ngược lại nếu ID trả về giá trị NULL, nghĩa là không tìm thấy mã thẻ đó trong CSDL. Khi đó ta sẽ chọn vị trí có giá trị NULL đầu tiên trong CSDL bằng lệnh ExecuteScalar, cập nhật giá trị mã thẻ và biển số xe vào đúng vị trí đó đồng thời gửi vị trí đó qua PLC để xử lý.
4.2.3. Giao diện giám sát và điều khiển trên WINCC.
Phần giao diện chính:
Trang này sẽ hiển thị thông tin tổng quan của đề tài như tên người thiết kế, tên gọi của hệ thống và một số thông tin cần thiết khác để người ta nhìn vào có thể biết được hệ thống đó làm cái gì. Ngoài ra còn có 2 nút nhấn để đi vào giao diện giám sát cũng như thoát quyền truy cập của người dùng.
74
Phần giao diện giám sát và điều khiển:
Ở giao diện này nhóm sẽ thiết kế toàn bộ cách thức hoạt động của hệ thống để người dùng có thể quan sát được tổng thể hoạt động của hệ thống và có thể điều khiển nó một cách dễ dàng nhất. Gồm có:
Bảng giám sát: Tại đây người dùng có thể quan sát trạng thái từng phần tử
trong hệ thống gồm có các tín hiệu của cảm biến và trạng thái hoạt động của các động cơ.
Giao diện mô hình: Ở đây người dùng có thể giám sát được trong bãi đang
có bao nhiêu chiếc xe đang được gửi và có bao nhiêu chỗ trống chưa có xe.
Hình 4.10: Giao diện giám sát và điều khiển trên WinCC
Bảng điều khiển: gồm các nút nhấn vận hành hệ thống. Khi ấn vào “Điều
khiển” sẽ hiện ra bảng điều khiển nhỏ cho phép tắt/mở, reset và chọn chế độ điều khiển cho hệ thống.
75 Trong đó:
+ Trang chủ: trở về giao diện chính người dùng
+ On/Off: nút nhân có tác dụng cho hệ thống hoạt động hay không. + Reset: nút nhấn có tác dụng reset toàn bộ hệ thống.
+ Auto/Hand: nút nhấn có tác dụng làm là hệ thống sẽ chạy tự động hay sẽ điều
khiển bằng tay.
+ Thoát: để thoát quyền truy cập của người dùng.
+ Emergency: nút dừng khẩn cấp khi hệ thống gặp sự cố.
+ Mannual: nút nhấn có tác dụng mở giao diện điều khiển tay cho phép người vận hành điều khiển độc lập từng phần tử trong hệ thống.
Hình 4.12: Nút Mannual trong màn hình điều khiển và giám sát trên WinCC 4.2.4. Giao diện giám sát và điều khiển trên Web Server.
Web giám sát và điều khiển hệ thống này có giao diện gồm có các bảng điều khiển, bảng giám sát và bảng điều khiển tay với các chức năng tương tự được giới thiệu trong giao diện giám sát và điều khiển trên WINCC.
76
Hình 4.13: Giao diện giám sát và điều khiển hệ thống trên Webserver 4.2.5. Giao diện giám sát và điều khiển bên C#.
Hình 4.14: Màn hình điều khiển và giám sát C# Winforms
77 - Một danh sách các cổng COM để chọn cổng giao tiếp đang sử dụng giữa máy tính với Arduino và một nút nhấn. Nếu trạng thái kết nối với Arduino là “Chưa kết nối” thì nút nhấn sẽ hiển thị chữ “Kết nối” và nút nhấn này sẽ có tác dụng kết nối C# với Arduino. Ngược lại nếu trạng thái kết nối là “Đã kết nối” như trong ảnh thì nút nhấn sẽ hiển thị chữ “Ngắt kết nối” và nút nhấn lúc này có tác dụng là ngắt kết nối giữa C# và Arduino.
- Khi quẹt thẻ thì mã thẻ sẽ được hiển thị lên ô “Mã thẻ”.
Ở giữa là ảnh chụp từ webcam logitech C270 và chuỗi ký tự biển số xe sau khi đã được xử lý.
Ở dưới cùng là bảng cơ sở dữ liệu được cập nhật liên tục để thể hiện đang có mã thẻ và biển số xe nào đã được lưu và nhìn vào đó ta có thể biết trong bãi giữ xe đang có bao nhiêu chiếc, còn trống bao nhiêu chỗ.
Ở bên phải là hình ảnh của webcam và các nút nhấn để yêu cầu chương trình chụp hình và nhận diện biển số xe. Ngoài ra ta có thể tìm vị trí xe bằng cách nhập biển số vào ô “Nhập biển số” và ấn nút “Tìm”, vị trí của xe đó sẽ hiển thị lên ô “Vị trí xe”. Đôi khi biển số xe sẽ nhận diện thiếu hoặc có sai sót thì ta sẽ nhập lại biển số xe đó và bấm vào nút “Cập nhật”, biển số xe đúng sẽ được cập nhật trong cơ sở dữ liệu. Nút “xóa” có tác dụng xóa tất cả các dữ liệu của chiếc xe bất kỳ ra khỏi hệ thống.
4.3. Tài liệu hướng dẫn, thao tác. Hướng dẫn sử dụng.
Bước 1: Cấp nguồn 220VAC cho hệ thống, bật CB bảo vệ. Bước 2: Chạy chương trình C#, bấm nút “Kết nối”.
Bước 3: Mở giao diện giám sát Wincc, Webserver.
Bước 4: Chọn chế độ Auto và quẹt thẻ khi có xe vào hoặc ra.
Bước 5: Khi muốn dừng hoạt động, bấm nút OFF trên màn hình giám sát, tắt
78
Chương 5:
KẾT QUẢ SO SÁNH, THỰC NGHIỆM, PHÂN TÍCH, TỔNG HỢP 5.1. Kết quả đạt được
Hình ảnh hệ thống thu được từ thực nghiệm:
Ở trạng thái ban đầu, khi hệ thống chưa hoạt động:
Cơ sở dữ liệu trống, không có mã thẻ nào. Hệ thống hiển thị chế độ điều khiển là “Auto”. Kết nối với Arduino đã được tạo. Chỉ có 1 xe đang ở vị trí sẵn sàng vào bãi giữ xe đang hiển thị ở ô hình ảnh từ webcam.
Hình 5.1: Chương trình C# khi hệ thống bắt đầu hoạt động
Màn hình giám sát trên WinCC cho thấy hiện không có xe nào trong bãi, chỉ có 1 xe đang ở vị trí IN. Chế độ điều khiển là “Auto” được hiển thị trên màn hình.
Hình 5.2: Màn hình giám sát WINCC ở trạng thái ban đầu
79
Hình 5.3: Web Server ở trạng thái ban đầu
Tiến hành gửi xe thứ nhất vào:
Hình 5.4: Quẹt thẻ
80
Hình 5.5: Hệ thống hoạt động gửi xe vào
Chương trình C# sau khi gửi xe thứ nhất vào:
Hình 5.6: Chương trình C# sau khi gửi xe thứ nhất vào
Lúc này ta có thể thấy biển số xe và mã thẻ của chiếc xe đầu tiên đã được lưu vào cơ sở dữ liệu đồng thời các chức năng khác của chương trình cũng hoạt động
81 chính xác. Mã thẻ được hiển thị đúng lên ô “Mã thẻ”, COM4 là cổng giao tiếp đang hoạt động, chế độ điều khiển là “Auto”, biển số xe được chụp lại và qua hàng loạt các giai đoạn xử lý được hiển thị trên màn hình.
Màn hình giám sát trên Wincc lúc này:
Hình 5.7: Màn hình WINCC sau khi gửi xe đầu tiên
Web Server lúc này:
82 Tiến hành gửi xe thứ 2.
Chương trình C#:
Hình 5.9: Chương trình C# sau khi gửi xe thứ 2
Ta có thể thấy mã thẻ và biển số của xe thứ 2 đã được lưu vào vị trí số 2 trong cơ sở dữ liệu.
Màn hình điều khiển và giám sát Wincc sau khi gửi xe thứ 2:
83 Web Server sau khi gửi xe thứ 2:
Hình 5.11: Web Server sau khi gửi xe thứ 2
Tương tự cho vị trí số 3.
84
Hình 5.13: Cơ sở dữ liệu khi ban đầu
Hình 5.14: Màn hình WinCC sau khi gửi xe thứ 3
85 Bây giờ ta sẽ tiến hành lấy xe ra ở vị trí số 2:
Hình 5.16: Hệ thống tiến hành lấy xe ra ở vị trí số 2
Chương trình C# sau khi lấy xe ở vị trí số 2.
86 Lúc này mã thẻ và biển số của xe ở vị trí số 2 đã được xóa khỏi cơ sở dữ liệu.
Màn hình WinCC sau khi lấy xe số 2 ra khỏi bãi giữ xe:
Hình 5.18: Màn hình WinCC sau khi lấy xe số 2 ra
Web Server sau khi lấy xe số 2 ra:
87 Như vậy vị trí trống gần nhất hiện tại đang là vị trí số 2, nếu ta gửi một xe khác vào thì xe đó sẽ vào đúng vị trí số 2. Hãy cùng xem nhé.
Tiếp tục gửi xe bất kỳ vào.
Hình 5.20: Chương trình C# sau khi gửi xe mới vào vị trí số 2
Hình 5.21: Cơ sở dữ liệu lúc sau
Lúc này xe mới vào đã được gửi vào vị trí số 2. Mã thẻ của xe ở vị trí số 2 trước đó là 723572523 (hình 5.8), còn mã thẻ ở vị trí số 2 bây giờ là 2572932651.
88 Gửi xe tiếp theo vào.
Tương tự cho lần gửi xe này, vị trí trống gần nhất hiện tại đang là vị trí số 4, nên xe sẽ được gửi vào vị trí này.
Hình 5.22: Chương trình C# sau khi gửi xe thứ tư
89
Hình 5.24: Web Server sau khi gửi xe thứ 4 5.2. Phân tích và so sánh.
Về khoảng thời gian gửi hoặc lấy xe trong hệ thống bãi giữ xe thông minh của nhóm em là khá tốt. Theo ghi nhận từ thực nghiệm thì nhóm em thấy ở vị trí gần nhất, hệ thống mất khoảng 15 giây cho việc gửi xe và khoảng 20 giây cho việc lấy xe. Đối với vị trí xa nhất là khoảng 23 giây cho việc gửi xe và 21 giây cho việc lấy xe. Theo thống kê trung bình, hệ thống sẽ tốn khoảng 20s cho một lần gửi xe và khoảng 22 giây cho một lần lấy xe. Trong khi đó, đồ án bãi giữ xe dạng hình tròn của nhóm khác mà em tham khảo được có thành tích tốt nhất là khoảng 13 giây cho 1 lần lấy hoặc gửi xe ở vị trí gần nhất và khoảng 23 giây đối với vị trí xa nhất, tính trung bình cộng sẽ mất khoảng 18 giây cho một lần lấy hoặc gửi xe, nhanh hơn hệ thống của nhóm em một chút. Còn nhiều mô hình khác có khoảng thời gian vận hành lâu hơn khoảng 20 giây trở lên cho vị trí gần nhất và khoảng 40 đến 60 giây cho vị trí xa nhất. Như vậy về mặt thời gian thì hệ thống của nhóm em đạt được là khá tốt. Nếu điều chỉnh lại cơ cấu nâng hạ, tăng tốc độ quay của động cơ bước và giảm thời gian chờ giữa các vị trí thì có thể sẽ cải thiện được đáng kể thời gian lấy xe cho hệ thống.
90
Bảng 5.1: Thống kê thời gian vận hành hệ thống
Vị trí 1 2 3 4 5 6 7 8
Chế độ gửi xe
Thời gian (giây) 15 18 18 20 18 22 22 23
Chế độ lấy xe
Thời gian (giây) 20 22 22 20 23 25 25 21
Về giải pháp RFID, nhóm em xây dựng được thuật toán ưu tiên vị trí xe vào giúp cho việc gửi xe của khách hàng sẽ được rút ngắn. Các xe gửi vào sẽ được hệ thống ưu tiên gửi vào vị trí trống gần nhất. Ở các mô hình đồ án khác, người ta sẽ quy định mã số của 1 chiếc xe ở 1 vị trí cố định, họ có thẻ ở vị trí số 1, thẻ ở vị trí số 2. Tuy nhiên trong chương trình của tụi em đã giải quyết được vấn đề đó. Bất kỳ thẻ nào được quẹt đầu tiên sẽ được ưu tiên vào vị trí trống gần nhất là số 1, thẻ quẹt lần 2 sẽ vào số 2 và tương tự cho các lần khác, không cố định mã số thẻ vào một vị trí nào hết. Điều đó sẽ giải quyết được vấn đề bất cập là trong bãi còn nhiều chỗ trống ở vị trí gần nhưng hệ thống lại gửi xe ở vị trí xa, làm tăng thời gian lấy xe và tốn năng lượng vận hành hệ thống.
Về mặt mô hình giữ xe, nhóm em thiết kế và thi công thành công mô hình bãi giữ xe hình trụ tròn, là giải pháp tối ưu được diện tích giữ xe nhất trong các loại mô hình bãi giữ xe tự động. Tuy nhiên phần thiết kế cánh tay di chuyển trong hệ thống chưa được tối ưu nên việc cánh tay di chuyển lên/xuống và ra/vào không thực hiện đồng thời được, làm tăng thời gian gửi/lấy xe cho khách. Ngoài ra việc thiết kế cánh tay chưa được tối ưu này còn làm tăng diện tích không đáng có của bãi giữ xe.
5.3. Tổng kết
Ưu điểm:
- Lắp đặt thành công mô hình phần cứng hệ thống bãi giữ xe ô tô tự động. - Hệ thống có thể gửi xe vào và lấy xe ra đúng vị trí yêu cầu.
- Khi quẹt thẻ thì hệ thống tự động lưu mã thẻ và gửi tín hiệu cho PLC điều khiển chính xác.
- Xây dựng được thuật toán ưu tiên vị trí gửi xe giúp rút ngắn thời gian gửi xe cho khách hàng.
- Điều khiển và giám sát hệ thống trên WINCC thành công. - Điều khiển và giám sát hệ thống trên Webserver thành công. Nhược điểm:
91 - Đôi khi việc xử lý ảnh biển số xe vẫn có sai sót nhưng tỷ lệ thấp.
- Thiết kế phần cánh tay di chuyển trong hệ thống chưa được tối ưu nên chưa rút ngắn tối đa thời gian gửi/lấy xe cho khách và còn làm tăng diện tích không đáng có của bãi giữ xe.
5.4. Kết quả thống kê
Sau khi hoàn thành sản phẩm, nhóm em có chạy thử và lập ra được bảng thống kê số lần thực hiện chính xác để kiểm tra tính ổn định của hệ thống như sau: