SMC_ToolCorr

这个功能块位于CODESYS SoftMotion 函数库 SM3_CNCSMC_ToolCorr模块可以用于路径预处理。此模块在通常的路径上产生一个偏移。在偏移路径上的每个路径对象的路径点到原点都有一个固定的值并且到期中间相邻点值也是一个恒定值I(刀具补偿)。因此,偏移路径上的每个点到原点都有一个恒定的距离。通常用在具有铣削钻孔直径定义的铣削轮廓中。为了补偿铣削钻孔的半径补偿必须有一个路径补偿 – 此路径可以通过使用 SMC_ToolCorr 模块创建。

插图 147: 具有刀具补偿的 CNC 路径

提示!

如果使用轮廓和钻孔半径,那么在路径偏移中会产生路径的交叉 – 这样,轮廓在路径偏移中就会遭到破坏 - 但是这些值将不会被发现 (见下文示例 )。要避免这种交叉情况发生,使用模块 SMC_AvoidLoop

插图 148: 经过刀具补偿之后具有交叉的 CNC 路径
SMC_ToolCorr 的实现

所有输入-OUTQUEUE-结构体中的 SMC_GEOINFO对象都将会一个接一个的进行检查。如果变量Intern_Mark中的Bit1 (Bit2) 在这些对象中被置位,那么从此处开始 – 在运动方向 - 路径将会按照当前定义的刀具半径偏移到左方(右方)。

为了得到一个联系路径输入 eMode 必须被设置为以下模式:

TC_RAMP_IN:这个模块用于进行路偏转,这意味着起点没有发生变化,但是结束点偏移。所有对象都会进行偏移直到 Intern_Mark 的 Bit0 被关闭。关闭之后起始点仍旧有偏移,但是结束点为通常点。

TC_BLIND_POS: 这个模块用于插入一个位置对象 (SMC_GEOINFO.iMoveType = 100),如果一个位置对象已经存在,那么此模块将在偏移的起点位置再次进行偏移。每个对象都将会进行一个偏移,直到Intern_MarkBit0被置位,此错做将会停止刀具补偿。此刻一个连续的路径都会根据一个定位对象进行定位。

SMC_NCDecoder将会在语句 G41/G42/G40 设置这些位。换句话说刀具补偿将会发生在语句 G41 与 G40 或者 G42 与 G40 之间。

Function block SMC_ToolCorr

 名称

类型

初始值

描述

VAR_IN

 

 

 

bExecute

BOOL

FALSE

当 TRUE 时,功能块被激活

bAbort

BOOL

FALSE

如果为 TRUE ,功能块当前的处理将会被中断

bAppend

BOOL

FALSE

只要输入一直为 FALSE, DataOutQueue 将会在每次复位时都被清除。一旦保持为 TRUE,新增加的数据将会被写入到 DataOutQueue 的结尾

poqDataIn

POINTER TO SMC_OUTQUEUE

 

这个变量指向 SMC_OUTQUEUE 结构体对象,其中包含路径的 SMC_GEOINFO-对象;通常情况下他指向预处理模块(例如:SMC_NCDecoder)的 DataOut 输出。 SMC_OUTQUEUE应该定义一个适当的尺寸大小(见上文)!

dToolRadius

LREAL

0

这个变量包含添加到当前  ToolRadius中的 SMC_GEOINFO对象值 – 将定义那条路径将进行刀具补偿 (参阅上文)。这个变量可以在线修改。因此可以在离线方式下定义此变量值 (通过  SMC_GEOINFO-结构体) 并且在线修改。注意刀具补偿会在一个块进行偏移时初始化并且会在路径校正的时候被中止,因此应该避免这种情况!但是在一次复位中进行半径校正是可行的或者或者在一个周期内模块还没有进行偏移 (状态 = TC_ORIG)。默认值: 0。

nSizeOutQueue

UDINT

 

这个变量定义数据缓冲区大小,GEOINFO 结构体对象列表将会被写入。这个缓冲区至少应为 GEOINFO 结构体本身的五倍大小。否则,SMC_NCDecoder 将不会进行任何动作的执行。尺寸大小可以预先定义,但是在下次复位之前不能被修改。可以通过以下方法创建缓冲区 ExampleBuf: Array[ 1..50] of SMC_GeoInfo 定义的缓冲区大小可以通过sizeof(ExampleBuf)操作进行读取。

pbyBufferOutQueue

POINTER TO ARRAY[0..0] OF SMC_GEOINFO

 

这个输入必须指向 OUTQUEUE-结构体定义的内存区域的第一个字节地址。定义的这个区域至少与 nSizeOutQueue 定义的一样大。通常情况下IEC中存储区域的定义是通过定义一个 SMC_GEOINFO 数组实现的 (例如:BUF: BUF: ARRAY[1..50] OF SMC_GEOINFO这个缓冲区可以存储50个路径元素)。变量值可以预定义,但是在下次复位前不能被修改。

