1. 數控宏程序編程100例 [用戶宏程序的應用]
用戶宏程序是FANUC系統提供的一種變數編程方式,它不同於普通的程序,用戶宏程序允許使用變數、算術和邏輯運算及條件轉移,使得編制相同加工操作的程序更方便,更容易。使用用戶宏時的主要方便之處在於可以用變數代替具體數值,因而在加工同一類的零件時,只需將實際的值賦予變數即可,而不需要對每一個零件都編一個程序。用戶宏程序和普通程序的簡要對比見表1。
一、用戶宏程序的特徵
用戶宏程序的最大特徵有以下幾個方面:
可以在用戶宏程序中使用變數;
可以進行變數之間的運算;
用戶宏命令可以對變數進行賦值。
表1用戶宏程序和普通程序的簡要對比
普通程序 宏程序
只能使用常量 可以使用變數,並給變數賦值
常量之間不可以運算 變數之間可以運算
程序只能順序執行,不能跳轉 程序運行可以跳轉
二、戶宏程序的應用舉例
1. 橢圓加工
加工如圖1所示工件。
圖1橢圓加工
工件右端部分為橢圓曲線,長半軸40mm,簡裂短半軸20mm。採用線段逼近法編製程序,取工件右端面中心處為工件坐標系原點。
橢圓的參數方程為x=x0+acosθ,y=y0+bsinθ(θ為參數),長半軸為40mm,短半軸為20mm,啟始角為0°,終止角為90°。以θ為自變數每次變化0.5,X、Z值為應變數,通過變數運算計算出相應X、Z的值。注意:X項為直徑量編程。為了使程序更加通用,本例使用了以下變數進行運算。
編程時使用以下變數進行運算:#110為橢圓曲線起始角;#111為橢圓曲線各點Z軸坐標;#112為橢圓曲線各點X軸坐標。
參考精加工程序如下:
G01…(將刀具移至橢圓起點)
#110=0(設定自變數的初始值)
N20#111=40*COS[#110](變數運算出Z坐標)
#112=40*SIN[#110](變數運算出X坐標)
G01 X#112 Z#111 F100
#110=#110+0.5(自變數每次增量+0.5)
IF[#110 LE 90]GOTO 20(有條件跳轉攔蘆閉)
G…(橢圓部分加工結束,繼續加工後續部分)
2. 拋物線加工
加工如圖1-2所示工件。
由圖可知,拋物線的方程為Z=-X2/4,則Z=0時,X為0;Z=-6.25時X為5。X=-SQRT[4*Z],以Z值為自變數,每次變化0.1,X值為應變數,通過變數運算計算出相應X的值。注意:X向為直徑量編程。編程時使用以下變數進行運算:#101、#102。
精加工開口向左的拋物線OA外輪廓曲線段程序及分析。
G01 Z0(准備加工拋物線)
#101=0(拋物線起點的Z坐標)
N10#102=-2*SQRT[4*Z]
G01 X#102Z#101 F100
#101=#101-0.1(Z坐標每次增量-0.1)
IF[#101 GE-6.25]GOTO 10(有條件跳轉)
G01…(拋物線加工結束,繼續加工後續部分)
從以上的例子可以看出,宏程序在數控車上的編制並不難,用戶宏程序還有多種功能,如用同一個宏程序加工尺寸不同而類型相同的零件;我們只要知道相關二次曲線的函數表達式,利用宏指令即可編制出相應的加工程序。
在我們的工作過程中,通過「宏」的使用,我們可以大大減少加工程序的指令數,從而使得程序簡單、明了、便於修改,提高了加工的效率,用宏程序編制特殊功能的固定循環指令,實現了特殊的加工,例如:梯形、不等距螺紋的車削課題的加工等。
(作者單位:濟南市技師學院)
註:本文中所涉及到的圖表、註解、公式等內容請以PDF格式閱讀原文
本文為全文原貌 未安裝PDF瀏嘩告覽器用戶請先下載安裝 原版全文
2. 宏程序如何使用
記下指令和格式就和子程序差不多。指令(EQ為=,NE不等於,
GT大於,
LT小與,
GE大於等於
,LE小於等於)WH
DO
END是運算指令也是英文縮寫。
例賦值#2等於5。運算#2=#2+1
運行一次後#2值就是6,運行n次#2值為5+n。
A宏程序的編制方法就是:
利用變數編程的
;
1、條件語句1
IF
[條件表達式]
GOTO
n
n….
當條件滿足時,程序就跳轉到同一程序中語句標號為n的
語句上繼續執行,
當條件不滿足時,程序執行下一條語句。
2、條件語句2WHILE
[條件表達式]
DO
m...…END
m
當條件滿足時,從DO
m到ENDm之間的程序就重復執行;
當條件不滿足時,程序就執行ENDm下一條語句。
3、橢圓的解析方程:
4、橢圓的參數方程:
條件語句2。
5、橢圓加工程序
N010
#1=1
角度步長
N020
#2=-90
(270)
初始角度
N030
#3=90
終止角度
N040
#4=10
刀具半徑
N050
#5=30
長半軸
N060
#6=20
短半軸
N070
G90G00X0Y
[#6+#4]
刀具運行到(0,-30,)的位置
N080
S1000M03
N090
G01Z-3F100
刀具下到-3mm
N100
。
WHILE[#2LE#3]DO1
起始角度小於等於終止角度
N110
#7=#5*COS[#2]
計算X坐標值(橢圓參數方程)
N120
#8=#6*SIN[#2]
計算Y坐標值
(橢圓參數方程)
N130
G1X#7Y#8F300
直線插補一個步長
N14
0#2=#2+#1
變數#2增加一個角度步長
N150
END1
N160
G90G00Z100.0M05
快速抬刀。
3. 宏程序如何使用
記下指令和格式就和子程序差不多。指令(EQ為=,NE不等於, GT大於, LT小與, GE大於等於 ,LE小於等於)WH DO END是運算指令也是英文縮寫。
例賦值#2等於5。運算#2=#2+1 運行一次後#2值就是6,運行n次#2值為5+n。
A宏程序的編制方法就是: 利用變數編程的 ;
1、條件語句1 IF [條件表達式] GOTO n n?. 當條件滿足時,程序就跳轉到同一程序中語句標號為n的 語句上繼續執行, 當條件不滿足時,程序執行下一條語句。
2、條件語句2WHILE [條件表達式] DO m...?END m 當條件滿足時,從DO m到ENDm之間的程序就重復執行; 當條件不滿足時,程序就執行ENDm下一條語句。
3、橢圓的解析方程:
4、橢圓的參數方程: 條件語句2。
5、橢圓加工程序 N010 #1=1 角度步長 N020 #2=-90 (270) 初始角度 N030 #3=90 終止角度 N040 #4=10 刀具半徑 N050 #5=30 長半軸 N060 #6=20 短半軸 N070 G90G00X0Y [#6+#4] 刀具運行到(0,-30,)的位置 N080 S1000M03 N090 G01Z-3F100 刀具下到-3mm N100 。 WHILE[#2LE#3]DO1 起始角度小於等於終止角度 N110 #7=#5*COS[#2] 計算X坐標值(橢圓參數方程) N120 #8=#6*SIN[#2] 計算Y坐標值 (橢圓參數方程) N130 G1X#7Y#8F300 直線插補一個步長 N14 0#2=#2+#1 變數#2增加一個角度步長 N150 END1 N160 G90G00Z100.0M05 快速抬刀。
4. 數控車床宏程序怎麼寫最好帶步驟解說
數控車床宏程序是非常靈活且因情況而異的,所以數控車床宏程序編程掌握以下參數即可:
普通加工程序直接用數值指定G代碼和移動距離;例如,GO1和X100.0。使用用戶宏程序時,數值可以直接指定或用變數指定。當用變數時,變數值可用程序或用MDI面板上的操作改變。
例如:#1=#2+100;G01X#1F300。
量的表示:計算機允許使用變數名,用戶宏程序不行。變數用變數符號(#)和後面的變數號指定。例如:#1,表達式可以用於指定變數號。
此時,表達式必須封閉在括弧中。例如:#[#1+#2-12]。
變數根據變數號可以分成四種類型:#0空變數,該變數總是空,沒有值能賦給該變數。#1-#33局部變數,局部變數只能用在宏程序中存儲數據,例如,運算結果。當斷電時,局部變數被初始化為空。調用宏程序時,自變數對局部變數賦值。
#100-#199、#500-#999公共變數,公共變數在不同的宏程序中的意義相同。當斷電時,變數#100-#199初始化為空。變數#500-#999的數據保存,即使斷電也不丟失。#1000---系統變數。系統變數用於讀和寫CNC運行時各種數據的變化,例如,刀具的當前位置,補償值。
局部變數和公共變數可以有0值或下面范圍中的值:-1047到-10-29或-10-2到-1047,如果計算結果超出有效范圍,則發出P/S報警NO.111。
當在程序中定義變數值時,小數點可以省略。例:當定義#1=123;變數#1的實際值是123.000。
為在程序中使用變數值,指定後跟變數號的地址。當用表達式指定變數時,要把表達式放在括弧中。例如:G01X[#1+#2]F#3;
被引用變數的值根據地址的最小設定單位自動地舍入。例如:當G00X#/;以1/1000mm的單位執行時,CNC把123456賦值給變數#1,實際指令值為G00X12346.改變引用變數的值的符號,要把負號(-)放在#的前面。
例如:G00X-#1當引用未定義的變數時,變數及地址都被忽略。例如:當變數#1的值是0,並且變數#2的值是空時,G00X#1Y#2的執行結果為G00X0。
(4)宏程序如何應用擴展閱讀:
數控宏程序編程是用變數的方式進行數控編程的方法,數控宏程序分為A類和B類宏程序,其中A類宏程序比較老,編寫起來也比較費時費力,B類宏程序類似於C語言的編程,編寫起來也很方便。
不論是A類還B類宏程序,它們運行的效果都是一樣的。
編寫一些大批相似零件的時候,可以用宏程序編寫,這樣只需要改動幾個數據就可以了,沒有必要進行大量重復編程。
5. 宏程序如何使用
宏就是用公式來加工零件的,普通加工程序直接用指定G代碼和移動距離。
指令(EQ為=,NE不等於, GT大於, LT小與, GE大於等於 ,LE小於等於)WH DO END是運算指令也是英文縮寫。
例賦值#2等於5,運算#2=#2+1 運行一次後#2值就是6,運行n次#2值為5+n。
宏程序的作用
數控系統為用戶配備了強有力的類似於高級語言的宏程序功能,用戶可以使用變數進行算術運算、邏輯運算和函數的混合運算,此外宏程序還提供了循環語句、分支語句和子程序調用語句,利於編制各種復雜的零件加工程序,減少乃至免除手工編程時進行繁瑣的數值計算,以及精簡程序量。
以上內容參考:網路-宏程序
6. 什麼是數控編程中的用戶宏程序如何應用
數控編程中有時候用常量編程無法獲得預期的加工效果,這是可以用宏程序達到,利用計算機的計算能力,人為的將一些不好計算的值表示為變數,這既是宏程序。車工中宏程序的應用主要體現在車非圓曲線,大螺距梯形螺紋上面,而銑工和加工中心則應用宏程序較多,因為他們加工的多維空間坐標系
7. 宏程序什麼意思
問題一:宏程序什麼意思 大家都在問宏程序~其實說起來宏就是用公式來加工零件的,比如說橢圓,如果沒有宏的話,我們要逐點算出曲線上的點,然後慢慢來用直線逼近,如果是個光潔度要求嘩旅友很高的工件的話,那麼需要計算很多的點,可是應用了宏後,我們把橢圓公式輸入到系統中然後我們給出Z坐標並且每次加10um那麼宏就會自動算出X坐標並且進行切削,實際上宏在程序中主要起到的是運算作用..宏一般分為A類宏和B類宏.A類宏是以G65 Hxx P#xx Q#xx R#xx的格式輸入的,而B類宏程序則是
以直接的公式和語言輸入的和C語言很相似在0i系統中應用比較廣.由於現在B類宏程序的大量使
用很多書都進行了介紹這里我就不再重復了,但在一些老系統中,比如法蘭克OTD系統中由於它的MDI鍵盤上沒有公式符號,連最簡單的等於號都沒有,為此如果應用B類宏程序的話就只能在計算機上編好再通過RSN-32介面傳輸的數控系統中,可是如果我們沒有PC機和RSN-32電纜的話怎麼辦呢,那麼只有通過A類宏程序來進行宏程序編制了,下面我介紹一下A類宏的引用;
A類宏是用鎮橡G65 Hxx P#xx Q#xx R#xx或G65 Hxx P#xx Qxx Rxx格式輸入的xx的意思就是數值,是以um級的量輸入的,比如你輸入100那就是0.1MM~~~~~.#xx就是變數號,關於變數號是什麼意思再不知道的的話我也就沒治了,不過還是教一下吧,變數號就是把數值代入到一個固定的地址中,固定的地址就是變數,一般OTD系統中有#0~~~#100~#149~~~#500~#531關閉電源時變數#100~#149被初始化成「空」,而變數#500~#531保持數據.我們如果說#100=30那麼現在#100地址內的數據就是30了,就是這么簡單.好現在我來說一下H代碼,大家可以看到A類宏的標准格式中#xx和xx都是數值,而G65表示使用A類宏,那麼這個H就是要表示各個數值和變數號內的數值或者各個變數號內的數值與其他變數號內的數值之間要進行一個什麼運算,可以說你了解了H代碼A類宏程序你基本就可以應用了,好,現在說一下H代碼的各個含義:
以下都以#100和#101和#102,及數值10和20做為例子,應用的時候別把他們當格式就行,
基本指令:
H01賦值;格式:G65H01P#101Q#102:把#102內的數值賦予到#101中
G65H01P#101Q#10:把10賦予到#101中
H02加指令;格式G65 H02 P#101 Q#102 R#103,把#102的數值加上#103的數值賦予#101
G65 H02 P#101 Q#102 R10
G65 H02 P#101 Q10 R#103
G65 H02 P#101 Q10 R20
上面4個都是加指令的格式都是把Q後面的數值或變數號內的數值加上R後面的數
值或變數號內的數值然後等於到P後面的變數號中.
H03減指令;格式G65 H03 P#101 Q#102 R#103,把#102的數值減去#103的數值賦予#101
G65 H03 P#101 Q#102 R10
G65 H03 P#101 Q10 R#103
G65 H03 P#101 Q20 R10
上面4個都是減指令的格式都是把Q後面的數值或變數號內的數值減去R後面的數
值或變數號內的數值然後等於到P後面的變數號中.
H04乘指令;格式G65 H04 P#101 Q#102 R#103,把#102的數值乘上#103的數值賦予#1......>>
問題二:宏程序中EQ是什麼意思? 是等於的意思,GT是大於,NE是不等於,GE是大於等於,LT是小於,LE是小於等於,希望對你有幫助
問題三:數控編程宏程序中#1#2……是什麼意思 宏程序中的代號,他好比我們小學學的X(愛克斯),我舉個例子哈。當X=2時,那麼5+X就等於7.如果我在程序中寫上#1=5,那麼下一段只亂槐要讀到#1系統就知道是5了。如果下面有一行程序為G0X[#1+2]Z30. 那麼系統就會把刀具走刀X是7的位置,Z走刀30的位置。如果在指令#1=#1-1的話那麼系統每讀到#1的時候都會在上一個#1的數據減掉1毫米。這就是他的作用,也就是不單單表示一個數據,他還能運用計算來完成一些編程比較麻煩的環境中,希望我的解答能夠使你了解宏!
問題四:宏程序#0什麼意思 詳細點 #0代表的是空變數,不管給#0賦值多少它的變數值都為零.
問題五:宏程序中fix什麼意思 截斷取整。例:fix(3.7)=3
區別於四捨五入取整round,如round(3.7)=4
問題六:誰知道數控宏程序是什麼意思啊? 宏就是用公式來加工零件的,比如說橢圓,如果沒有宏的話,我們要逐點算出曲線上的點,然後慢慢來用直線逼近,如果是個光潔度要求很高的工件的話,那麼需要計算很多的點,可是應用了宏後,我們把橢圓公式輸入到系統中然後我們給出Z坐標並且每次加10um那麼宏就會自動算出X坐標並且進行切削, 實際上宏在程序中主要起到的是運算作用..宏一般分為A類宏和B類宏.A類宏是以G65 Hxx P#xx Q#xx R#xx的格式輸入的,而B類宏程序則是以直接的公式和語言輸入的和C語言很相似在0i系統中應用比較廣.
問題七:宏程序裡面的#j 是什麼意思 #表示變數號,j表示某個數字。
問題八:宏程序里GE GT IF等 那些都是什麼意思啊? 5分 分別是大於等於,大於,如果,有興趣可以網路中國寧波數控交流群
來自UC瀏覽器
問題九:加工中心宏程序#1#2是什麼意思? 這只是一個代號而已,與XY的作用差不多
問題十:宏程序中的then是什麼意思 然後啊,這個一般是跟if一起用的,
if ... then ...
如果解決了您的問題請採納!
如果未解決請繼續追問
8. 誰來指導下宏程序怎麼用
C語言宏中"#"和"##"的用法
在查看linux內核源碼的過程中,遇到了許多宏,這裡面有許多都涉及到"#"和"##",因此,在網上搜索了一些資料,整理如下:
一、一般用法
我們使用#把宏參數變為一個字元串,用##把兩個宏參數貼合在一起.
用法:
#include<cstdio>
#include<climits>
using namespace std;
#define STR(s) #s
#define CONS(a,b) int(a##e##b)
int main()
{
printf(STR(vck)); // 輸出字元串"vck"
printf("%d\n", CONS(2,3)); // 2e3 輸出:2000
return 0;
}
二、當宏參數是另一個宏的時候
需要注意的是凡宏定義里有用'#'或'##'的地方宏參數是不會再展開.
1, 非'#'和'##'的情況
#define TOW (2)
#define MUL(a,b) (a*b)
printf("%d*%d=%d\n", TOW, TOW, MUL(TOW,TOW));
這行的宏會被展開為:
printf("%d*%d=%d\n", (2), (2), ((2)*(2)));
MUL里的參數TOW會被展開為(2).
2, 當有'#'或'##'的時候
#define A (2)
#define STR(s) #s
#define CONS(a,b) int(a##e##b)
printf("int max: %s\n", STR(INT_MAX)); // INT_MAX #include<climits>
這行會被展開為:
printf("int max: %s\n", "INT_MAX");
printf("%s\n", CONS(A, A)); // compile error
這一行則是:
printf("%s\n", int(AeA));
INT_MAX和A都不會再被展開, 然而解決這個問題的方法很簡單. 加多一層中間轉換宏.
加這層宏的用意是把所有宏的參數在這層里全部展開, 那麼在轉換宏里的那一個宏(_STR)就能得到正確的宏
參數.
#define A (2)
#define _STR(s) #s
#define STR(s) _STR(s) // 轉換宏
#define _CONS(a,b) int(a##e##b)
#define CONS(a,b) _CONS(a,b) // 轉換宏
printf("int max: %s\n", STR(INT_MAX)); // INT_MAX,int型的最大值,為一個變數 #include<climits>
輸出為: int max: 0x7fffffff
STR(INT_MAX) --> _STR(0x7fffffff) 然後再轉換成字元串;
printf("%d\n", CONS(A, A));
輸出為:200
CONS(A, A) --> _CONS((2), (2)) --> int((2)e(2))
三、'#'和'##'的一些應用特例
1、合並匿名變數名
#define ___ANONYMOUS1(type, var, line) type var##line
#define __ANONYMOUS0(type, line) ___ANONYMOUS1(type, _anonymous, line)
#define ANONYMOUS(type) __ANONYMOUS0(type, __LINE__)
例:ANONYMOUS(static int); 即: static int _anonymous70; 70表示該行行號;
第一層:ANONYMOUS(static int); --> __ANONYMOUS0(static int, __LINE__);
第二層: --> ___ANONYMOUS1(static int, _anonymous, 70);
第三層: --> static int _anonymous70;
即每次只能解開當前層的宏,所以__LINE__在第二層才能被解開;
2、填充結構
#define FILL(a) {a, #a}
enum IDD{OPEN, CLOSE};
typedef struct MSG{
IDD id;
const char * msg;
}MSG;
MSG _msg[] = {FILL(OPEN), FILL(CLOSE)};
相當於:
MSG _msg[] = {{OPEN, "OPEN"},
{CLOSE, "CLOSE"}};
3、記錄文件名
#define _GET_FILE_NAME(f) #f
#define GET_FILE_NAME(f) _GET_FILE_NAME(f)
static char FILE_NAME[] = GET_FILE_NAME(__FILE__);
4、得到一個數值類型所對應的字元串緩沖大小
#define _TYPE_BUF_SIZE(type) sizeof #type
#define TYPE_BUF_SIZE(type) _TYPE_BUF_SIZE(type)
char buf[TYPE_BUF_SIZE(INT_MAX)];
--> char buf[_TYPE_BUF_SIZE(0x7fffffff)];
--> char buf[sizeof "0x7fffffff"];
這里相當於:
char buf[11];
【alps_008】:
基本看了一遍,樓主的情況屬於一般用法:
「#把宏參數變為一個字元串,用##把兩個宏參數貼合在一起」
#include<stdio.h>
#include<string.h>
#define STRCPY(a,b) strcpy(a##_p,#b) //把第一個參數後邊加上字元_p,把第二個參數變成字元串
int main()
{
char var1_p[20];
char var2_p[30];
strcpy(var1_p,"aaaa");
strcpy(var2_p,"bbbb");
STRCPY(var1,var2); //等於strcpy(var1_p,"var2");
STRCPY(var2,var1); //等於strcpy(var2_p,"var1");
printf("%s\n",var1_p);
printf("%s\n",var2_p);
return 0;
}
【jeffer007】:
Token-Pasting Operator (##)
// preprocessor_token_pasting.cpp
#include <stdio.h>
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
int main()
{
paster(9);
}
Output
token9 = 9
Stringizing Operator (#)
// stringizer.cpp
#include <stdio.h>
#define stringer( x ) printf( #x "\n" )
int main() {
stringer( In quotes in the printf function call );
stringer( "In quotes when printed to the screen" );
stringer( "This: \" prints an escaped double quote" );
}
Output
In quotes in the printf function call
"In quotes when printed to the screen"
"This: \" prints an escaped double quote"