有关宏程序学习的几点心得
天长市职业教育中心 蒋春飞
HNC—21/22T为用户配备了强有力的类似于高级语言的宏程序功能,用户可以使用变量进行算术运算、逻辑运算和函数的混合运算,此外宏程序还提供了循环语句、分支语句和子程序调用语句,利于编制各种复杂的零件加工程序,减少乃至免除手工编程时进行繁琐的数值运算,并精减程序量。然而对于初学者来说,宏程序的编制是一个难点,在此作为一个初学者的我来谈谈我在学习中的几点所思所得,也许会更加贴近初学者的实际困难,能给我们的初学者们带来一点点启示。
一、宏程序是计算机数控语言与数学建模的一个结合体。
我认为宏程序的编程的第一步应是数学的分析与建模(方程曲线等),再在此基础上确定一个变量(x、z或某个参数)及变量的取值范围,根据曲线方程给出x或z的表达式,最后利用宏程序提供的语句(如循环语句、分支语句和子程序调用语句等)结合数控指令编制出程序(方程曲线宏程序的实质是利用小线段拟合的方法得到曲线)。我们可以看到,在宏程序中用到的计算机语句很有限,经过一段时间的训练都可以掌握,那么数学的建模就成为了我们初学者编程的一个瓶颈,主要表现在曲线的平移、旋转等坐标变换及变量如何取值等方面不能有一个完整细致的考量,导致程序出错。
二、从数学角度看方程曲线的平移。
在方程曲线的编程中,一般都会给定我们曲线的标准方程或参数方程。
1、若给出曲线的标准方程
例如:曲线的中心在工件坐标系中坐标是
方法一:求该曲线在工件坐标系中的一般方程:,
得:,此时自变量的取值范围就是曲线在工件坐标系里起点到终点坐标值(车削中若以为变量取其半径值)。
当然,这样变换可能会使表达式显得繁琐,但这并不可怕,因为我们只要写出了数学表达式,下面所做的只是用数控语言转换照单输入就是了。
方法二:利用坐标的平移变换,
若是标准方程曲线上点的坐标,是该曲线在工件坐标系中对应点的坐标,则有,
其中,自变量的取值范围仍是其在标准方程下的取值范围。
结合以上所述,以椭圆为例来体会一下宏程序的编制。
例1、用宏程序编制下图所示椭圆程序
(图1) (图2)
图1:
分析:方法一:由椭圆标准方程:和其中心在工件坐标系中的坐标(10,-20),得其一般方程:,若以为变量,变形得,,
方法二:由椭圆标准方程:和其中心在工件坐标系中的坐标(10,-20),若以为变量,变形得,,由
得:,
程序一: 程序二:
T0101M3S600 T0101M3S600
G0X40Z2 G0X40Z2
X18 …
G1Z0F100 …
X20Z-1 ….
Z-10
#0=10
#1=5 #1=5
#3=10 #3=0
WHILE#3LE15 WHILE#3LE5
#4=10*SQRT[1-[#3-10]*[#3-10]/25]-20 #4=10*SQRT[1-#3*#3/25]
G37G1X[#3]Z[#4] G37G1X[#3+10]Z[#4-20]
#3=#3+0.08 #3=#3+0.08
ENDW …
G1Z-35
X38
X40W-1
Z-41
G0X100Z100
M30 M30
图2:
分析:方法一:由椭圆标准方程:和其中心在工件坐标系中的坐标(15,-10),得其一般方程:,若以为变量,变形得,, (第四象限的z 为负值)
方法二:由椭圆标准方程:和其中心在工件坐标系中的坐标(15,-10),若以为变量,变形得,,由
得:, (第四象限的z 为负值)
程序(略)
需要注意的是:有些曲线(如椭圆)方程转化为(或)时,会涉及开平方,开平方就要注意符号的选择,符号判断的要点是看区间曲线在标准方程时所处的象限。若过象且符号有变化时,可利用分支语句来解决,或直接分段处理
再如:曲线的中心在工件坐标系中坐标是,则该曲线在工件坐标系中的一般方程是
还是以椭圆为例来感受如何根据参数方程进行程序编制
例1、用宏程序编制下图所示椭圆程序(椭圆方程)
(图1) (图2)
图1、分析:由图可知,图中椭圆部分的标准参数方程是,其中心在工件坐标系中的坐标是(10,-15),则其在工件坐标系中方程为,
图2、分析:由图可知,图中椭圆部分的标准参数方程是,其中心在工件坐标系中的坐标是(15,-10),则其在工件坐标系中方程为,
程序一: 程序二:
T0101M3S600 T0101M3S600
G0X40Z2 G0X40Z2
X18 …
G1Z0F100 …
X20Z-1 ….
Z-10
#0=10
#1=5 #1=5
#3=0 #3=270
WHILE#3LE90 WHILE#3GE180
#4=10*COS[#3*PI/180]-15 #4=10*COS[#3*PI/180]-10
#5=5*SIN[#3*PI/180]+10 #5=5*SIN[#3*PI/180]+15
G37G1X[#5]Z[#4] G37G1X[#5]Z[#4]
#3=#3+3 #3=#3-3…
ENDW …
G1Z-35
X38
X40W-1
Z-41
G0X100Z100
M30 M30
需特别指出的是的取值一定要根据图象所在的象限及其旋转方向来确定。
三、初学者在宏程序编制中易被混淆或忽视的一些细节问题。
初学宏程序时,经常会出错,仔细检查后会发现,编程的思想,程序的格式,数学建模都基本正确,可程序就是不能通过,再认真仔细检查思考,会发现所犯错误实在低级,却又极易被忽视,在此我将我所犯错误列举一二例,看能不能从中也能找到你的影子。
1、忽视了角度与弧度的转换。以转角为变量时,我们习惯于用角度,而函数的变量应为实数,是没有单位的,因此要进行相互的转换。
记住转换关系: (可省略) 。
2、请看下面的程序段
#3=0
WHILE#3LE15
#4=10*SQRT[1-[X-10]*[X-10]/25]-20
G37G1X[#3]Z[#4]
#3=#3-0.08 熟悉吧,是不是也在你的程序中出现过呀!
ENDW
3、上面的“特别指出”“需要注意”也是我的一个经验教训,我相信你也会有此经历。
4、大部分初学者在编制宏程序时会犯经验性错误。
如:我们习惯于编长轴在Z轴上椭圆,当出现端面椭圆时,或是无所适从,或是以经验按想象对以前的程序略作改动,不去认真分析其内在的联系,这样做往往会出错,在此不妨做一个简单的分析:
从坐标变换的角度来看,从长轴A在Z上变换到长轴A在X轴上,相当于把坐标系旋转了,X变成了Z,Z也换成了X,因此我们只要将原方程中的X与Z作一个互换,这样做好象就没有问题了,至少在用于椭圆标准方程或一般方程没有发现问题,用于参数方程时好象也没什么大的问题,只是在定义转角的方向和区间时总有点别扭,不是吗?第一次模拟经常会与要求不同,好在华中图形模拟较好,经过几番试验总能把问题解决,长舒一口气,啊,总算对了,可你想过为什么吗?也许你认为这并不重要,试出来不就可以了吗?但我以为从我们的教师的角度出发,我们不能总停留在“试”的层面上,来以已昏昏,使人昭昭。岔远了,我们还是回到刚才的问题上来,实际上刚才的变换不是旋转那么简单,如果仅做旋转变换是不是有一个坐标轴的方向反了?怎么办?再加一个对称变换。那么一般方程中以又为什么没错呢?因为X、Z都有平方,对方向不“敏感”,参数方程式问题就来了:1、旋转变换使得转角的始边随之旋转了一个同样的角度。2、对称变换使得转角方向也发生了逆转!
又如:在用平底铣刀倒圆角时练习中,绝大多数学员都参照了书中69页用球铣刀加工倒圆的例子,它的编程思想是计算出不同层高中的半径偏移量,修改刀具半径,再调用刀具半径补偿的方法来实现的,这种方法很好。在平底铣刀倒圆角中能不能套用呢?完全可以,只是半径偏移量的表达式要做调整,我们一开始都犯了经验性错误,忽视了,基本上照抄了表达式,只在z向作了一个小调整,结果倒出了近似椭圆的倒角,我们也草率地下了两种结论:1、这就是圆角(明显不象);2、倒圆角不是平铣刀的功能,平铣刀不宜倒圆角(有所保留,没敢说不能)。再细想怎能么不可以呢,只是我们的半径偏移量的表达式错了,如:用半径为的平铣床刀倒半径为的圆角半径偏移量的表达式应为:
Z轴高度为: ,
限于篇幅,还有一些经验及教训就不啰嗦了。总之,大概是我们和不太爱动脑的职高生呆得太久了,或是平时杂事过多的缘故吧,使得我们也无心动脑了,所以我们在遇到问题时常会本能性回避或下经验性结论,这种做法是要不得的,我们还是要从自身做起,严谨治学,补已之不足,然后才能给学生以师范。
展开阅读全文