Skip to main content

Bài 3: Câu lệnh điều kiện

Trong Bài học trước, bạn đã học cách sử dụng dữ liệu từ Cảm biến quang học trong một dự án để sắp xếp Đĩa theo màu sắc. Trong Bài học này, bạn sẽ dựa trên những kiến thức đã học để khám phá các tùy chọn trong VEXcode cho phép dự án đưa ra quyết định bất kể Cảm biến quang học phát hiện màu nào. Bạn sẽ tìm hiểu về: 

  • Tại sao việc tối ưu hóa quá trình ra quyết định lại quan trọng trong môi trường công nghiệp.
  • Sự khác biệt giữa các khốiNếu thì,Nếu thì khácNếu không thì.

Kiểm tra nhiều điều kiện

Trong Bài học trước, bạn đã tạo một dự án có thể sắp xếp Đĩa theo màu sắc thành bảng màu đỏ hoặc bảng màu xanh lá cây. Mặc dù cách này hiệu quả, nhưng dự án chỉ có thể sắp xếp một Đĩa tại một thời điểm. Trong môi trường nhà máy, nhiều đồ vật cần được phân loại và xếp lên pallet nhiều lần. Để thực hiện điều này một cách hiệu quả, Cánh tay 6 trục cần có khả năng đưa ra quyết định nhiều lần về cách di chuyển các vật thể hoặc liệu có cần sự can thiệp của con người hay không. Hãy xem xét các khối lập phương bạn đã di chuyển trong khóa học Giới thiệu về cánh tay 6 trục.Cận cảnh cánh tay 6 trục giữ một khối lập phương màu xanh phía trên cảm biến quang học.

Sẽ thế nào nếu có một khối lập phương màu xanh trong khu vực tải hàng? Điều gì sẽ xảy ra trong dự án ở Bài học trước? Trong môi trường công nghiệp, cần phải xem xét tất cả các điều kiện có thể xảy ra. Nếu một vật thể lạ rơi vào các vật thể cần phân loại, con người có thể sẽ phải can thiệp để đảm bảo rằng khu vực làm việc và những công nhân xung quanh luôn an toàn và hoạt động hiệu quả.

Tuần tựNếu thìkhối

Trong Bài học trước, bạn đã sử dụng haiNếu thìtheo trình tự để kiểm tra hai điều kiện riêng biệt lần lượt, về cơ bản là đặt ra hai câu hỏi trong dự án.

Ví dụ về Dự án VEXcode sẽ hoàn thành thử thách trong Bài học trước. Một điểm nổi bật màu đỏ nằm ở bình luận có nội dung Di chuyển Đĩa đến đúng vị trí và hai khối lệnh If then bên dưới bình luận đó. Các khối trong hộp tô sáng màu đỏ có nội dung như sau: nếu quang học 5 phát hiện màu đỏ thì di chuyển cánh tay 10 đến vị trí x 169 y 150 z 100 và nếu quang học 5 phát hiện màu xanh lá cây thì di chuyển cánh tay 10 đến vị trí x 172 y 1 z 100.

Đầu tiên, Vật thể có màu đỏ không?, rồiVật thể có màu xanh lá cây không?. Mỗi điều kiện được kiểm tra mỗi khi dự án được chạy, bất kể cảm biến quang học phát hiện ra điều gì. Mặc dù cấu trúc này cho phép bạn sắp xếp từng Đĩa một cách hiệu quả, nhưng đây không phải là cách hiệu quả nhất để thực hiện việc đó. Đĩa đỏ có thể được phân loại, nhưng Cảm biến quang học cũng có thể phát hiện đĩa xanh từ các vật thể khác trong môi trường và ngược lại. Ngoài ra, không có sự cân nhắc nào dành cho vật thể không có màu đỏ cũng không có màu xanh lá cây, chẳng hạn như vật thể bất ngờ có thể gây ra vấn đề về an toàn.

Hình ảnh luồng dự án

Trong suốt Bài học này, hình ảnh giải thích luồng dự án VEXcode sẽ được chia sẻ. Bạn có thể tái tạo những hình ảnh này trong sổ tay kỹ thuật của mình khi thực hiện Bài học. 

Sử dụng các công cụ trong Google Slides hoặc Microsoft PowerPoint như mũi tên, hộp hoặc sơ đồ để giúp tạo hình ảnh trực quan phù hợp nhất với sổ tay của bạn.

