Giới thiệu về Visual C++ và thư viện MFC, OPENGL

Một phần của tài liệu Thiết kế và mô phỏng máy cắt biên dạng ống tự động điều khiển CNC (Trang 74)

L ỜI MỞ ĐẦU

5.1.Giới thiệu về Visual C++ và thư viện MFC, OPENGL

5.1.1 Giới thiệu về Visual C++ 6.0 và thư viện MFC

Visual C++ là một trong các ngôn ngữ lập trình thuộc dòng Visual Studio của hãng Microsoft, phát triển dựa trên nền tảng là ngôn ngữ lập trình hướng đối tượng C++. Visual C++ ra đời khoảng những năm 1990 và càng ngày càng được sử dụng rộng rãi nhất là các ứng dụng trong kỹ thuật như là lập trình nhúng,lập trình điều khiển và lập trình mô phỏng. Việc tạo ra các giao diện phức tạp và trình bày đẹp đối với Visual C++ khá là đơn giản, và đây chính là thế mạnh của Visual C++ trong việc trợ giúp đắc lực cho người lập trình khi xây dựng những dự án lớn hoặc trong kỹ thuật lập trình hệ thống.

MFC là lớp nền tảng của Microsoft (Microsoft Foundation Classes), là một công cụ mạnh trong lập trình ứng dụng cho hầu hết các lĩnh vực vì nó có giao diện đáp ứng mọi nhu cầu của người sử dụng trong việc thiết kế các giao diện của chương trình mô phỏng.

5.1.1 Giới thiệu về OpenGL [9]

OpenGL là chữ viết tắt của Open Graphic Library là 1 thư viện đồ họa tốc độ cao và độc lập với hệ thống giao diện các hệ điều hành. Tiền thân của OpenGL là IRIS GL do hãng Silicon Graphic Library Inc phát triển cho các WorkStation đồ họa tốc độ cao từ năm 1982.Sau đó từ năm 1992 thì OpenGL đã trở thành một chuẩn công nghiệp và đắc tính kỹ thuật của OpenGL do ủy ban kỹ thuật ARB (Architectural Review Board ) phê chuẩn.

Trong công nghệ đồ họa động đang ngày càng được ứng dụng trong cuộc sống và ngày nay nó đã được phát triển tương đối mạnh mẽ ở Việt Nam.Trong kỹ thuật thì việc sử dụng các ứng dụng của OpenGL cũng như DirectX vào việc mô phỏng các cơ cấu máy móc, các họat động của Rôbốt công nghiệp trước khi đem thử nghiệm bằng mô hình thực là giải pháp mà rất nhiều kĩ sư cơ khí cũng như cũng như các viện nghiên cứu lựa chọn do tính ưu việt của nó trong việc thể hiện các mô

hình đồ họa động trong không gian 3 chiều (3D). Vì vậy trong phạm vi của đồ án này em chọn cách sử dụng OpenGL để xây dựng bài toán mô phỏng.

1.2 Gới thiệu về Cơ chế hoạt động của Open GL.

Hình V.1: Cơ chế hoạt động của OpenGl

OpenGL có cơ chế hoạt động theo kiểu ống dẫn tức là đầu ra của giai đoạn trước là đầu vào của giai đoạn sau.Từ sơđồ thì các thành phần của cơ chế được giải thích như sau :

+ Display List: Là nơi lưu lại một số lệnh để xử lý sau.

+ Evaluator: Xấp xỉ các đường cong và mặt phẳng hình học bằng cách đánh giá các đa thức của dữ liệu đưa vào.

+ Per-vertex operations and primitive assembly: Xử lý các primitive (điểm,đoạn,đa giác) được mô tả bởi các vertex. Các vertex sẽđược xử lý và các primitive được cắt xén vào viewport để chuẩn bị cho khâu kế tiếp.

+ Rasterization: sinh ra một loạt các địa chỉ framebuffer và các giá trị liên quan bằng cách sử dụng mô tả 2 chiều của điểm, đoạn,đa giác.Mỗi phần tử (fragment) được sinh ra sẽđưa vào giai đoạn kế tiếp.

+ Per-fragment operations: Các tác vụ sau cùng (cập nhập có điều kiện cho framebuffer dựa vào dữ liệu vào và dữ liệu được lưu trữ trước đó của giá trị z (đối với z buffering), thực hiện trộn màu cho các pixel và làm một số thao tác khác) sẽ được thực hiện trên dữ liệu trước khi nó được chuyển thành pixel và đưa vào framebuffer.

