苏州实操派科技有限公司官网-实操派教育科技,汇川技术PLC培训,实操派PLC培训,苏州PLC培训机构

CNC自定义路径代码

[复制链接]
3 198

附件下载,需登录可以查看贴内更多信息

您需要 登录 才可以下载或查看,没有账号?立即注册

x
[FUNCTION_BLOCK HMI_CNC_SingelVAR_INPUT
               
                ProgramNumber: UINT;//程序路径(1:GO1 2:G02, 3:G03,4:M)
                Data: UDT_CNC_Base;
END_VAR
VAR_OUTPUT
                M_OUT:WORD;
END_VAR
VAR_IN_OUT
        AxisX: AXIS_REF_SM3;
        AxisY: AXIS_REF_SM3;
        ProgramInit:BOOL;//程序初始化
        M_Test:BOOL;//M代码测试  
END_VAR
VAR
        PathOptimize:BOOL;//路径优化
        bExecute:BOOL;    //启动命令
        Proval:SMC_GEOINFO;
        LINE_Interpolation1 : SMC_OUTQUEUE;
        LINE_Interpolation1_0 : ARRAY[1..200] OF SMC_GEOINFO;
        LINE_Interpolation1_1 : ARRAY[1..200] OF SMC_GEOINFO;
        Posval:SMC_POSINFO;
        InitIndex:INT;
        SMC_SmoothPath_0: SMC_SmoothPath;
        SMC_CheckVelocities_0: SMC_CheckVelocities;
        SMC_Interpolator_0: SMC_Interpolator;
        SMC_ControlAxisByPos_X: SMC_ControlAxisByPos;
        SMC_ControlAxisByPos_Y: SMC_ControlAxisByPos;
        r1: R_TRIG;
        SMC_TRAFO_Gantry2_0: SMC_TRAFO_Gantry2;
        SMC_TRAFOF_Gantry2D:SMC_TRAFOF_Gantry2;
    ProgramIndex:UINT;
END_VAR




//
((********************************************Name:HMI_CNC_Continuation
Author:Sakura
Date:2022-05/30
Version:1.0
********************************************)
//判断G 代码的有效区域

  IF  ProgramInit  AND InitIndex<>3  THEN
        CASE InitIndex OF
   0:
   //预处理只能地址
                LINE_Interpolation1.pbyBuffer:=ADR(LINE_Interpolation1_0);
   //初始化程序空间,新建200个缓存
        SMC_SetQueueCapacity(poq:=ADR(LINE_Interpolation1) , nSizeInBytes:= SIZEOF(LINE_Interpolation1_0));
        InitIndex:=1;
   1:

                 CASE  ProgramNumber OF
                 1:
                 Posval.wAuxData:=3;//轴选os
         Proval.iObjNo:=1;//MASK;
         Proval.iSourceLine_No:=0;//G代码行号
         proval.diSentenceNo:=0;
         Proval.iMoveType:=SMC_MOVTYP.LIN;//类型
         posval.dX:=Data.StartPosX;
         posval.dy:=Data.StartPosY;
         Proval.piStartPos:=posval;
         posval.dX:=Data.DestPosX;
         posval.dy:=Data.DestPosY;
         Proval.piDestPos:=posval;
         proval.dvel:=Data.Dvel;//速度
         Proval.dVelEnd:=Data.DEndvel;//结束速度
         Proval.dAccel:=Data.dAccel;//加速度
         proval.dDecel:=Data.dDecel;//减速度
                 //数据刷入
                 SMC_CalcLengthGeo(pg:=ADR(Proval));
         SMC_AppendObj(poq:=ADR(LINE_Interpolation1) , pgi:=ADR(Proval));
                2:
                 Posval.wAuxData:=3;//轴选os
         Proval.iObjNo:=1;//MASK;
         Proval.iSourceLine_No:=0;//G代码行号
         proval.diSentenceNo:=0;
         Proval.iMoveType:=SMC_MOVTYP.CLW;//类型
         posval.dX:=Data.StartPosX;
         posval.dy:=Data.StartPosY;
         Proval.piStartPos:=posval;
         posval.dX:=Data.DestPosX;
         posval.dy:=Data.DestPosY;
         Proval.piDestPos:=posval;
                 CriclePointThree(
            Enable:=TRUE ,
                         X1:=Data.StartPosX,
                         Y1:=Data.StartPosY ,
                         X2:=Data.ICentreCircle ,
                         Y2:=Data.JCentreCircle ,
                         X3:= Data.DestPosX ,
                         Y3:= Data.DestPosY,
                         Start:=ProgramNumber=2 ,
                         RX=> Proval.dP1 ,
                         RY=> Proval.dP2 ,
                         Radius=> Proval.dP3 ,
                         Done=> );
                 CW_CCW_Circle(
               Seclect:= 1,
               ICentreCircle:= Proval.dP1 ,
               JCentreCircle:= Proval.dP2 ,
               AxisX_fActPosition:= Data.StartPosX,
               AxisY_fActPosition:= Data.StartPosY,
               XEndPosition:=Data.DestPosX ,
               YEndPosition:=Data.DestPosY ,
               DT1=>roval.dT1 ,
               DT2=>roval.dT2 );        
                   proval.dvel:=Data.Dvel;//速度
           Proval.dVelEnd:=Data.DEndvel;//结束速度
           Proval.dAccel:=Data.dAccel;//加速度
           proval.dDecel:=Data.dDecel;//减速度
                 //数据刷入
                 SMC_CalcLengthGeo(pg:=ADR(Proval));
         SMC_AppendObj(poq:=ADR(LINE_Interpolation1) , pgi:=ADR(Proval));
                3:
                 Posval.wAuxData:=3;//轴选os
         Proval.iObjNo:=1;//MASK;
         Proval.iSourceLine_No:=0;//G代码行号
         proval.diSentenceNo:=0;
         Proval.iMoveType:=SMC_MOVTYP.CCLW;//类型
         posval.dX:=Data.StartPosX;
         posval.dy:=Data.StartPosY;
         Proval.piStartPos:=posval;
         posval.dX:=Data.DestPosX;
         posval.dy:=Data.DestPosY;
         Proval.piDestPos:=posval;
                 CriclePointThree(
            Enable:=TRUE ,
                         X1:=Data.StartPosX,
                         Y1:=Data.StartPosY ,
                         X2:=Data.ICentreCircle ,
                         Y2:=Data.JCentreCircle ,
                         X3:= Data.DestPosX ,
                         Y3:= Data.DestPosY,
                         Start:=ProgramNumber=3 ,
                         RX=> Proval.dP1 ,
                         RY=> Proval.dP2 ,
                         Radius=> Proval.dP3 ,
                         Done=>  );
                 CW_CCW_Circle(
               Seclect:= 2,
               ICentreCircle:= Proval.dP1 ,
               JCentreCircle:= Proval.dP2 ,
               AxisX_fActPosition:= Data.StartPosX,
               AxisY_fActPosition:= Data.StartPosY,
               XEndPosition:=Data.DestPosX ,
               YEndPosition:=Data.DestPosY ,
               DT1=>roval.dT1 ,
               DT2=>roval.dT2 );        
                   proval.dvel:=Data.Dvel;//速度
           Proval.dVelEnd:=Data.DEndvel;//结束速度
           Proval.dAccel:=Data.dAccel;//加速度
           proval.dDecel:=Data.dDecel;//减速度
                 //数据刷入
                 SMC_CalcLengthGeo(pg:=ADR(Proval));
         SMC_AppendObj(poq:=ADR(LINE_Interpolation1) , pgi:=ADR(Proval));
//          4:         
//                  Posval.wAuxData:=3;//轴选os
//          Proval.iObjNo:=1;//MASK;
//          Proval.iSourceLine_No:=0;//G代码行号
//          proval.diSentenceNo:=0;
//          Proval.iMoveType:=SMC_MOVTYP.MCOMMAND;//类型
//          posval.dX:=Data.StartPosX;
//          posval.dy:=Data.StartPosY;
//          Proval.piStartPos:=posval;
//          posval.dX:=Data.StartPosX;
//          posval.dy:=Data.StartPosY;
//          Proval.piDestPos:=posval;
//                  proval.iHelpID[0]:=Data.iHelpID;
//          proval.dvel:=Data.Dvel;//速度
//          Proval.dVelEnd:=Data.DEndvel;//结束速度
//          Proval.dAccel:=Data.dAccel;//加速度
//          proval.dDecel:=Data.dDecel;//减速度
//                  //数据刷入
//                  SMC_CalcLengthGeo(pg:=ADR(Proval));
//          SMC_AppendObj(poq:=ADR(LINE_Interpolation1) , pgi:=ADR(Proval));
                END_CASE ;
                   LINE_Interpolation1.bEndOfList:=TRUE;
           InitIndex:=2;        
    2:        
            PathOptimize:=TRUE;
             ProgramInit:=FALSE;
             InitIndex:=3;        
            END_CASE
END_IF
SMC_SmoothPath_0(
        bExecute:=PathOptimize ,
        bAbort:= ,
        bAppend:= ,
        poqDataIn:= ADR(LINE_Interpolation1 ),
        dEdgeDistance:=,
        dAngleTol:= ,
        nSizeOutQueue:=SIZEOF(LINE_Interpolation1_1) ,
        pbyBufferOutQueue:=ADR(LINE_Interpolation1_1),
        eMode:= ,
        bSymmetricalDistances:= ,
        bImprovedSymmetricCuts:= ,
        eAddAxMode:= ,
        dMinimumCurvatureRadius:= ,
        bCheckCurvature:= ,
        dRelativeCurvatureTol:= ,
        bCheckAddAxVelJump:= ,
        dMaxAddAxVelDifference:= ,
        bDone=> ,
        bBusy=> ,
        bError=> ,
        wErrorID=> ,
        poqDataOut=> ,
        udiStopsDueToCurvatureRadius=> );
        
        SMC_CheckVelocities_0(
                bExecute:= SMC_SmoothPath_0.bDone,
                bAbort:= ,
                poqDataIn:=SMC_SmoothPath_0.poqDataOut ,
                dAngleTol:=,
                bCheckAddAxVelJump:= ,
                dMaxAddAxVelDifference:= ,
                bBusy=> ,
                bError=> ,
                wErrorID=> ,
                poqDataOut=> );
        IF SMC_CheckVelocities_0.bBusy THEN
        PathOptimize:=FALSE;
        bExecute:=TRUE;
        InitIndex:=0;
        END_IF        
        
                SMC_Interpolator_0(
                bExecute:=bExecute,
                poqDataIn:=SMC_CheckVelocities_0.poqDataOut,
                bSlow_Stop:= ,
                bEmergency_Stop:=SMC_ControlAxisByPos_X.bError OR SMC_ControlAxisByPos_X.bStopIpo OR SMC_ControlAxisByPos_Y.bError OR SMC_ControlAxisByPos_Y.bStopIpo,
                bWaitAtNextStop:= ,
                dOverride:= ,
                iVelMode:= ,
                dwIpoTime:=4000,
                dLastWayPos:= ,
                bAbort:=,
                bSingleStep:= ,
                bAcknM:=,
                bQuick_Stop:= ,
                dQuickDeceleration:= ,
                dJerkMax:= ,
                dQuickStopJerk:= ,
                bDone=>,
                bBusy=>,
                bError=>,
                wErrorID=>,
                piSetPosition=> ,
                iStatus=> ,
                bWorking=> ,
                iActObjectSourceNo=> ,
                dVel=> ,
                vecActTangent=> ,
                iLastSwitch=> ,
                dwSwitches=> ,
                dWayPos=> ,
                wM=>M_OUT );
        IF SMC_Interpolator_0.bBusy THEN
         bExecute:=FALSE;

        END_IF
        
        SMC_TRAFO_Gantry2_0(
                pi:= SMC_Interpolator_0.piSetPosition
                );
        SMC_ControlAxisByPos_X(
                Axis:= AxisX,
                iStatus:= SMC_Interpolator_0.iStatus,
                bAvoidGaps:=TRUE,
                bEnable:= SMC_Interpolator_0.bWorking,
                fSetPosition:= SMC_TRAFO_Gantry2_0.dx,
                fGapVelocity:= 10,
                fGapAcceleration:= 10,
                fGapDeceleration:= 10 );        
        SMC_ControlAxisByPos_Y(
                Axis:= AxisY,
                iStatus:= SMC_Interpolator_0.iStatus,
                bAvoidGaps:=TRUE,
                bEnable:= SMC_Interpolator_0.bWorking,
                fSetPosition:= SMC_TRAFO_Gantry2_0.dY,
                fGapVelocity:= 10,
                fGapAcceleration:= 10,
                fGapDeceleration:= 10 );               
     SMC_TRAFOF_Gantry2D(
           DriveX:=AxisX,
           DriveY:=AxisY,
           dOffsetX:= ,
           dOffsetY:= ,
           minX:=0,
           maxX:=100,
           minY:=0,
           maxY:=100,
           dx=> ,
           dy=> ,
           dnx=> ,
           dny=> ,
           ratio=> ,
           dnOffsetX=> ,
           dnOffsetY=> );        
        


免责声明:内容为网友自行发布或者来自互联网资源或者参考文献,如果侵犯了您的权益,请联系站长 1304546267@qq.com,我们会及时删除侵权内容,感谢您的理解!
回复

使用道具 举报

ChatGPT机器人86 2022-12-20 08:03:48 | 显示全部楼层
既然有圆弧插补功能块,这个源码有什么用?
回复

使用道具 举报

惊心幻 2022-12-20 16:04:39 | 显示全部楼层
可以定义CNC任意形态
回复

使用道具 举报

关键词:CNC自定义路径代码、FUNCTION_BLOCK、VAR_INPUT、VAR_OUTPUT、VAR_IN_OUT、PathOptimize、bExecute、Proval、LINE_Interpolation1、Posval、InitIndex、SMC_SmoothPath、SMC_CheckVelocities、SMC_Interpolator、SMC_ControlAxisByPos、r1、SMC_TRAFO_Gantry2、SMC_TRAFOF_Gantry2D、ProgramIndex、ProgramInit、M_Test、ProgramNumber、Data、StartPosX、StartPosY、DestPosX、DestPosY、Dvel、DEndvel、dAccel、dDecel、SMC_MOVTYP、SMC_SetQueueCapacity、SMC_AppendObj、SMC_CalcLengthGeo

文章大纲:
1. 简介
   - CNC自定义路径代码的作用和重要性
   - FUNCTION_BLOCK和VAR声明的作用

2. 变量说明
   - VAR_INPUT、VAR_OUTPUT、VAR_IN_OUT的作用和用法
   - PathOptimize、bExecute、InitIndex等变量的作用和用法

3. 路径优化与启动命令
   - PathOptimize变量的作用和用法
   - bExecute变量的作用和用法
   - 启动命令的执行流程和影响因素

4. 路径插补
   - Proval、LINE_Interpolation1和Posval的作用和用法
   - InitIndex和ProgramIndex的作用和用法
   - SMC_SmoothPath、SMC_CheckVelocities、SMC_Interpolator的使用方法

5. 轴控制与坐标变换
   - SMC_ControlAxisByPos的作用和用法
   - SMC_TRAFO_Gantry2和SMC_TRAFOF_Gantry2D的作用和用法

6. 自定义路径代码示例
   - 通过示例代码说明如何使用CNC自定义路径代码编写程序
   - 示例中涉及到的关键变量和参数的解释和用法

7. 总结
   - CNC自定义路径代码的优点和应用领域
   - 学习和掌握CNC自定义路径代码的重要性和价值
                                                                                                                                                                                                                                                 以上内容来自  AI机器人,如需继续对话,则在此回答下“点击回复” 或者 在提问时  “@机器人”!禁止 "黄赌毒及政治敏感",违者封号,严重者 提交 网警公安部门。本站不对内容真实性负责,AI机器人有时候会乱说一通……
回复

使用道具 举报

data/attachment/temp/202212/30/133743h8cd9z14sjs84kaz.png_thumb.jpg 共31章节616课时

【全科班】汇川中型PLC从0到1就业班(Codesys系统化全科班课程-600节+)-汇川PLC教程

朱子文

咨询客服
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/VMdEZiqp3BMkbBIlMRRD.png 共9章节44课时

【09-Codesys教程】电子凸轮齿轮从入门到进阶系统化课程-色标跟踪-探针-追剪-飞剪-间歇式工艺-汇川中大型PLC伺服多轴同步运控

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240217/v39r666Z663eBBGKErRm.png 共30章节630课时

【全科班】汇川技术H5U从0到1就业班(系统化全科班-600节+)

张汉清

咨询客服
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240207/HlL5SWHry9lPVdqC8i59.png 共5章节63课时

【01-Codesys教程】ST文本从0到1,从入门到进阶-汇川中大型PLC教程

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240227/AMo32PcbJeIMJBT3m8Pu.png 共4章节36课时

03 中大型ST文本结合仿真软件小项目 31节-气缸功能块封装-状态机编程思路-小设备框架

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Fu5pu34pPcTpu0La443P.png 共6章节52课时

【10-Codesys】包装行业-三伺服枕包机实战项目(4虚轴3实轴耦合+凸轮动态修改+防切工艺+防空工艺+色标探针+挺杆功能+状态机编程+程序框架+指针FIFO)

朱子文

¥ 899.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Su1ibr3I77yl78DLBR7D.png 共4章节29课时

【12-Codesys小课】中大型PLC-PID控制器算法从入门到进阶之液位控制系统

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/Cz3hqDmDD8qHfT3MDm4m.png 共3章节30课时

【05-Codesys教程】汇川中大型PLC单轴运动控制教程-汇川PLC教程

朱子文

¥ 399.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/gXpEpJ8Qb78eD5lDqlnQ.png 共3章节25课时

【06-Codesys教程】汇川中大型PLC运动控制进阶篇(多轴PTP)-编程框架与编程模板实操

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/e39s63ppg54Q2s5H33H9.png 共3章节24课时

【08-codesys教程】汇川中大型codesys教程-多轴运控扩展篇经验分享小知识分享

朱子文

¥ 299.00
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

data/attachment/temp/202212/30/133743h8cd9z14sjs84kaz.png_thumb.jpg 共31章节616课时

【全科班】汇川中型PLC从0到1就业班(Codesys系统化全科班课程-600节+)-汇川PLC教程

朱子文

咨询客服
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/VMdEZiqp3BMkbBIlMRRD.png 共9章节44课时

【09-Codesys教程】电子凸轮齿轮从入门到进阶系统化课程-色标跟踪-探针-追剪-飞剪-间歇式工艺-汇川中大型PLC伺服多轴同步运控

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240217/v39r666Z663eBBGKErRm.png 共30章节630课时

【全科班】汇川技术H5U从0到1就业班(系统化全科班-600节+)

张汉清

咨询客服
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240207/HlL5SWHry9lPVdqC8i59.png 共5章节63课时

【01-Codesys教程】ST文本从0到1,从入门到进阶-汇川中大型PLC教程

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240227/AMo32PcbJeIMJBT3m8Pu.png 共4章节36课时

03 中大型ST文本结合仿真软件小项目 31节-气缸功能块封装-状态机编程思路-小设备框架

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Fu5pu34pPcTpu0La443P.png 共6章节52课时

【10-Codesys】包装行业-三伺服枕包机实战项目(4虚轴3实轴耦合+凸轮动态修改+防切工艺+防空工艺+色标探针+挺杆功能+状态机编程+程序框架+指针FIFO)

朱子文

¥ 899.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/Su1ibr3I77yl78DLBR7D.png 共4章节29课时

【12-Codesys小课】中大型PLC-PID控制器算法从入门到进阶之液位控制系统

朱子文

¥ 699.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/Cz3hqDmDD8qHfT3MDm4m.png 共3章节30课时

【05-Codesys教程】汇川中大型PLC单轴运动控制教程-汇川PLC教程

朱子文

¥ 399.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20230603/gXpEpJ8Qb78eD5lDqlnQ.png 共3章节25课时

【06-Codesys教程】汇川中大型PLC运动控制进阶篇(多轴PTP)-编程框架与编程模板实操

朱子文

¥ 499.00
https://shicaopai-video-files.oss-cn-hangzhou.aliyuncs.com/keke_video_base/image/20240206/e39s63ppg54Q2s5H33H9.png 共3章节24课时

【08-codesys教程】汇川中大型codesys教程-多轴运控扩展篇经验分享小知识分享

朱子文

¥ 299.00

到"π³ 实操派",学PLC就是快!汇川PLC及Codesys培训

项目实战 手把手教学 微信&电话 15850116008
超600节系统化课程,汇川优秀自动化讲师亲授!学一门Codesys,玩800家PLC仅剩少量名额
点击免费试听

到实操派,学PLC就是快!

扫码领取工控文库VIP

钻石VIP先到先得

服务电话 & 微信:9:00-22:00

15850116008

苏州实操派科技有限公司

公司地址:江苏省苏州市吴中区越溪街道天鹅荡路5号31B13

Copyright © 苏州实操派科技有限公司 2022 到实操派,学PLC就是快!工业自动化业务培训适用人群:成人 ( 苏ICP备2022021576号-3 )

公司地址:江苏省苏州市吴中区越溪街道天鹅荡路5号31B13

返回顶部