1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo thang máy

19 442 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 552 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Viết các class cơ bản cho chương trình, thread tìm đích tới của thang máy và thread đi chuyển1 tuần Nguyễn Bá Thủy: Viết thread đóng và mở cửa, bổ sung các hàm con trong class elevator 1

Trang 1

VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

──────── * ───────

BÀI TẬP LỚN

MÔN: KỸ THUẬT LẬP TRÌNH

NHÓM PE10

Sinh viên thực hiện : Võ Tiến Tú

Vũ Đình Ba Nguyễn Bá Thủy Phạm Thanh Tùng

Giáo viên hướng dẫn : TS Vũ Thị Hương Giang

Trang 2

MỤC LỤC

MỤC LỤC 2

LỜI NÓI ĐẦU 3

PHÂN CÔNG THÀNH VIÊN TRONG NHÓM 4

CHƯƠNG 1 PHÂN TÍCH YÊU CẦU VÀ THIẾT KẾ GIẢI PHÁP 5

CHƯƠNG 2 CÀI ĐẶT CHƯƠNG TRÌNH 11

b Giao diện bắt đầu chương trình (với user) 13

.14

c.Yêu cầu thang máy đi đến tầng chỉ định: 14

.15

d Gọi thang máy lên(xuống): 15

.16

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 17

TÀI LIỆU THAM KHẢO 18

PHỤ LỤC 19

Trang 3

LỜI NÓI ĐẦU

Hệ thống điều khiển thang má, như nhóm đã tìm hiểu là 1 hệ thống điển hình trong xử lí hàng đợi Tuy nhiên việc xây dựng một cấu trúc hàng đợi cho thang máy đôi hay ba là việc khó khăn.

Trong khuôn khổ môn kĩ thuật lập trình, chúng tôi muốn mô phỏng thang máy dựa trên lập trình hướng đối tượng để có 1 cấu trúc đơn giản cho thang máy

Mục đích của bài tập lớn là thiết lập một chương trình điều khiển hoạt động của một cụm hai thang máy cho tòa nhà D6.

Trang 4

PHÂN CÔNG THÀNH VIÊN TRONG NHÓM

Võ tiến Tú: Tìm hiểu các tài liệu để xây dựng chương trình mô phỏng thang máy theo hướng đối tượng (1 tuần) Viết các class cơ bản cho chương trình, thread tìm đích tới của thang máy và thread đi chuyển(1 tuần)

Nguyễn Bá Thủy: Viết thread đóng và mở cửa, bổ sung các hàm con trong class elevator (1 tuần)

Phạm Thanh Tùng: Viết giao diện nhập và xuất, bổ sung các hàm con trong class systemControl(1 tuần)

Vũ Đình Ba: bổ sung các hàm con trong class floor(4 ngày).

Trang 5

CHƯƠNG 1 PHÂN TÍCH YÊU CẦU VÀ THIẾT KẾ GIẢI PHÁP

<Trình bày, mô tả chi tiết về các kết quả khảo sát về bài toán – thông qua đề bài và sau những lần trao đổi, gặp mặt các thành viên trong nhóm>

<Thiết kế dữ liệu, giải thuật, giao diện chương trình>

1.1 Mô tả yêu cầu bài toán

Bài toán đưa ra những yêu cầu cơ bản như ra các lệnh đóng, mở cửa thang máy; di chuyển thang máy lên, xuống theo yêu cầu của người dùng Đồng thời, thang máy phải

có cách sắp xếp và thực hiện lệnh của nhiều người dùng khác nhau cũng như phân công chức năng hoạt động giữa hai thang máy với nhau sao cho việc giải quyết những yêu cầu của người dùng được thực hiện hiệu quả và nhanh nhất Kèm theo đó, thang máy cần có những bảo đảm an toàn về trọng lượng, có chuông báo động và tính năng giữ an toàn khi đang di chuyển

1.2 Biểu đồ IPO

Bao gồm 2 phần chức năng dành cho user (người sử dụng ở bên trong hoặc bên ngoài thang máy) và admin (người điều khiển)

1.2.1 Admin

1.2.1.1 Chức năng 1: Bật báo động

Tên thang máy Kiểm tra tên thang máy