eMode

SMC_TOOLCORRMODE

TC_RAMP_IN

定义路径偏移和不偏移的模式

VAR_OUT

 

 

bDone

BOOL

FALSE

如果输入数据...DataIn 被完全处理,那么这个变量将=会被设置为 TRUE 。因此在复位之前此模块不会执行其他动作。如果输入 bExecute 为 FALSE, bDone 将会被复位为 FALSE。

bBusy

BOOL

FALSE

TRUE,功能块的处理没有完成

bError

BOOL

FALSE

功能块内部发生错误信号

wErrorID

SMC_ERROR

0

错误ID

poqDataOut

POINTER TO SMC_OUTQUEUE

 

这个变量指向 SMC_OUTQUEUE-结构体,用于管理循环路径中的 SMC_GEOINFO-对象

SMC_OUTQUEUE

iStatus

SMC_TC_STATUS

TC_ORIG

枚举变量显示当前模块的状态。可能的状态:

TC_ORIG (0): 当前对象没有刀具补偿

TC_RIGHT (1): 将对象向右偏移 

TC_LEFT (2): 对象向左偏移

TC_END (4): 对象处理结束 

SMC_TC_STATUS

示例

简单的刀具补偿

G-code

N0 G0 X10 Y-10 F10 E100 E-100
N1 G41 D10
N2 G1 X20 Y-10
N2 G1 X30 Y-10
 
插图 149: 没有刀具补偿的 CNC路径
插图 150: 具有刀具补偿的 CNC路径,eMode=TC_BLIND_POS

示例

通过eMode=TC_BLIND_POS进行刀具补偿

G-code

N000 G41 D1 (WRK an) 
N010 G00 X3 F100 E1000 E-1000 
N020 G01 X5 Y10 
N030 G01 X7 Y10 
N040 G01 X10 Y0 
N050 G00 X20 
N060 G40 (WRK off)
 

在上面的示例中语句  N010用于进入;路径偏移。语句 N050 用于跳出路径偏移

插图 151: 刀具半径补偿 CNC路径以及 eMode=TC_BLIND_POS

强烈建议,第一句和最后一条语句使用定位元素  (G0)。如果不是这种情况,第一个偏移会从对象的原点作为起点,第二次偏移会相对于第一次的启动点。

示例 1

使用eMode=TC_RAMP_IN刀具补偿

G-code

% G-code RampIn and Rampout in radius correction
N0 G0 X10.0 Y-15.0 F10.0 E100 E-100.0
N1 G41 D10.0
N2 G1 X20.0 Y-15.0 (RampIn)
N3 G1 X30.0 Y-15
N4 G40
N5 G1 X40.0 Y-15.0 (RampOut)
 

偏移进和出的情况是一个线性运动  (G1在语句 N1 以及语句  N5)。

 插图 152: 使用 eMode=TC_RAMP_IN进行补偿的 CNC 路径

示例 2

使用eMode=TC_RAMP_IN的刀具补偿

G-code

N000 G41 D3 (WRK an) 
N010 G01 X3 Y10 F100 E1000 E-1000 
N020 G01 X7 Y10 
N030 G01 X10 Y0 
N040 G40 (WRK off) 
N050 G01 X20
 

在上面例子中语句  N010中的元素进行路径偏移。语句  N050用于退出偏移。

插图 153: 使用eMode=TC_RAMP_IN的 CNC 路径

注意位于 G41/G40 中的第一个元素是用于进入偏移另一个用于退出偏移并且必须为 (G01)

示例

铣削轮廓铣钻  Z-方向

G-code

(First section)
N000 G41 D1 (WRK on) F100 E1000 E-1000 
N010 G00 X3 
N020 G01 Z10 
N030 G01 X5 Y10 (Beginning of the milling contour) 
N040 G01 X7 Y10 
N050 G01 X10 Y0 (End of the milling contour)
N060 G01 Z0 
N070 G40 (WRK off) 
N080 G00 X20
(Second section)
N080 G42 D1 (WRK on) 
N090 G00 X23 
N100 G01 Z10 
N110 G01 X25 Y10 
N120 G01 X27 Y10 
N130 G01 X30 Y0 
N140 G01 Z0 
N150 G40 (WRK off) 
N160 G00 X40 
 

以上示例展示了使用 (WRK) 一块在当前位置的 Z方向进行刀具补偿。模式被设置为 BLIND_PO。位于 G41/G42-G40 中的第一个元素用于指定起始点计数开始。下一步用于指定 Z方向刀具形状。然后启动计数。最后 Z-轴完成位置偏移并且关闭刀具补偿。示例中的第二个选项显示在另一个方向的刀具补偿。

 插图 154: 沿 Z 方向的 CNC路径