Cần giúp đỡ về macro

Author
Hiện nay em đang muốn nghiên cứu về chương trình macro vì nghe thấy nó cũng hay.
nhưng thực sự em không hiểu lắm về nó và cũng không biết ứng dụng của nó tới đâu.
mong các bác hướng dẫn.
 
Macro được sử dụng trong chương trình chính là các biến. Ta tạo ra, gán giá trị, làm các phép tính với các biến này rồi sử dụng kết quả vào chương trình.
Ví dụ:
#104=1( Đặt biến 104= 1)
#105= 5( Đặt biến 105= 5)
#106= #104*#105
....
G0X[27.8-#106]
X[#105+#106/1000+0.6]Z-[#124+#127/2000]F0.15 ]
......
 
Bạn đọc chương trình sau và thấy một trong những ứng dụng khi dùng macro:

N01 T0303 ;
N02 M08 ;
N03 G96 ;
N04 M03 S130 ;
N05 G50 S1000 ;
N06 #1 =110 ;
N07 #2 =110 ;
N08 #6 =183 ;
N09 #7 =7.7 ;
N10 #8 = 0.8 ;
N11 #9 = #6 - #7;
N12 #10 = #6 * #6;
N14 #11 = #9 * #9 ;
N15 #12 = 2*SQRT[#10 - #9] ;
N16 #14 = [#2 - #12]/2 ;
N17 G0 X150;
N18 Z-[#14];
N19 X[#1+3];
N20 G01 X[#1+0.3] F0.1;
N21 G02 W-[#12] R[#6-#8-0.1] F0.1;
N22 G0 U3;
N23 Z-[#14-0.15];
N24 G01 X[#1+0.1] F0.1;
N25 G02 W-[#12] R[#6-#8] F0.08;
N26 M09;
N27 G0 X150;
N28 M05;
N29 Z-[#14-0.15];
N30 M30;
 
Macro có thể lập chương trìn gia công khối cầu, hoặc hình tháp, hình nón... Đúng là nó có rất nhiều ứng dụng!
 

ldl02

New Member
Em chào bác namnp 2007.
Em cũng đang nghiên cứu về macro trên hệ điều khiển alinam , nhưng em cũng chưa tìm hiểu được bao nhiêu .Bác nắm chắc về lập trình mcro thì post tài liệu mà bác đã tìm hiểu cho em học tập được không a!
 
Chào ldl02
Thực ra mình cũng không có tài liệu nào về lập trình bằng macro hết á, chỉ là do lúc đi làm thì có đụng chạm đến nó mà thôi. Lập trình dùng macro thích hợp với các chi tiết có hình dạng giống nhau, nhưng khác biệt một số kích thước( ví dụ như các chi tiết trục dẫn hướng, được sản xuất hàng loạt). Trong trường hợp này ta sử dụng macro làm biến kích thước cơ bản, các kích thước còn lại sẽ có giá trị tương ứng và phụ thuộc vào giá trị của biến( kích thước) cơ bản. Ví dụ cụ thể cho phần vát mép chẳng hạn, mình muốn nó có kích thước 1 x 1 x 45o, nhưng trong thực tế nó sẽ ứng với chi tiết trục có đường kính 10, 15, 20.... mm, nên ta dùng ngay giá trị đường kính làm biến cơ bản( VD: #100=xx, trong đó xx là giá trị đường kính, do ta chọn tùy theo loạt sản phẩm), sau đó lập trình chạy dao :
X(#100-1) Zyy( Đặt dao vào vị trí chuẩn bị gia công)
X(#100+2) Z(yy-2)( Chạy dao vát mép 1 x 1 x 45o)
....
Cụ thể thì còn tùy thực tế, mình không dám nói nhiều, mong phần nào giải thích được phần căn bản cho các bạn.
 

TYA

Well-Known Member
giúp mình về macro

Macro được sử dụng trong chương trình chính là các biến. Ta tạo ra, gán giá trị, làm các phép tính với các biến này rồi sử dụng kết quả vào chương trình.
Ví dụ:
#104=1( Đặt biến 104= 1)
#105= 5( Đặt biến 105= 5)
#106= #104*#105
....
G0X[27.8-#106]
X[#105+#106/1000+0.6]Z-[#124+#127/2000]F0.15 ]
......

namnp có thể chỉ cho mình cách gán giá trị vào không (trình tự thao tác ý). Có minh họa hình ảnh = máy thực thì càng tốt. Mình dùng turning fanuc 21i-TB
 
namnp có thể chỉ cho mình cách gán giá trị vào không (trình tự thao tác ý). Có minh họa hình ảnh = máy thực thì càng tốt. Mình dùng turning fanuc 21i-TB
Không, tạo và gán biến này là trong chương trình ấy chứ, TYA đã rành về lập trình tay thì sẽ thấy cái này dễ ợt ấy mà, quan trọng là tùy thuộc vào công việc cụ thể thôi. Mình cứ lấy ví dụ cho các trục nói trên, nếu mình dùng biến 100 và đặt là giá trị đường kính ( tức #100=D), giả sử ta có 03 loại trục có đường kính tương ứng là 10, 15 và 20mm, ( còn các kích thước khác có tương quan không thay đổi) thì ta sẽ có 03 chương trình giống nhau nhưng có biến #100 tương ứng là 10, 15 và 20, còn các thành phần tạo nên các kích thước khác sẽ không thay đổi. Đến đây nếu bác nào đã quen việc dùng chương trình chính gọi chương trình con thì sẽ lại thấy nảy ra chuyện ta sẽ có chương trình chính để quy định đường kính trục, sau đó gọi (các) chương trình con để gia công các kích thước khác. Chỉ có điều cần nhắc là đầu chương trình chính phải có mấy lệnh để reset giá trị các biến ta sẽ dùng, nếu không nó cộng dồn lại là chít, hơn nữa nên dùng các biến có mã từ 100 đến 499, để còn có thể reset được.
P/S: Mình có một số chương trình mẫu, nhưng không đưa lên DĐ được, sợ bên đối tác ý kiến ý cò. Bác nào có quan tâm thì cứ mail địa chỉ, mình sẽ mail lại cho.
 

TYA

Well-Known Member
tức là mình viết 1 ct duy nhất cho phi 10 15 và 20 có gán đường kính = macro ngay phần đầu ct, cú pháp là

%O0001;
......
#101 = 10
.....
.....
M30
%

và O1 đang gán phi 10. Khi cần trục phi 15 thì mở ct và gán lại #101=15 phải không ?

Hay sẽ là 3 ct O1, O2, O3 mang tương ứng #101, #102 và #103 ?

=========
mình k dùng được macro nên khi sửa khuôn, pg dùng duy nhất 1 điểm X,Z liên quan đến phi và chiều dài khuôn còn lại (thực ra là Z thôi, vì sửa khuôn trên mặt đầu)
còn các tọa độ khác là U và W,

Mỗi lần sửa khuôn phải đo bề dày và sửa lại câu có Z đó.

Macro có thể sẽ khoa học hơn nhỉ ?
 
Đúng rồi đó, trong chương trình chính nếu mình có câu lệnh gán phi 10 thì sau này cần các phi khác mình phải gán lại. Tất nhiên lúc đó cấu trúc thật của lệnh chạy dao sẽ chỉ hiện diện các mã macro thôi( vd: như của mega dã có:
N18 Z-[#14];
N19 X[#1+3];
N20 G01 X[#1+0.3] F0.1;
N21 G02 W-[#12] R[#6-#8-0.1] F0.1;
Nhưng nếu dùng cách khác ta lập 03 chương trình có các biến tương ứng cho phi 10, 15 và 20, rồi từy từng chi tiết mà cho chạy chương trình tương ứng.
Nhưng ta vẫn có cách khác là dùng chương trình chính có 03 biến tương ứng với phi 10, 15 và 20, rồi tùy từng chi tiết cụ thể mà mình cho nó xuất hiện trong lúc gọi chương trình con thì các chương trình con sẽ phải có giá trị tương ứng.
Tùy bạn thấy cách nào tiện cho mình trong thực tế thì theo thôi. Theo như mình biết thì macro nếu biết sử dụng sẽ có tác dụng lớn lắm đấy.
 

ShengHP

New Member
tôi cũng đang nghiên cứu vấn đề này, mong bạn ShengHP có thể giới thiệu 1 chương trình macro phay hình nón hay cầu để anh em mes nghiên cứu!
Lâu lắm rùi mới có thời gian rảnh để ghé qua Mes... :35:
Về vấn đề phay nón hay tháp hay cầu thì cũng không có gì khó đâu tct9090
ah.
Mình cần lập trình 1 chương trình như bình thường và dùng biến # với Fanuc còn với Siemens thì dùng R.
Để phay nón có chiều cao 10, đường kính đáy là 20, ta lập trình:
...
#1=0.;
#2=3.;
N1 G01 Z-[#1];
Y[#1+#2];
G02 X0 Y[#1+#2] I0 J-[#1+#2];
#1=#1+0.05;
If[#1 Le 10] Goto01;
...
Cái này thì mỗi người lại có 1 cách dùng khác nhau có thể đơn giản hoặc phức tạp hơn, nhưng tóm lại nó chỉ là Động tác ta gán một biến nào đó cho chương trình đơn giản hơn thui...
Với chương trình trên thì:
#1 là giá trị của chiều sâu và chiều theo Y.
#2 chỉ đơn giản là bán kình dao phay mà thôi.
Có nghĩa là ta cứ cho dao ăn xuống 1 giá trị #1 sau đó dịch theo chiều Y cũng một khoảng #1 và quay vòng tròn ( G01) và lại tiếp tục quá trình như vậy... Cho đến khi #1 đạt giá trị là 10 thì quá trình lặp đi lặp lại này dừng lại.
Ở đây Le có nghĩa là <= ( Nhỏ hơn hoặc bằng) tức là #1 còn nhỏ hơn hay bằng 10 thì chương trình tiếp tục quay trở lại câu lệnh N01. Cái này ở Siemens dùng ngay dấu <=...
Cũng lâu rùi không động đến cái này:45: và cũng là tự mày mò học hỏi nên có gì sai sót hay chưa phải các bác góp ý nha.:77: :57:
 
hi ShengHP, bạn đã hiểu nền tảng của chương trình macro, nhưng bạn có dám tự tin sử dụng chương trình của mình để gia công thực tế chưa? theo tôi thì chương trình của bạn chỉ đơn giản là "phương trình" hình nón ko thể gia công.
Bây giờ chúng ta kiểm tra lại phương trình của bạn nha: ban đầu bạn cho nhấn Z trước rồi mới dịch dao ra theo chiều Y nón của bạn bị "lẹm" 1 miếng, bạn nên dịch dao ra trước khi nhấn. tiếp đến là phay vòng tròn dòng lệnh đúng phải là: G02 I0. J-[#1+#2].
với vài gợi ý trên bạn ShengHP thử viết lại 1 chương trình macro xem sao. nhớ chương trình phải là G90 hay G91 nếu ko có thì chương trình vô nghĩa.
 
Oh! Chào tct9090..!
Tại sao chương trình trên không gia công được nhỉ? :-?
Vì đầu tiên tui cho nhấn Z xuống, đúng là vậy.Nhưng không sao cả đâu, vì đầu tiên #1=0 cơ mà, nên không có vấn đề gì cả. Tuy nhiên ý kiến của tct9090 tớ cũng xin tiếp thu và cảm ơn bạn nhiều. Ta nên dịch dao ra thì hơn. :-?
Thứ 2 thì G02 X0 Y[#1+#2] I0 J-[#1+#2]; so với G02 I0. J-[#1+#2]. có gì khác nhau đâu bạn? Câu lệnh đó đầy đủ là phaỉ vậy mà.
Và thực tế là tớ cũng đã gia công cái hình nón này nhiều rùi đó. Tất nhiên là chương trình thực tế còn phải dài hơn một chút nữa và vì vậy tớ mới để cái dòng " ... " ở đầu và ở cuối đoạn lệnh trên đó thui, hihi..
Và còn một thực tế là khi mình học hay làm đề tài thì mới cần nghiên cứu cái này chứ ra thực tế công việc thì rất rất rất ít khi dùng đến lập trình bằng tay cái chương trình như thế này đâu. Cả cái phay cầu hay tháp nữa. Nếu phay cầu thì cần dùng đến Hàm Sin hay Cos để cho đường dao chạy cho ra được hình cầu.
:-H
 

ShengHP

New Member
Oái sao không thấy bác nào cho ý kiến thế nhỉ? Chán quá đi mất!!!
 
Ðề: Cần giúp đỡ về macro

đây em cũng có chút ý kiến với các bác là em đang học máy tiện 2 ụ dao ! chắc chắn là em đã vào đúng chủ đề rùi ! máy tiện chỗ em gia công trục dài nên hay sử dụng cái này lắm ! em mới nghiên cứu về nó nên chưa được hiểu lắm !! ví dụ như M100 đến M199 là những vị trí mà nó hay chờ nhau của 2 ụ dao ! còn những cái như #521 , #529 , .... em cũng chưa hiểu nó gắn như thế nào ! để mai em lên công ty em chép chương trình về anh em mình cùng nghiên cứu tý nha !
 
Ðề: Cần giúp đỡ về macro

đây là chương trình chính
%
<DHT118>
(DHT118WC01/OP-2/HEAD1)
(2008-12-16)
#521=290.904(G55)
#522=-155.(B-AXIS)
#523=-150.(E-AXIS)
#524=-16.66(HEAD1 Z-AXIS START POS)
#525=-16.66(HEAD1 Z-AXIS ESCAPE POS)
#526=-16.66(HEAD2 Z-AXIS START POS)
#527=-16.66(HEAD2 Z-AXIS ESCAPE POS)
#528=-82.876(HEAD2 X-AXIS W REST POS MACRO)
#529=-72.876(HEAD2 X-AXIS W REST POS G53)
#530=8003(HEAD2 SUB PROGRUM)

#541=-0.005(D30.19-1)
#542=0(D30.19-2)

#550=-0.005(D35.175)
#551=0.010(D32.175)

#555=44.(SOZAI D)
#556=42.(D30.2 L)
#557=81.3(TSUBA' L)
#558=85.32(TSUBA Z)
#560=45.92(MIZO Z)

M100
M98P8029

#531=0(STEADY REST CANCEL)

M30
%
 
Ðề: Cần giúp đỡ về macro

đây là chương trình con nè !
%
O8001(OP-2/HEAD1)
(2008-12-11)
(CHUCK/1.0MPA)
(TAILSTOCK-0.8MPA)
(OP-2)
M681(HEAD1-CHECK)
M102(WAIT+PRG,NO)
/M86
G10L2P0Z0(EXT)
G10L2P2X0Z[#521](G55)
G11

IF[#100NE1]GOTO1001
G65P5000C0F0J0X0(POS-CHECK)
GOTO2000

N1001
/GOTO1000
GOTO1002

N1000(WORK-CLAMP)
G65P5000M190.B[#522]C0E[#523]F0X0(POS-CHECK)
N1002
G99G0G53Z[#525]
T500
M191(WAIT)
M1

GOTO2

N1(OD-R/0.8)
/G65P5000B[#522]C1.E[#523]F0X0(POS-CHECK)
M634
G99G0G53Z[#525]
G336T5.
G55G0Z.5M8
G0X[#555+5.]G97S2000M3
M111(WAIT)
G1X[#555-1.]F.25
Z[-#558+4.5]
X[#555]
G0G28U0
G53Z[#525]
M112(WAIT)
M5
M1

N2(OD-R/0.8)
/G65P5000B[#522]C1.E[#523]F0X0(POS-CHECK)
G99G0G53Z[#525]
G336T1.
G55G0Z.5M8
X[#555+4.]G97S1800M3
M121(WAIT)

N200(LOOP)
IF[#555EQ22]GOTO201(D22)
IF[#555EQ19]GOTO201(D19)
GOTO200

N201
G1X19.4F.25S2155
M122
G1Z-34.4
G0U1.Z.5
M123

N202
G1X16.F.25S2586
M124
G1Z-33.9
G0U1.Z.5
M125

G1X13.F.25S3183
G1Z-13.384
G0U1.Z.5

G1X10.F.25S4138
G1Z-3.048
G0U1.Z.5

G1X7.F.25S4500
G1Z-.066
G0U1.Z.5

N203
M126
G1X6.568F.25S2800
G1Z.1
X8.794Z-.758
X12.815Z-8.394
M127
Z-13.274
G3X13.152Z-13.5R1.2
G1X14.053Z-14.28
G3X14.375Z-14.88R1.2
G1Z-25.6
X15.15Z-26.432
G3X15.375Z-26.939R1.2
G1Z-33.846
X15.346Z-33.9F.17
X18.746F.25
X19.746Z-34.4
X22.
G0X24.W1.
G0G28U0
M140
G53Z[#525]
M1

M200
N3(OD-F/0.4)
/G65P5000B[#522]C1.E[#523]F0X0(POS-CHECK)
G99G0G53Z[#525]
G336T3.
G55G0Z.5M8
X15.
M141
G97S2800M3
G1X7.028F0.25
M142
G1Z0.1F.14
X8.514Z-.65
X12.615Z-8.059
Z-13.106
G3X13.086Z-13.35R.7
G1X[13.987+#551+#511]Z-14.13
G3X[14.175+#551+#511]Z-14.48R.7
G1Z-25.311
X[15.044+#550+#510]Z-26.243
G3X[15.175+#550+#510]Z-26.539R.7
G1Z-33.28
X[14.6+#550+#510]Z-34.F.05
X18.131F.14
X19.Z-34.434
Z-34.5
X22.
G0X24.W1.
M143
M144
G0G28U0S0
G53Z[#524]
M145
M1
M634
M201

N2000M5(END/MOVE/STEADY,TAILSTOCK)
/G65P5000M194.X0(POS-CHECK)
G65P5001M195.B[#522]E[#523]Z[#524]T.1(MOVE)
G99G54G0T500
M196(WAIT)
M85
M99





%
 
Ðề: Cần giúp đỡ về macro

E đang tìm hiểu về Macro, có nhìu cài e không hiểu mong mọi người chỉ cho chút nha:
1. Dấu ngoặc [], () có ý nghĩa như thế nào, các giá trị ghi trong nó?
2. Các ký tự: GE, LT, GT, NE, SBS, GOTO...
3. E muốn tìm hiểu về cú pháp lệnh trong nó thì tìm ở đâu ạ?
E xin cảm ơn!
 
Top