Kiểm tra trạng thái đèn báo động

Ghi trạng thái đèn là 1

Thông báo đã nhập lệnh (hoặc báo lỗi)

Trạng thái đèn thang máy

1.2.1.2 Chức năng 2: Tắt báo động

Tên thang máy Kiểm tra tên thang máy

Kiểm tra trạng thái đèn báo động

Ghi trạng thái đèn là 0

Thông báo đã nhập lệnh (hoặc báo lỗi)

Trạng thái đèn thang máy

Trang 6

1.2.1.3: Chức năng 3: Chọn tầng đến

Tên thang máy E

Tên tầng F

Kiểm tra tên thang máy và tên tầng

Ghi vào mảng CallUp[F]

[E] =1 CallDown[F][E] =1

Thông báo đã nhập lệnh (hoặc báo lỗi)

1.2.1.4: Chức năng 4: Yêu cầu mở cửa thang máy

Tên thang máy E Kiểm tra tên thang máy

Kiểm tra trạng thái di chuyển

Tìm tầng hiện tại F Ghi vào mảng CallUp[F]

[E] =1 CallDown[F][E] =1

Thông báo đã nhập lệnh (hoặc báo lỗi)

1.2.1.5: Chức năng 5: Khởi động lại hệ thống

Lệnh khởi động hệ thống Thông báo đã khởi động lại

1.2.1.6: Chức năng 6: Chuyển quyền sử dụng cho người dùng

Lệnh chuyển quyền sử

dụng

In ra màn hình Hệ thống các lệnh dành cho

người dùng 1.2.1.7: Chức năng 7: Thoát

Trang 7

Lệnh thoát In ra màn hình Lời tạm biệt người dùng

1.2.2: User:

1.2.2.1: Chức năng 7: Bật báo động

Giống như Admin

1.2.2.2: Chức năng 8: Gọi thang máy đi lên (dành cho người dùng bên ngoài thang máy)

Tên tầng F Kiểm tra tên tầng

Ghi vào mảng CallUp[F]

[E] =1 cho cả hai thang máy

Thông báo đã nhập lệnh (hoặc báo lỗi)

1.2.2.3: Chức năng 9: Gọi thang máy đi xuống (dành cho người dùng bên ngoài thang máy)

Tên tầng F Kiểm tra tên tầng

Ghi vào mảng CallDown[F][E] =1 cho cả hai thang máy

Thông báo đã nhập lệnh (hoặc báo lỗi)

1.2.2.4: Chức năng 10: Chọn tầng cần đến (dành cho người dùng bên trong thang máy)

Giống như Admin

1.2.2.5: Chức năng 11: Yêu cầu mở cửa thang máy

Giống như Admin

1.2.2.6: Chức năng 12: Chuyển quyền sử dụng cho Admin

Trang 8

Lệnh chuyển quyền sử

dụng

In ra màn hình Đã thực hiện lệnh

1.3 Thiết kế chương trình

Các thành phần :

Người sử dụng, người quản lí, giao diện hiển thị, bộ điều khiển đối tượng điều khiển

(1) Thang máy nhận lệnh bật báo động, tắt báo động, lệnh đi chuyển( lên, xuống hoặc đứng yên), đổi khóa di chuyển , mở cửa, đóng cửa, đổi khóa cửa, reset từ bộ

điều khiển

(2): Bộ điều khiển có khả năng lấy thông tin về vị trí tầng, trạng thái di chuyển, khóa

di chuyển, trạng thái cửa, khóa cửa

(3): Tầng nhận lệnh có yêu cầu chọn thang ở tầng số … , có yêu cầu đi lên hoặc đi xuống từ tầng …, reset từ bộ điều khiển.

(4): Bộ điều khiển có khả năng lấy thông tin về các yêu cầu được ghi tại mỗi tầng.

Class: Bộ điều khiển g

Người

sử dụng

Người quản lí

Giao diện hiển thị Đồi tượng điều khiển

Thang Tầng máy

Trang 9

1.4 Thiết kế dữ liệu

Dữ liệu được thiết kế và thể hiện thông qua các class Có 2 nhóm class chính phục vụ cho việc theo dõi trạng thái của thang máy và theo dõi vị trí và lệnh của người dùng

