Marco Nie - siemens https://blog.niekun.net/category/siemens/ zh-CN Wed, 18 Oct 2023 17:13:10 +0800 Wed, 18 Oct 2023 17:13:10 +0800 Siemens 系统计算精度设置影响程序运行问题 https://blog.niekun.net/archives/2858.html https://blog.niekun.net/archives/2858.html Wed, 18 Oct 2023 17:13:10 +0800 admin 最近的工作中遇到使用带刀具的轨迹运动中,由于轨迹是通过1000多个离散点构成的,每个点之间距离很短,由于 sinumerik one 系统默认的线性计算精度是每毫米 1000 各单位,导致刀具轨迹报错提示可能有碰撞危险。通过提高系统计算精度可以解决此问题。

相关系统变量:

  • 通用机床数据 10200 线性位置的计算精度
  • 通用机床数据 10210 角位置的计算精度

sinumerik one 及 840D sl 系统以上参数默认值为 1000,828D 系统默认值为 1000000。

]]>
0 https://blog.niekun.net/archives/2858.html#comments https://blog.niekun.net/feed/category/siemens/archives/2858.html
828D 执行程序提示:等待插补缓冲 https://blog.niekun.net/archives/2330.html https://blog.niekun.net/archives/2330.html Fri, 03 Sep 2021 09:38:00 +0800 admin 最近在编写西门子数控系统 NC 代码时,遇到一个问题:启动程序后在固定地方程序无法继续执行下去,提示:等待插补缓冲:
2021-09-03T01:27:34.png

程序代码如下:

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 即可,这样在保证精度没有太大变化的情况下,也保证了循环可以正常跳出。

出现此处报警一般都是程序内出现死循环的问题,通过单步执行程序或设置断点可以快速定位故障位置然后就可以考虑一些特殊情况下是否会导致死循环。

]]>
2 https://blog.niekun.net/archives/2330.html#comments https://blog.niekun.net/feed/category/siemens/archives/2330.html
使用 EXECSTRING 指令执行字符串的内容 https://blog.niekun.net/archives/1563.html https://blog.niekun.net/archives/1563.html Thu, 07 May 2020 15:57:00 +0800 admin 最近在编程中遇到一个问题:字符串内定义了一个已知的变量名,需要得到变量的值。

例如:
已知 real 类型全局变量:TEST

定义一个字符串,并赋值:

DEF STRING[10] STR1
STR1="TEST"

想通过 STR1 来得到 TEST 变量的值。可以使用 EXECSTRING 来处理:

EXECSTRING("R0="<<STR1)

以上指令可以将 TEST 变量的值读入 R0

]]>
0 https://blog.niekun.net/archives/1563.html#comments https://blog.niekun.net/feed/category/siemens/archives/1563.html
SIEMENS 坐标系转换 https://blog.niekun.net/archives/376.html https://blog.niekun.net/archives/376.html Wed, 18 Sep 2019 14:23:00 +0800 admin 编写 NC 程序时,遇到需要进行坐标系旋转的地方。研究了下手册,发现使用起来很方便。

2019-09-18T03:03:16.png

以上是 4 种常用的坐标变换指令。

简介

TRANS/ATRANS:以给定的几何轴方向移动 WCS
ROT/AROT:WCS 旋转:

  • 链接单个旋转,围绕给定的几何轴旋转
  • 当前工作平面(G17/G18/G19)绕角度RPL=...旋转
    SCALE/ASCALE:以设定的几何轴的方向比例放大/缩小轮廓
    MIRROR/AMIRROR:通过对设定的几何轴执行镜像(方向切换)进行 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句法

ROT X30 - 绕X轴旋转30度
ROT RPL=30 - 在当前平面旋转30度,如果当前为 G17,则绕Z轴旋转30,相当于 ROT Z30

SCALE 句法

ASCALE X0.7 Y0.7 - 可为每个轴设定一个独立的比例系数

MIRROR

MIRROR X0 - X 轴镜像(X轴上反向)
MIRROR - 关闭镜像

]]>
0 https://blog.niekun.net/archives/376.html#comments https://blog.niekun.net/feed/category/siemens/archives/376.html