这个功能块位于CODESYS SoftMotion 函数库 ⇘ SM3_CNC。 SMC_ToolCorr模块可以用于路径预处理。此模块在通常的路径上产生一个偏移。在偏移路径上的每个路径对象的路径点到原点都有一个固定的值并且到期中间相邻点值也是一个恒定值I(刀具补偿)。因此,偏移路径上的每个点到原点都有一个恒定的距离。通常用在具有铣削钻孔直径定义的铣削轮廓中。为了补偿铣削钻孔的半径补偿必须有一个路径补偿 – 此路径可以通过使用 SMC_ToolCorr 模块创建。
提示! 如果使用轮廓和钻孔半径,那么在路径偏移中会产生路径的交叉 – 这样,轮廓在路径偏移中就会遭到破坏 - 但是这些值将不会被发现 (见下文示例 )。要避免这种交叉情况发生,使用模块 SMC_AvoidLoop。 |
所有输入-OUTQUEUE-结构体中的 ⇘ SMC_GEOINFO对象都将会一个接一个的进行检查。如果变量Intern_Mark中的Bit1 (Bit2) 在这些对象中被置位,那么从此处开始 – 在运动方向 - 路径将会按照当前定义的刀具半径偏移到左方(右方)。
为了得到一个联系路径输入 eMode 必须被设置为以下模式:
TC_RAMP_IN:这个模块用于进行路偏转,这意味着起点没有发生变化,但是结束点偏移。所有对象都会进行偏移直到 Intern_Mark 的 Bit0 被关闭。关闭之后起始点仍旧有偏移,但是结束点为通常点。
TC_BLIND_POS: 这个模块用于插入一个位置对象 (SMC_GEOINFO.iMoveType = 100),如果一个位置对象已经存在,那么此模块将在偏移的起点位置再次进行偏移。每个对象都将会进行一个偏移,直到Intern_Mark的Bit0被置位,此错做将会停止刀具补偿。此刻一个连续的路径都会根据一个定位对象进行定位。
⇘ SMC_NCDecoder将会在语句 G41/G42/G40 设置这些位。换句话说刀具补偿将会发生在语句 G41 与 G40 或者 G42 与 G40 之间。
名称 |
类型 |
初始值 |
描述 |
---|---|---|---|
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-对象 |
iStatus |
SMC_TC_STATUS |
TC_ORIG |
枚举变量显示当前模块的状态。可能的状态: TC_ORIG (0): 当前对象没有刀具补偿 TC_RIGHT (1): 将对象向右偏移 TC_LEFT (2): 对象向左偏移 TC_END (4): 对象处理结束 |
示例
通过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 用于跳出路径偏移
强烈建议,第一句和最后一条语句使用定位元素 (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)。
示例 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用于退出偏移。
注意位于 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-轴完成位置偏移并且关闭刀具补偿。示例中的第二个选项显示在另一个方向的刀具补偿。