999国内精品永久免费视频,色偷偷9999www,亚洲国产成人爱av在线播放,6080亚洲人久久精品,欧美超高清xxxhd

首頁 新聞 工控搜 論壇 廠商論壇 產(chǎn)品 方案 廠商 人才 文摘 下載 展覽
中華工控網(wǎng)首頁
  P L C | 變頻器與傳動 | 傳感器 | 現(xiàn)場檢測儀表 | 工控軟件 | 人機界面 | 運動控制
  D C S | 工業(yè)以太網(wǎng) | 現(xiàn)場總線 | 顯示調(diào)節(jié)儀表 | 數(shù)據(jù)采集 | 數(shù)傳測控 | 工業(yè)安全
  電 源 | 嵌入式系統(tǒng) | 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//
圓弧結(jié)構(gòu)
{
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//
速度結(jié)構(gòu)
{
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 ); //
脈沖轉(zhuǎn)毫米
long M2P( int nAxis, double fMM ); //
毫米轉(zhuǎn)脈沖
int GetOut( int nIO );
static double SoftLimit( double fCur, int dir, double fMin, double fMax );

protected:
long m_nOutStatus;//
保存輸出狀態(tài)

struct tag_AXIS{//
單軸信息
double fUnitPM; //
脈沖當量
long nRP; //
每轉(zhuǎn)脈沖數(shù)
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 ) //
脈沖轉(zhuǎn)毫米
{
return double(nPulse) / m_axis[ nAxis ].fUnitPM;
}
long CCtrlCard::M2P( int nAxis, double fMM ) //
毫米轉(zhuǎn)脈沖
{
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 );


//
驅(qū)動函數(shù)
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/*
聯(lián)動或插補*/ );
int MoveM3( short nAxis1, short nAxis2, short nAxis3,//
三軸驅(qū)動
double pos1, double pos2, double pos3,
const tag_SPEED &speed, BOOL bInp = true );
int MoveES( short nAxises, short *pAxis, double *pPos,//
多軸驅(qū)動
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 );
//
取得指定軸狀態(tài)
int GetAxisStatus( int nAxis );
//
返回當前速度
double GetSpeed( int nAxis );

//
數(shù)字IO函數(shù)
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;
}

//
驅(qū)動函數(shù)
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 /*
聯(lián)動或插補*/ )
{
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,//
三軸驅(qū)動
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,//
多軸驅(qū)動
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 )
{//
入口參數(shù)io的范圍: 1 - n
# ifdef USERCARD

return d3000_in_bit( nIO );

# endif
return nIO;
}

 

狀 態(tài): 離線

公司簡介
產(chǎn)品目錄

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

關(guān)于我們 | 聯(lián)系我們 | 廣告服務 | 本站動態(tài) | 友情鏈接 | 法律聲明 | 不良信息舉報
工控網(wǎng)客服熱線:0755-86369299
版權(quán)所有 中華工控網(wǎng) Copyright©2022 Gkong.com, All Rights Reserved