CNC轴和NC轴虽然都在Twin CAT的软件中,但是分属不同的系统,如何实现CNC轴做NC的主轴,实现联动呢?
单主轴电子齿轮,固定速度系数
编辑
单主轴电子齿轮,动态速度系数
编辑
多主轴电子齿轮,动态系数
编辑
电子齿轮解耦
编辑
编辑
编辑
编辑
不管是电子齿轮还是电子凸轮,都是实现对应的FB来实现的。
CNC轴的耦合也有两种方式,
通过HLI命令实现,如下代码,实现了将CNC中的X轴做Y轴主轴的耦合和解耦操作,
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.X_Enable := TRUE;
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.desc[1].AxisNumber := 1;
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.desc[1].FractDenominator := 1;
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.desc[1].FractNumerator := 1;
CASE eCoupledStep OF
0:
IF bCoupled THEN
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.desc[1].CouplingMode := HLI_AXIS_COUPLING_DIRECT ;
eCoupledStep := 100;
END_IF
100:
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.X_Semaphor := TRUE;
IF pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingState.X_State THEN
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.X_Semaphor := FALSE;
eCoupledStep := 200;
END_IF
200:
IF NOT bCoupled THEN
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.desc[1].CouplingMode := HLI_AXIS_COUPLING_INACTIVE ;
eCoupledStep := 300;
END_IF
300:
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.X_Semaphor := TRUE;
IF NOT pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingState.X_State THEN
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.X_Semaphor := FALSE;
eCoupledStep := 0;
END_IF
END_CASE
代码说明:
使能CNC轴耦合功能
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.X_Enable := TRUE;
指定CNC主轴的轴号
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.desc[1].AxisNumber := 1;
系数比列设置(分子、分母)
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.desc[1].FractDenominator := 1;
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.desc[1].FractNumerator := 1;
耦合方式
直接耦合
pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.desc[1].CouplingMode := HLI_AXIS_COUPLING_DIRECT ;
解耦 pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.desc[1].CouplingMode := HLI_AXIS_COUPLING_INACTIVE ;
触发命令,上升沿有效 pAC[2]^.addr^.McControlLr_Data.MCControlAxisCouplingUnit_AxisCoupling.AxisCouplingCommand.X_Semaphor
耦合方式还有一下几种,有兴趣的可以测试下
HLI_AXIS_COUPLING_INACTIVE = 0,
HLI_AXIS_COUPLING_ZERO = 1,
HLI_AXIS_COUPLING_DIRECT = 2,
HLI_AXIS_COUPLING_MIRROR = 3
HLI_AXIS_COUPLING_FRACT = 4
通过G代码实现的耦合
轴名称使用方式
#SET AX LINK [ , [ =,G [,, limit_2>] ]
{, [ =,G [,, limit_2>] ] } ]
轴序号方式
#AX LINK [NBR] [ , [ =,G [,, limit_2>] ]
{, [ =,G [,, limit_2>] ] } ]
参数定义:
耦合组序号;
耦合组中的 从轴名;
耦合组中的主轴名;
NBR 耦合组必须以轴序号命名主轴从轴;
G 耦合组按照GANTRY轴类型;
第一段限位,可通过RESET消除的报警段设置;
第二段限位,不可通过reset消除,重启twincat消除报警,手动纠正变差。
首先,nc轴的主轴只能是nc轴,现在我们就需要把cnc轴的数据转移到nc轴上。如何实现转移呢?
在nc轴中,创建一个编码器轴,用来接收cn不想像傻子一样。
在prc程序中,创建一个输出的变量,用来接收CNC轴的位置。
VisualY_Pos AT %Q* : UDINT;
VisualY_Pos := (pAC[2]^.addr^.StateLR_Data.D_ActivePositionACS) ;
变量链接到NC轴的编码器轴上去,如此以来, NC轴便获取到了CNC轴的数据。
编辑
这样一来。便可以用NC轴的方式来实现多轴联动了。
留言与评论(共有 0 条评论) “” |