Hộp công cụ dòng trong Google Slides mở ra. Hộp công cụ hiển thị các tùy chọn cho Đường thẳng, Mũi tên, Đầu nối khuỷu tay, Đầu nối cong, Đường cong, Đường đa giác và Nét vẽ.

 

Tuần tựNếu thì nếu không thìkhối

Có một khối khác có thể được sử dụng để cho phép chúng ta kiểm tra cả điều kiện màu đỏ và màu xanh lá cây cũng như tính đến màu khác nhau. KhốiIf then elselà khối C chạy các khối bên trong nhánhifhoặc nhánhelse, dựa trên giá trị Boolean được báo cáo.

Đoạn mã sử dụng khối if then else với mũi tên màu đỏ và xanh lá cây để biểu thị luồng dự án. Dự án có nội dung: di chuyển đĩa đến đúng pallet, nếu quang học 5 phát hiện màu đỏ thì di chuyển cánh tay 10 đến vị trí x 169 y 150 z 100 nếu không thì đặt tháp tín hiệu 6 thành màu xanh lam và nhấp nháy, đặt cánh tay 10 ở chế độ dừng có kiểm soát. Lưu ý rằng hai lệnh sau else đều nằm trong nhánh else của khối if then else. Mũi tên màu xanh lá cây và văn bản có nội dung Optical phát hiện các điểm thực màu đỏ từ khối If then đến khối di chuyển đến vị trí. Một mũi tên màu đỏ có chữ đọc là quang học phát hiện các điểm sai màu đỏ từ khối tháp tín hiệu if then đến khối tháp tín hiệu set ở đầu nhánh else.

Sau khi chạy nhánh ifhoặc nhánh else, dự án sẽ chuyển sang khối tiếp theo trong ngăn xếp. Luồng dự án của các khốiNếu thì kháccũng có thể được hiển thị để làm cho các nhánh dễ nhìn thấy hơn.

Luồng dự án giống như trước, nhưng nhánh if và nhánh else được tách riêng để rõ ràng hơn. Bên trái là dòng chữ màu đỏ có nội dung "màu đỏ không được phát hiện là sai" kèm theo mũi tên chỉ vào tháp tín hiệu đã đặt và các khối dừng được kiểm soát đã đặt. Bên phải là văn bản màu đỏ được phát hiện là đúng, sau đó có mũi tên chỉ đến khối di chuyển đến vị trí. Cả bên trái và bên phải đều có mũi tên màu cam bên dưới cho biết chúng sẽ tiếp tục với dự án bên dưới khối if then else.

Lưu ý rằng trong các ví dụ này, nhánh elseđược sử dụng để xử lý tình trạng một đối tượng không phải màu đỏ cũng không phải màu xanh lá cây. Trong trường hợp đó, cần có sự can thiệp của con người. Trước đó bạn đã biết rằng đèn xanh trên Tháp tín hiệu được sử dụng để báo hiệu cần có sự can thiệp của con người. Ngoài ra, chức năng dừng có kiểm soát sẽ dừng chuyển động của Cánh tay 6 trục để đảm bảo an toàn cho con người và máy móc. Có thể thêm khối tháp tín hiệu Setvà khối dừng điều khiểnSetvào nhánhelse, để một vật thể không phải màu đỏ hoặc không phải màu xanh lá cây có thể kích hoạt các tính năng an toàn này.

Nội dung của nhánh else trong khối If then else được gọi ra bằng hộp màu đỏ. Bao gồm khối tháp tín hiệu và khối dừng điều khiển bằng tay.

Những hình ảnh cho đến nay chỉ cho thấy cách xử lý tình trạng vật thể có màu đỏ. Cần phải có Nếu thì khácđể kiểm tra tình trạng của vật thể có màu xanh lá cây hay không.

Cùng một dự án vexcode với khối if then else thứ hai được thêm trực tiếp sau khối đầu tiên. Khối này và các khối chứa bên trong đọc: nếu quang học 5 phát hiện màu xanh lá cây thì di chuyển cánh tay 10 đến vị trí x 172 y 1 z 100 nếu không thì đặt tháp tín hiệu 6 thành màu xanh lam và nhấp nháy, đặt cánh tay 10 để điều khiển dừng.

Chúng ta hãy cùng suy nghĩ về luồng dự án với cấu trúc này. Mỗi lần chạy dự án, nhiều nhánh sẽ chạy, bất kể cảm biến quang học phát hiện màu nào.

