注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控博客苑 -- 运动控制系统 -- CNC解释库调用接口详述

中国工控网搜索:

钟天玉先生

     学历:大学本科
     职称:工程师
     年龄:42岁
       新闻信息(7/2)
       工作图片(0)
       技术论文(2/7)
       交流论坛(19/20)
       留言信箱(4)
       浏览人次:17531
       给我发消息
 我的新闻推荐 更多..
发表人:zhong2010 发表时间:2010/5/9 21:16:00

 

发表新论题

 本栏论题: CNC解释库调用接口详述  [10158]
    CNC解释库调用接口详述
   
   
    以下展示库函数接口的意义及相关示例编程的部分代码,关于CNC解释库的完整头文件DMCNC.H,用户可以咨询本公司,公司视情况会进行相应的处理。
    声明一点,本库暂支持C++语言。
   
    # define CW -1
    # define CCW 1
    //以上两个宏定义值,为圆弧的顺逆时走向
   
    struct D2POINT //二维点
    {
    double x,y;
    };
    二维点的结构,主要用于平面设备处理
   
    struct D3POINT: public D2POINT //三维点
    {
    double z;
    };
    三维点的结构,可用于浮点雕刻与点胶
   
    struct tag_ARC
    {
    int nType; //方向
   
    D2POINT ptStart; //起点
    D2POINT ptOrgin; //圆心
    D2POINT ptEnd; //终点
    };
    圆弧结构,适合本公司DMC3000控制卡对其坐标关系的定义,唯参数nType方向需要对应函数的0或1的逻辑判断,往后的例子会说明这一点的。
   
    struct tag_CMD //CNC指令结构
    {
    char cmd; //G,M,F,S等指令
    int nCode; //指令值
   
    int nAxisBit; //驱动轴号位(X,Y,Z,U,A)
   
    D3POINT ptStart; //坐标1
    D3POINT ptEnd; //坐标2
    D3POINT ptOrgin; //坐标3
   
    double fValue; //一个浮点保留接口
    };
    CNC指令结构,重点说明一下:
    cmd 可以是G,M,C,F,S等设备指令,若客户想增加其它指令,可通知本公司进行扩充即可。
    nCode 指令值,如G指令,可以有00,01,02,03,常表述为G00,G01,G02,G03
    nAxisBit 当前行的有效驱动轴,此变量的提取可由函数JP_GET_AXIS进行提取
    ptStart, ptEnd 分别为直线或圆弧的起点和终点
    ptOrgin 仅为圆弧的圆心
    fValue 专门为带有浮点值的指令保留,如C代码,可能有表示为 :C0.317
   
    以下展示一下,tag_CMD的一般用法操作(用以加工的):
    int CNC_MARK( tag_CMD &cmd, tag_CONTROL &ctrlItem )
    {//此函数不断接受到新的CNC指令
    //g_DmcCard为一个控制类的实例,如TD3000 g_DmcCard;
    //
    switch( cmd.cmd ){
    case ’G’:
    {// 以G代码为例,以下代码为对G代码的处理
    if( ctrlItem.nStatus != tag_CONTROL::Running )
    return ctrlItem.nStatus;
    while( ctrlItem.nStatus != tag_CONTROL::NoRun )
    {
    DoEvents();//此函数可参见我的相关文章
    if( ctrlItem.nStatus==tag_CONTROL::Pause ) continue;
    //处理暂停的代码
    if( g_DmcCard.IsRunning() != 1 ) break;
    }
    if( ctrlItem.nStatus == tag_CONTROL::Running )
    {
    ctrlItem.cmdCurrent = cmd;//保存当前执行的CNC指令
    return DoGCode( cmd, ctrlItem );
    //处理G代码函数(用户自定)
    }
    } break;
    case ’S’://其它代码处理
    case ’M’:
    break;
    }
    return ctrlItem.nStatus;
    }
   
    //处理G代码的函数
    int DoGCode( tag_CMD &cmd, tag_CONTROL &ctrlItem )
    {
    tag_PARA ¶ = g_Para;//一个参数对象,内容由用户决定,在此仅作为示例
   
    C3DPoint pt( para.pntWorkOrgin.x, para.pntWorkOrgin.y, para.fZLimit);
    //double fsafePos = para.fZLimit - para.fZUpSafe;
   
    switch( cmd.nCode ){
    case 0:
    {//G00指令
   
    short nAxis(cmd.nCode>>8),i(0);
    short axisArray[4];
    double pos[4];
    if( (nAxis&0x100) != 0 ){
    axisArray[i]=XCH;
    pos[i++] = cmd.ptStart.x+g_Para.pntWorkOrgin.x;
    }
    if( (nAxis&0x010) != 0 ){
    axisArray[i]=YCH;
    pos[i++] = cmd.ptStart.y+g_Para.pntWorkOrgin.y;
    }
    if( (nAxis&0x001) != 0 ){
    axisArray[i]=ZCH;
    pos[i++] = pt.z-cmd.ptStart.z ;
    }
   
    g_DmcCard.MoveES( i, axisArray, pos,
    g_Para.jumpSpeed,
    false );
    }
    break;
    case 1:
    {//G01指令
    g_DmcCard.MoveM3( XCH, YCH, ZCH,
    cmd.ptEnd.x+g_Para.pntWorkOrgin.x,
    cmd.ptEnd.y+g_Para.pntWorkOrgin.y,
    pt.z-cmd.ptEnd.z,
    g_Para.workSpeed,
    true );
    }
    break;
    case 2://顺圆弧,注意方向, tag_CARC是在控制卡类定义的结构
    //0为顺时,1为逆时
    g_DmcCard.Arc( XCH, YCH,
    tag_CARC(cmd.ptOrgin.x+g_Para.pntWorkOrgin.x,
    cmd.ptOrgin.y+g_Para.pntWorkOrgin.y,
    cmd.ptEnd.x+g_Para.pntWorkOrgin.x,
    cmd.ptEnd.y+g_Para.pntWorkOrgin.y,0),
    g_Para.workSpeed, 0.1 );
    break;
    case 3://逆圆弧
    g_DmcCard.Arc( XCH, YCH,
    tag_CARC(cmd.ptOrgin.x+g_Para.pntWorkOrgin.x,
    cmd.ptOrgin.y+g_Para.pntWorkOrgin.y,
    cmd.ptEnd.x+g_Para.pntWorkOrgin.x,
    cmd.ptEnd.y+g_Para.pntWorkOrgin.y,1),
    g_Para.workSpeed, 0.1 );
    break;
    default: break;
    }
    return ctrlItem.nStatus;
   
    }
   
    以上基本显示一个G代码处理过程,若要处理暂停/继续,也很简单,等介绍tag_CONTROL结构时,再举例说明。
    struct tag_FILEACTION
    {
    enum{ Inital, Over, Process };
   
    int nAction;
   
    int nFilePosition;//文件当前位置
    int<IMG SRC="/WF_SQL_XSRF.html">
 

以下是关于《CNC解释库调用接口详述》论题的回复(共3篇)

回复人:dalian33

 回复时间:2010/9/6 14:53:00

    调试过没有<IMG SRC="/WF_SQL_XSRF.html"><IMG SRC="/WF_SQL_XSRF.html"><IMG SRC="/WF_SQL_XSRF.html">

回复人:zgl01

 回复时间:2011/4/16 22:39:00

    调试过没有
   
   
   
    <IMG SRC="/WF_SQL_XSRF.html"><IMG SRC="/WF_SQL_XSRF.html"><IMG SRC="/WF_SQL_XSRF.html">

回复人:wly1984

 回复时间:2015/2/2 11:02:00

    好<IMG SRC="/WF_SQL_XSRF.html"><IMG SRC="/WF_SQL_XSRF.html"><IMG SRC="/WF_SQL_XSRF.html">

如果要回复本栏论题,请首先登陆网站

·如果你已经是中国工控网www.chinakong.com成员,请直接登录。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码
 
     相关技术论文:

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