相关系统变量:
sinumerik one 及 840D sl 系统以上参数默认值为 1000,828D 系统默认值为 1000000。
]]>程序代码如下:
WHILE((R0>=360) OR (R0<0))
IF R0>=360
R0=R0-360
ELSE
IF R0<0
R0=360+R0
ENDIF
ENDIF
ENDWHILE
以上程序实现的功能是将 R0 的值控制在大于等于 0 小于 360 之间。理论上无论给 R0 赋予任何初值,执行以上代码后都可以将其自动计算为需要的结果。
在分析后发现,出现以上报警的原因是程序在此 while 循环中无法跳出。随即从这里下手寻找问题点。
在经过给 R0 赋予一些特殊的初值,然后执行程序后发现,当初值为 -0.0000000001 或 359.999999999 时无法跳出循环,R0 的值一直在这两者之间跳动,猜测应该是数控系统精度判断 359.999999999 等于 360,导致 IF R0>=360
一直成立并减去 360 后结果又成为了 -0.0000000001,然后就是反复的无限循环。
找到了问题点解决就很简单了,只需要将 R0=R0-360
修改为 R0=R0-360.00001
即可,这样在保证精度没有太大变化的情况下,也保证了循环可以正常跳出。
出现此处报警一般都是程序内出现死循环的问题,通过单步执行程序或设置断点可以快速定位故障位置然后就可以考虑一些特殊情况下是否会导致死循环。
]]>例如:
已知 real 类型全局变量:TEST
定义一个字符串,并赋值:
DEF STRING[10] STR1
STR1="TEST"
想通过 STR1
来得到 TEST
变量的值。可以使用 EXECSTRING
来处理:
EXECSTRING("R0="<<STR1)
以上指令可以将 TEST
变量的值读入 R0
。
以上是 4 种常用的坐标变换指令。
TRANS/ATRANS:以给定的几何轴方向移动 WCS
ROT/AROT:WCS 旋转:
每个指令可以独立生效,也可以叠加生效:
替换型指令:
TRANS X… Y… Z…
ROT X… Y… Z…
ROT RPL=...
SCALE X… Y… Z…
MIRROR X0/Y0/Z0
附加型指令:
ATRANS X… Y… Z…
AROT X… Y… Z…
AROT RPL=...
ASCALE X… Y… Z…
AMIRROR X0/Y0/Z0
例如,想要先将参考点平移到 X1 Y1 (G17 平面),然后将参考点绕Z轴旋转到45度:
TRANS X1 Y1
AROT RPL=45
ROT X30 - 绕X轴旋转30度
ROT RPL=30 - 在当前平面旋转30度,如果当前为 G17,则绕Z轴旋转30,相当于 ROT Z30
ASCALE X0.7 Y0.7 - 可为每个轴设定一个独立的比例系数
MIRROR X0 - X 轴镜像(X轴上反向)
MIRROR - 关闭镜像