Hình ảnh luồng dự án cho hai khối if thì else. Nửa trên cho thấy luồng dự án giống như trước đó, sau đó có thể thấy một mũi tên màu cam di chuyển từ khối if then else đầu tiên sang khối thứ hai. Khối if then else thứ hai có mũi tên màu xanh lá cây và văn bản bên cạnh có nội dung: quang học phát hiện màu xanh lá cây đúng. Mũi tên trỏ từ khối if then đến khối di chuyển đến vị trí trong nhánh if then. Bắt đầu từ cùng một điểm là văn bản màu đỏ và mũi tên màu đỏ có nội dung: Quang học phát hiện màu xanh lá cây là sai. Mũi tên chỉ từ khối tháp tín hiệu if then đến khối tháp tín hiệu set trong nhánh else.

Chúng ta hãy nghĩ về điều này với một chiếc đĩa màu đỏ làm ví dụ. Nếu Cảm biến quang học phát hiện màu đỏ, tình trạng của khốiNếu thì khácđầu tiên sẽ được báo cáo là đúng. Khối bên trong nhánhnếusẽ chạy, di chuyển Cánh tay 6 trục trên bảng màu đỏ. Tuy nhiên, điều kiện bên trong khốiIf then elsethứ hai sẽ báo cáo là sai. Điều này có nghĩa là khối bên trong nhánhelsecủa nó sẽ chạy, đưa Cánh tay 6 trục vào trạng thái dừng có kiểm soát và nhấp nháy màu xanh lam trên Tháp tín hiệu. Vì Cánh tay 6 trục sẽ ở trạng thái dừng được kiểm soát nên không có khối nào khác trong dự án có thể chạy và điều đó sẽ dừng mọi hoạt động cho đến khi vấn đề được giải quyết. 

Luồng dự án đi qua ví dụ về cảm biến quang học phát hiện màu đỏ. Các ghi chú và mũi tên ở bên cạnh dự án đọc là phát hiện quang học màu đỏ đúng, sau đó di chuyển đến vị trí khối trong nhánh đầu tiên nếu thì nhánh sẽ chạy. Văn bản bên dưới có nội dung: nhánh else sẽ không chạy vì nhánh if then đã được chạy. Một mũi tên chỉ đến khối if then else thứ hai. Văn bản bên cạnh có nội dung: quang học phát hiện màu xanh lá cây sai và trỏ mũi tên màu đỏ đến nhánh else của khối if then else thứ hai. một mũi tên màu cam trỏ từ cánh tay điều khiển dừng khối đến khối dừng điều khiển sang một bên. Văn bản bên dưới có nội dung lệnh dừng điều khiển sẽ được kích hoạt, dừng tất cả các khối ngoại trừ những khối được gắn vào khối mũ khi lệnh dừng điều khiển.

Mặc dù chúng ta có thể tính đến một vật thể bất ngờ (như Khối lập phương màu xanh), nhưng Cánh tay 6 trục sẽ không bao giờ đạt đến điểm trong dự án thả Đĩa lên pallet. Thay vì kiểm tra điều kiện đỏ và xanh lá cây lần lượt, có một cách để kiểm tra xem một vật thể có màu xanh lá cây haychỉnếu vật thể không phải màu đỏ.   

Lồng nhauNếu thì nếu khôngkhối 

Mỗi nhánh của khốiNếu thì kháccó thể chấp nhận các khối C khác bên trong chúng. Đây được gọi là 'lồng ghép'. Điều này có nghĩa là khốiIf then elsethứ hai có thể được lồng vào nhánhelsecủa khối đầu tiên, như thế này.Cùng một dự án như trên, nhưng với khối if then else thứ hai bên trong nhánh else của khối if then else đầu tiên. Một hộp màu đỏ nằm xung quanh khối if then else thứ hai được lồng vào nhánh else của khối if then else đầu tiên.

Bây giờ tình trạng Cảm biến quang phát hiện màu xanh lá cây sẽ chỉ được kiểm tra khi tình trạng trước đó (Cảm biến quang phát hiện màu đỏ) báo cáo là sai. Vì vậy, khi Cảm biến quang học phát hiện màu đỏ, chỉ nhánhhoặcđầu tiên sẽ chạy, di chuyển Đĩa lên trên bảng màu đỏ. 

Góc nhìn cận cảnh của dự án với khối di chuyển đến vị trí trong nhánh if then của khối if then else đầu tiên được gọi bằng hộp màu đỏ.

