<style id="7i3y3"></style>

      <sub id="7i3y3"><i id="7i3y3"></i></sub>

        午夜精品一区二区三区成人,中文字幕av一区二区,亚洲AVAV天堂AV在线网阿V,肥臀浪妇太爽了快点再快点,国产网友愉拍精品视频手机,国产精品无码a∨麻豆,久久中文字幕一区二区,a级国产乱理伦片在线观看al
        首頁 新聞 工控搜 論壇 廠商論壇 產品 方案 廠商 人才 文摘 下載 展覽
        中華工控網首頁
          P L C | 變頻器與傳動 | 傳感器 | 現場檢測儀表 | 工控軟件 | 人機界面 | 運動控制
          D C S | 工業以太網 | 現場總線 | 顯示調節儀表 | 數據采集 | 數傳測控 | 工業安全
          電 源 | 嵌入式系統 | PC based | 機柜箱體殼體 | 低壓電器 | 機器視覺
        一個DMC3000控制卡類的完全源代碼
        深圳市雷賽智能控制股份有限公司
        收藏本文     查看收藏
        共四部分(VC++6.0)
        一、 tag_CARD.h文件源代碼
        # ifndef ___CONTROL_CARD_H___
        # define ___CONTROL_CARD_H___

        # define MAX_AXIS 4
        # define XCH 0
        # define YCH 1
        # define ZCH 2
        # define UCH 3

        # define NO_CARD 0
        # define DMC1000 1
        # define DMC2000 2
        # define DMC3000 3
        # define DMC1408 4
        # define DMC5000 5

        # define USERCARD //
        是否選用

        struct tag_CARC//
        圓弧結構
        {
        tag_CARC();
        tag_CARC( double ox, double oy, double ex, double ey, int dir );
        double ox,oy;
        double ex,ey;
        int dir;
        };


        struct tag_SPEED//
        速度結構
        {
        tag_SPEED( double start=5, double speed=10, double accel=0.1 );
        //, double decel, double scc );

        double start;
        double speed;
        double accel;
        // double decel;
        // double scc;
        };

        //
        控制卡基類

        class CCtrlCard
        {
        public:
        CCtrlCard();
        virtual ~CCtrlCard();

        int m_nType;
        mutable int ORGIN;
        mutable int LIMIT_A, LIMIT_B;

        public:
        //
        單位計算
        double SetUP( int nAxis, double fMM, long nPulse, double fMax );//
        設定脈沖當量
        double P2M( int nAxis, long nPulse ); //
        脈沖轉毫米
        long M2P( int nAxis, double fMM ); //
        毫米轉脈沖
        int GetOut( int nIO );
        static double SoftLimit( double fCur, int dir, double fMin, double fMax );

        protected:
        long m_nOutStatus;//
        保存輸出狀態

        struct tag_AXIS{//
        單軸信息
        double fUnitPM; //
        脈沖當量
        long nRP; //
        每轉脈沖數
        double fMaxLen; //
        有效行程范圍
        }m_axis[MAX_AXIS];
        };


        # endif



        二、 tag_CARD.CPP文件源代碼
        # include "stdafx.h"
        # include "tag_card.h"


        tag_CARC::tag_CARC():ox(0),oy(0),ex(0),ey(0),dir(0)
        {
        }

        tag_CARC::tag_CARC( double ox, double oy, double ex, double ey, int dir ):
        ox(ox),oy(oy),ex(ex),ey(ey),dir(dir)
        {
        }


        tag_SPEED::tag_SPEED( double start, double speed, double accel ):
        //, double decel, double scc ):
        start(start),
        speed(speed),
        accel(accel)
        // decel(decel),
        //scc(scc)
        {
        }


        CCtrlCard::CCtrlCard():m_nType(NO_CARD),
        ORGIN(1<<9),
        LIMIT_A(1<<2),
        LIMIT_B(1<<3)
        {

        for( int i(0); i
        {
        m_axis[i].nRP = 3200;
        m_axis[i].fUnitPM = m_axis[i].nRP/5;

        m_axis[i].fMaxLen = 500;
        }
        m_nOutStatus = 0x00000000;
        }

        CCtrlCard::~CCtrlCard()
        {

        }


        int CCtrlCard::GetOut( int nIO )
        {
        static int a;
        a = 1<<(nIO-1);
        a &= m_nOutStatus;
        return a!=0;
        }

        double CCtrlCard::SoftLimit( double fCur, int dir, double fMin, double fMax )
        {
        if( dir < 0 )
        return fMin-fCur;
        else
        return fMax-fCur;
        }

        //
        單位計算 setunitpulse
        double CCtrlCard::SetUP( int nAxis, double fMM, long nPulse, double fMax )//
        設定脈沖當量
        {
        if( fMM < 0.0001 ) fMM = 0.0001;
        if( nPulse == 0 )
        {
        m_axis[ nAxis ].nRP = 360;
        m_axis[ nAxis ].fUnitPM = fMM;
        }
        else{
        if( nPulse < 20 ) nPulse = 20;
        m_axis[ nAxis ].nRP = nPulse;
        m_axis[ nAxis ].fUnitPM = double(nPulse)/fMM;
        }
        m_axis[ nAxis ].fMaxLen = fMax;

        return m_axis[ nAxis ].fUnitPM;
        }
        double CCtrlCard::P2M( int nAxis, long nPulse ) //
        脈沖轉毫米
        {
        return double(nPulse) / m_axis[ nAxis ].fUnitPM;
        }
        long CCtrlCard::M2P( int nAxis, double fMM ) //
        毫米轉脈沖
        {
        return long( fMM * m_axis[ nAxis ].fUnitPM );
        }


        三、 TD3000.h文件源代碼
        # ifndef ___CONTROL_DMC3000_HEAD___
        # define ___CONTROL_DMC3000_HEAD___


        # include "tag_card.h"

        class CD3000: public CCtrlCard
        {
        public:
        CD3000();
        ~CD3000();

        // init card
        int InitBoard( int nCardType );


        //
        驅動函數
        int MoveMM( short nAxis, double fMM, const tag_SPEED &speed );//
        單軸運行
        int MoveM2( short nAxis1, short nAxis2, double pos1, double pos2,//
        兩軸運行
        const tag_SPEED &speed, BOOL bInp = true/*
        聯動或插補*/ );
        int MoveM3( short nAxis1, short nAxis2, short nAxis3,//
        三軸驅動
        double pos1, double pos2, double pos3,
        const tag_SPEED &speed, BOOL bInp = true );
        int MoveES( short nAxises, short *pAxis, double *pPos,//
        多軸驅動
        const tag_SPEED &speed, BOOL bInp = true );
        int Arc( short nAxis1, short nAxis2,//
        圓弧插補
        const tag_CARC &arc, const tag_SPEED &speed,
        double dt = 0.0 );
        //
        位置處理
        double SetPosition( int nAxis, double fMM, BOOL bCmd = TRUE );
        double GetPosition( int nAxis, BOOL bCmd = TRUE );

        //
        停止
        int Stop( int nAxis, double fTime );

        //
        是否在運動
        int IsRunning( int nAxis = -1 );
        //
        取得指定軸狀態
        int GetAxisStatus( int nAxis );
        //
        返回當前速度
        double GetSpeed( int nAxis );

        //
        數字IO函數
        int WriteBit( int nIO, int nStatus );
        int ReadBit( int nIO );

        };

        # endif

        四、 TD3000.CPP文件源代碼
        # include "stdafx.h"
        # include "dmc3000.h"
        # include "td3000.h"
        extern BOOL bSCavse;

        CD3000::CD3000()
        {
        }
        CD3000::~CD3000()
        {
        d3000_board_close();
        }

        int CD3000::InitBoard( int nCardType )
        {
        m_nType = nCardType;
        if( d3000_board_init() <= 0 ){
        m_nType = -1;
        return m_nType;
        }
        for( int i(0); i<4; i++)
        {
        d3000_set_pls_outmode( i, 0 );
        d3000_set_home( i, 0, 1 );
        }
        ORGIN = (1<<9);
        LIMIT_A = (1<<2);
        LIMIT_B = (1<<3);
        return m_nType;
        }

        //
        驅動函數
        int CD3000::MoveMM( short nAxis, double fMM, const tag_SPEED &speed )//
        單軸運行
        {

        // if( speed.scc < 0.0001 )
        if( bSCavse != TRUE )
        {
        d3000_start_t_move( nAxis, M2P( nAxis, fMM ),
        M2P(nAxis, speed.start),
        M2P(nAxis, speed.speed),
        speed.accel,
        speed.accel);
        }
        else{
        d3000_start_s_move( nAxis, M2P( nAxis, fMM ),
        M2P(nAxis, speed.start),
        M2P(nAxis, speed.speed),
        speed.accel,
        speed.accel/2.0);
        }
        return nAxis;

        }
        int CD3000::MoveM2( short nAxis1, short nAxis2, double pos1, double pos2,//
        兩軸運行
        const tag_SPEED &speed, BOOL bInp /*
        聯動或插補*/ )
        {
        short axisArray[]={ nAxis1, nAxis2, 2 };
        double posiArray[]={ pos1, pos2, 0 };
        return MoveES( 2, axisArray, posiArray, speed, bInp );
        }
        int CD3000::MoveM3( short nAxis1, short nAxis2, short nAxis3,//
        三軸驅動
        double pos1, double pos2, double pos3,
        const tag_SPEED &speed, BOOL bInp )
        {
        short axisArray[]={ nAxis1, nAxis2, nAxis3 };
        double posiArray[]={ pos1, pos2, pos3 };
        return MoveES( 3, axisArray, posiArray, speed, bInp );
        }
        int CD3000::MoveES( short nAxises, short *pAxis, double *pPos,//
        多軸驅動
        const tag_SPEED &speed, BOOL bInp )
        {
        // if( nAxises > 3 || nAxises <2) return 0;
        // bInp = true;

        if( bInp ){//
        插補
        short *axisArray = pAxis;
        double *pos = pPos;
        double accel = speed.accel;
        double decel = speed.accel;
        //double sc = speed.scc;
        if( decel < 0.001 ) decel = 0.001;
        if( accel <0.001 ) {
        accel = 0.002;
        // sc = 0.001;
        }

        // if( 1 ){
        if( bSCavse != TRUE ){

        nAxises == 2 ?
        d3000_start_ta_line2( axisArray,
        M2P(axisArray[0], pos[0] ),
        M2P(axisArray[1], pos[1] ),
        M2P(axisArray[0], speed.start),
        M2P(axisArray[0], speed.speed),
        accel,
        decel)://T
        軸插補
        d3000_start_ta_line3( axisArray,
        M2P(axisArray[0], pos[0] ),
        M2P(axisArray[1], pos[1] ),
        M2P(axisArray[2], pos[2] ),
        M2P(axisArray[0], speed.start),
        M2P(axisArray[0], speed.speed),
        accel,
        decel);//T
        三軸插補
        }
        else{ //S
        形插補
        nAxises == 2 ?
        d3000_start_sa_line2( axisArray,
        M2P(axisArray[0], pos[0] ),
        M2P(axisArray[1], pos[1] ),
        M2P(axisArray[0], speed.start),
        M2P(axisArray[0], speed.speed),
        accel,
        decel)://S
        軸插補
        d3000_start_sa_line3( axisArray,
        M2P(axisArray[0], pos[0] ),
        M2P(axisArray[1], pos[1] ),
        M2P(axisArray[2], pos[2] ),
        M2P(axisArray[0], speed.start),
        M2P(axisArray[0], speed.speed),
        accel,
        accel/2.0 );//S
        莆三軸插補
        }
        return nAxises;
        }

        for(int i(0); i
        MoveMM( pAxis[i], pPos[i]-GetPosition(pAxis[i],true), speed );
        return nAxises;
        }
        int CD3000::Arc( short nAxis1, short nAxis2,//
        圓弧插補
        const tag_CARC &arc, const tag_SPEED &speed,
        double dt)
        {
        /*
        short axisArray[]={ nAxis2, nAxis1 };
        d3000_start_t_arc( axisArray,
        M2P(nAxis2, arc.oy),
        M2P(nAxis1, arc.ox),
        M2P(nAxis2, arc.ey),
        M2P(nAxis1, arc.ex),
        arc.dir==0?1:0,
        M2P(nAxis1, speed.start),
        M2P(nAxis1, speed.speed),
        speed.accel,
        speed.decel);
        /*/
        short axisArray[]={ nAxis1, nAxis2 };
        d3000_start_t_arc( axisArray,
        M2P(nAxis1, arc.ox),
        M2P(nAxis2, arc.oy),
        M2P(nAxis1, arc.ex),
        M2P(nAxis2, arc.ey),
        arc.dir,
        M2P(nAxis1, speed.start),
        M2P(nAxis1, speed.speed),
        speed.accel,
        speed.accel);

        //*/
        return 1;
        }

        //
        位置處理
        double CD3000::SetPosition( int nAxis, double fMM, BOOL bCmd )
        {
        long nPulse = M2P( nAxis, fMM );
        double fPos = GetPosition( nAxis, bCmd );


        bCmd == TRUE ?
        d3000_set_command_pos( nAxis, nPulse ):
        d3000_set_encoder_pos( nAxis, nPulse );

        return fPos;
        }
        double CD3000::GetPosition( int nAxis, BOOL bCmd )
        {
        static long nPulse = 0;

        nPulse = (bCmd == TRUE) ?
        d3000_get_command_pos( nAxis ):
        d3000_get_encoder_pos( nAxis );

        return P2M( nAxis, nPulse );
        }

        //
        停止
        int CD3000::Stop( int nAxis, double fTime )
        {

        d3000_decel_stop( nAxis, fTime );
        return nAxis;

        }
        //
        是否在運動
        int CD3000::IsRunning( int nAxis )
        {

        if( nAxis != -1 ){
        return d3000_check_done( nAxis ) == 1;
        }
        return d3000_check_done( XCH ) == 1
        || d3000_check_done( YCH ) == 1
        || d3000_check_done( ZCH ) == 1;

        }

        int CD3000::GetAxisStatus( int nAxis )
        {

        static int status(0);
        status = d3000_get_axis_status( nAxis );
        if( !(status&ORGIN) ) status |= ORGIN;
        else status &=~ORGIN;
        return status;

        }

        double CD3000::GetSpeed( int nAxis )
        {
        return P2M( nAxis, d3000_get_speed( nAxis ) );
        }
        int CD3000::WriteBit( int nIO, int nStatus )
        {
        if( nStatus ){
        m_nOutStatus |= (1<
        }
        else{
        m_nOutStatus &= (~(1<
        }
        # ifdef USERCARD

        d3000_out_bit( nIO, nStatus );

        # endif
        return (int)m_nOutStatus;
        }

        int CD3000::ReadBit( int nIO )
        {//
        入口參數io的范圍: 1 - n
        # ifdef USERCARD

        return d3000_in_bit( nIO );

        # endif
        return nIO;
        }

         

        狀 態: 離線

        公司簡介
        產品目錄

        公司名稱: 深圳市雷賽智能控制股份有限公司
        聯 系 人: 梁邦敏
        電  話: 755-26401178
        傳  真:
        地  址: 深圳市南山區登良路天安南油工業區2棟3樓
        郵  編: 518000
        主  頁:
         
        該廠商相關技術文摘:
        CNC解釋庫調用接口詳述
        DMC1000控制卡不能響應系統消息
        DMC2000脈沖速度初始化故障
        DMC2000運動控制卡常見軟件問題的解決方案
        DMC2200驅動程序特殊安裝方法
        DMC3000控制卡,與CNC之G代碼的邦定關系
        DMC3000控制卡的多任務編程
        多類型運動控制卡編程方法探討
        多線程與控制卡編程
        發現步進電機定位不準怎么辦
        過程控制編程之簡要探討
        控制卡應用編程技巧幾招(2)
        更多文摘...
        立即發送詢問信息在線聯系該技術文摘廠商:
        用戶名: 密碼: 免費注冊為中華工控網會員
        請留下您的有效聯系方式,以方便我們及時與您聯絡

        關于我們 | 聯系我們 | 廣告服務 | 本站動態 | 友情鏈接 | 法律聲明 | 不良信息舉報
        工控網客服熱線:0755-86369299
        版權所有 中華工控網 Copyright©2022 Gkong.com, All Rights Reserved

        主站蜘蛛池模板: 国产女人喷潮视频免费| 国产av无码专区亚洲awww| 国产人成精品一区二区三| 久久人人爽人人爽人人av| 无码精油按摩潮喷在线播放| 国产中文字幕精品视频| 国产国产午夜福利视频| 99网友自拍视频在线| 中文日韩在线一区二区| 亚洲色无码专区在线观看精品| 亚洲av无码成人精品区一区| 一区二区欧美日韩高清免费| 成人国产精品三上悠亚久久| 老司机精品影院一区二区三区| 国产国拍精品av在线观看| 亚洲欧洲日产国码AV天堂偷窥| 精品亚洲成a人在线看片| 精品乱人码一区二区二区| 欧美18videosex性欧美tube1080 | 久久国产精品偷任你爽任你| 亚洲激情国产一区二区三区| 亚洲18禁一区二区三区| 亚洲精品国产精品不乱码| 国产成人一区二区三区在线| 欧美色丁香| 中文乱码字幕在线中文乱码| 日韩在线播放中文字幕| 午夜大片免费男女爽爽影院| 亚洲色欲色欲在线大片| 亚洲成人av在线资源| 成人影院免费观看在线播放视频| 亚洲综合成人一区二区三区| 漂亮的保姆hd完整版免费韩国| 国产伦精品一区二区三区| 精品综合久久久久久97| 熟女精品视频一区二区三区| 伊人久久大香线蕉综合影院| 日韩精品亚洲精品第一页| 欧美一区二区三区啪啪| 美腿丝袜无男人的天堂| 亚洲人成网站77777在线观看|