Luận văn : Camera dùng mạng Nơtron trong matlab giao tiếp PLC

Với những kết quả đã được trình bày ở trên, và chạy trên mô hình thực tế . có thể đưa ra kết luận sau: * những điều đã làm được - Đề tài đáp ứng đúng tiến độ mà nhà trường đưa ra - Phận loại sản phẩm chình xác khoảng 90% - Kết nối với PLC qua OPC và kết nối với giữa matlab và camera là tốt - Học và huấn luyện mạng noron đã làm được và đáp ứng yêu cầu * những điều chưa làm được - Việc camera chụp hình còn chưa thực sự ổn định - Camera hiển thị trên màn hình bị đứng khi đọc dữ liệu từ PLC

docx83 trang | Chia sẻ: lylyngoc | Lượt xem: 4156 | Lượt tải: 3download
Bạn đang xem trước 20 trang tài liệu Luận văn : Camera dùng mạng Nơtron trong matlab giao tiếp PLC, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
lớp y và tạo ra hàm y’’ theo phương trình (1.12). Quá trình này cứ tiếp tục, bao gồm các bước như sau: y(1) = a(wx(0)) (truyền thẳng lần thứ nhất) x(2) = a(w(T)y(1)) (truyền ngược lần thứ nhất) y(3) = a(wx(2)) (truyền thẳng lần thứ hai) x(4) = a(w(T)y(3)) (truyền ngược lần thứ hai) (1.14) y(k-1) = a(wx(k-2)) (truyền thẳng lần thứ k/2) x(k) = a(w(T)y(k-1)) (truyền ngược lần thứ k/2) Chú ý rằng trạng thái cập nhật trong phương trình (1.14) là đồng bộ theo phương trình (1.12) và (1.13). Trạng thái cập nhật cũng có thể không đồng bộ theo phương trình (1.12) và (1.13) với các nút i, j được chọn tự do. Người ta đã chỉ ra rằng, hệ thống ổn định cho cả hai chế độ đồng bộ và không đồng bộ. Tuy nhiên, chế độ đồng bộ sẽ làm cho hệ thống hội tụ nhanh hơn nhiều. 1.3 Các Luật Học Thông thường, mạng nơron được điều chỉnh hoặc được huấn luyện để hướng các đầu vào riêng biệt đến đích ở đầu ra. Cấu trúc huấn luyện mạng được chỉ ra ở hình dưới. Ở đây, hàm trọng số của mạng được điều chỉnh trên cơ sở so sánh đầu ra với đích mong muốn (taget), cho tới khi đầu ra của mạng phù hợp với đích. Những cặp vào/đích (input/taget) được dùng để giám sát cho sự huấn luyện mạng. ANN Trọng số wi So sánh Đích Dữ liệu vào Điều chỉnh Hình 1.1.9: Cấu trúc huấn luyện mạng nơron Để có được một số cặp vào/ra, ở đó mỗi giá trị vào được gửi đến mạng và giá trị ra tương ứng được thực hiện bằng mạng là sự xem xét và so sánh với giá trị mong muốn. Bình thường, nó sẽ tồn tại một sai số vì giá trị mong muốn không hoàn toàn phù hợp với giá trị thực. Sau mỗi lần chạy, ta có tổng bình phương của tất cả các sai số. Sai số này được sử dụng để xác định các hàm trọng số mới. Sau mỗi lần chạy, hàm trọng số của mạng được sửa đổi với đặc tính tốt hơn tương ứng với đặc tính mong muốn. Từng cặp giá trị vào/ra phải được kiểm tra và trọng số được điều chỉnh một vài lần. Sự thay đổi các hàm trọng số của mạng sẽ được dừng lại, nếu tổng các bình phương sai số nhỏ hơn một giá trị đặt trước, hoặc đã chạy đủ một số lần chạy xác định (trong trường hợp này, mạng có thể không thoả mãn yêu cầu đặt ra do sai lệch còn cao). Có hai kiểu học: Học tham số: là các tham số về trọng số cập nhật kết nối giữa các nơron. Học cấu trúc: trọng tâm là sự biến đổi cấu trúc của các mạng nơron gồm số lượng nút và các loại liên kết. Giả sử ma trận trọng số bao gồm tất cả các phần tử thích ứng của mạng nơron. Nhiệm vụ của việc học tham số là tìm ra được ma trận chính xác mong muốn từ ma trận giả thiết ban đầu (với cấu trúc của mạng nơron có sẵn). Để làm được điều này thì mạng nơron phải sử dụng các trọng số điều chỉnh, với nhiều phương pháp học khác nhau để có thể tính toán gần đúng ma trận W cần tìm đặc trưng cho mạng. Sau đây là 3 phương pháp học: 1.3.1 Học có giám sát Học có giám sát: là quá trình học có tín hiệu chỉ đạo bên ngoài d (Hình 1.10). Trong học có giám sát, thì tại mỗi thời điểm khi đầu vào được cung cấp tới mạng nơron, phản ứng đầu ra mong muốn d tương ứng của hệ thống được đưa ra. Ở hình (1.10), khi mỗi đầu vào x(k) được đặt vào mạng, đầu ra mong muốn tương ứng d(k) cũng được cung cấp tới mạng. Hiệu giữa đầu ra thực y(k) và đầu ra mong muốn d(k) được đo trong máy phát tín hiệu lỗi. Máy này sẽ tạo ra tín hiệu lỗi cho mạng để hiệu chỉnh các trọng số của mạng, và với các hiệu chỉnh này thì đầu ra thực sẽ tiến sát với đầu ra mong muốn. Hình 1.1.10: Học có giám sát 1.3.2 Học củng cố Tín hiệu chủ đạo d có thể lấy từ môi trường bên ngoài, nhưng tín hiệu này không được đầy đủ, mà chỉ có một vài bit đại diện có tính chất kiểm tra quá trình tốt hay xấu. Học củng cố cũng là một dạng của học có giám sát, bởi vì mạng vẫn nhận một số tín hiệu từ bên ngoài. Nhưng tín hiệu phản hồi chỉ mang tính chất đánh giá hơn là mạng tính chất chỉ dẫn. Nó cho biết mức độ tốt hay xấu của một đầu ra đặc biệt. Tín hiệu củng cố bên ngoài thường được xử lý bằng máy phát tín hiệu đánh giá để tạo ra nhiều hơn nữa các thông tin tín hiệu đánh giá, sau đó dùng để điều chỉnh các trọng số với mục đích đạt được tín hiệu đánh giá tốt hơn. 1.3.3 Học không có giám sát Hình 1.1.11: Học không có giám sát Trong phần học không có giám sát, sẽ không có thầy hướng dẫn, tức là không có tín hiệu d cung cấp tới mạch phản hồi. Điều này cho thấy, ta sẽ không biết đầu ra đạt giá trị gì. Với loại này, thì các nơron tự xoay xở với các dữ liệu mẫu mà nó có được, chứ không có “thầy” gợi ý cần luyện theo hướng nào. Mạng phải tự khám phá mẫu, đặc tính, sự tương quan hay loại đầu vào. Trong khi khám phá những đặc tính này, tham số của mạng sẽ bị thay đổi. Quá trình này được gọi là tự tổ chức. Một ví dụ điển hình là quá trình phân loại đối tượng không có thầy, những lớp thích hợp được hình thành bằng cách khám phá sự tương tự và không tương tự trong số các đối tượng. Hình (1.12) mô tả cấu trúc chung của quá trình học của ba phương pháp học đã nêu ở trên. Trong tín hiệu vào xj (j = 1,2,...,m), có thể được lấy từ đầu ra của các nơron khác hoặc có thể được lấy ra từ bên ngoài. Trọng số của nơron thứ i được thay đổi tùy theo tín hiệu ở đầu vào mà nó thu nhận giá trị đầu ra của nó. Dạng tổng quát của luật học trọng số của mạng nơron cho biết số gia của vector wi là tỉ lệ với tín hiệu học r và tín hiệu đầu vào x(t). (t) = (1.15) là một số dương và được gọi là hằng số học dùng để xác định tốc độ học, r là tín hiệu học và phụ thuộc: (1.16) Hình 1.1.12: Sơ đồ cấu trúc chung của quá trình học Từ hình (1.12) ta thấy, vector trọng số wi = [wi1, wi2,..., wim]T có số gia tỷ lệ với tín hiệu vào x và tín hiệu học r. Vector trọng số ở thời điểm (t+1) được tính như sau: wi(t+1) = wi(t) + fr(wi(t),x(t),d(t)).x(t). (1.17) Phương trình liên quan đến sự biến đổi trọng số trong mạng nơron rời rạc, và tương ứng với sự thay đổi trọng số trong mạng nơron liên tục theo biểu thức sau: (1.18) Vấn đề quan trọng trong việc phân biệt luật học cập nhật trọng số có giám sát hay không có giám sát, hoặc học củng cố là tín hiệu học r. Như vậy, đối với tín hiệu học r thì nó làm thế nào để thay đổi hoặc cập nhật trọng số trong mạng nơron. Mạng nơron nhân tạo có các tính chất sau: Là hệ phi tuyến Là hệ xử lý song song Là hệ học và thích nghi: Mạng được luyện từ số liệu quá khứ, có khả năng tự chỉnh đầu vào khi số liệu đầu vào bị mất. Là hệ nhiều biến, nhiều đầu vào, nhiều đầu ra (MISO), rất tiện dùng khi điều khiển đối tượng có nhiều biến số. 1.4 Thuật Toán Lan Truyền Ngược Thuật toán lan truyền ngược được ứng dụng để giải các bài toán điều khiển các hệ phi tuyến phức tạp và bất ổn định. Lan truyền ngược là một phương pháp cho phép xác định tập trọng số tốt nhất của mạng để giải một bài toán đã cho. Việc áp dụng phương pháp lan truyền ngược là một quá trình lặp đi lặp lại nhiều lần hai tiến trình chính: lan truyền tiến để thực hiện ánh xạ và lan truyền ngược sai số để cập nhật các trọng số. Các trọng số của mạng là các hệ số của mô hình. Phương pháp giảm gradient được dùng để cập nhật những hệ số này sao cho giảm thiểu được sai số của mô hình. Xét lớp mạng 3 lớp như hình (1.14) Hình 1.1.14: Mạng 3 lớp lan truyền ngược Thuật toán: Đầu tiên ta cho lan truyền thẳng suốt trong mạng, qua các phần tử nơron và được tiếp tục với các hàm kích hoạt của phần tử nơron. Các mạng được nghiên cứu cùng với thuật toán học lan truyền ngược được gọi là mạng lan truyền ngược. Huấn luyện các cặp vào/ra. {(x(k), d(k))}, k = 1,2,...,p Thuật toán cung cấp một thủ tục cho việc thay đổi các vector trọng số trong mạng, đầu ra của mạng được lan truyền ngược trở lại lớp đầu vào cho đúng các mẫu. Cơ sở cho việc cập nhật các trọng số là phương pháp độ dốc Gradient. Với cặp vào ra (x(k), d(k)), thuật toán lan truyền ngược thực hiện các bước như sau: Đầu tiên, mẫu x(k) được lan truyền từ lớp đầu vào qua các lớp ẩn đi đến lớp đầu ra có kết quả là y(k). Sau đó, sai số giữa y(k) và d(k) được lan truyền ngược trở lại từ lớp đầu ra tới lớp đầu vào để cập nhật trọng số. Hình (1.14) diễn giải thuật toán lan truyền ngược. Kết quả có thể mở rộng sang mạng nơron nhiều lớp. Trên hình (1.14) có m phần tử nơron đầu vào, l phần tử nơron ở lớp ẩn, và n phần tử nơron ở lớp đầu ra. Đường nét liền diễn tả lan truyền thẳng của các tín hiệu, đường nét đứt diên tả lan truyền ngược của các sai số. Đầu tiên huấn luyện vào cặp vào/ra ký hiệu (x,d) để cho đơn giản ta bỏ chỉ số k. Khi một mẫu đầu vào x được đưa vào thì các phần tử trong mạng sẽ được tính như sau: Đầu vào phần tử q của lớp ẩn sẽ được tính theo phương trình: (1.19) Phương trình đầu ra của q sẽ là: ) (1.20) Đầu vào phần tử thứ i của lớp đầu ra sẽ là: (1.21) Phương trình đầu ra của phần tử nowron thứ i sẽ là: (1.22) Các chỉ số trên được tính toán cho sự lan truyền tiến của các tín hiệu đầu vào xuyên suốt qua các lớp mạng nơron. Trước khi ta đề cập đến các tín hiệu sai số của sự lan truyền ngược, ta sẽ định nghĩa một hàm mục tiêu như sau: (1.23) Sau đó, theo phương pháp độ dốc Gradient, các trọng số nối giữa lớp ẩn và lớp đầu ra được cập nhật bởi , và nó được tính theo công thức sau: (1.24) Sử dụng các công thức (1.21-1.23) và thay đổi luật với , ta có: (1.25) Trong đó, là tín hiệu sai số, chỉ số dưới thứ hai là điểm thứ i trong lớp đầu ra. Sai số tín hiệu được định nghĩa bởi: (1.26) Trong đó, neti là đầu vào của phần tử nơron thứ i trong lớp đầu ra và . Bây giờ ta phải tính đầu ra zq của lớp ẩn: Với trọng số nối giữa đầu vào và các lớp ẩn, ta sử dụng thay đổi luật cùng phương pháp độ dốc Gradient, ta cập nhật trọng số để kết nối giữa phần tử thứ j của lớp đầu vào với phần tử thứ q của lớp ẩn. Khi đó: (1.27) Từ công thức (1.23), thì mỗi sai số [di-yi], với i=1,2,...,n là một hàm của zq. Đánh giá thay đổi luật ta có: (1.28) Sử dụng công thức (1.26), ta có thể viết lại công thức (1.28) như sau: (1.29) Ở đây, là sai số tín hiệu của phần tử thứ q của lớp ẩn và được định nghĩa như dưới đây: (1.30) Trong đó, netq là đầu vào phần tử thứ q của lớp ẩn. Tín hiệu sai số của một phần tử trong lớp ẩn khác so với tín hiệu sai số của một phần tử trong lớp đầu ra, như đã được chỉ ra trong công thức (1.30) và (1.26). Do có sự khác nhau này, nên các thủ tục cập nhật các trọng số trên được gọi là luật học delta tổng quát. Chúng ta xem xét công thức (1.30), sai số tín hiệu của phần tử lớp ẩn q có thể được xác định trong các mẫu của các tín hiệu sai số của các phần tử ở lớp ra thứ i (yi) cung ứng. Các hệ số là các trọng số được sử dụng cho lan truyền thẳng, nhưng ở đây chúng truyền các tín hiệu sai số () ngược trở lại, đó chính là các đường nét đứt trong hình (1.13). Điều này đã chứng tỏ được đặc điểm quan trọng của thuật toán lan truyền ngược – luật cập nhật cục bộ, đây chính là tính toán trọng số thay đổi dựa vào sự kết nối, và chúng ta chỉ cần giá trị ở hai đầu của kết nối này. Sự đạo hàm ở trên có thể dễ dàng mở rộng cho mạng có nhiều hơn một lớp ẩn, bằng cách sử dụng chuỗi luật liên tiếp. Trong trường hợp chung, với số lớp tùy ý, thì sự lan truyền ngược được cập nhật luật ở dạng sau: (1.31) Ở đây, (output-i) và (input-j) quy vào hai đầu của sự kết nối từ phần tử thứ j tới phần tử thứ i, xj là đầu vào cuối cùng kích hoạt từ một phần tử lớp ẩn, hoặc từ một đầu vào bên ngoài. Ngoài ra, là tín hiệu học được định nghĩa bởi công thức (1.26) với đầu ra hoặc lớp cuối cùng của các trọng số kết nối, và được định nghĩa bởi công thức (1.30) cho tất cả các lớp khác. Khi hàm sigmoid lưỡng cực được sử dụng làm hàm kích hoạt, đồng thời sử dụng (1.26) và (1.30) ta có hàm y được xác định như sau: Khi đó ta có: (1.32) (1.33) Thuật toán lan truyền ngược Xem xét một mạng với Q lớp lan truyền ngược, q=1,2,...,Q; với qneti và qyi lần lượt là đầu vào và đầu ra của khối trong lớp thứ q. Mạng có m nơron đầu vào, l nơron ở lớp ẩn, và n nơron đầu ra. Với qwij là trọng số nối từ q-1wj đến qyi. Đầu vào: các cặp huấn luyện {x(k), d(k) | k=1,2,...,p}, ở đó giá trị đầu vào của phần tử cuối cùng bằng -1, tức là . Bước 0 (Đặt giá trị ban đầu) Lựa chọn bước tính (Hằng số học) 0<η<1 và Emax (sai số lớn nhất cho phép). Chọn các trọng số ban đầu nối từ phần tử thứ j của lớp (q – 1) đến phần tử thứ i của lớp q là qwij có giá trị nhỏ và ngẫu nhiên. Cho sai số E = 0 và k = 1. Bước 1 (Vòng lặp huấn luyện) Áp dụng mẫu vào thứ k, cho lớp đầu vào q=1. Khi đó ta có: qyi = 1yi = xi(k) cho tất cả các i = 1,2,3,…,m. (1.34) Bước 2 (Lan truyền thẳng) Lan truyền tín hiệu thẳng xuyên suốt mạng sử dụng công thức (1.35) cho mỗi i và q cho tới khi các đầu ra của lớp đầu ra Qyi được thực hiện. (1.35) Bước 3 (Đo lường sai số đầu ra) Tính toán giá trị sai lệch và tín hiệu sai lệch cho lớp đầu ra như sau: ; (1.36) (1.37) Trong đó: là tín hiệu sai lệch của nơron thứ i cho lớp ra Q; là đạo hàm của hàm truyền a(.) theo tổng trọng số của phần tử i của lớp đầu ra là . Bước 4 (lan truyền ngược sai số) Các sai số lan truyền ngược với mục đích để cập nhật các trọng số và tính toán các tín hiệu sai lệch cho các lớp xử lý: ; (1.38) ; với q=Q,Q-1,...,2 (1.39) Trong đó: là sai lệch tại thời điểm tính của giá trị trọng số liên kết cập nhật mới và cũ, liên kết từ phần tử thứ j của lớp q-1 đến phần tử i của lớp q. là giá trị trọng số liên kết cập nhật mới từ phần tử thứ j của lớp (q-1) đến phần tử i của lớp q. là giá trị trọng số liên kết cũ từ phần tử thứ j của lớp (q-1) đến phần tử i của lớp q. là tín hiệu ra của phần tử j của lớp (q-1). Bước 5 (Sau mỗi vòng lặp) Kiểm tra xem đã lặp hết các giá trị mẫu huấn luyện chưa, nếu chưa quay vòng hết (tức là k<p) tăng k=k+1, và nhảy tới bước 1, ngược lại (tức k=p) thì chuyển sang bước 6. Bước 6 (Kiểm tra tổng sai số) Kiểm tra sự khác nhau giữa tổng sai số và sai số cho phép: Nếu tổng sai số nhỏ hơn sai số cho phép (tức là E<Emax) thì kết thúc quá trình huấn luyện, và ghi lại các giá trị trọng số cuối cùng. Trái lại, thì lại gán E=0, k=1 và bắt đầu một quá trình huấn luyện mới bằng cách nhảy tới bước 1. 1.5 Kết Luận Trong chương này, chúng ta tìm hiểu một mạng nơron và thuật toán lan truyền ngược. Quá trình học của mạng truyền thẳng chỉ ra một phương thức để mạng nơron nhận dạng một mẫu, nó giống như quá trình học của lan truyền ngược, đó là mô tả một quá trình mạng nơron sẽ được huấn luyện. Một mạng nơron truyền thẳng là một mạng mà ở đó các nơron chỉ được kết nối tới một lớp tiếp theo. Không có kết nối giữa các nơron với các lớp trước hoặc với chính nơron đó. Thêm vào đó, các nơron sẽ không kết nối tới các nơron quá xa ở lớp tiếp theo. Một mẫu được xử lý bởi sự truyền thẳng, độ lệch và các trọng số kết nối sẽ được áp dụng. Các mạng nơron được huấn luyện bằng cách sử dụng thuật toán lan truyền ngược. Thuật toán lan truyền ngược là một dạng huấn luyện có giám sát. Mạng nơron được đưa vào dữ liệu huấn luyện cho cho ra kết quả, các kết quả này được so sánh với các kết quả được mong đợi. Sự khác nhau giữa các kết quả thực tế và các kết quả mong đợi sẽ có một mức sai số nào đó. Để giảm thiểu sai số này, người ta tiến hành sử dụng thuật toán lan truyền ngược để điều chỉnh các trọng số và độ lệch của mạng. Đây là cách mà sai số được giảm đáng kể. Trong chương tiếp theo, chúng ta sẽ tìm hiều về mạng nơron Kohonen. Sự khác nhau quan trọng nhất giữa mạng nơron Kohonen và mạng nơron lan truyền ngược là phương thức huấn luyện. Phương thức lan truyền ngược sử dụng phương thức huấn luyện có giám sát. Còn mạng nơron Kohonen sử dụng phương thức huấn luyện không giám sát. 2. Xử Lý Ảnh Trong Matlab Hình 1.2.1 Giao diện của matlab 2.1 Một Số Lệnh Cơ Bản trong xử lý ảnh 2.1.1. Lệnh IMREAD đọc một hình ảnh vào chương trình - ví dụ A=imread('C:\Users\Admin\Documents\Youcam\18.JPG'); 2.1.2 Lệnh RGB2GRAY - chuyển từ ảnh màu sang ảnh xám - ví dụ rgb2gray(A) 2.1.3 Lệnh RESHAPE - Định dạng lại kích thước ma trận. - Ví dụ: a = 1 4 7 10 2 5 8 11 3 6 9 12 b = reshape(a,2,6) b = 1 3 5 7 9 11 2 4 6 8 10 12 2.1.4 Lệnh HORZCAT - ghép 2 ma trân theo cột, nghĩa là ghép 2 ma trân cùng số dòng với nhau - ví dụ 2 3 A1= 3 A2= 1 5 8 C=horzcat(A1,A2) 2 3 C = 3 1 5 8 2.1.5 Lệnh VERTCAT Lệnh này sử dụng tương tự như lệnh HORZCAT. Lệnh này dùng để ghép 2 ma trận theo hàng 2.1.6 Lệnh FOR - tạo vòng lặp,cho đến khi điều kiện đưa ra không thỏa nữa thì sẽ thoát khỏi vòng lặp. Ví dụ: for i = 1:2 disp(‘ chao cac ban’); end chao cac ban chao cac ban 2.1.7 Lệnh FUNCTION - Công dụng: Tạo thêm hàm mới. Cú pháp: function s = n(x) Giải thích: s: tên biến chứa giá trị trả về sau khi thi hành hàm. n: tên gợi nhớ. 2.1.8 Lệnh INPUT - Công dụng: Dùng để nhập vào 1 giá trị. Cú pháp: tên biến = input (‘promt’) Giải thích: tên biến, là nơi lưu giá trị ngập vào. ‘promt’: chuỗi ký tự muốn nhập vào. Ví dụ: x = input(‘nhập giá trị của biến x: ’) nhập giá trị của biến x: 5 x = 5 2.1.9 Lệnh IF …ELSEIF …ELSE - thỏa điều khiện thì thực hiện chương trình - Ví dụ: Viết chương trình nhập vào 2 số và so sánh hai số đó. a = input(‘Nhập a: ’); b = input(‘Nhập b: ’); if a > b disp(‘a lớn hơn b’); elseif a ==b disp(‘a bằng b’); else disp(‘a nhỏ hơn b’); end nhập a: 4 nhập b: 5 a nhỏ hơn b 2.1.10 Lệnh IM2BW - biến đổi ảnh xám về ảnh nhị phân với mức ngưỡng đưa ra - ví dụ: H = im2bw(J,0.15); Hình 1.2.2 : ảnh xám chuyển qua ảnh nhị phân 2.1.11 Lệnh IMRESIZE - Lệnh này làm cho kích thước ảnh giảm đi, nhằm dể dàng xử lý ảnh hơn. - ví dụ: Để giảm kích thước của ảnh xuống 8 lần thì chúng ta làm thế này.giả sử ảnh ban đầu có kích thước 480x640 ảnh thu được là 60x80. Với H là ảnh 480x640 G = imresize(H,0.125); 2.1.12 Lệnh IMWRITE - ghi và lưu hình ảnh. - ví dụ: imwrite(K,'t1.bmp'); 2.1.13 Lệnh LOAD - Nạp file từ đĩa vào vùng đang làm việc. - ví dụ: load('C:\Program Files\MATLAB\R2010b\bin\neural'); 2.1.14 Lệnh WRITE - ghi một giá trị vào biến - ví dụ: write(tin_hieu_1,1);% giá trị 1 được ghi vào biến ” tin_hieu_1” 2.1.15 Lệnh SET - đặt thuộc tính cho Handles Graphics - Ví dụ: set(handles.slvuong,'String',0); % đặt thuộc tính String cho handles.slvuong với giá tri là 0. 2.1.16 Lệnh CLEAR - xóa một ô nhớ hay một cái biến nào đó - ví dụ: clear O; 2.1.17 Lệnh GLOBAL - lệnh này dùng để khai báo một cái biến, khi được khai báo như thế thì các biến này với được liên kết với nhau. - ví dụ: globalngat tin_hieu_1 tin_hieu_2 2.2 Các Bước Thu Nhận Ảnh Cơ Bản Bước 1: - Gắn thiết bị thu hình vào máy. - Cài đặt driver (trình điều khiển) cho thiết bị, (được cho bởi nhà sản xuất). - Xem thử hình ảnh video trên máy tính thông qua phần mềm của nhà sản xuất. - Khởi động matlab. Bước 2: - Ta cần chỉ định cho Matlab biết phần cứng nào dùng để lấy dữ liệu (vì có thể có nhiều camera kết nối với PC). - Gõ lệnh imaqhwinfo để biết tên các loại thiết bị có thể dùng. - Chỉ định thiết bị: Tuỳ vào loại thiết bị (adaptor name), mỗi thiết bị cùng loại gắn vào PC được gắn đánh số ID, thiết bị thứ nhất có deviceID = 1, thiết bị thứ 2 có deviceID = 2,... - Để liệt kê xem loại winvideo có bao nhiêu thiết bị gắn vào máy tính, ta cũng dùng lệnh imaqhwinfor với đối số là winvideo: >> imaqhwinfo('winvideo') ans = AdaptorDllName: [1x81 char] AdaptorDllVersion: '3.5 (R2010a)' AdaptorName: 'winvideo' DeviceIDs: {[1]} DeviceInfo: [1x1 struct] - Có một thiết bị với DeviceID = 1. Ta có thể tìm hiểu thêm thông tin về thiết bị này. >> imaqhwinfo('winvideo',1) ans = DefaultFormat: 'YUY2_160x120' DeviceFileSupported: 0 DeviceName: 'WebCam' DeviceID: 1 ObjectConstructor: 'videoinput('winvideo', 1)' SupportedFormats: {1x5 cell} Bước 3: Tạo đối tượng đại diện vào máy để làm đề tài này. - Để tạo luồng dữ liệu video, dùng lệnh videoinput. >> vid = videoinput('winvideo',1) Summary of Video Input Object Using 'WebCam'. Acquisition Source(s): input1 is available. Acquisition Parameters: 'input1' is the current selected source. 10 frames per trigger using the selected source. 'YUY2_160x120' video data to be logged upon START. Grabbing first of every 1 frame(s). Log data to 'memory' on trigger. Trigger Parameters: 1 'immediate' trigger(s) on START. Status: Waiting for START. 0 frames acquired since starting. 0 frames available for GETDATA. Bước 4: Hiện thị luồng video trên màng hình để xem thử. - Để xem trước luồng dữ liệu video, dùng lệnh preview. >> preview(vid) - Màn hình lúc này hiện lên cửa sổ video của đối tượng vid. - Nếu muốn kết thúc xem, dùng lệnh stoppreview. Hoặc để đóng cửa sổ preview, dùng lệnh closepreview(vid). Bước 5: Lấy một khung hình ảnh và lưu thành file đồ hoạ. - Để lấy 1 ảnh vào xử lý ta sử dụng lệnh getsnapshot. - Để lưu ảnh thành file đồ hoạ ta dùng lệnh imwrite. Ví dụ: hinh = getsnapshot(vid); Imwrite(hinh,’1.jpg’); Bước 6: Làm sạch bộ nhớ Sau khi lấy dữ liệu hình ảnh ta có thể giải phóng bớt bộ nhớ bằng các lệnh sau: Delete(vid) Clear Close(gcf) 2.3 Tạo Giao Diện Với Guide Giao diện người dùng (graphical user interface GUI) cho phép thực hiện các lệnh trong Matlab thông qua menu, nút nhấn.. tương tự như các ngôn ngữ Visual Basic.. Lập trình GUI được thực hiện nhờ công cụ GUIDE (GUI Development Environnment) hoặc bằng cách soạn một file M. 2.3.1 Khởi động giao diện GUI - Mở phần mềm Matlab, gõ lệnh sau vào cửa số Command >> guide - Trong cửa sổ GUIDE Quick Start có nhiều lựa chọn theo một trong các khung mẫu sau: Hình 1.2.3 Cửa số GUIDE Create New GUI: Tạo hộp thoại GUI mới theo một trong cácloại sau: Blank GUI (Default): Hộp thoại GUI trống không có một điều khiển uicontrol nào cả. GUI with Uicontrols: Hộp thoại GUI với một vài uicontrol như button, … Chương trình có thể chạy ngay. GUI with Axes and Menu: Hộp thoại GUI với một uicontrol axes và button, các menu để hiển thị đồ thị. Modal Question Dialog: Hộp thoại đặt câu hỏi Yes, No. Open Existing GUI:mở một project có sẵn. Trong hướng dẫn này, các bạn tạo một project mới nên sẽ chọn Blank GUI. Hình 1.2.4 Cửa số biên soạn GUI Giao diện rất giống với các chương trình lập trình giao diện như Visual Basic, Visual C++, … Di chuyển chuột qua các biểu tượng ở bên trái sẽ thấy tên của các thanh công cụ điều khiển. Một vài công cụ điều khiển hay dùng như sau: - Push Button: Là một nút nhấn, giống như nút Command Button trong VB. Là các nút bấm như nút OK, Cancel mà ta vẫn bấm. - Toggle button: Là một nút bật giống như push button nhưng có hiển thị trạng thái thay đổi mỗi khi nhấn nút. - Radio Button: Nút nhỏ hình tròn để chọn lựa. - Check Box: Là hộp kiểm tra cho phép đưa vào các chọn lựa khi bấm chuột vào nó. - Edit Text: Là hộp văn bản đưa chuỗi ký tự vào đó. - Static Text: Dòng văn bản dùng để đặt nhãn, tiêu đề, hướng dẫn. - Pop-up Menu: menu sổ xuống trình bày một bảng các chọn lựa khi nhấp chuột vào. - List Box: Gồm một bảng các mục có thể lựa chọn. - Axes: Vẽ hệ trục. - Slider: Thanh trượt dùng để đưa giá trị vào trong một vùng giới hạn. - Run (Ctr + T): nhấn vào để chạy chương trình mà ta đã viết. - Align Object: dùng để làm cho các điều khiển sắp xếp gọn đẹp theo ý mình như cùng canh lề bên trái, … - Grid and Rulers: dùng để cấu hình về lưới trong giao diện vì nó sẽ coi giao diện như một ma trận các ô vuông nhỏ, ta sẽ thay đổi giá trị này để cho các điều khiển có thể thả ở đâu tùy ý cho đẹp. - Menu Editor: trình này để tạo menu cho điều khiển - Tab Order Editor: sắp xếp Tab order là thứ tự khi ta nhấn phím Tab - Gui Options: lựa chọn cho giao diện GUI. - Các bạn save dưới tên: “ TÊN”, khi đó đồng thời xuất hiện cửa sổ Editor và đang mở file TÊN.m của bạn. Trong thư mục bạn save sẽ có 2 file là: - TÊN.fig: file này chứa giao diện của chương trình - TÊN.m: file chứa các mã thực thi cho chương trình như các hàm khởi tạo, các hàm callback. 2.3.2 Thay đổi thuộc tính điều khiển Nhấp chuột vào component trong vùng layout để soạn tính chất của component. Ví dụ: Nhấn chuột vào Edit text, sẽ hiện ra cửa sổ Property Inspector. - Tag: dùng để đặt tên cho component. - BackgroundColor: màu nền của component. - ForegroundColor: màu chữ trên component. - FontName, fontAngle,fontSize, fontWeight: các đặt tính font chữ trên component. - String: văn bản hiển thị trên component. - Enable: cho phép component hoạt động hay không. - Visible: hiển thị component hay không. Hình 1.2.5 Cửa sổ thuộc tính - Quan trọng nhất đối với các component là callback, tức là hàm con mà file áp dụng M sẽ gọi khi ta tác động vào component. Để soạn thảo callback, ở cửa số layout nhấp chuột phải vào component muốn soạn thảo, sau đó chọn View callbacks -> callback ta sẽ vào màn hình soạn thảo callback cho component đó. Lưu ý rằng các dòng lệnh sẽ được viết sau dòng “ function tên component_callback(hobject, eventdata, handles). Sau khi soạn thảo xong ta lưu, lập tức Matlab sẽ lưu thành hai file có cùng tên nhưng khác nhau về phần mở rộng: - File có phần mở rộng .fig chứa nội dung của giao diện - File có phần mở rộng .m chứa những đoạn mã liên quan đến giao diện. 3 Kết Nối Giữa Matlab Và PLC 3.1 Các Bước Tạo Liên Kết PC Access Hình 1.3.1 Impost symbol Từ một chương trình PC Access mới, chọn Import Symbols để đưa các biến trong PLC vào PC Access Hình 1.3.2 chọn chương trình PLC Chọn file PLC đã lập trình trước đó. Hình 1.3.3 chọn các biến liên kết Sau khi đã import xong thì tiến hành Save file PC Access lại, mở USER1 ra, quét chọn tất cả các Item ở số 1. Nhấn vào nút nhấn số 2, để đưa xuống Test Client Hình 1.3.4 kết quả của kết nối Sau khi đã làm xong bước trên thì ta thấy rằng 1 được hiển thị ra. Sau đó nhấn nút thứ 2 để tạo kết nối với PLC, khi đã kết nối thành công thì ở vị trí thứ 3 sẽ hiển thị chử “Good”, và đồng thời khoanh tròn thứ 5 cũng chạy liên tục. khi đã liên kêt xong , ở vị trí thứ 4 sẽ hiển thị giá trị của PLC truyền lên và nhận xuống cho matlab 3.2 Các Bước Tạo Kết Nối OPC Hình 1.3.5 khởi động kết nối OPC Vào Start để lấy thanh công cụ OPC đã có sẵn trong matlab. Hình 1.3.6 tìm kiếm liên kết Sau đó nó sẽ hiện ra giao diện như trên và nhấn vào biểu tượng được khoanh tròn để OPC tự động tìm kiếm các liên kết có trong máy. Hình 1.3.7 Kết nối với giao thức S7200 Tất cả các liên kết đã được tìm ra, chúng ta chọn đánh dấu số 1 là S7200.OPCServer đó chính là liên kết với PC Access của S7200. Nhấn sáng đánh dấu số 1 và nhấp vào ô khoanh tròn số 2 để tạo thành 1 Client. Hình 1.3.8 kết nối OPC Nhấn nút 1 để kết nối với PC Access Hình 1.3.9 tạo group Khi đã kết nối xong thì nhấn vào nút số 1 để tạo thành một Group Hình 1.3.10 thêm Item vào Group Sau khi dã tạo một Group thì chúng ta tiến hành add các item vào group đó để liên kết với PC Access , nhấn vào khoanh tròn 1 sẽ hiện ra bảng Add Item , chọn sáng các Item và nhấn nút 2, sau đó nhấn nút 3 để hoàn tất. Hình 1.3.11 tạo Item vào Group2 Tương tụ như cách làm trên ta tạo Group thứ 2 và add 2 cái Item còn lại vào Group_2. Như vậy chúng ta đã hoàn tất việc tạo OPC kết nối với S7200. II. THIẾT KẾ VÀ THI CÔNG MÔ HÌNH 1 Phần Cứng Phân loại sản phẩm dùng xử lý ảnh và mạng noron. Sản phẩm được phân loại là các sản phẩm có hình tròn , hình tam giác, hình vuông. Hình 2.1.1 vật nhận dạng Quá trình phân loại dùng mạng noron để phân loại sản phẩm. đây là mô hình thực tế của đề tài Hình 2.1.2 mô hình phần cứng 2 Nguyên Lý Hoạt Động Dây chuyền bắt đầu hoạt thì sản phẩm sẽ được đưa vào từ bang tải theo chiều mũi tên số 1. Khi vật được đưa vào thì sẽ bị cảm biến phát hiện ra(cảm biến ở mũi tế số 3). Ngay khi cảm biến phát hiện ra vật băng tải sẽ dừng lại, sau thới gian 1 giây khi bang tải dừng lại camera (mũi tên số 4) sẽ chụp hình vật đó , hình ảnh vừa thu được sẽ được camera chuyển vào chương trình matlab, tại đây matlab sẽ xử lý hình ảnh, phân tích và đưa hình ảnh vào mạng noron đã được học trước đó , mạng noron sẽ cho ta nhận dạng đó là vật vuông, tròn hay tam giác, rồi từ đó matlab sẽ gửi xuống PLC tín hiện vật đó hình dạng thế nào . sau 2 giây để camera chụp hình thì băng tải chạy tiếp và đưa vật ra khỏi camera theo chiều mũi tên số 2. Hình 2.2.1 hoạt động của mô hình Giao diện của chương trình Hình 2.2.2 giao diện của giao tiếp 3 Sơ Đồ Khối Hình 2.3.1 sơ đồ khối Khối thiết bị trường là cảm biến phát hiện ra có vật thì thông qua PLC sẽ truyền cho matlab trên máy tính biết đã có vật ở vị trí , lúc này máy ảnh sẽ chụp hình và đưa vào chương trình để phân , nhận dạng ra vật đó và chuyền ngược trở lại cho PlC bào đó là vật gì, từ đó PLC sẽ điều khiển cho cánh tay robot hoạt động. để có thể truyền và nhận dử liệu từ PLC tới máy tính bắt buộc phải thông qua giao tiếp là OPC trong matlab và PC Access để có thể hiểu được nhau. 3.1 Khối camera Hình 2.3.2 camera trên mô hình Khi cảm biến được tích cực lên thì lúc này PLC sẽ báo hiệu cho matlab biết là có vật , từ đó matlab sẽ ra lệnh cho camera chụp hình và gửi dữ liệu quay chở lại cho matlab xữ lý. Camera được dùng ở đây là colorvis.do ở đây ta không cần tới chất lượng của ảnh tốt nên chọn loại camera này để nó sẽ cho ra ảnh 480x640x3,điều này là rất tích hợp với mô hình. 3.2 Khối cảm biến Sử dụng cảm biến quang E3T – FT11 để phát hiện vật. khi có vật thì cảm biển sẽ tích cực lên mức 1. đay Hình 2.3.3 hình dáng và hoạt động của cảm biến Hình dạng của cảm biến E3T-FT11. Cảm biến quang này gồm 1 con thu và 1 con phát. Khi không có vật đèn bào sẽ sáng lên và đưa ra tín hiệu là mức thấp. khi có vật đi qua đèn báo tắt , lúc này dây tín hiệu sẽ lên mức 1. 3.3 Khối máy tính Máy tính sẽ liên kết với camera và webcam thông qua cổng USB, máy tính là trung tâm của điều khiển, bằng phần mềm matlab, đọc tính hiệu được gửi về từ camera và xữ lý dữ liệu để đưa ra kết quả phân biệt vật xuống PLC. Máy tính liên kết với PLC qua giao thức có trong matlab đó là OPC. 3.4 Khối PLC PLC nhận tín hiệu từ cảm biến, khi cảm biến tích cực thì PLC sẽ báo cho máy tính thông qua giao thức liên kết là PC Access. Sau khi máy tính xử lý xong thì PLC sẽ nhận được giá trị nhận dạng của vật vừa được phát hiện và từ đó PLC sẽ điều khiển cho cánh tay robot đi đúng hướng. 4 Học Và Huấn Luyện Mạng Noron 4.1 Ma Trân Dữ Liệu Vào Hình 2.4.1 ma trận ngõ vào Đây là ma trận thực tế được đưa vào mạng noron để học.ở đây khoanh tròn 1 là một phần của ma trận, ma trận này có kích thước 4800x225 ở đây nghĩa là mổi ảnh mẫu đã tạo ra ma trận 4800x1 như vậy thì mổi 1 cột của khoanh tròn 2 là một ảnh lấy mẫu, 225 ở đây có nghĩa là có 225 ảnh mẫu. Hình 2.4.1 ảnh hình tròn được lưu Từ những hình đã được chụp từ webcam làm ảnh mẫu. ta phải biến những hình ảnh này thành những ma trân để đưa vào mạng noron để học. hình ảnh của webcam thu được là 480x640x3. Sau đây là các bước làm: Đọc ảnh được lưu: A=imread('C:\Users\Admin\Documents\Youcam\hinh tron\Snapshot_20130511_18.JPG');% 480x640x3 Chuyển đổi ảnh màu thành ảnh xám J = rgb2gray(A);%tao ra ảnh 480x640 Chuyển đổi ảnh xám thành ảnh nhị phân H = im2bw(J,0.15);%ảnh 480x640 Do kích thước của ảnh quá lớn nên cần phải giảm dung lượng ảnh xuống 8 lần cho dể xử lý G = imresize(H,0.125);% ảnh 60x80 Lọc nhiểu ảnh K=bwmorph(G,'branchpoints');%ảnh 60x80 Lệnh bwmorph được mô tả như sau: ảnh chúng ta thu được bây giờ là ảnh nhị phân với kích thước 60x80, tổng số điểm ảnh là 4800 điểm ảnh, mục đích của chúng ta là đưa về ma trận 4800x1 để tiện xử lý. Tạo ma trận điểm ảnh là 4800x1 p=reshape(N,4800,1);% ảnh 4800x1 Gán ma trận ban đầu ngovao=p Khi đã tạo ra được ma trận 4800x1 thì chúng ta bắt đầu ghép ma trận ngovao=horzcat(ngovao,p); + ở lần đâu tiên ta sẽ gán ma trận ban đầu mà chưa ghép ma trận. ở các lần sau, đổi hình lần lượt không gán ma trận ban đầu nữa mà tiến hành ghép ma trận đâu tiên với ma trận sau. Cứ làm như vậy cho tới khi hết ảnh là chúng ta đã có được ma trân ngõ vào. 4.2 Tạo ma trận dữ liệu ra Hình 2.4.2 ma trận ngõ ra của mạng noron ở khoanh tròn 1 là giá trị ngõ ra của hình tròn. Vậy tương ứng với cột thứ nhất của ma trận đâu vào, mạng noron sẽ huấn luyện làm sao để cho ra cột thứ nhất ở khoanh tròn 1. ở đây nghĩa là tương ứng 1 cột ngõ vào là 1 cột ngõ ra. Khoanh tròn 2 thể hiện là 1 dãy các cột ban đâu là hình tròn. ở khoanh tròn 3 là mà trận ra 3x225 tương ứng với ngõ vào là 4800x225. Hình 2.4.3 ma trận ngõ ra của mạng noron Dể phân biệt hình tròn với hình khác thì, ở khoanh tròn 1 là hình tròn còn khoanh tròn 2 là hình tam giác. 4.3 Tạo mạng noron qua thanh công cụ network neural Hình 2.4.4 chọn hình thức học mạng noron Vào trong “Command Window” trong giao diện matlab gõ lệnh “ nnstart” Lúc đấy sẽ hiện ra cho chúng ta thanh công cụ để tạo ra mạng noron. ở đây ta chọn mạng noron là “Pattern Recognition Tool” Hình 2.4.5 giớ thiệu về mạng noron Nhấn Next Hình 2.4.6 chọn ngõ ra và ngõ vào cho mạng noron Nhấn vào hình tròn 1 để chọn ngõ vào mà bạn đã tạo ra trước đó. Nhấn hình tròn thứ 2 để chọn ngõ ra đã được tạo trước đó. Khi đã chọn ngõ và ra phù hợp thì lúc đó nút nhấn “Next” sẽ được hiện lên Hình 2.4.7 chọn ma trận ngõ vào Chọn ngõ vào mà đã được tạo trước đó rồi nhấn Finish Hình 2.4.8 chọn ma trận ngõ ra Chọn ngõ ra đã được tạo trước đó. Nếu ma trận ngõ ra không quá lớn thì khung được khoanh 2 ô tròn sẽ hiển thị lên giá trị của nó. Hình 2.4.9 chọn tỉ lệ học mạng noron Nhấn “Next” qua Hình 2.4.10 giới thiệu về hình thức của mạng Chọn có bao nhiêu lớp ấn mà bạn muốn. nhìn vào mạng noron chúng ta thấy có 4800 ngõ vào, 10 lớp ẩn và 3 ngõ ra. Hình 2.4.11 học mạng noron Nhấn vào nút “Train” được khoanh tròn để cho mạng Noron học. khi học xong ở ô tròn “%E”xuất hiện 3 giá trị, nếu 3 giá trị này tiến tới 0 thì mạng noron được huấn luyện là tốt. còn nếu giá trị nay mà lớn hơn 2 thì tốt nhất mạng noron được học lại cho đến khi đạt được giá trị tốt nhất. Hình 2.4.12 mạng noron đang được học Quá trình đang được học Hình 2.4.13 nếu muốn học lại mang noron Ô tròn “Train Again” sẽ được nhấn khi bạn muốn học lại chương trình,nếu không thì Next qua. Hình 2.4.14 kết quả của việc học mạng noron ở ô tròn 1 nếu bạn muốn xem tất cả các lệnh trong quá trình huấn luyện mạng noron thì nhấn nút ô tròn 1.ở ô tròn 2, nếu kết quả huấn luyện mạng noron bạn thấy là tốt thì khi ấy hãy lưu kết quả đó để sau này lấy nó ra sử dụng. ô tròn 3 là chọn các kết quả muốn lưu. Hình 2.4.15 chương trình mạng noron ở ô tròn 1 thể hiện các lệnh và quá trình chúng ta vừa tạo mạng noron, cái này chỉ được hiện ra khi nhấn nút “simple script” ở hình trước đó. ở ô thứ 2 là hiển thị các mục khi bạn nhấn nút “Save Result” ở hình trước đó. Khi muốn lưu mạng noron vừa tạo được thì hãy nhấn nút thứ 3 để lưu nó lại.nếu trong khung thứ 2 có những giá trị không muốn lưu thì chung ta hãy nhâp sáng lên và nhấn nút 4. Khi lưu file lại thì nó sẽ có dạng giống file trong hình số 5. 5 Phần Mềm 5.1 Lưu Đồ Chương Trình Chính Khi cảm biến được tích cực thì máy chụp hình sẽ chụp hình ảnh , đưa hình vào matlab để xử lý ảnh, quá trình xử lý ảnh sẽ phân biệt được hình dạng của vậy thể , và chuyền dữ liệu xuống cho PLC. 5.2 Lưu Đồ Xử Lý Ảnh Khi có ảnh được đưa vào matlab thì khi đó ảnh sẽ được chuyển ảnh màu sang ảnh xám để thuận lợi cho việc lấy mẫu và đưa vào mạng noron. Sau khi có ảnh xám rồi thì phải chuyển ảnh nhị phân, do ảnh nhị phân có dung lượng ảnh quá lơn nên người ta phải giảm dung lượng ảnh xuống, rồi tạo ma trận dữ liệu của ảnh. Khi đó bắt đâu đưa vào mạng noron để kiểm tra, và đưa ra được phân biệt vật rồi chuyền xuống PLC cho PLC xữ lý tiếp. III. Thực Nghiệm 1 Thiết Lập Thực Nghiệm Chương trình nhằm mục đích xác đinh được đâu là vật hình vuông đâu là vật hình tròn và đâu là tam giác,qua lấy hình ảnh chup được từ camera và phân tích dữ liệu nhận đượcvà đưa vào mạng noron vừa được học , mạng noron sẽ xuất ra dữ liệu để phân biệt hình dạng của vật thể. 2 Kết Quả Sau một thời gian tìm hiểu và nghiên cứu về mạng noron, em đã huấn luyện thành công mạng noron và tiến hành đưa vào thực nghiệm vật thể thì kết quả cho ra là chính xác so với vật thể thực. từ đó cho thấy về cơ bản đã đáp ứng được như cầu về đề tài đạt ra , đó là phân loại sản phẩm dùng xử lý ảnh và mạng noron. 3 Đánh Giá Đề tài về mạng noron còn tương đối mới mẽ, tìm tài liệu về lý thuyết về mạng noron thì khá nhiều tuy nhiên về phần học và luyện mạng noron thì tương đối ít, tuy vậy với sự cố gắng và sự giúp đỡ của thầy Lũy em đã thực hiện được đề tài theo đúng kế hoạch. IV Kết Luận Và Hướng Phát Triển 1 Kết Luận Với những kết quả đã được trình bày ở trên, và chạy trên mô hình thực tế . có thể đưa ra kết luận sau: * những điều đã làm được - Đề tài đáp ứng đúng tiến độ mà nhà trường đưa ra - Phận loại sản phẩm chình xác khoảng 90% - Kết nối với PLC qua OPC và kết nối với giữa matlab và camera là tốt - Học và huấn luyện mạng noron đã làm được và đáp ứng yêu cầu * những điều chưa làm được - Việc camera chụp hình còn chưa thực sự ổn định - Camera hiển thị trên màn hình bị đứng khi đọc dữ liệu từ PLC 2 hướng phát triển của đề tài Camera không bị đứng hình khi đọc dữ liệu từ PLC Phát triển và hoàn thiện trong ứng dụng tự động phục vụ công nghiêp CHƯƠNG 3 PHỤ LỤC Chương trình chính: global nn mm nn=0; mm=0; test2 chương trình con: function varargout = test2(varargin) % TEST2 MATLAB code for test2.fig % TEST2, by itself, creates a new TEST2 or raises the existing % singleton*. % % H = TEST2 returns the handle to a new TEST2 or the handle to % the existing singleton*. % % TEST2('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in TEST2.M with the given input arguments. % % TEST2('Property','Value',...) creates a new TEST2 or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before test2_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to test2_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help test2 % Last Modified by GUIDE v2.5 09-May-2013 16:04:54 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @test2_OpeningFcn, ... 'gui_OutputFcn', @test2_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before test2 is made visible. function test2_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to test2 (see VARARGIN) set(handles.vat,'String',''); set(handles.bao,'String','khong co vat'); handles.figure1=gcf; warning off; global ngat tin_hieu_1 tin_hieu_2 n m p k m=0; k=1; n=0; p=0; set(handles.slvuong,'String',0); set(handles.sldagiac,'String',0); set(handles.sltron,'String',0); ngat = 'MicroWin.Project1.USER1.ngat'; handles.da = opcda('localhost','S7200.OPCServer'); connect(handles.da); try handles.data = addgroup(handles.da,'Group_1'); handles.dataIDS = {ngat}; handles.data_itm = additem(handles.data,handles.dataIDS); guidata(handles.figure1, handles); set(handles.data,'DataChangeFcn',{@Data_Group_Callback,handles},'UpdateRate',0); end Group_2 = addgroup(handles.da); tin_hieu_1 = additem(Group_2,'MicroWin.Project1.USER1.tinhieu1') tin_hieu_2 = additem(Group_2,'MicroWin.Project1.USER1.tinhieu2') handles.output = hObject; %global handl %handl=handles; handles.video = videoinput('winvideo', 1); set(handles.video,'TimerPeriod', 0.05, ... 'TimerFcn',['if(~isempty(gco)),'... 'handles=guidata(gcf);'... % Update handles 'image(getsnapshot(handles.video));'... % Get picture using GETSNAPSHOT and put it into axes using IMAGE 'set(handles.cameraaxes,''ytick'',[],''xtick'',[]),'... % Remove tickmarks and labels that are inserted when using IMAGE 'else '... 'delete(imaqfind);'... % Clean up - delete any image acquisition objects 'end']); triggerconfig(handles.video,'manual'); handles.video.FramesPerTrigger = Inf; % Capture frames until we manually stop it % Update handles structure guidata(hObject, handles); guidata(handles.figure1, handles); global hand han hand=handles; han=handles; % UIWAIT makes test2 wait for user response (see UIRESUME) uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = test2_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure %varargout{1} = handles.output; function Data_Group_Callback(hObject, eventdata, handles) global ngat tin_hieu_1 tin_hieu_2 n p m global hand han k v %guidata(hObject, handles); y=0; try global nn mm if (nn==0) x = read(handles.data); y = x.Value; drawnow; end end if (y == 1) nn=1; k=0 end if (k==0) clear O; %v=%=1000000; s = videoinput('winvideo', 1); %v=2; %end thuhinh = getsnapshot(s); mm=mm+1 %imwrite(frame,'d.jpg'); %save data for vv=1:v kk=2; end set(han.bao,'String','co vat,dang xu ly'); set(han.vat,'String',' '); load('C:\Program Files\MATLAB\R2010b\bin\neural'); %I = imread('d.jpg'); J = rgb2gray(thuhinh); %figure, imshow(frame)%, figure, imshow(J); H = im2bw(J,0.15); %figure, imshow(H); G = imresize(H,0.25); %figure, imshow(G); K=bwmorph(G,'branchpoints'); figure, imshow(K); %imwrite(K,'t1.bmp'); %N=imread('C:\Users\Admin\Downloads\New folder (2)\t1.bmp'); %figure, imshow(N) o=reshape(K,4800,1); O =net(o) a=[1 0 0]%ma tran 1.3*3.1=1.1 aa=a*O b=[0 1 0] bb=b*O ccc=[0 0 1] cc=ccc*O if (aa>=bb) if (aa>=cc) dd=aa else dd=cc end else if (bb>=cc) dd=bb else dd=cc end end if (dd==aa) n = n+1; set(han.vat,'String','hinh tron'); set(han.slvuong,'String',n); write(tin_hieu_1,1); write(tin_hieu_2,1); set(han.bao,'String','khong co vat'); end if (dd==bb) m = m+1; set(han.vat,'String','hinh tam giac'); set(han.sltron,'String',m); write(tin_hieu_1,0); write(tin_hieu_2,1); set(han.bao,'String','khong co vat'); end if (dd==cc) p = p+1; set(han.vat,'String','hinh vuong'); set(han.sldagiac,'String',p); write(tin_hieu_1,1); write(tin_hieu_2,0); set(han.bao,'String','khong co vat'); end k=1; nn=0; stop(s); %start(s); end %handles.output = hObject; % --- Executes on button press in ngat. function ngat_Callback(hObject, eventdata, handles) % hObject handle to ngat (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %global handl %chup=handles; start(handles.video); %chup.video=handles.video; set(handles.state,'String','camera, mang neural va ket noi OPC thanh cong'); % --- Executes during object creation, after setting all properties. function cameraaxes_CreateFcn(hObject, eventdata, handles) % hObject handle to cameraaxes (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: place code in OpeningFcn to populate cameraaxes function state_Callback(hObject, eventdata, handles) % hObject handle to state (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of state as text % str2double(get(hObject,'String')) returns contents of state as a double % --- Executes during object creation, after setting all properties. function state_CreateFcn(hObject, eventdata, handles) % hObject handle to state (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function vat_Callback(hObject, eventdata, handles) % hObject handle to vat (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of vat as text % str2double(get(hObject,'String')) returns contents of vat as a double % --- Executes during object creation, after setting all properties. function vat_CreateFcn(hObject, eventdata, handles) % hObject handle to vat (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function sltron_Callback(hObject, eventdata, handles) % hObject handle to sltron (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of sltron as text % str2double(get(hObject,'String')) returns contents of sltron as a double % --- Executes during object creation, after setting all properties. function sltron_CreateFcn(hObject, eventdata, handles) % hObject handle to sltron (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function slvuong_Callback(hObject, eventdata, handles) % hObject handle to slvuong (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of slvuong as text % str2double(get(hObject,'String')) returns contents of slvuong as a double % --- Executes during object creation, after setting all properties. function slvuong_CreateFcn(hObject, eventdata, handles) % hObject handle to slvuong (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in xoa. function xoa_Callback(hObject, eventdata, handles) % hObject handle to xoa (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global m n p v v=1; m=0; p=0; n=0; set(handles.sltron,'String',0); set(handles.slvuong,'String',0); set(handles.sldagiac,'String',0); function bao_Callback(hObject, eventdata, handles) % hObject handle to bao (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of bao as text % str2double(get(hObject,'String')) returns contents of bao as a double % --- Executes during object creation, after setting all properties. function bao_CreateFcn(hObject, eventdata, handles) % hObject handle to bao (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function sldagiac_Callback(hObject, eventdata, handles) % hObject handle to sldagiac (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of sldagiac as text % str2double(get(hObject,'String')) returns contents of sldagiac as a double % --- Executes during object creation, after setting all properties. function sldagiac_CreateFcn(hObject, eventdata, handles) % hObject handle to sldagiac (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in test. function test_Callback(hObject, eventdata, handles) % hObject handle to test (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) TÀI LIỆU THAM KHẢO 1 Matlab Va Ứng Dụng Trong Điều Khiển Của Ngyễn Đức Thành 2 3 4 help trong matlab 5

Các file đính kèm theo tài liệu này:

  • docxcamera_dung_mang_noron_giao_tiep_plc_3498.docx