對數和常用對數
(1)對數:
設a是一個不等於1的正數,a的b次冪等於N,記作ab=N.
反過來,如果要表示N是a的多少次冪(即用a、N來表示b)就可以記作logaN=b。
a叫做底數(簡稱底),N叫做真數,b叫做以a為底、N的對數。
例如:2的4次冪等於16,要表示16是2的多少次冪,可以記作 log 2 16=4。
根據對數的意義有:
(A) alogaN=N;(對數恆等式)(B)零和負數沒有對數;(C)log a a=1;(D)log a 1=0;
(E)logaan=n。
(2)常用對數:
以10為底的對數叫做常用對數。通常把“log10”寫成“lg”,如:log107=lg7
它的求法為真數的整數位數減1作為對數的首數,lg17=1.…(小數部分查表)
6、自然對數 #i=LN[#j]
(1)定義:
以e為底的對數,叫自然對數,其中
=2.71828182845904
5….
…極限,
表示 :
(
趨近於∞無窮大)時,
的極限為
e是無理數,log e N通常記作ln N(在宏程式中我們記作LN[#j])
例如:#3=8;
#1=LN[#3]=LN8 表示以e(2.718…)為底8的對數等於#1
依換底公式,得自然對數與常用對數的關係是:
ln N=2.303lg N 如:ln8=2.303×lg8
(2)自然對數的運算
1)相對誤差可能大於10-8;
2)當反對數(#j)為0或小於0時,觸發程式錯誤P/S報警No.111;
3)常數可代替變數#j。
7、上取整#i=FIX[#j]和下取整#i=FUP[#j]
CNC處理數值運算時,無條件的捨去小數部分稱為上取整;小數部分進位到整數稱為下取整(注意與數學上的四捨五入對照),對於負數的處理要特別小心。
例如:假設#1=1.2,#2=-1.2
1) 當執行#3=FUP[#1]時,2.0賦予#3(FUP下取整);
2) 當執行#3=FIX[#1]時,1.0賦予#3(FIX上取整);
3) 當執行#3=FUP[#2]時,-2.0賦予#3;
4) 當執行#3=FIX[#2]時,-1.0賦予#3。
④函式TAN執行SIN/COS。
如果SIN、COS或TAN函式的運算結果小於10-8或由於運算精度的限制不為0的話,設定引數NO.6004#1為1,則運算結果可視為0。
說明:
(1)加減運算 由於使用者宏程式的變數值的精度僅有8位十進位制,當在加減運算中處理非常大的數時,將得不到期望的結果。
例如,當試圖把下面的值賦給變數#1和#2時:
#1=9876543277777.777
#2=9876543210123.456
變數值實際上已經變成:
#1=9876543300000.000
#2=9876543200000.000
此時,當變成計算#3=#1-#2時,其結果#3並不是期望值67654.321,而是#3=100000.000,顯然誤差較大,實際計算、實際結果其實與此還稍有誤差,因為系統是以二進位制執行的。
(2)邏輯運算 邏輯運算,即使用條件表示式EQ、NE、GT、GE、LT、LE時,也可能造成誤差,其情形與加減運算基本相同。
例如,IF[#1EQ#2]的運算會受到#1和#2的誤差影響,並不總是能估算正確,要求兩個值完全相同,有時是不可能的,由此會造成錯誤的判斷,此時應該改用限制誤差來限制比較穩妥,即使用IF[ABS[#1-#2]LT0.001]代替上述語句,以避免兩個變數的誤差。此時,當兩個變數的差值的絕對值未超過允許極限(此處為0.001),就認為兩個變數的值是相等的。
(3)三角函式運算 在三角函式運算中會發生絕對值誤差,它不再10-8之內,所以注意使用三角函式後的積累誤差,由於三角函式在宏程式的應用非常廣泛,特別在極具數學代表性的引數方程表達上,因此必須對此保持應有的重視。
六、變數與賦值
賦值是指將一個數據賦予一個變數,如:#1=0,表示#1的值是0。其中,#1代表變數,“#”是變數符號(根據系統不同,使用會有差別),0就是給#1賦的值。“=”是賦值符號,起語句定義作用。
(一)賦值的規律
1、賦值號“=”兩邊內容不能隨意互換,左邊只能是變數,右邊可以是表示式、數值或變數,如:
#1=1;
#2=2;
#1=#1+1;
……
…
#1=#1; 對
#1=#2;或#2=#1; 錯
2、一個賦值語句只能給一個變數賦值。
3、可以多次給一個變數賦值,新變數值將取代原變數值(即最後賦的值生效)。
4、賦值語句具有運算功能,它的一般形式為:變數=表示式。如:
IF[#1GT0]GOTO20;
WHIL[表示式]DO1;
在賦值運算中,表示式可以是變數自身與其他資料的運算結果,如:#1=#1+1,則表示#1的值為#1+1,這一點與數學運算有所不同,與計算機高階語言雷同。
5、賦值表示式的運算順序與數學運算順序相同。
6、輔助功能(M程式碼)的變數有最大值限制,如,將M30賦值為300顯然是不合理的。
(二)轉移和迴圈
在程式中,使用GOTO語句和IF語句可以改變程式的流向,有三種轉移和迴圈操作可供使用:
轉移和迴圈
1、無條件轉移(GOTO語句)
轉移(跳轉)到標有順序號N(程式段號)的程式段。當指定1~99999以外的順序號時,會觸發P/S報警No.128。格式為:
GOTOn:n為順序號(1~99999)
例如:GOTO20; 即轉移至N20 G0 X Z ;
……
…
2、條件轉移
IF之後指定條件表示式。
1)IF[<條件表示式>]GOTOn
表示如果指定的條件表示式滿足時,則轉移(跳轉)到標有順序號“N”的程式段;如果不滿足指定的條件表示式,則按順序執行下個程式段。
例:
如果條件不滿足 → N10 …;
……; 程式
IF[#1GT100]GOTO20; 如果條件滿足跳轉到N20
N20 G0 X Z ;
…
如果變數#1的值大於100,則跳轉到順序號為N20的程式段。
2)IF[<條件表示式>]THEN
如果指定的條件表示式滿足時,則執行預先指定的宏程式語句,而且只執行一個宏程式語句。
IF[#1EQ#2]THEN#3=10;如果#1和#2的值相同,10賦值給#3
說明
條件表示式:條件表示式必須包括運算子,運算子插在兩個變數中間或變數和常量中間,並且用“[ ]”封閉。表示式可以替代變數。
運算子:運算子有2個字母組成(見表2-9),用於兩個值的比較,以決定它們是相等還是一個值小於或大於另一個值。
注意:不能使用不等號。
表2-9 運算子
運 算 符 |
含 義 |
英 文 注 釋 |
EQ |
等於(=) |
Equal |
NE |
不等於(≠) |
Not Equal |
GT |
大於(>) |
Great Than |
GE |
大於或等於(≥) |
Great Than or Equal |
LT |
小於(<) |
Less Than |
LE |
小於或等於(≤) |
Less Than or Equal |
典型程式例項:計算數值1~100的累加總和
O1000; |
程式號 |
#1=0; |
儲存和數變數的初值 |
#2=1; |
被加數變數的初值 |
N10 IF[#2GT100]GOTO20; |
當被加數大於100時跳轉到N20 |
#1=#1+#2; |
計算和 |
#2=#2+#1; |
計算下一個被加數和 |
GOTO10; |
跳轉到N10 |
N20 M30; |
程式結束 |
3、迴圈(WHILE語句)
在WHILE後指定一個條件表示式,既當指定條件滿足時,則執行從DO到END之間的程式,否則跳轉到END後面的程式段。
…
WHILE [<條件表示式>] DOm;(m=1、2、3)
……; → 條件滿足的程式
…;
如果條件不滿足 → ENDm;
注:m只能是1、2或3,DO~END迴圈可根據需要多次使用;當程式有交叉重複迴圈時,會觸發P/S報警No.124。
巢狀
(1)END1、2、3可根據需要多次使用。
WHILE [<條件表示式>] DO1;
……; → 程式
END1;
…… → 程式
…
WHILE [<條件表示式>] DO1;
……; → 程式
END1;
… → 程式
(2)DO的範圍不能交叉,下列格式錯誤。
WHILE [<條件表示式>] DO1;
……; → 程式
WHILE [<條件表示式>] DO1;
……; → 程式
END1;
… → 程式
END2;
…
(3)DO迴圈可以3重巢狀。
WHILE [<條件表示式>] DO1;
……; → 有無程式均可
WHILE [<條件表示式>] DO2;
……;
WHILE [<條件表示式>] DO3;
……; → 程式
…
END1;
…
END2;
…
END3;
…
(4)條件轉移“IF”可以跳出迴圈區“WHILE”外面。
WHILE [<條件表示式>] DO1;
IF [<條件表示式>]GOTOn;
END1;
Nn;
(5)條件轉移“IF”不能進入迴圈區“WHILE”內,下列格式錯誤。
IF [<條件表示式>]GOTOn;
……;
…;
WHILE [<條件表示式>] DO1;
…;
Nn;
END1;
注:①DOm和ENDm必須成對使用,而且DOm一定要在ENDm指令之前。
②當指定DO而沒有指定WHILE語句時,將產生從DOm到ENDm之間的無限迴圈。
③在使用EQ或NE的條件表示式中,值為空、值為零將會有不同的效果;而在其他形式的條件表示式中,空即被當作零。
④條件轉移(IF語句)和迴圈(WHILE語句)從邏輯關係上說,兩者是從正反兩個方面描述同一件事情;從功能上說,兩者具有相當程度的相互替代性;條件轉移(IF語句)受到系統的限制相對更少,使用更靈活。
⑤因為系統現正向檢索後在反向檢索,所以用“WHILE迴圈語句”要比“GOTO”、“IF…GOTO條件轉移語句”減少系統處理時間。
七、宏程式語句和NC語句
1、宏程式語句和NC語句的定義
在宏程式中,可以把程式段分為兩種語句,一種為宏程式語句,一種NC語句。以下型別的程式段均屬於宏程式語句:
(1) 包含算術或邏輯運算的程式段。如+、-、*、/…;
(2) 包含控制語句的程式段。如GOTO、DOn~ENDn…;
(3) 包含宏程式呼叫指令的程式段。如G65、G66、G67和G、M、T…;
除了宏程式語句,其餘的均為NC語句。
2、宏程式語句和NC語句的區別
(1)只有當引數No.6000的#5位SBM設定為1時,宏程式語句執行單段程式執行。
(2)在刀具半徑補償方式C中,宏程式語句段作為移動程式段處理。
3、MDI執行
在MDI方式中,不可以指定宏程式,但可以進行下列操作:呼叫子程式;呼叫一個宏程式,但是該宏程式在自動執行狀態下不能呼叫另一個宏程式。
4、在EDIT方式下的執行
(1)設定引數NE8(引數No.3202的#0位)和NE9(引數No.3202的#4位)為1時,可對程式號為8000~8999和9000~9999的使用者宏程式和子程式進行保護。
(2)當儲存器全清時(同時按下RESET和DELETE鍵),儲存器的全部內容包括宏程式(子程式)將被清除。
5、復位
(1)復位後,所有區域性變數和從#100~#149的公共變數被清除為空(數值被清除)。
(2)設定引數CLV(引數No.6001的#7位)和CCV(引數No.的#6位)為1時,數值不被清除。
(3)復位不清除系統變數#1000~#1133。
注:(1)在刀具半徑補償C方式中,當宏程式執行程式單段時,該程式段被當作移動距離為0,不能執行正確的補償。
(2)表示式中可以使用的常數值為在“+0.0000001~+99999999”及“- 99999999~ -0.0000001”範圍內的8位十進位制數,如果超過這個範圍,會觸發P/S報警No.003。
未完待續,第三期螺紋與曲線宏程式