一个DMC3000控制卡类的完全源代码.doc_第1页
一个DMC3000控制卡类的完全源代码.doc_第2页
一个DMC3000控制卡类的完全源代码.doc_第3页
一个DMC3000控制卡类的完全源代码.doc_第4页
一个DMC3000控制卡类的完全源代码.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一个DMC3000控制卡类的完全源代码 07-11-12 5:43 共四部分(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_axisMAX_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(19), LIMIT_A(12), LIMIT_B(13) for( int i(0); i m_axisi.nRP = 3200; m_axisi.fUnitPM = m_axisi.nRP/5; m_axisi.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); i4; i+) d3000_set_pls_outmode( i, 0 ); d3000_set_home( i, 0, 1 ); ORGIN = (19); LIMIT_A = (12); LIMIT_B = (13); return m_nType; /驱动函数 int CD3000:MoveMM( short nAxis, double fMM, const tag_SPEED &speed )/单轴运行 / if( speed.scc 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(axisArray0, pos0 ), M2P(axisArray1, pos1 ), M2P(axisArray0, speed.start), M2P(axisArray0, speed.speed), accel, decel):/T轴插补 d3000_start_ta_line3( axisArray, M2P(axisArray0, pos0 ), M2P(axisArray1, pos1 ), M2P(axisArray2, pos2 ), M2P(axisArray0, speed.start), M2P(axisArray0, speed.speed), accel, decel);/T三轴插补 else /S形插补 nAxises = 2 ? d3000_start_sa_line2( axisArray, M2P(axisArray0, pos0 ), M2P(axisArray1, pos1 ), M2P(axisArray0, speed.start), M2P(axisArray0, speed.speed), accel, decel):/S轴插补 d3000_start_sa_line3( axisArray, M2P(axisArray0, pos0 ), M2P(axisArray1, pos1 ), M2P(axisArray2, pos2 ), M2P(axisArray0, speed.start), M2P(axisArray0, speed.speed), accel, accel/2.0 );/S莆三轴插补 return nAxises; for(int i(0); i MoveMM( pAxisi, pPosi-GetPosition(pAxisi,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:IsRunni

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论