Trong nhóm class phục vụ cho việc theo dõi trạng thái thang máy, những biến chính được sử dụng là:

Evelator - int: thể hiện tên thang máy, với 0 chỉ thang máy 1, 1 chỉ thang máy 2,

và -1 là không chỉ thang máy nào

Direction - int: chỉ chiều thang máy đi, với 1 là đi lên và -1 là đi xuống

Floor - int: Vị trí tầng của thang máy

State - int: Trạng thái di chuyển của thang máy, với 1 là đi lên, -1 là đi xuống

Ngoài ra còn có một số biến đếm int khác được sử dụng để đếm thời gian di chuyển cho thang máy như: isClosingDoor, CountTimeDoor, CountTimeFloor…

Trong nhóm class phục vụ cho việc theo dõi người dùng, có 2 biến chính là CallUp – bool và CallDown – bool

Các giá trị này được đưa vào mảng hai chiều CallUp[F][E] hay CallDown[F][E] theo cách thức sau:

F: tên tầng, E: tên thang máy : thể hiện bằng biến int

Quy ước: 0 chỉ thang máy 1, 1 chỉ thang máy 2

Khi có lệnh gọi thang máy đi lên tầng F: CallUp[F][0] = CallUp[F][1] = 1

Khi có lệnh gọi thang máy đi xuống tầng F:

CallDown[F][0] = CallDown[F][1] = 1 Khi có lệnh chọn tầng cần đến F của thang máy E:

CallUp[F][E] = CallDown[F][E] = 1

Các giá trị này sẽ bị xóa đi khi thang máy thực hiện lệnh mở cửa tại tầng F ứng với mỗi lệnh

1.5 Thiết kế giải thuật

Thuật toán dựa trên các hàm goi là thread Trong đó, hàm ThreadMove1 và ThreadMove2 điều khiển quá trình di chuyển của thang máy, hàm ThreadOpenDoor1

và ThreatOpenDoor2 điều khiển sự mở cửa thang máy, hàm ThreadCloseDoor1 và ThreadCloseDoor2 điều khiển sự đóng thang máy

Trang 10

Những Thread này được thực hiện độc lập với các lệnh nhập dữ liệu từ người dùng (bao gồm lệnh gọi thang máy, lệnh chọn tầng muốn đến…)

Những Thread hoạt động theo cách thức so sánh giá trị vị trí tầng của thang máy với vị trí tầng của lệnh Thang máy sẽ mở (đóng) khi vị trí tầng của nó trùng với tên tầng của lệnh Hàm ThreadMove1 (ThreadMove2) sẽ thay đổi vị trí tầng của thang máy 1 (thang máy 2) tăng lên 1 hay giảm đi 1 trong khi không còn tên tầng của bất kì lệnh nào trùng với vị trí tầng của thang máy

ThreadFindAction luôn thực hiện để tìm ra hành động tiếp theo của thanh máy và nó gián tiếp ra lệnh cho các thread ở trên thực hiện

Trang 11

CHƯƠNG 2 CÀI ĐẶT CHƯƠNG TRÌNH

2.1 Các kỹ thuật lập trình đã áp dụng

<Liệt kê các kỹ thuật lập trình đã sử dụng để làm bài tập lớn >

I Các kỹ

thuật bẫy lỗi và

1 Bẫy lỗi nhập từ bàn phím,

và xóa bộ nhớ đệm trước Hàm scanf trong hàm main

STT Mô tả kỹ thuật / quy tắc Mô tả đối tượng áp dụng

(hàm, biến, biểu thức, câu lệnh) và phạm vi áp dụng

I Các kỹ

thuật làm việc

với biến

1 Đặt tên biến nhất quán, Ngắn gọn, có tính chất gợi nhớ

Các biến trong các class và main

2 Các biến đếm, biến trung gian: đặt tên bằng 1 chữ cái:

biến đếm i,j

Các biến trong các class và main

II Các kỹ

thuật viết mã 1 Sử dụng các khoảng trống

hợp lý, phân đoạn chương trình, đánh dấu cấu trúc phân cấp

Trong toàn bộ hàm và từng đoạn chương trình

2 Sử dụng else if trong cấu trúc đa lựa chọn Trong các hàm

