CNC
1.连续插补
步骤
1:添加预处理指令
2:编写Gcode
N010 G01 X1.5 Y3 F1 E0.5 E-0.5
N020 G01 X3 Y1.5
N040 G03 X6 Y2.8 I0.06 J3.8
N050 G01 X9 Y3.8
N060 G05 X11 Y3.6
N070 G05 X12.4 Y4.8
3:第二步中1、2、3处位置突变,默认处理会减速停止再运行。用G51/G52
启动圆滑路径处理将拐角处位置改为连续即可实现连续插补。
N000 G51 D1 (D值=拐角点到圆滑切点距离)
N010 G01 X1.5 Y3 F1 E0.5 E-0.5
N020 G01 X3 Y1.5
N030 G03 X6 Y2.8 I0.06 J3.8
N040 G01 X9 Y3.8
N050 G05 X11 Y3.6
N060 G05 X12.4 Y4.8
N070 G50
SMC_Interpolator指令
SMC_Interpolator 功能块用于将 SMC_GEOINFO 对象描述的连续路径转化为按照预定速度和时间预编译的点信息。经过此过程之后位置点可以被IEC程序识别并发送到驱动器。
名称 | 类型 | 初始值 | 描述 |
---|---|---|---|
VAR_IN | |||
bExecute | BOOL | FALSE | 当为TRUE,功能块被激活,上升沿有效 |
poqDataIn | Pointer TO ⇘ SMC_OUTQUEUE | 0 | 这个变量指向 SMC_OUTQUEUE-结构体对象,包含未经过圆滑处理的 SMC_GEOINFO-对象;通常情况下指向预处理模块 ⇘ SMC_CheckVelocities的..DataOut 输出 |
bSlow_Stop | BOOL | FALSE | 为TRUE,SMC_Interpolator 将会根据速度定义(byVelMode,)将速度值减小为 0停止, 并且当前 GEOINFO-对象具有最大延迟 (dDecel) 。bSlow_Stop为 FALSE后接着停止前位置继续运行。 |
bEmergency_Stop | BOOL | FALSE | 为TRUE,SMC_Interpolator 将立即紧急停止,为OFF接着停止前位置继续运行。 |
bWaitAtNextStop | BOOL | FALSE | 为TRUE,在路径角或暂停位置停止,为OFF继续运行 |
dOverride | LREAL | 1 | dOverride不允许小于 0.01。运行速度为VEl=dOverride×设定速度 |
iVelMode | SMC_INT_VELMODE | TRAPEZOID | 定义速度轮廓 “SMC_INT_VELMODE (ENUM)” |
dwIpoTime | DWORD | 0 | 这个变量需要在每次调用时进行设置,需要以 μsec 定义循环时间,与EtherCAT任务保持一致 |
dLastWayPos | LREAL | 0 | 如果将输出 dWayPos 赋值给 dLastWayPos ,运行中dWayPos 将会递增,其值为路径总长。dLastWayPos 可以被复位为 0 或者在任何时候设置为其他不同值。 |
bAbort | BOOL | FALSE | 为 TRUE 立即终止CNC处理,bDone输出为ON,然后bAbort复位为False |
bSingleStep | BOOL | FALSE | 为TRUE CNC只运行一个周期 |
bAcknM | BOOL | FALSE | 这个输入可以用作一个附加操作 (M-操作)。如果输入为 TRUE,这个操作将会被删除并且路径处理将会继续。 |
bQuick_Stop | BOOL | FALSE | 为TRUE减速停止,减速率为dQuickDeceleration,为False接着继续运行 |
dQuickDeceleration | LREAL | 0 | 用于 bQuick_Stop 的减速值,为0时按预设值减速。 |
dJerkMax | LREAL | 允许的最大加加速度:值用于二次速度模式。必须是整数并且在插补期间不能改变。 | |
dQuickStopJerk | LREAL | 如果选择一种速度模式,那么跳跃的加加速度将会导致一个紧急停止。 | |
VAR_OUT | |||
bDone | BOOL | FALSE | 这个变量在输入数据 (poqDataIn) 被完全处理时将会被设置为 TRUE 。此后,功能块在下次复位前将不会执行任何动作。如果输入 bExecute 为FALSE, bDone 将会被复位为 FALSE。 |
bBusy | BOOL | FALSE | TRUE,功能块的处理没有完成。 |
bError | BOOL | FALSE | 功能块内部发生错误信号。 |
wErrorID | SMC_ERROR | SMC_NOERROR | 错误ID |
piSetPosition | SMC_POSINFO | 这个结构体变量SMC_POSINFO将会影响当前设置位置。其中包含下一个位置的坐标以及附件轴的状态。 | |
iStatus | SMC_INT_STATUS | IPO_INIT | 这个枚举变量反应功能块的当前状态SMC_INT_STATUS可能的状态: |
IPO_UNKNOWN (0) : 在一个完全的 SMC_Interpolator 处理之后不会发生的内部状态。 | |||
IPO_INT (1) : 模块位于初始化状态; DataIn 没有被完全填充,也不是已经准备被填充。 | |||
IPO_ACCEL (2) : 模块现在处于加速阶段。 | |||
IPO_CONSTANT (3) : 模块现在以恒定速度运动。 | |||
IPO_DECEL (4) : 模块现在处于减速阶段。 | |||
IPO_FINISHED (5 ):处理 GEOINFO 列表被中止。任何位于 DataIn 之后的对象将不会被处理。 | |||
IPO_WAIT (6) : 模块等待 | |||
IPO_INCREASING_ACCEL (7):个加速过程 | |||
IPO_DECREASING_ACCEL (8):减速过程 | |||
IPO_INCREASING_DECEL (9):增减速度过程 | |||
IPO_DECREASING_DECEL (10):减减速过程 | |||
bWorking | BOOL | FALSE | 这个输出与功能块SMC_ControlAxisByPos的输入 bEnable 相连接。当为 TRUE列表的处理已经启动并且没有完成(IPO_ACCEL或者 IPO_CONSTANT或IPO_DECEL或 IPO_WAIT)。另外,bWorking 将会被设置为 FALSE。 |
iActObjectSourceNo | INT | -1 | 当前DataIn队列处理的SMC_GEOINFO组件 iSourceLine_No。如果SMC_Interpolator没有动作 (任何时候) (Working = FALSE),变量值将被设置为 "-1"。 |
dVel | LREAL | 0 | 路径当前速度值。 |
vecActTangent | SMC_VECTOR3D | 显示X/Y/Z轴设置速度,如果 dVel = 0 ,vecAct_Tangent为 0 | |
iLastSwitch | INT | 0 | 此输出包含最后一个开关的序号。注意:如果在一个循环中包含多个开关,只有最后一个将会被提及。 |
dwSwitches | DWORD | 0 | 这个 DWORD 描述了所有开关1 到32 的状态。DWORD 的 Bit0 对应开关 1,Bit31 对应开关 32 。因此,与 iLastSwitch 不同,所有的开关都将被关注。 |
dWayPos | LREAL | 路径总长,非3D不包括Z轴 | |
wM | WORD | 0 | 如果插补处理到一个 M-对象,例如,一个附加操作的线性描述,这个输出将会将变量关联到 M-函数并且插补将会停止直到输入 bAcknM 允许。 |
2. CNC常用数据类型
SMC_OUTQUEUE
这个数据结构位于CODESYS SoftMotion library SM3_CNC。这个结构体用于管理 GEOINFO对象。
功能块SMC_NCDecoder,SMC_SmoothPath,SMC_RoundPath,SMC_AvoidLoop以及 SMC_ToolCorr提供了一个用于处理 OUTQUEUE-结构的指针,并能够立即对这个结构进行初始化。
模块SMC_SmoothPath,SMC_RoundPath,SMC_ToolCorr,SMC_AvoidLoop以及SMC_Interpolator必须有一个指针指向OUTQUEUE列表。如果这个列表被编程并且“手动”添加。那么相应的初始化也需要手动进行完成。对于这个目的开始的两个变量 (pbyBuffer, size) 必须被设定。
名称 | 类型 | 初始值 | 描述 |
---|---|---|---|
wOUTQUEUEStructID | WORD | 16#9878 | 显示该变量类型 |
pbyBuffer | POINTER TO ARRAY[0..0] OF SMC_GEOINFO | G代码会被解析为ARRAY[0..n] OF SMC_GEOINFO类型的数组,pbyBuffer指向数组首地址。 | |
nCapacity | UDINT | 显示ARRAY[0..n] OF SMC_GEOINFO数组长度 | |
nReadPos | UDINT | 显示G代码执行当前段数 | |
nWritePos | UDINT | ||
bFull | BOOL | ||
bEndOfList | BOOL | ||
byGenerator | BYTE | ||
bReCheckVelocities | BOOL | 内部变量 | |
strProgrammName | STRING | CNC程序的名称字符 | |
xPartofLM | BOOL | ||
nNumReserveEntries | |||
nPastMarker |
CNC启点位置设置
CNC编译模式有3种,每种模式启点位置设备方便不同
SMC_OUTQueue模式
直接在后台CNC属性中修改。这种方式只能改一次
如下图起点为(10,10,10)
在程序中修改
模式选择SMC_OUTQueue
bSlow_Stop | BOOL | FALSE | 为TRUE,SMC_Interpolator 将会根据速度定义(byVelMode,)将速度值减小为 0停止, 并且当前 GEOINFO-对象具有最大延迟 (dDecel) 。bSlow_Stop为 FALSE后接着停止前位置继续运行。 |
---|---|---|---|
bEmergency_Stop | BOOL | FALSE | 为TRUE,SMC_Interpolator 将立即紧急停止,为OFF接着停止前位置继续运行。 |
bWaitAtNextStop | BOOL | FALSE | 为TRUE,在路径角或暂停位置停止,为OFF继续运行 |
bAbort | BOOL | FALSE | 为 TRUE 立即终止CNC处理,bDone输出为ON,然后bAbort复位为False |
bSingleStep | BOOL | FALSE | 为TRUE CNC只运行一个周期 |
bQuick_Stop | BOOL | FALSE | 为TRUE减速停止,减速率为dQuickDeceleration,为False接着继续运行 |
dQuickDeceleration | LREAL | 0 | 用于 bQuick_Stop 的减速值,为0时按预设值减速。 |