D ANH MỤC BẢNG BIỂU
4.4 Cấu trúc chương trình máy xúc
Khi tiến hành mô phỏng máy xúc em đã sử dụng bản Visual Studio 2005.net vì bản này có nhiều ưu điểm hơn so với các bản Visual Studio trước đây (Visual Studio 6.0..), do chương trình mô phỏng phải dùng ứng dụng của chuột giữa, với bản Visual Studio 6.0 không hỗ trợ tính năng Middle move nên không thể thực hiện thao tác này. Ngoài ra bản .net 2005 còn có nhiều ưu điểm khác. Chương trình mô phỏng được thực hiện trong môi trường Visual C++ với ứng dụng của thư viện hàm chuẩn MFC với ứng dụng Single Document Interface – giao diện tài liệu kép (SDI). Ứng dụng SDI là một ứng dụng tài liệu có thể làm việc với một kiểu tài liệu tại một thời điểm. Khi tạo ứng dụng SDI, các lớp được tạo cho ứng dụng SDI gồm 4 lớp cơ bản:
Lớp dẫn xuất CwinApp: Tạo tất cả các thành phần khác trong ứng dung, đây là lớp nhận mọi thông báo sự kiện và sau đó truyền thông báo tới các lớp Cview và CframeView.
Lớp dẫn xuất CframeView: là lớp khung cửa sổ, chứa các thanh công cụ, menu, thanh cuộn và các đối tượng nhìn thấy trong một thời điểm bất kỳ.
Lớp dẫn xuất CDocument: chứa tài liệu, tại đây có thể xây dựng những dữ liệu cơ bản. lớp này nhận tài liệu vào từ Cview và truyền thông tin hiển thị sang CView.
Lớp dẫn xuất Cview trình bày hiển thị của tài liệu.
Dựa vào những lớp cơ sở này ta xây dựng ứng dụng cho bài mô phỏng chuyển động, ta xây dựng các hàm phục vụ những mục đích cụ thể.
void CSimulationView::OnPaint() {
// SetCursor(Cursor);
// Device context for painting CPaintDC dc(this);
Luận án tốt nghiệp
{
CMainFrame*pMain=(CMainFrame*)AfxGetApp()->GetMainWnd(); CDlgConTrols *pCtrl=& pMain->m_Structure1.m_Dialogs;
phi1 = pCtrl->qa1[t];//temp->at(0))->at(pos); phi2 = pCtrl->qa2[t]; phi3 = pCtrl->qa3[t]; d4 = pCtrl->qa4[t]; phi5 = pCtrl->qa5[t]; d6 = pCtrl->qa6[t]; if(phi1 == 1.58*180/PI) { drawOrbit_(); } //else //{ // draw_(); //} } //drawXe(); SwapBuffers(dc.m_hDC); ValidateRect(NULL); }
Một số nút điều khiển trong chương trình
Nút PLAY Chạy chương trình mô phỏng.
Nút PAUSE Dừng máy xúc tại vị trí đang chuyển động. Nút PLAY Khởi động lại quá trình mô phỏng.
Nút ZOOM OUT Phóng to. Thu nhỏ.
Nút OpenData Mở file số liệu chứa các thống số biến khớp .
Luận án tốt nghiệp
PHỤ LỤC 1: XÂY DỰNG PHƯƠNG TRÌNH VI PHÂN CHUYỂN ĐỘNG CỦA MÁY XÚC BẰNG PHẦN MỀM MAPLE
Việc xây dưng phương trình vi phân trên phần mềm Maple đơn giản hơn rất nhiều so với giải bằng tay, đặc biệt với việc sử dụng tích kronecker trong tính toán ma trận Côriôlis và ly tâm C. Giải thuật quá trình xây dựng như hình 1
Bảng tham số Craig TC Tham số ĐLH: mi, Ii, uCi T T T Timi Ti φi i i i φi =∑ +∑ M J J J A I A J ( )( ) 1 ( )( ) 2 T n n d d dt dt = ⊗ − ⊗ C M I q M q I i i m Π =∑ gr ∂ = Π ∂ mg q M, C, mg Kết thúc Bắt đầu Tính các ma trận Craig Ci Ci = i Ci r C u ; T i= i i ⇒ i ω A A ω ( ) Ti Ci ∂ = ∂ J r q ; φi ( )i ∂ = ∂ J ω q Hình 3.5
Mã nguồn chương trình được xây dựng trong phần mềm Maple, với đầu vào có cấu trúc như sau
Craig := Matrix ([ [0, 0, 0, q[1](t)], #Bảng tham số Craig [0, L1, 0, q[2](t)], [0, L2, 0, q[3](t)], [0, L3, 0, q[4](t)], [0, L4, 0, q[5](t)] ]) :
Centre := Matrix ([ [Lc1,0,0], #Vị trí khối tâm [Lc2,0,0],
[Lc3,0,0], [Lc4,0,0], [Lc5,0,0] ]):
# Ixx Iyy Izz Ixy Iyz Izx
Tenxo := Matrix ([ [0, I1y, I1z, 0, 0, 0], #Ma trận quán tính suy rộng [0, I2y, I2z, 0, 0, 0],
[0, I3y, I3z, 0, 0, 0], [0, I4y, I4z, 0, 0, 0], [0, I5y, I5z, 0, 0, 0] ]):
Mã nguồn chương trình tính toán phương trình vi phân chuyển động máy xúc
#---x #thanh lap cac ma tran trong phuong trinh vi phan #---x
DyCre := proc (CTablein, Centre, Tenxo)
Luận án tốt nghiệp
global m:
CTable := simplify(CTablein, {q[1]=q[1](t), q[2]=q[2](t), q[3]=q[3](t), q[4]=q[4](t),
q[5]=q[5](t), q[6]=q[6](t)}):
n := RowDimension(CTable):
#thanh lap cac ma tran Craig va cosin chi huong trung gian
for i ton do
tg := Matrix(i, 4):
for j to i do
tg[j] := CTable[j]:
end do:
T[i] := Craign(tg); #Ma tran Craig
a[i] := Cosin(tg): #Ma tran cosin chi huong
end do:
#Nhap so lieu cac khoi tam
for i from 1 to n do
ra[i]:=Vector([Centre[i,1],Centre[i,2],Centre[i,3],1]):
end do:
#tinh toan toa do trong tam
for i from 1 to n do rtn[i]:=T[i].ra[i]: r[i]:=Vector[3]: for j from 1 to 3 do r[i][j]:=rtn[i][j]: end do:
r[i] := convert(convert(r[i], array), Vector[column])
end do:
#tinh the nang thenang:=0:
for i from 1 to n do
thenang := thenang + m[i]*gg.r[i]:
#tinh van toc goc for i to n do ws[i] := map(diff, a[i], t).Transpose(a[i]); w[i] := Vector(3); w[i][1] := ws[i][3, 2]; w[i][2] := ws[i][1, 3]; w[i][3] := ws[i][2, 1] end do:
#tinh jacobi quay
for i to n do
w[i] := simplify(w[i], {diff(q[1](t), t) = dq[1], diff(q[2](t), t) = dq[2], diff(q[3](t),
t) = dq[3], diff(q[4](t), t) = dq[4], diff(q[5](t), t) = dq[5], diff(q[6](t), t) = dq[6]}):
JR[i] := convert(JRcan(w[i], n), Matrix):
end do:
#tinh jacobi tinh tien
for i to n do
r[i] := simplify(r[i], {q[1](t) = q[1], q[2](t) = q[2], q[3](t) = q[3], q[4](t) = q[4],
q[5](t) = q[5], q[6](t) = q[6]}):
JT[i] := convert(JTcan(r[i], n), Matrix):
end do:
#nhap ma tran momen quan tinh
for i from 1 to n do
mI[i]:=Matrix([[Tenxo[i,1],Tenxo[i,4],Tenxo[i,6]], [Tenxo[i,4],Tenxo[i,2],Tenxo[i,5]], [Tenxo[i,6],Tenxo[i,5],Tenxo[i,3]] ])
end do:
#tinh ma tran khoi luong mm mm := Matrix(n, n):
for i from 1 to n do
Luận án tốt nghiệp
mm:=mm+m[i]*Transpose(JT[i]).JT[i] +
Transpose(JR[i]).a[i].mI[i].Transpose(a[i]).JR[i]:
end do:
#tinh ma tran C In := Matrix(n, shape = identity):
mdq := Matrix(n, 1):
for i to n do
mdq[i] := dq[i]:
end do:
C:=mdiff(mm).KroneckerProduct(In,mdq)-
1/2*Transpose(mdiff(mm).KroneckerProduct(mdq,In)):
return mm,C,mg :
end proc:
#--- #tinh ma tran g
#--- thenangg := proc (input,n)
local mq, i, ttt: mq := array(1 .. n): for i to n do mq[i] := q[i]: end do; ttt := simplify(input, {q[1](t) = q[1], q[2](t) = q[2], q[3](t) = q[3], q[4](t) = q[4], q[5](t) = q[5], q[6](t) = q[6]}): ttt := Vector([ttt]):
return ttt:
end proc:
#--- #tinh ma tran jacobi quay #--- JRcan := proc (input,n)
local mdq, i, ttt: mdq := array(1 .. n): for i to n do mdq[i] := dq[i]: end do: ttt := jacobian(input, mdq): return ttt: end proc: #--- #tinh jacobi tinh tien
#--- JTcan := proc (input,n)
local mq, i, ttt: mq := array(1 .. n): for i to n do mq[i] := q[i]: end do: ttt := jacobian(input, mq): return ttt: end proc:
Luận án tốt nghiệp
TÀI LIỆU THAM KHẢO
[1] Đỗ Sanh: Cơhọc. NXB Giáo dục, 2006.
[2] Nguyễn Văn Khang: Động lực học hệ nhiều vật. NXB Khoa học và Kỹ thuật, Hà Nội 2007.
[3] Phạm Hữu Đỗng (chủ biên): Máy làm đất. NXB Xây dựng, 2004. [4] Đỗ Đăng Khoa, Đỗ Sanh: Khảo sát động học các cơ cấu phẳng.
[5] Đỗ Đăng Khoa, Đỗ Sanh, Đinh Văn Phong, Trần Đức: The Optimal Control for the System of Program Motion.
[6] Đỗ Sanh: Equations of Motion of Mechanical System.
[7] Đỗ Sanh: On the Principle of Compability and the Equations of Motion of Constrained Mechanical Systems.
[8]Phạm Huy Điển: Tính toán, lập trình và giảng dạy toán học trên Maple. NXB Giáo dục Việt Nam, Hà Nội 2011.
[9] Phạm Minh Hoàng: Maple và các bài toán ứng dụng. NXB Khoa học và Kỹ thuật, TP Hồ Chí Minh 2008.
[10] J.J. Craig: Introduction to Robotics. (3rd edition), Prentice Hall, Upper Saddle River, New Jersey 2005.
KẾT LUẬN
Đề tài tính toán động học và động lực học máy xúc gầu nghịch dẫn động thủy lực có ý nghĩa quan trọng trong các lĩnh vực nghiên cứu động học và động lực học của các cơ hệ phẳng nhiều bậc tự do cũng như các loại máy làm đất khác. Nó giúp ích cho việc áp dụng lý thuyết vào thực tế. Qua luận văn này, bằng những kết quả tính toán ta có thể thiết kế được một hệ điều khiển máy đào làm việc tự động với các cảm biến lực được lắp đặt vào răng gầu xúc.
Như vậy qua việc thực hiện luận văn này ta có thể nhận thấy rằng dù quỹ đạo làm việc và hệ ngoại lực có phức tạp đến đâu, miễn là quỹ đạo thỏa mãn điều kiện động học của máy đào thì ta đều có thể tìm được các thông số điều khiển cung cấp cho quá trình điều khiển máy làm việc. Tuy nhiên do một loại máy xúc điều khiển tự động như vậy vẫn chưa tồn tại trong thực tế, nên chắc chắn sẽ có nhiều vấn đề mà tác giả chưa biết được để giải quyết, hoặc thuộc lĩnh vực nằm ngoài chuyên ngành của tác giả.
Hướng phát triển của đề tài:
Do thời gian có hạn, đề tài chưa đưa ra được các yếu tố kỹ thuật chi tiết cho từng khâu, từng khớp của máy xúc. Với từng loại máy xúc khác nhau và với từng điều kiện làm việc khác nhau, hướng ứng dụng đề tài cho từng điều kiện cũng khác nhau.
Trong quá trình thực hiện luận văn này có nhiều vấn đề có thể m ở rộng hơn nữa như: Giải quyết với cơ hệ có số bậc tự do lớn hơn với nhiều khâu thao tác hơn. Có thể hướng đến bài toán tối ưu về năng lượng cho một quỹ đạo định trước đối với cơ hệ nhiều bậc tự do. Đề tài có thể đi sâu, mở rộng hơn nữa như tính toán xilanh thủy lực chính là cơ cấu kéo đẩy cho từng khâu tay máy.