马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册 
x
关于汇川AM600等运动控制器的CNC的初步操作手册
作者:杨洋
第一步:在工程“Application”下添加“CNC程序”
添加完成后如下图:
第二步:双击“CNC设置”选择你需要的预处理功能块,如下图:
第三步:设置CNC程序的属性,如下图:
进入后如下图:
选择第二个”CNC”标签,如下图:
编译模式选择“SMC_CNC_REF”.
该格式是将用户G-Code程序读入内存后的文本数据串,其中可以包含由变量代表的目标位置,其中的插补模式等需要前后文分析才能确定,需要解码后才能成为OutQueue 格式;
第四步:编写自己需要的CNC代码,如下图:
N000 G51 D$DR$ // 倒角的半径“DR”是个变量,要先在全局变量表中定义好.
N010 G01 X500 Y0 F50 E50 E-50
N020 G01 X500 Y500 F50 E50 E-50
N030 G01 X00 Y500 F50 E50 E-50
N040 G01 X00 Y0 F50 E50 E-50
N050 G50
“DR”等变量也可以在“CNC”给定一个初始值,如下图
点击“变量”后,如下图:
在“值”的那一栏,给定一个初始值。
第五步:添加两个伺服轴,其它设置不在这里赘述,只讲一下关于“CNC”的设置;如下图:
G代码后面的速度值不要超过这个地方的值,否则的话bstopiop也会被置位;
第六步:我们后台不能做CNC仿真,G代码要先解析再速度平滑,速度检查,再给到插补器,如下:
SMC_NCDecoder_1(
ncprog:=CNCY1,
bExecute:=bExecuteButton,
bAbort:=,
bAppend:=,
bStepSuppress:=,
piStartPosition:=,
nSizeOutQueue:=SIZEOF(ExampleBuf),
pbyBufferOutQueue:=ADR(ExampleBuf) ,
bEnableSyntaxChecks:=,
bDone=>,
bBusy=>,
bError=>,
wErrorID=>,
poqDataOut=>,
iStatus=>,
iLineNumberDecoded=>,
GCodeText=>); //CNC代码解析
SMC_SmoothPath_1(
bExecute:=SMC_NCDecoder_1.bDone,
bAbort:=,
bAppend:=,
poqDataIn:=SMC_NCDecoder_1.poqDataOut,
dEdgeDistance:=,
dAngleTol:=,
nSizeOutQueue:=SIZEOF(ExampleBuf1),
pbyBufferOutQueue:=ADR(ExampleBuf1) ,
eMode:=,
bSymmetricalDistances:=,
bImprovedSymmetricCuts:=,
eAddAxMode:=,
dMinimumCurvatureRadius:=,
bCheckCurvature:=,
dRelativeCurvatureTol:=,
bCheckAddAxVelJump:=,
dMaxAddAxVelDifference:=,
bDone=>,
bBusy=>,
bError=>,
wErrorID=>,
poqDataOut=>,
udiStopsDueToCurvatureRadius=>); //指令平滑
SMC_CheckVelocities_1(
bExecute:=SMC_NCDecoder_1.bDone,
bAbort:=,
poqDataIn:=SMC_SmoothPath_1.poqDataOut,
dAngleTol:=,
bCheckAddAxVelJump:=,
dMaxAddAxVelDifference:=,
bBusy=>,
bError=>,
wErrorID=>,
poqDataOut=>); //速度检查
SMC_Interpolator_1(
bExecute:=SMC_SmoothPath_1.bDone,
poqDataIn:=SMC_CheckVelocities_1.poqDataOut,
bSlow_Stop:=,
bEmergency_Stop:= SMC_ControlAxisByPos_Axis.bError OR SMC_ControlAxisByPos_Axis.bStopIpo OR SMC_ControlAxisByPos_Axis_1.bError ORSMC_ControlAxisByPos_Axis_1.bStopIpo ORSMC_Interpolator_1.bError ORSMC_CheckVelocities_1.bError ORSMC_SmoothPath_1.bError ,
bWaitAtNextStop:=,
dOverride:=,
iVelMode:=1,
dwIpoTime:=4000, //一般设置与ETHERCAT的周期一样
dLastWayPos:=,
bAbort:=,
bSingleStep:=,
bAcknM:=,
bQuick_Stop:=,
dQuickDeceleration:=,
dJerkMax:=,
dQuickStopJerk:=,
bSuppressSystemMFunctions:=,
bDone=>,
bBusy=>,
bError=>,
wErrorID=>,
piSetPosition=>,
iStatus=>,
bWorking=>,
iActObjectSourceNo=>,
dVel=>,
vecActTangent=>,
iLastSwitch=>,
dwSwitches=>,
dWayPos=>,
wM=>);
SMC_TRAFO_Gantry2_1(
pi:=SMC_Interpolator_1.piSetPosition,
dOffsetX:=0,
dOffsetY:=0,
dx=>,
dy=>); //坐标系切换
SMC_ControlAxisByPos_Axis(
Axis:=Axis,
iStatus:=SMC_Interpolator_1.iStatus,
bEnable:=SMC_Interpolator_1.bWorking,
bAvoidGaps:=TRUE,
fSetPosition:=SMC_TRAFO_Gantry2_1.dx,
fGapVelocity:=100,
fGapAcceleration:=100,
fGapDeceleration:=100,
fGapJerk:=100,
bBusy=>,
bCommandAborted=>,
bError=>,
iErrorID=>,
bStopIpo=>); //控制X轴
SMC_ControlAxisByPos_Axis_1(
Axis:=Axis_1,
iStatus:=SMC_Interpolator_1.iStatus,
bEnable:=SMC_Interpolator_1.bWorking,
bAvoidGaps:=TRUE,
fSetPosition:=SMC_TRAFO_Gantry2_1.dy,
fGapVelocity:=100,
fGapAcceleration:=100,
fGapDeceleration:=100,
fGapJerk:=100,
bBusy=>,
bCommandAborted=>,
bError=>,
iErrorID=>,
bStopIpo=>); //控制Y轴
|