Trong trường hợp dữ liệu vào ở dạng pixel không phải vertex, nó sẽ đưa thẳng vào giai đoạn xử lý pixel. Sau giai đoạn này, dữ liệu ở dạng pixel sẽ được lưu trữ vào

74

texture memory để đưa vào giai đoạn Per-fragment operation hoặc đưa vào Rasterization như dữ liệu dạng Vertex(tức là các điểm).

Đặc điểm của OpenGL.

Các khả năng của thư viện OpenGL cung cấp.OpenGL là một thư viện đồ họa rất lớn gồm khoảng 150 hàm hỗ trợ một số tính năng cơ bản sau:

1.3.1.Kh năng th hin các đối tượng đồ ho cơ bn.

OpenGL cũng có cách xây dựng các đối tượng theo cách riêng. Trong OpenGL, mọi đối tượng hình học đều được mô tả cơ bản từ các vertex. Vertex cũng có thể hiểu là một điểm. Cấu trúc này bao gồm bộ 4 số thực chỉ tọa độ trong không gian. Để chỉ định một vertex, ta dùng:

glVertex{234}{sifd}[v](TYPEcoords);

Từ hình vẽ trên ta có thể thấy các trường khai báo có nội dung như sau:

[v] - véctơ chứa các phần tử là tọa độ của Vertex. {sifd}- kiểu tham số của vector: Interger, float… {234}- số phần tử của véctơ

Các đối tượng đồ hoạ cơ bản nhưđiểm,đoạn thẳng,đa giác,các đường cong hay mặt cong bậc hai.

Giá trị Ý nghĩa.

GL_POINT Hàm này cung cấp các chức năng vẽđiểm (tức là từng Vertex được vẽ riêng)

GL_LINE Vẽđường thẳng nối giữa 2 điểm ( Mỗi cặp vertex được coi như 2 đầu một đoạn thẳng)

GL_LINE_STRIP Tập hợp của những đoạn thẳng nối với nhau ( Bộ 4 vertex xem như các đỉnh tứ giác (có lặp))

GL_LINE_LOOP Đường gấp khúc khép kín(Như trên nhưng vertex đầu và cuối được nối với nhau (lặp vòng)) (adsbygoogle = window.adsbygoogle || []).push({});

GL_TRIANGLES Vẽ hình tam giác.( Bộ 3 vertex được xem các đỉnh một tam giác (không lặp))

GL_QUADS Vẽ tứ giác.( Bộ 4 vertex được xem như 4 đỉnh 1 đa giác (không lặp))

Bộ 3 vertex xem như các đỉnh tam giác (có lặp)) GL_TRIANGLE_FAN Vẽ hình quạt.( Vertex 0 là đỉnh chung kết hợp cặp

đỉnh bất kỳ tạo tam giác) Dưới đây là một số hàm thể hiện các đối tượng cơ bản

Hình V.2: Các đối tượng đồ họa cơ bản

Ngoài ra còn có một sốđối tượng 3 chiều cơ bản như: Hình cầu, hình trụ, hình hộp vv... từđó ta xây dựng được các đối tượng 3 chiều phức tạp hơn, thậm chí có thể tự định nghĩa hay thiết kế các phần mềm hỗ trợ thiết kế 3 chiều như AutoCAD, SolidWorks, 3D Max.Các lệnh để thực hiện quá trình vẽ các điểm trong môi trường 2D của OpenGL như sau: glBegin(GL_POINTS); glVertex2f(0.0f,0.0f); glVertex2f(1.0f,0.0f); glVertex2f(0.0f,1.0f); glEnd(); 75

Hình 1.4: Quá trình v các Vertex 2D trên OpenGL

Các lệnh để vẽ các điểm để tạo thành hình ngũ giác trong môi trường 2D như sau:

glBegin(GL_POLYGON); glVertex2f(0.0f,0.0f); glVertex2f(3.0f,0.0f); glVertex2f(4.0f,3.0f); glVertex2f(1.5f,6.0f); glVertex2f(-1.0f,3.0f); glEnd(); Kh năng quan sát đối tượng. 76

Các đối tượng có thể quan sát từ nhiều góc độ khác nhau thông qua các phép biến đổi vị trí mắt nhìn hay phép biến đổi vị trí vật cũng như các phép chiếu...

Kh năng định màu sc vt liu đối tượng.

Có thể thể hiện màu sắc đối tượng một cách đa dạng và đặc biệt là khả năng thể hiện thuộc tính vật liệu.