Nếu Cảm biến quang học phát hiện màu xanh lá cây, tình trạng của nhánhnếuđầu tiên (Quang học phát hiện màu đỏ) sẽ báo cáo là sai và do đó nhánhnếusẽ chạy. Tình trạng của khối Nếu thì kháclồng nhau sẽ được kiểm tra để xem Cảm biến quang học có phát hiện màu xanh lá cây hay không. Điều kiện đó sẽ được báo cáo là đúng, do đó khối bên trong nhánhhoặcthứ hai sẽ chạy, di chuyển Đĩa qua bảng màu xanh lá cây. 

Nếu Cảm biến quang học không phát hiện thấy màu đỏ hay màu xanh lá cây (giống như trường hợp Khối lập phương màu xanh được nhặt lên), cả hai điều kiện đều sẽ báo cáo là sai và do đó nhánhelsecủa khốiIf then elselồng nhau sẽ chạy, kích hoạt lệnh dừng có kiểm soát và cảnh báo công nhân về sự cần thiết phải can thiệp của con người. Các luồng dự án này cũng có thể được hình dung dưới dạng sơ đồ luồng, giống như sơ đồ ở đây.

Sơ đồ giải thích quy trình của một dự án. Phía trên là câu hỏi quang học có phát hiện được màu đỏ không? Một đường màu xanh lá cây rẽ sang bên trái và nói rằng hãy di chuyển lên trên bảng màu đỏ, sau đó một đường màu cam đi xuống từ đó để nói rằng hãy đặt đĩa vào đúng bảng màu. Một đường màu đỏ tách ra từ câu hỏi ban đầu và nói là sai. Tiếp theo là một câu hỏi khác: quang học có phát hiện được màu xanh lá cây không? Một lần nữa, đường màu xanh lá cây bên phải cho biết là đúng và di chuyển lên trên bảng màu xanh lá cây. Đường này kết nối với đường màu cam đến cùng một ô với đường màu xanh lá cây còn lại có nội dung đặt đĩa vào đúng pallet. Bên phải là đường màu đỏ báo lỗi và thiết lập tháp tín hiệu nhấp nháy màu xanh và kích hoạt chế độ dừng có kiểm soát.

Lồng nhauNếu thì nếu khôngkhốicó thể được xem như một danh sách câu hỏi xếp tầng. Các câu hỏi như sau: 

  1. Vật đó có màu đỏ không? 
    1. Đúng? Hãy bỏ bảng màu đỏ sang một bên và ngừng đặt câu hỏi.
    2. KHÔNG? Hãy hỏi một câu hỏi khác. 
      1. Vật đó có màu xanh không?
        1. Đúng? Hãy bỏ bảng màu xanh lá cây đi và ngừng đặt câu hỏi.
        2. KHÔNG? Khi đó vật thể không có màu đỏ hoặc màu xanh lá cây. Thay đổi màu của Tháp tín hiệu và kích hoạt lệnh dừng có kiểm soát.

Lưu ý rằng các câu hỏi chỉ được hỏi nếu câu hỏi trước đó được trả lời là phủ định. 

Trong khi khối này xử lý tất cả các điều kiện mà chúng ta muốn kiểm tra, vẫn có một khối khác sẽ kiểm tra các điều kiện theo cùng một cách, nhưng dễ xây dựng hơn so với các khối lồng nhau. 

Nếu không thìKhối

Khối Else if cho phép bạn kiểm tra nhiều điều kiện trong cùng một khối. Mỗi điều kiện trong khối này sẽ được kiểm tra tuần tự, chỉ khi điều kiện trước đó báo cáo là sai. Nếu tất cả các điều kiện Boolean cho các nhánh else if đều sai, các khối bên trong phần else sẽ được chạy.

Khối Else if trong VEXcode. Khối này đọc if then else if then else và có biểu tượng dấu cộng để mở rộng và thêm các phân đoạn if then else vào khối.

Khối này có luồng dự án giống như khốiIf then elselồng nhau, nhưng dễ xây dựng hơn vì không cần phải lồng các khối. Bạn sẽ tìm hiểu thêm về cách lập trình với khối Else iftrong Bài học sau.

Kiểm tra sự hiểu biết của bạn

Trước khi chuyển sang Bài học tiếp theo, hãy đảm bảo rằng bạn hiểu các khái niệm trong Bài học này bằng cách trả lời các câu hỏi sau vào sổ tay kỹ thuật của bạn.

Kiểm tra câu hỏi hiểu biết của bạn > (Google Doc/ .docx / .pdf)


ChọnTiếp theo >để áp dụng khối Else iftrong một dự án.