3 Gióng hàng trong các biểu thức điều kiện để tránh nhầm lẫn

Trong toàn bộ hàm và từng đoạn chương trình

III Các kỹ

thuật thiết kế

chương trình

1 Sử dụng chương trình con Chia chương trình ra thành các

hàm

2 Tạo file header File PE10_Cursor

3 Đóng gói, bao bọc Trong các class

IV Các kỹ

thuật xây dựng

hàm/thủ tục

1 Đặt tên hàm gợi nhớ, tiện sử dụng

Toàn bộ các hàm trong chương trình

2 Tham chiếu con trỏ, truyền giá trị với biến int va bool Trong toàn chương trình

3 Inline funtions Các hàm đơn giản trong các

class

4 Sử dụng lính canh Trong các vòng lặp

Trang 12

lập trình phòng

ngừa

biệt trước khi xử lí

…3 Assertion Các hàm quan trọng và các

thread trong chương trình

II Phong

cách lập trình

1 Luôn gióng hàng các câu lệnh sau dấu mở ngoặc

Toàn bộ chương trình

2 Chú thích đầy đủ Toàn bộ chương trình

3 Gióng hàng giữa các câu lệnh

Toàn bộ chương trình

4 Gióng hàng các cặp mở đóng ngoặc nhọn cùng cấp

Toàn bộ chương trình

5 Dùng dòng trống để chia code thành các đoạn chính

Toàn bộ chương trình

2.2 Kết quả chương trình

<Trình bày tổng quan về kết quả đạt được trong quá trình làm bài tập lớn trong chương trình minh họa, nêu qua những chức năng chính đã thực hiện được>

Chức

năng

(đán

h số

theo

menu

từ

1-14)

Chữ ký (Khai báo chức năng) Tình trạng khi nộp bài

( 0 : chưa làm

1 : chưa chạy

2 : chạy thông và chưa bắt

hết ngoại lệ 3: chạy thông và có bắt hết

ngoại lệ)

Người thực hiện : ai làm

(X: cài đặt Y: kiểm thử)

2.3 Giao diện chương trình

a, Giao diện bắt đầu chương trình (với admin)

Trang 13

b Giao diện bắt đầu chương trình (với user)

Trang 14

c.Yêu cầu thang máy đi đến tầng chỉ định:

Trang 17

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Chương trình thiết kế theo hướng đối tượng nên có ưu điểm là cấu trúc rõ ràng, dễ dàng mở rộng với các chức năng nhập số người và khống chế số người, thêm tầng, thêm thang … Do mô hình hóa được các câu lệnh phức tạp nên vẫn đề cần xem xét quan trọng nhất chỉ tập trung vào ThreadFindAction nếu muốn cải tiến thuận toán theo cách di chuyển chẵn lẻ hay khống chế tầng

Do sử dụng nhiều thread đồng thời nên chương trình phụ thuộc nhiều vào phần cứng của hệ thống, độ trế thời gian phải được xem xét tới Cách khắc phục:

- Thay đổi cách biểu hiện của class elevator ngay từ khi gọi thread

- Tính đến trế thời gian, dùng hàm Sleep(200) hoặc Sleep(100)

(đã thựu hiện)

Nhược điểm cuối cùng là giao diện nhập dữ liệu cùng với giao diện in ra nên có trường hợp xảy ra lẫn con trỏ in ra hoặc nhập vào Cách khắc phục:

- Tạo giao diện đồ họa riêng (do khó khăn trong sử dụng đồ họa C nên nhóm chưa đủ thời gian để sửa đổi giao diện)

Trang 18

TÀI LIỆU THAM KHẢO

[1] Slide môn Kỹ thuật lập trình của cô Vũ Thị Hương Giang

[2] The Art of Computer Programming tập 3 - Donald Knuth

Trang 19

PHỤ LỤC

Chú ý kèm file PE10_Cursor.h cùng với file ElevatorSimalation.cpp trong cùng 1 folder, hoặc đính kèm file header khi chạy devC++

Chương trình hoạt động tốt trên môi trường Window, bạn có thể bật lên và sử dụng

mà không cần thêm thao tác cài đặt

Ngày đăng: 14/06/2016, 16:19

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w