Hình 1.6: Quá trình Render màu sc ca vt liu 5.2.Mô hình hóa cơ cu máy dng đơn gin

5.2.1.Xây dng mô hình

Theo thiết kế, máy có hai bậc tự do: bậc tự do chuyển động quay quanh trục ống và bậc tự do chuyển động tịnh tiến dọc theo trục ống cần cắt, ta mô hình hóa cơ cấu máy thành hệ thống gồm 3 khâu:

Khâu ốn là khâu cốđịnh trong hệ. Khâu này đóng vai trò là khâu đếđể cốđịnh khác khâu khác.

Khâu 1: có chuyển động là chuyển động quay quanh trục của ống Khâu 2: là khâu chuyển động dọc trục ống.

Từ bản vẽ thiết kế ta thiết lập mô hình của máy để nhúng vào chương trình mô phỏng được viết trên nền MFC- Visual C++ 6.0 và có hỗ trợ của thư viện Opengl

Tạo các mô hình đơn giản trên solidworks để giảm được kích thước của file và giảm thời gian xử lý. Do khi nhúng mô hình vào chương trình mô phỏng, hệ tọa độ của chương trình trùng với hệ tọa độ trong solidworks cho nên việc xác định hệ tọa độ của các khâu và vị trí tương đối của các khâu là điểm quan trọng. Ta xây dựng mô hình của toàn bộ hệ thống như hình vẽ dưới, sau do xây dựng cơ cấu chi tiết của các khâu:

Hình V.3: Mô hình cơ bản

Khâu ống: đường kính ngoài : d=400mm tâm trục trùng với trục Z. Tâm của đáy trùng với gốc của hệ tọa độ Khâu 2 Khâu ống Khâu 1 Gốc hệ tọa độ 78

Hình V.4: Chi tiết ống

Từ các File part của khâu 1, khâu 2 ta xây dựng các file assembly với khâu 1, khâu 2 là chi tiết cốđịnh.

Mở file part: khâu 2. Trong file chọn make assembly from part.

Sau khi nhập file khâu 1 vào môi trường assembly, kích chuột phải vào chi tiết chọn

float

Chọn insert> mate để gán ràng buộc về vị trí của chi tiết trong môi trường assembly. Ta chọn đối tượng là Origin của chi tiết và origin của file assembly. Chọn OK.

Tiếp theo kích chuột phải vào chi tiết, chọn fix.

Như vậy hệ tọa độ của file assembly trùng với hệ tọa độ của chương trình mô phỏng sau này.

Tiếp theo ta chèn các file của các chi tiết như: động cơ, cụm kẹp đầu cắt, đầu cắt… đã thiết kếở phần trước vào và gán ràng buộc về vị trí như hình vẽ (adsbygoogle = window.adsbygoogle || []).push({});

Chọn file> save as để lưu file assembly vừa vẽ thành file.STL. Đây là file để mô phỏng về sau.

Ta chọn save as type:STL( *.stl) với tên là : cum22. Chọn option

Chọn output as: ASCII, unit: milimeter

Kích chọn: do not translate STL output data to possitive space save all components as an assembly in a single file. Chọn OK.

Tương tự ta thực hiện các bước trên cho khâu 1. File mô phỏng được lưu với tên: cum11.stl.

5.3.Mã ngun chương trình:

Chương trình được viết bằng ngôn ngữ C++ kết hợp thư viện mô phỏng động openGl và thư viện MFC.

5.3.1. Khai báo biến

Các biến đầu vào: đường kính ống lớn: dk1 Đường kính ống nhỏ: dk2

Khoảng cách trục của hai ống: lo Góc nghiêng trục của hai ống: phi Biến điều khiển chuyển động:

Điều khiển chuyển động của khâu thứ nhất: m_theta1 Điều khiển chuyển động của khâu thứ hai: d1 Tham số chạy: m_t

5.3.2. Xây dng

phương trình mô phng

82 Chương trình mô phỏng cần hai phương trình mô phỏng: cho chuyển động của các khâu máy cắt và phương trình quỹ đạo của biên dạng ống.

Như đã xét ở mục 2.1. Giải phương trình giao tuyến của hai hình trụ,giả sử máy được gá lắp trên

bề mặt trụ T1, ta có phương trình của quỹđạo cắt như sau:        ( 2 2 2 2 ) 2 2 1 2 2 2 2 0 0 2 2 0 2 2 2 2 1 2 2 2 2 0 0 1

: . os( ) .sin ( ) 2. .sin( ). .sin( )

