无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频

首頁 新聞 工控搜 論壇 廠商論壇 產品 方案 廠商 人才 文摘 下載 展覽
中華工控網首頁
  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

无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频
色爱av综合网| 亚洲字幕久久| 麻豆国产在线| 国产午夜精品一区二区三区欧美| 亚洲激情二区| 韩日一区二区| 久久国产麻豆精品| 国产精品大片免费观看| 福利一区在线| 欧美亚洲自偷自偷| 亚洲国产日韩欧美在线| 中文字幕在线免费观看视频| 日韩在线观看一区| 欧美精选视频一区二区| 日韩久久一区| 美女黄网久久| 亚洲综合丁香| 日韩综合小视频| 国产日韩欧美在线播放不卡| 97精品国产99久久久久久免费| 最新国产精品| 亚洲在线久久| 999视频精品| 久久九九国产| 日韩精品欧美成人高清一区二区| av中文资源在线资源免费观看| 欧美影院精品| 麻豆久久久久久| 精品女同一区二区三区在线观看| 国产精品午夜av| 亚洲三级网站| 欧美精品导航| 久久亚洲精精品中文字幕| 日本在线视频一区二区| 久久精品一区二区不卡| 欧美~级网站不卡| 色8久久久久| 亚洲v天堂v手机在线| 一区二区国产在线观看| 日韩精品91| 激情综合网站| 亚洲日本欧美| 99精品美女| 精品午夜视频| 国模精品一区| 亚洲小说欧美另类婷婷| 99在线|亚洲一区二区| 中文在线日韩| 六月丁香综合在线视频| 日韩中文在线播放| 黄色av日韩| 国产黄大片在线观看| 精品午夜视频| 亚洲激情国产| 成人午夜在线| 鲁鲁在线中文| 亚洲欧美久久久| 成人在线视频区| 日本午夜精品久久久久| 在线亚洲自拍| 99久久精品网| 国产一区二区亚洲| 伊人久久亚洲| 一区久久精品| 欧美日韩一区二区综合| 国产精品久久久久久久久久白浆| 国产精品调教| 成人福利视频| 九九九精品视频| 日韩国产成人精品| 中文字幕亚洲在线观看| 婷婷激情久久| 久久精品伊人| 欧美1级日本1级| 三级在线观看一区二区| 精品免费av| 99精品在线观看| 卡一卡二国产精品| 91精品蜜臀一区二区三区在线| 久久精品青草| 免费一区二区三区在线视频| 亚洲五月婷婷| 四虎成人av| 欧美日韩精品一区二区三区在线观看| 亚洲在线久久| 久久亚洲精品中文字幕| 麻豆国产欧美一区二区三区| 亚洲国产成人精品女人| 日韩国产欧美一区二区| 麻豆久久久久久| av免费不卡国产观看| 欧美 日韩 国产精品免费观看| 久久精品高清| 蜜桃久久av一区| 麻豆精品在线播放| 伊人久久高清| 久久一区国产| 一区在线视频观看| 日韩国产欧美在线播放| av在线日韩| 亚洲欧美在线综合| 久久久噜噜噜| 日本综合精品一区| 日韩三级久久| 亚洲一区二区日韩| 麻豆精品久久久| 日产精品一区| 国产高潮在线| 久久久一本精品| 六月婷婷一区| 亚洲青青久久| 国产精品久久久久蜜臀| 国产精品www.| 麻豆成人av在线| 欧美.日韩.国产.一区.二区 | 99视频精品全国免费| 成人自拍av| 亚洲一区二区免费看| 另类专区亚洲| 99pao成人国产永久免费视频| 9色国产精品| 久久精品午夜| 日本精品在线中文字幕| 亚洲婷婷在线| 激情五月综合网| 亚洲专区在线| 欧美精品黄色| 欧美永久精品| 日韩在线观看一区二区| 国产精品视区| 欧美精品一区二区三区精品| 国产精品色婷婷在线观看| 美女精品视频在线| 91精品国产91久久久久久黑人| 午夜精品久久久久久久久久蜜桃| 久久国产乱子精品免费女| 国产欧美综合一区二区三区| 国产毛片精品久久| 尹人成人综合网| 国产精选在线| 日韩精品一卡| 亚洲成人av观看| 精品福利久久久| 日本一区二区三区视频在线看| 韩国三级一区| 国产日产一区| 综合激情网...| 国产麻豆一区| 免费精品国产的网站免费观看| 国产精品成久久久久| 精品视频免费| 精品久久影院| 日韩精品福利一区二区三区| 日韩电影免费网站| 精品视频一区二区三区在线观看| 日韩福利一区| 日韩在线电影| 日韩精品麻豆| 日韩网站在线| 亚洲另类黄色| 四虎精品一区二区免费| 日韩精品一区二区三区中文在线| 国产不卡精品在线| 免费日韩av片| 视频二区不卡| 国产精品va| 精品捆绑调教一区二区三区 | 69堂精品视频在线播放| 日本在线视频一区二区| 欧美日韩国产高清电影| 国产精品麻豆成人av电影艾秋| 色在线视频观看| 在线看片不卡| 国产精品中文| av高清一区| 国产日产精品一区二区三区四区的观看方式| 亚洲精品影院在线观看| 精品精品99| 蜜桃视频免费观看一区| 狠狠干综合网| 欧美高清一区| 麻豆久久精品| 麻豆国产精品一区二区三区| 999国产精品| 国产欧美大片| 久久国产毛片| 国产日韩电影| 在线精品亚洲欧美日韩国产| 91精品国产一区二区在线观看| 电影亚洲精品噜噜在线观看| 国产亚洲观看| 日韩欧美一区二区三区免费看| 欧美亚洲激情| 99香蕉国产精品偷在线观看| 国产亚洲久久| 国产毛片一区二区三区| 亚洲欧美日韩高清在线| 欧美日韩水蜜桃| 国内激情久久| 伊人久久婷婷|