os( ) : .sin( ) : .sin ( ) 2. .sin( ). x R c R R R l l c y R l z R R R l l θ θ θ ϕ θ θ θ ⎧ = ± − − − ⎪ ⎪⎪ = + ⎨ ⎪ = ± − − − ⎪ ⎪⎩ ϕ        

Trong đó θ2 là tham số thay đổi

Phương trình chuyển động của khâu 1:

2 2 2 2 1 2 2 2 2 0 0 2 2 0 1 1 1 .sin ( ) 2. .sin( ). .sin( ) arctg R l , R R R l l R R θ θ θ θ ⎧ ⎛ + − − − ⎞ ⎪ = ⎜ ± ⎟ ⎨ ⎜ ⎟ ⎪ ⎝ ⎠ ⎩

Trong đó, θ1 là biến chuyển động của khâu thứ nhất Phương trình chuyển động của khâu 2:

( 2 2 2 2 )

1 2 2 1 2 2 2 2 0 0

1

. os( ) .sin ( ) 2. .sin( ). .sin( )

os( ) d x R c R R R l l c θ θ θ ϕ = = ± − − − ϕ Trong chương trình, ta sẽ gán biến θ2 bằng biến m_t

Toàn bộ hệ thống có cấu trúc tổng quan như sơ đồ sau:

z z mt1 y x φ l0 mt 2

83 (adsbygoogle = window.adsbygoogle || []).push({});

Hình V.5: sơ đồ khối mô phỏng

Sau khi xây dựng mô hình trên solidworks và chuyển sang file đuôi *.STL,ta nhập mô hình vào chương trình mô phỏng như sau (code trong file:leDoc.cpp):

m_de.setModel("Model File/ong3.STL"); m_Khau1.setModel("Model File/cum11.STL"); m_Khau2.setModel("Model File/cum22.STL"); m_Khau1.setMaterial(storageMaterial[4]); m_Khau2.setMaterial(storageMaterial[7]); //Quy dao m_Orbitan.setSize(400); m_Orbitan.setColor(CColor(1, 1, 0)); m_Orbitan.setSizePoint(3);

Tính toán các giá trị: px,py,pz, m_theta1, d1

void CleDoc::Calculate()// trong file leDoc.cpp

{ py = 105*sqrt(4- sin(m_theta2*0.017444)*sin(m_theta2*0.017444)); px= 105*sin(m_theta2*0.017444); pz = 215+105*cos( m_theta2*0.017444)+105*sqrt(4- sin(m_theta2*0.017444)*sin(m_theta2*0.017444 )*sin(m_theta2*0.017444)); m_Orbitan.addPoint(CVector(px, py, pz)); }

void CMainFrame::OnTimer(UINT nIDEvent)

Dịch chuyển các khâu 1, 2 theo các biến m_theta1, d1, tạo biên dạng quỹ đạo cắt theo phươngtrình x,y,z

Thay đổi giá trị tham số m_t, cập nhật các thông số dk1, dk2, l, phi

Tính toán các giá trị: px, py, pz, m_theta1, d1

khởi tạo mô hình

84

{

CleDoc *pDoc = GetDocument(); m_t+=1;

pDoc->m_theta1 = 60-(atan( sin( m_t*PI/180)/2))*180/PI;

pDoc->d1 = 105*cos( m_t*0.017444)+ 105*sqrt(4- sin(m_t*0.017444)*sin(m_t*0.017444)); pDoc->m_theta2= m_t; pDoc->Calculate(); UpdateAllViews(); }

Di chuyển vị trí các khâu theo các thông số m_theta1, d1

void CleDoc::DrawRobot() { glPushMatrix(); glTranslated(0,0, -20); m_de.drawObject(); glRotated(-50, 0, 0, 1); glRotated(m_theta1, 0, 0, 1); m_Khau1.drawObject(); glTranslated(180,0, -240); glTranslated(0, 0, d1 ); m_Khau2.drawObject(); glPopMatrix(); } Cập nhật quỹđạo cắt theo các thông số x, y, z void CleDoc::DrawOrbitan() { m_Orbitan.drawPoints(); }

5.3.3.Giao din mô phng

Hình V.6: Giao diện chương trình mô phỏng Giao diện mô phỏng bao gồm:

Màn hình mô phỏng: thể hiện chuyển động của các cơ cấu, biên dạng cần cắt

Hình V.7: Phần màn hình mô phỏng

Phần nhập thông số: mục đích để nhập các thông số đường kính của hai ống, góc nghiêng và khoảng cách giữa hai trục của ống.

Phần điều khiển gồm:

− Điều khiển tự động: gồm hai nút “chạy”

“dừng”

− Điều khiển bằng tay: điều khiển riêng biệt chuyển động của hai động cơ, mỗi động cơ có chiều quay phải và chiều quay trái.

86 Tạo window form điều khiển

Giao diện điều khiển gồm 2 phần: Điều khiển tựđộng:

Nút chạy có code trong file mainfrm.cpp như sau: (adsbygoogle = window.adsbygoogle || []).push({});

void CMainFrame::OnTimer(UINT

nIDEvent) {

CleDoc *pDoc = GetDocument();

switch(nIDEvent) { case 0: break; case 1: m_t+=1;

pDoc->m_theta1 = 60-(atan( sin( m_t*PI/180)/2))*180/PI; pDoc->d1 = 105*cos( m_t*0.017444)+ 105*sqrt(4- sin(m_t*0.017444)*sin(m_t*0.017444)); pDoc->m_theta2= m_t; pDoc->Calculate(); UpdateAllViews(); break; default:break; }

}Nút dừng có code trong file mainfrm.cpp như sau:

void CMainFrame::OnRun6()

{

CleDoc *pDoc = GetDocument();

//pDoc->Stopmotor(0xff);

KillTimer(1); }

Nút DC1-PHAI có code trong file mainfrm.cpp như sau:

87

void CMainFrame::OnRun1()

{

CleDoc *pDoc = GetDocument(); m_t+=2;

pDoc->m_theta1 = m_t; pDoc->Calculate(); UpdateAllViews(); }

Nút DC1-PHAI có code trong file mainfrm.cpp như sau:

void CMainFrame::OnRun3()

{

CleDoc *pDoc = GetDocument();

m_t2+=2; pDoc->d1 = m_t2; if (m_t2>20) { m_t2=0; } pDoc->Calculate(); UpdateAllViews(); }

88 KẾT LUẬN

Qua thời gian thực hiện luận văn, tác giả đã thực hiện được những nội dung như sau:

• Trong chương này, lý thuyết biên dạng ống được nghiên cứu ở bài toán tổng quát là: hai ống trụ - đường kính d1, d2 chéo nhau một góc phi trong không gian và khoảng cách trục là l- giao nhau. Từ đó phương trình giao tuyến được xây dựng để phát triển phần mềm điều khiển trên máy tính về sau và ứng dụng đểđiều khiển các trục chuyển động của máy.

• Thiết kế tổng thể phần cứng, mạch điều khiển cho hệ thống điều khiển CNC cho máy. Động cơ servo được điều khiển bằng phần mềm trên máy tính thông qua hệ thống card điều khiển chuyển động của Advantech và các driver của động cơ hãng misubishi.

• Từ việc phân tích kết cấu của máy cắt di động có sẵn trên thị trường, kết cấu cơ khí của máy được thiết kế sao cho gọn nhất, tổng khối lượng của máy không quá 20kg. Máy cắt được các đường kính ống từ 200mm đến trên 1000mm và hành trình tính theo đường sinh ống là 400mm. Máy sử dụng các kết cấu chính xác, nhỏ gọn như : vitme bi, hộp giảm tốc bánh răng sóng. • Kết hợp C++ và thư viện opengl để mô phỏng quá trình hoạt động của cơ

cấu máy

Máy cắt cần được hoàn thiện trong việc thiết kế, mô phỏng và chế tạo, nhanh chóng có thểứng dụng được. Qua quá trình thực hiện thì tác giả cũng nhận thấy các yếu tố cần được phát triển thêm:

• Thêm một bậc tự do để thay đổi góc của đầu cắt với mép hàn sử dụng trong trường hợp có sử dụng vát mép cắt. (adsbygoogle = window.adsbygoogle || []).push({});

• Mở rộng trường hợp cho phương trình của quỹ đạo là giao nhau của mặt phẳng với ống tròn, hoặc các đường cong bất kỳ được nhập từ chương trình CAD

89

TÀI LIỆU THAM KHẢO Tiếng Việt

1 GS.Phạm Văn Ất. (2000). C++& lập trình hướng đối tượng. Hà Nội: NXB Khoa Học Và Kỹ Thuật.

2 Ngô Lê Thông. (2007). Công nghệ hàn điện nóng chảy (tập 1,2). nhà xuất bản Khoa Học Và Kỹ Thuật.

Một phần của tài liệu Thiết kế và mô phỏng máy cắt biên dạng ống tự động điều khiển CNC (Trang 74)