雷赛编程技术

控制卡应用编程技巧几招(1)

声明一下,写下这些编程技巧,即不是什么祖传秘籍,也不是什么必杀招或绝招,在此只为方便同仁们在编程控制软件时,对此可以进行适当的斟酌。以下展现的编程思想及奉上的源代码都非常简易,但并不是随手写写,可都是经过实践的。若没有成功经验作后盾,我也就没有必要在此打字练五笔了。

事实上,正如一个编程大师所言(Michael Abrash),当你的软件正常而且有效率的运行起来时,好像一切都是那么显而易见。故,在此,我仍坚持那句编程口号,将事情变得越简单越好,越简单就越有效率,越稳定。

在以下的介绍中,我将尽可能的展示本人的编程思想,最大可能的给出知其然也知其所然的解释。若你有更好的见解,希望能得到你的指正。人长大了明显标志就是变得不太负责,而且不敢承认自己还需要努力,害怕面对自己的错误。若是这样,放心,我还没长大。因为我无法保证我能面面俱到。

关于源代码的阅读,需要读者有一定的C++编程基础,至少对以下表示形式不会产生误解:

const char *pString; //指定pString邦定的数据不能被修改

char * const pString; //指定pString的地址不能被修改

const char * const pString; //含上面两种指定功能

当然,随便提醒一下,这些源代码若需要加入你的软件工程当中,还需要作一些调整和修改,因此,这些源代码实质上称为伪代码也可以,之所以展现它们,是让程序员们有个可视化的快感,特别是那些认为源代码就是一切的程序员。

同时,为了提高针对性,大部分控制卡调用的函数会明确指出是邦定哪些卡的,实际应用时,程序员可自行选择,以体现一下自己的智商是可以写写软件的。

一、控制卡类的单一实例实现

把控制卡类作一个类来处理,几乎所有C++程序员都为举双手表示赞同,故第一个什么都没有的伪代码就此产生,如下表现:

class CCtrlCard

{

public:

…Function

public:

…attrib

}

于是,用这个CctrlCard可以产生n多个控制卡实例,只要内存足够。然而,针对现实世界,情况并不那么美好。通常情况下,PC机内只插同种类型的控制卡1到2张,在通过调用d1000_board_init或d3000_board_init函数时,它们会负责返回有效卡数nCards,然后从0-nCards*4 - 1自行按排好轴数。初始化函数就是C++的new或malloc的操作,取得系统的资源,但是控制卡的资源与内存不一样,取得资源后必需要释放才可以再次获取,即控制卡资源是唯一的。

既然控制卡资源是唯一的,那么最好Cctrlcard产生的实例也是唯一的,这样,我们可以方便的需要定义一个全局变量即可:

CctrlCard g_Dmcard;

在其它需要调用的地方,进行外部呼叫:

extern CctrlCard g_DmcCard;

以上方法实在太简单了,很多人都会开心起来。实质上,方法还有很多,即然可以产生n多对实例,我们的核心是只要保证调用board_init函数一次即可,故也可以单独定义一个InitBoard函数:

{

public:

static int InitBoard(); //定义一个静态函数,以表警示

}

int CctrlCard::InitBoard()

{

return d1000_board_init();

}

还有一种方法,情况稍加复杂,但表达的功能也要强一些,以下展现可以稍微安慰一下代码狂。

Class CctrlCard

{

public:

CctrlCard(); //请注意这个构造函数的定义

}

CctrlCard::CctrlCard()

{//呵呵,也很明了

static int n(0); //注意,是个静态变量

n++; //每次调用CctrlCard生成实例时,都会计数一次

assert( n == 1 ); //在DEBUG版本下,只有n==1的情况下可以通过

//否则,会出现致命错误,还好,它会告诉你错在哪个文件,

//哪一行,呵呵,是个好东东啊。

}

通过强行报警处理,当你有g_DmcCard这个实例时,其它的所有控制卡的定义都只能是以引用或指针的方式进行了,不会再产生新有效的实例了,对于由小组编程的项目软件,而你又恰好负责编程控制卡这一块的话,以上的显性报警,会让其它人心领神会。当然,你也可以将上面的方法加入到InitBoard当中去,可以避你的无意识的多次调用了。

附:无意识的多次调用经常发生,特别是那些对MFC机制不明确的程序员,在多文档框架下,不知道这个CctrlCard::InitBoard函数到底是应该放在CmainFrame的OnCreate里面,还是应该放在CchildFrame的OnCreate,或者是Cview的OnInitUpdate里面进行调用。

在一言难尽MFC的情况下,我建议两个小方法:

No.1 将CctrlCard的函数置于Cmainframe的OnCreate或者Capp::Initstance内调用

No.2 将InitBoard函数稍加改造成这样:

Int CctrlCard::InitBoard()

{

static int n(-1000);//注意,-1000是控制卡函数不可能返回的值

if( n == -1000 )

n = d1000_board_init();

return n;//这样,即使多次调用也不样怕了,呵呵,雕虫小技也可以除虫啊

}

必须额外声明一下,我们不是不重视资源的释放,而是作为一个C++程序员写下这些代码是基本的义务(这也是我为什么要交待读者必须要有一定的C++基础):

{

public:

~CctrlCard()

{//定义析构函数,在此释放资源,对此,我不想再转到读者的眼球了

d1000_board_close();

}

}

二、数据结构及数据类型的定义,部分相关声明

调用控制卡驱动函数时,经常会有如下形式:

单轴相对运动 d1000_start_t_move( axis, pulse, start, speed, accel );

单轴绝对运动 d1000_start_ta_move( axis, pulse, start, speed, accel );

两轴相对插补 d1000_start_t_line( axisArray, distArray, start, speed, accel );

两轴绝对插补 d1000_start_ta_line( axisArray, distArray, start, speed, accel );

圆弧相对插补 d3000_start_t_arc( axisArray, C1, C2, E1,E2, dir, start, speed, accel );

圆弧绝对插补 d3000_start_ta_arc( axisArray, C1, C2, E1,E2, dir, start, speed, accel );

以上的调用,很多重复枯燥,又不直观,难于理解,并且在面向客户时,常常是指每分多少米,或者每秒多少毫米,很少有人问每秒多少脉冲,移动多少脉冲作距离,故需要单位之间的换算。显然,对于这些问题,我想,C++程序员应该找到用武之地了,所以我们一步一步来,慢慢统一各个问题。实质上,在以下的几个技巧,也需要在此澄清一些概念。

我们先来几个宏定义提高一下情绪:

# define MAX_AXIS 4 //最多轴数

# define XCH 0 //定义X轴的值

# define YCH 1

# define ZCH 2

# define UCH 3

…..(其它以次类推)

# define M_ABS 0x01 //定义一个绝对标志位

# define M_INP 0x02 //定义一个插补位

接下来深入一点点,再来几个结构定义:

typedef struct tag_ARC

{

tag_ARC( double ox=0.0, double oy=0.0, double ex=0.0, double ey=0.0, int dir=0 ):

ox(ox), oy(oy),

ex(ex), ey(ey),

dir(dir)//定义这样一个构造函数需要勇气,看似不合理,但是好用麻

{

}

double ox,oy;

double ex,ey;

int dir;

}ARC;

typedef struct tag_SPEED

{

tag_SPEED( double start=0.0, double speed=0.0, double accel=0.0, double decel=0.0,

double scc=0.0 ) :

start(start),

speed(speed),

accel(accel),

decel(decel),

scc(scc)

{

}

double start;

double speed;

double accel;

double decel;

double scc;

}SPEED;

以上两个ARC和SPEED的结构定义,把几个参数变成一个参数。比如要实现的单轴驱动函数,就变得非常明了:

void Move( int nAxis, double fMM, const SPEED &speed, int nFlag = M_ABS );//往后我们再具体完善其实现。

以上的结构具有类的特性,但是由于其每个成员都可以给外部直接使用,故就不需要什么类的public及其析构函数的定义了。之所以全都采用double的数据类型,是面向客户习惯及单位计算方便的。

接下来是对控制卡常用的单位计算及部分常用变量的声明:

class Cctrlcard

{

public:

…(其它略去)

public:

//属性

mutable int ORGIN; //指定原点状态位

mutable int LIMIT_A, LIMIT_B; //指定左右限位状态位

private:

//以下的属性不给外部访问的

struct tag_AXIS{//单轴属性

double fUnitPM; //脉冲当量

long nRP; //每转脉冲数

double fJourey; //行程

};

tag_AXIS m_axis[MAX_AXIS];

};

定义ORGIN,LIMIT_A, LIMIT_B为变量,是有两个意义:

No.1 当你访问它们的状态时,不需要每次调用d1000_get_axis_status函数,你可以这样:

Int nStatus = d1000_get_axis( XCH );

If( nStatus & g_https://www.360docs.net/doc/9119132397.html,IN == g_https://www.360docs.net/doc/9119132397.html,IN )

If( nStatus & g_DmcCard.LIMIT_A == g_DmcCard.LIMIT_A )

If( nStatus & g_DmcCard.LIMIT_B == g_DmcCard.LIMIT_B );

No.2 你可以扩展不同的卡,当外部调用的程序逻辑已被确定时,当你需要从DMC1000控制卡升级到DMC3000控制卡时,只需要给ORGIN等状态位指定不同的值即可。指定状态位的值也有一个小小的技巧,以ORGIN 为例,在DMC1000控制卡,其位值在2位,则可以这样:

ORGIN = 1<<2;

在DMC3000控制卡,其值在第9位,则这样:

ORGIN = 1<<9;

方法都很简单,关键是要想得到。

对于tag_AXIS定义,引出几个函数的声明,专门为其服务:

void SetUP( nit nAxis, double fMM, double nPulse, double fMax );//设定当量

double P2M ( int nAxis, long nPulse ); //脉冲转成毫米 pulse to metric

long M2P( int nAxis, double fMM ); //毫米转成脉冲 mitric to pulse

现在,我们再回过头来完成Move函数的实现,以便获得一点点成就感,同时也展示一下以上的大堆表述是有其意义的。

void Move( int nAxis, double fMM, const SPEED &speed, int nFlag = M_ABS )

{

( nFlag & M_ABS == M_ABS ) ?

d1000_start_ta_move( nAxis, //绝对

M2P( nAxis, fMM),

M2P( nAxis, speed.start ),

M2P( nAxis, speed.speed),

Speed.accel ): //注意是冒号,?:是一个表达式

d1000_start_t_move( nAxis, //相对

M2P( nAxis, fMM),

M2P( nAxis, speed.start ),

M2P( nAxis, speed.speed),

Speed.accel );

}

是不是很简单呢,当外部调用时,客户的观念就直接面对Metric即可,如:

Move( XCH, 10.0, SPEED(5,10,0.1), M_ABS );//达到绝对位置10.0毫米处。

以上罗嗦了一大堆,对于刚开始C++编程的程序员来说应该是收益不小,对于高手,则希望能够体会一下我的良苦用心。在以下的技巧介绍当中,我将变得很简易。一般来讲,程序员的基础不是太差的话,至少能够在1分钟内明白是什么道理。

控制卡应用编程技巧几招(2)

发布日期:2009-3-9 0:42:58 浏览次数:717

三、插补和联动函数

当程序员决定需要几轴进行插补时,尽量选择最大插补轴数,如在雕铣系统时,有时会用到两轴插补,有时会进行三轴插补,在这个基础上,为简化编程,我的理论只使用三轴插补,当需要进行两轴插补或联动时,根据相对或绝对的坐标关系,将不运动轴填入0偏移或绝对位置即可。

以下为XYZ三轴联动和插补的函数,由nFlag的M_INP位决定是否进行插补:

void MoveXYZ( double fX, double fY, double fZ, const tag_SPEED &speed,

int nFlag = M_ABS )

{

short axisArray[]={ XCH, YCH, ZCH };

if( nFlag & M_INP == M_INP )

{//插补

long distArray[]={ M2P(XCH, fX), M2P(YCH,fY), M2P(ZCH,fZ) };

long nStart, nSpeed;//计算新的矢量速度,参见DMC1000矢量速度的计算

(…矢量速度计算在此略去)

( nFlag & M_ABS == M_ABS ) ?

d1000_start_ta_line( 3, axisArray, nStart, nSpeed, speed,accel )://绝对

d1000_start_t_line(3, axisArray, nStart, nSpeed, accel );//相对

}

else

{//联动

double fpos[]={ fX, fY, fZ};

for( int I(0); I<3; I++)//发三次单轴移动命令

Move( axisArray[I], fpos[I], speed, nFlag );

}

}

在我给出的DMC3000控制卡类完整源代码一文中,有其更完善的版本。通过以下的函数封装,将插补和联动,绝对位置,相对位置等等都很好的整合在一起,用户在使用起来具体更准确的目标。

四、驱动轴状态、位置读取和设定

对于驱动轴的状态,分为两种:1、指脉冲输出状态;2、指专用输入信号电平状态

检测脉冲输出是否完成,可以写成如下函数,假设软件总共只用到XYZ三轴:

int IsRunning( int nAxis = -1 )//默认为-1是有目的的

{

if( nAxis != -1 )

return d1000_check_done( nAxis ) == 0 ;

//当nAxis == -1时,检测三个轴是否有一个在运行,这种检测在加工时常用

return d1000_check_done( XCH ) == 0 ||

d1000_check_done( YCH ) == 0 ||

d1000_check_done( ZCH ) == 0;

}

当用户等待YCH脉冲发完,则用一个循环检测即可:

while( g_DmcCard.IsRuning( YCH ) ) ::DoEvents();

别忘了,IsRuning是CctrlCard的成员函数,而DoEvents函数在DMC1000不能响应系统消息的文章中有详细实现和功能描述。

在实际加工时,作插补时,常需要等待上次所有运动结束才开始新的运动。故有如下表现:

for( int I(0),step(0); I

{

DoEvents();

switch( m_nworkStatus ){

case Pause:

continue;

case Continue: m_nWorkStatus = Running;

case Running:

{

switch( step ){

case 0:

if( IsRunning() ) break;//检测所有运动结束,否则继续检测

MoveXYZ( data[I].x, data[I].y, data[I].z …… );

Step ++;

Break;

Case 1:

If( IsRunning() ) break;//同上

I++; //准备下一段数据,之所以放在此处,是需要考虑在运行过程中,有外部的暂停和继续操作。

Step = 0;//准备运行新的数据

Break;

}

} break;

}

以上程序框架,有着非常广阔的应用前景,非常简单,可以让程序员随意控制,故而它又非常稳定,比起线程的操作,它具体非常透明的可操作性。此框架在雕刻,焊接,切割等许多场合都将成为经典,当然,若你不曾深入了解它,则不会发现它的可爱之处。

对于专用输入信号状态的检测,几乎没有什么特别之处:

int GetStatus( int nAxis )

{

return d1000_get_axis_status( nAxis );

}

位置的读取和设定,对于DMC1000比较容易,故在此我将写出DMC3000控制卡的这两个函数,当然用于DMC1000也是没问题的。

DMC3000控制卡的位置分为指令位置和物理位置(编码器反馈的),所以函数需要有一个小小的选择,先看看位置获取函数:

Double GetPosition( int nAxis, BOOL bCmd = true )// bCmd == true时,读取指令位置,否则为物理位置

{

long pulse = (bCmd == true ) ?

d3000_get_command_pos( nAxis ):

d3000_get_encoder_pos(nAxis);

return P2M( nAxis, pulse );//脉冲转成毫米然后返回

}

位置设定函数多了一点点动作:

double SetPosition( int nAxis, double fMM, BOOL bCmd = true )

{

double pos = GetPosition( nAxis, bCmd );//先取得原来的位置

( bCmd == true )?

D3000_set_command_pos( nAxis, M2P(nAxis, fMM )):

D3000_set_encoder_pos( nAxis, M2P(nAxis, fMM) );

Return pos;//返回旧的位置

}

为什么这样设计?当你用过CPen *pOldPen= pDC->SelectObject( &newPen );时,或者除了复位之外,你真正需要调用这个SetPosition函数时,你会发现这个设计,真是人情味实足。

五、复位,相对与绝对,

在如今PC机开发控制卡软件时代,设备上电不复位的几乎没有,在此谈到复位这个问题确实有必要,实现上,复位动作因不同设备的工艺要求而定,故一般而言,控制卡提供的那个复位函数太过简单,有点力不从心,所以,本人自己写了个复位函数,但是代码写起来将会占用很大的面版,故有此需要者,可以来电或E_mail索取。

其基本思路是采用两次找原点,第一次高速找,停止后退出,再次以较低的速度找原点。并且在执行第二次复位时,会在离原点5毫米处减速(第一次执行做不到)。

提供相对和绝对位置的概念是很有必要的,众所周知,现在控制卡能作到最小单位为1个脉冲,当然,作为数字脉冲,到此已不能再小了,故为了提高精度,通常情况下要提高计算当量,即增加每转脉冲数,或减少每转毫米数。

不论怎么,我们将问题放大并明朗化,可以看看以下片段:

for( int I(0); I<10000; I++)// 走10000次

move( 0.5 );//走相对0.5个脉冲的距离

结果是:1个脉冲也发不出,造成很大的累积误差。

若换成绝对方式:

for( int I(0); I<10000; I++)

goto( I*0.5 );

最后的误差,最大也就是1个脉冲以内。虽然还是有误差,但总算达到可容忍的程序,再加上适当的复位操作,让客户至少不必再担心这个巨大的累积误差了。

实质上,在整个软件设计时最好采用绝对坐标系,即使要处理加工原点或工面起点等这些参数,也要把它换算成绝对位置,唯手动移动设备可以例外。另外,在CNC系统中,除了有循环用到相对坐标系,其余都是用绝对坐标系为上策,实际上,在实现编程算法上,为统一起见,最好将相对的坐标关系全部转成绝对的坐标关系,这样也便于外部进行暂停或继续的处理。

相信,到此为止,若你的设备在加工时有一定的误差漂移,你会意识到自己应该是不是要检查一下采用了什么坐标系了吧。

六、输出输入及软限位

对于通用的I/O操作,没有什么特别要说明的,只有两点需要注意的,先给出两个小函数,以作参考:int ReadBit( int nIO ); //读指定通用输入口的电平状态,返回1 或 0

int WriteBit( int nIO, int nStatus ); // 输出电平到指定输出端口

两点注意:

No.1 对于ReadBit若需要加入抗干扰处理,则写一个函数:

Int RealInput( int nIO, int nStatus, int di=50 )

{

if( ReadBit( nIO ) != nStatus )

return 0;

while( di -- );//耗上几个CPU的周期时间,再读一次

return ReadBit( nIO ) == nStatus;

}

No.2 增加一个变量及函数扩展一下输出功能:

Long m_nOutStatus= 0x00000000;

再次改造一下WirteBit

void WriteBit( int nIO, int nStatus )

{

if( nStatus ){

m_nOutStatus |= (1<

}

else{

m_nOutStatus &= (~(1<

}

d1000_out_bit( nIO, nStatus );

}

添加的访问输出状态函数:

int ReadOutbit( int nIO )

{

static int a;

a = 1<<(nIO-1);

a &= m_nOutStatus;

return a!=0;

}

软限位的思想原本是用于为客户节省正负限位的光电开关成本而产生的,致使使用软件限位正常的话,设备每个驱动轴只需要一个原点开关即可。当然,软限位能正确运作是非常重要的,否则很容易撞坏设备。而其正确运行,就必须依赖正确的复位动作,以找到可靠的机械原点位置。

软件限位的基本算法非常简单,特别是在一个绝对坐标系当中。其原理如下:

if( pos < minPos ) pos = minPos;

if( pos > maxPos ) pos = maxPos;

实在没有必要再详说下去了。

编程技巧介绍至此算是一个了断,若在未来的日子里,有更好的想法,我会拿出来给大家参考,请大家一起来支持这件事情,拿出自己的宝贵经验,算是给数控行业添加强有力的润滑剂吧。谢谢。

运动控制系统常用的图形图像文件格式简述

随着运动控制系统的蓬脖发展,由于可以结合PC平台进行二次开发,故其数据来源逐渐由手工输入或教导,转向兼容大量绘图软件所生成的图形图像文件。如:CorlDraw,AutoCAD,MasterCAM,Pro/E等工具。由于这些绘图软件得到普遍大众的使用,并且具备强大的功能,一般而言,作为小型项目开发,只需要把它们所生成的文件读入,并作一些简单的数学处理(如:平移,镜像,旋转,错切)即可。这样也获得较高的开发效率,可以有效地节省开发者及客户使用者的成本。

以下我们简介几种常用于数控运动的文件格式,以帮助开发人员对此有个大概的理解,更好的把握项目的开发。

一、 CNC文件

CNC由国外流进,早期大量的应用于数控车铣床,故CNC包含的大量指令代码都可以通过机械加工之类的杂志获取,CNC以一种一统天下的海量囊括了所有运动控制动作。有很多指令,可以由用户自行定义(这是威力所在),在国内有很多数控设备厂商,基本上都支持标准CNC代码。如:成都广泰。

CNC文件格式一般分为非压缩格式及压缩格式两种,非压缩格式其数制形式基本上直接以小数出现。

压缩格式,数制有前省零,后省零两种,实际数值还需要由整数位和小数位决定。

如非压缩格式:

X123.456 即表示当前X数值为123.456

生成此格式的,常用工具有 MasterCAM、Pro/E等

压缩格式:

X123456 (没有小数点)

若以前零省,4位整数,3位小数,则X=0123.456 = 123.456

若以后零省,4位整数,3位小数,则X=1234.560 = 1234.56

生成此格式的,常见于PCB板绘图工具,如:CAM350,V2000,V2001

Protel。

支持CNC标准的文件后缀名一般常见有:

.NC, .CNC, .TXT, .ROT, .GBR, .GBX, .ROU, .DRL等

以下列出CNC常用G代码指令的含义:

G00 快速定位到有效位置

G01 直线插补

G02 顺圆弧插补

G03 逆圆弧插补

G04 延时暂停

G05 钻孔操作

G32 顺铣整圆

G33 逆铣整圆

G40 取消让刀(让刀一般也称作补偿)

G41 开始左让刀

G42 开始右让刀

G84 钻圆操作

G85 钻槽操作

G90 绝对坐标系

G91 相对坐标系

G93 设定工作原点

以下列出CNC常用M代码指令的含义:

M30 程序结束

M48 程序开始

M71 公制

M72 英制

M15 开始铣削

M16 结束铣削

模块复制操作指令:

M25 块头

M01 块尾

M02 块操作开始

M08 块操作结束

M70 XY交换

M80 X镜像

M90 Y镜像

R 重复排列指令

以上指令,有些有特定的格式,若有需要进一步深入分析,可来电话与我们联系。

二、 DXF文件

DXF文件格式,常见的由AutoCAD, CorlDraw绘图软件生成。DXF具有不同的版本,开发人员在分析DXF文件时,需要注意这一点,DXF文件格式的详细说明,可以到https://www.360docs.net/doc/9119132397.html,网站上,输入“ DXF文件格式”,即能找到相关的资料。

其操作码的说明,非常之丰富,本人手头的相关电子文档有十几页之多,故在此简单介绍几种常元素。

1、直线 LINE

2、圆弧 ARC

3、折线 LWPOLYLINE

4、圆形 CIRCLE

5、圆弧 ARC

6、椭圆 ELLISPE

7、 BZ曲线 ELLIPSE

8、文字(一般会自选SHX字体文件) MTEXT

DXF文件操作码和数值在文件中各占一行,如:

10

100.000

20

100.000

30

0. 000

11

200.000

21

100.000

31

0.000

以上展示的是一条直线段,起点坐标为(100.000, 100.000, 0.000),终点坐标为(200.000,100.000,0.000)

三、 PLT文件

PLT文件源自于HP绘图仪,在AutoCAD/R14版及CorlDraw软件中可以见到(需要导出),其实基于此类设备的还有EPS的一种矢量格式,即EPS文件,在此不多描述。PLT的操作指令非常丰富,不过常用以下几种指令就差不多够了。

PA 到达指定的绝对位置

PU 抬笔动作

PD 下笔动作

SP 换笔动作

AA 圆弧动作

LB 文本路径

PLT的操作码格式有许多形式,如抬笔动作:

PU10023 23402; 达到指令位置后抬笔

或 PU10023,23402;

或 PA10023,23402; PU;

还有就是PA指令:

PA1234 4567;(注意,两个数值之间有空格或者’,’分隔符)

PA8324 2345;

PA1234,4567,8324,2345;(多坐标放在一起)

一般而言,从CorlDraw或AutoCAD/R14版生成的PLT文件,其路径大部分只包含PU,PA,PD,SP有效指令,且路径已经为最优化的运动轨迹了(在此省去开发人员对最短路径的优化处理,而DXF文件则需要根据工艺,需要再次优化,因为它的路径与绘图顺序有关,这样有时频繁编辑或修改出来的图形路径会非常纹乱,不适合直接加工处理,所以还需要开发人员再次优化路径,以达到最好的加工轨迹)。

四、 BMP文件

以上介绍的图形都属于矢量文件,BMP作为图像文件,几乎在Window的图像编程当中,是路人皆知,其简单的文件结构非常易理解,加上Microsoft的强大MSDN帮助,实在没有赘述的必要。

在此,考虑到运动控制的计算必须与图像尺寸进行匹配,故还需要提示一下如何设定这种对应关系的方法。实质上,在激光位图扫描或位图雕刻时,常需要这种关系设定,即多少像素对应多少毫米。取得这个当量关系很简单。

以Win98系统为例,点击“开始”菜单,选择“程序”项,进入“附件”,选择“画图”工具。

然后打开你所需要的目标文件,选择菜单“图像”的“属性”项,可以看到“单位”信息框中的几个单选项,我想,到此为止,稍微聪明一点的人,也许不用再指点什么东西了吧。

由于BMP文件实在是太普遍了,所以,几乎所有的图像处理软件,看图软件都支持将其它图像文件格式转换成BMP文件格式,如大名鼎鼎的Photoshop及最好用的看图软件ACDSee。

故其它的PCX,JPG,GIF,TGA,PIC图像就不是什么问题了。

五、其它字体文件简介

Windows系统的字体文件结构非常复杂,虽然只有两种基本元素,即直线和BZ曲线,若想完成分析明白,还是要下一番苦功,好歹有一些伟大的作家将此事基本了解,可以参见一个华裔作家的《Window图形图像编程》,此书中对Window的字体作了全面的分析,且带光盘,对拿来主义者将是最大的礼物了。

若没办法购到此书,也不是就绝人之路了,在CDC的对象内,有一套方法,可以取得所有绘图的路径,文字路径就更不在话下了。

举例:

1.开始路径捕捉

CDC *pDC = GetDC();//自定义

pDC->BeginPath();

pDC->TextOut(0,0,”Hello, path!?”);//输出想要的文字

pDC->EndPath();

是不是很简单呢

2.还原路径

在还原路径之前,用户还可以任意旋转,镜像,错切路径。

Int nCount = pDC->GetPath( NULL, NULL, 0 );

CPoint *pPoint = new CPoint[nCount];

char *pCtrl = new char[nCount];

for( int i (0); i

{

switch( pCtrl[i] ){//识别控制字,

case ….

}

}

delete []pCtrl;

delete []pPoint;

对于AutoCAD的SHX字体,分析起来完全靠代码处理,因此非常困难,若有这方面需求的用户可直接与我们联系。还有早期DOS系统下,TC2.0有BC3.1编译环境还带有一些CHR矢量字库,用户若有需求请联系我们即可。

过程控制编程之简要探讨

抽像一点讲,过程控制渗透在生活的各个角落。特别是在数控行业,尤为明显。早期在PLC时代,几乎是一统天下。当大小不一的控制卡公司如雨后春笋般成长起来时,控制卡在过程控制逐步体现出强劲优势。其编程手段往往邦定非常成熟的编程工具,如:CB,VC,Dephi,CB。故其推广非常迅速. 很快拥有大量客户群。但是,作为编程者,碰到同一程序需要控制多个同样设备时(动作不一定同步),往往在Window多任务系统的影响下,很快想到多线程技术,其实多线程编程对系统依赖性较强,不同级别的处理,将导致程序的维护成本增加,并且还需要考虑线程之间的通讯,使编程起来较为麻烦。事实上,依靠过程编程的思想,会使程序获得更简单的做法。

纯粹从编程角度来看,过程控制编程应包含几个要素,下面以C++伪码方式来表示一个类,较易说明问题:/**************************

一个动作封装类,包含一个

设备的所有执行动作

**************************/

class CAction

{

public:

CAction():m_nWorkStep(-1000){}

~CAction(){}

public:

enum{ None, Inital, Start, Stop, Pause, Continue };//部分控制标记

public:

int Control( int nStatus, void *pParam ); //要素2: 一定可以接受外部控制

int Run( void *pParam ); //要素3: 绝对有一个不断推动的执行过程(这是整个过程编程的心脏所在)

public:

int m_nWorkStep; //要素1: 必须有一个工作执行步

private:

void * m_pMemberData; //要素4: 可选,邦定被操作的数据

// ..其它辅助变量

};

要素5:可选,为了能与外界用户进行沟通,Control函数与Run函数,须选择一个参数,满足用户的输入输出。但由于用户可选项太多,故古人告诉我们,万事皆空即是成功,对于C++而言,没有比void *类型更有前途了(若想体会,需搭配类型转换更有潜力)。早在一年前,本人写过一个过程控制器编程,并有

成功实例,但今次版本,更有精装之特点。

住下再参见一下Control函数,及Run函数的一个小样例,这将是程序员发挥强劲功能的场地所在。如下:

int CAction::Control( int nStatus, void *pParam )

{//此处的设计需要一点技巧,当然完全取决程序员的经验,和对控制的理解

switch( nStatus ){

case Inital:

m_pMemberData = pParam;//初始化邦定的用户数据

break;

case Start:

m_nWorkStep = 0; //一般令第0步作为开始较易理解

break;

case Stop:

m_nWorkStep = -1000;//停止

break;

case …//其它略去

default: break;

}

return m_nWorkStep;//返回值可自定

}

int CAction::Run( void *pParam )

{//以下为一个动作不断返回,直至接受到停止指令

switch( m_nWorkStep ){

case 0:

if( IsMove() ) break; //正在忙,不执行

Move(1600); //正向移动1600单位

m_nWorkStep++; //跳至下一步

break;

case 1:

if( IsMove() ) break; //正在忙,不执行

Move(-1600); //反向移动1600单位

m_nWorkStep=0; //再回至第0步

break;

case –1000: break;//停止

default: break;//此句最好有,以便于理解

}

return m_nWorkStep; //返回值可自定

}

对于Run函数须谨记一点:不要有长时间的循环操作,更不要有死循环,否则另外设备无法正确动作,因为另外的设备Run函数无法被激活执行,心脏无法跳动,只好等死吧!

当然,还须担心一点:多个设备同时执行时,其实时性会下降一点,若没有特别高的要求,在现今CPU狂奔的时代,以上程序框架足已满足90%的需求,还是有学习和理解的必要吧!

以上的框架出来了,那么如何操作使设备驱动起来呢,不管在DOS亦或在Window系统环境里,以下的思路都一样,参见伪代码如下:

const int nSize=10; //定义10台设备对象

CAction exeArray[nSize];

BOOL bRunning=FALSE;//控制整个驱动的标志

Void OnRunAction()//启动函数

{

//初始化一下

for( int i(0); i〈nSize; i++)

exeArray[i].Control( CAction::Inital, ( void *)userData );//userData由用户选择

bRunning = true;//外部控制变量

for( i=0; bRunning; i=(i+1)%nSize)//给予运行时间,即是驱动了

{

exeArray[i].Run(( void *)userData); //不断驱动Action设备(即激活心脏)

DoEvents();//做其它事情,如系统消息检测,以防止死机

}

}

DoEvents函数功能的详解可参见本人的〈〈DMC1000控制卡不能响应系统消息〉〉,上面有不同编程工具下的实现源代码。

void OnControlAction()

{

for( int i(0); i〈 nSize; i++)

exeArray[i].Control( Caction::(/*用户想要的动作*/), ( void *)userData);

}

void OnOver()

{

bRunning = FALSE;//结束驱动

}

注意:有很多程序员在不同编译器下,需要不同的OnRunAction函数版本,以上实现最为简单,但有一些较特殊。比如:在程序启动时,就驱动所有设备,这点本人在VC6.0环境有过经验,可以分享一下,其它环境下,还需同胞们一起去努力发现。

还有一点声明,多线程技术也不是一无是处,在花费时间较频繁的通讯编程方面,它的优势,还是有相当的诱惑力。

DMC1000控制卡不能响应系统消息

一、问题现象及分析

问题经常通过以下编程表现出来:

//X发出脉冲后,等待脉冲发完后再做其它事情

d1000_start_t_move( 0, 6400, 3200, 6400, 0.1 );

while( d1000_check_done(0) == 0 );

老版本的库函数如下:

d1000_start_tr_move( 0, 6400, 3200, 6400, 0.1 );

while( d1000_check_done(0) == 0 );

或者:

d1000_wait_done( 0 );

此函数内部实际上包含类似于while( d1000_check_done(0) == 0 );的语句

以上可以看出,在检测脉冲是否发完时,此段代码的执行完全独占了CPU分配给当前进程的所有时间, 因而也排挤了其它消息的响应,当然也就不能响应定时器读取位置,或其它停止操作等.

二、解决方法

解决此问题关键是让while循环时能检测系统消息,以下分别介绍在VB,VC,CB下的解决措施:

注:以下编程全以DMC1000最新的驱动库函为参考

1.VB编程

d1000_start_t_move 0, 6400, 3200, 6400, 0.1

DO

DoEvents

LOOP WHILE (d1000_check_done(0) = 0)

2.VC编程

在VC下编程关键是要解决类似于VB的DoEvnets函数

void DoEvents()

{

static MSG msg;

if( ::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE) ){

::TranslateMessage( &msg );

::DispatchMessage( &msg );

}

}

然后编程如下:

d1000_start_t_move( 0, 6400, 3200, 6400, 0.1 );

while( d1000_check_done(0) == 0 )

::DoEvents();

3.CB编程

同样也需要完成一个DoEvents函数的定义:

void DoEvents()

{

Application->ProcessMessages();//VCL给程序带来极大简化

}

编程如下:

d1000_start_t_move( 0, 6400, 3200, 6400, 0.1 );

while( d1000_check_done(0) == 0 )

::DoEvents();

三、技巧提升

有了自产的DoEvents函数,是否就可以一切OK了呢。试想一个问题,实际加工时,

通常会有大量的小线段(即短脉冲距离)出现,若频繁的调用DoEvents势必带来新的麻烦,因为加工需要连续的进行,设备的运动之间停顿时间过长,会形成设备的多次启停,进而易产生振动,造成

设备的加速磨损,并且速度也快不起来。因此添加一小小技巧(实用又省钱),判断脉冲距离是否过小若过小则不执行DoEvents函数,过小量可以根据自己的需求也定义一个参考量。当然程序的执行顺序也可以优化一下,以上面程序为例:

if( d1000_check_done(0) != 0 ) return;

d1000_start_t_move( 0, 6400, 3200, 6400, 0.1);

咋一看没有什么特别的,但是请看下加工程序的部分简化代码,也许会有新的启示:

for( int i(0); i

{

if( d1000_check_done(0) == 0 )

{

if( Len > 2.0 )DoEvents();

//小于2单位(可以指为毫米,或其它单位)则不执行DoEvents函数

continue;

}

Len = dist[i].Len;

d1000_start_t_move( 0, dist[i], speed );

i ++;

}

当然,世界上做事情的方法多的是,有高手则愿意动用复杂的多任务编程方法来完成操作,

最后经过努力,事情也可以解决,若有兴趣,可参见另一篇《控制卡的多任务编程》,然后自行做

编程测试。不过本人的理论是,解决事情的方法越简单越好,据本人了解,大师之所以为大师,通常

不是把问题搞得高深莫测,而是通俗易懂。

四、其它应用

此方法对所有DMC系列的控制卡的编程都可以运用,还可用在自定义的Arc(圆弧运动)函数

上,参见下面伪代码(Arc的直线拟合算法参见DMC2000的ARC算法):

for( int i(0); i

{

while( IsRunning(X) || IsRunning(Y) )

{

if( i%16 == 0 ) DoEvents();//每16再运行一次

}

start_line2( newx, newy );

}

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;

}

雷赛运动控制卡说明书【详细版】

首先,请确保运动控制卡已经插入到你的计算机插槽中,已安装好驱动程序,并用演示软件确认硬件系统工作正常。 安装好VB软件,但在开始编写运动控制软件前,需要做下面几项工作: 1 :建立自己的工作目录,如:d:\vbMotion(此目录名可以自己指定)。 2 :将DMC5480.bas文件拷贝到该目录下(此文件在软件CD的module目录下可以找到)。 3 :运行VB,并建立一个工程,然后保存此新建的工程在vbMotion目录中 然后按下述步骤,将运动函数库链接到你的工程项目中: 1:在VB编译器的“工程(P)”菜单中选择“添加模块”; 2 选择“现存”; 3 选择“DMC5480.bas”;

4 选择“确定”。 5 当您将运动函数链接到你的工程项目中后,就可以象调用其它API函数一样直接调用运动函数,每个函数的具体功能,请参考软件手册中的“运动函数说明”,当然还可以打开模块文件DMC5480.bas了解每个函数的具体定义。 确保DMC5480运动控制卡已经插入到你的计算机插槽中,安装好驱动程序,演示软件和VC软件,在调用DMC5480运动函数之前,需要做下面几项工作: 1. 启动演示软件,进行运动控制卡控制功能的简单测试,如:单轴定长运动等,以确定DMC5480运动控制卡软硬件安装正常。 2. 运行VC,并建立一工程,将工程命名为vcMotion(注:此工程名可以自己指定); 3. 将DMC5480.lib和DMC5480.h文件拷贝到该目录下(此文件在module目录下); 4. 将运动函数链接到你的工程项目中,将DMC5480.lib加入到工程中; 5. 在调用运动函数的文件头部代码中加入#include “DMC5480.h”语句。

运动控制卡概述

运动控制卡概述 ? ?主要特点 ?SMC6400B独立工作型高级4轴运动控制器 功能介绍: 高性能的独立工作型运动控制器以32位RISC为核心,控制4轴步进电机、伺服电机完成各种功能强大的单轴、多轴运动,可脱离PC机独立工作。 ●G代码编程 采用ISO国标标准G代码编程,易学易用。既可以在文本显示器、触摸屏上直接编写G代码,也可以在PC机上编程,然后通过USB通讯口或U盘下载至控制器。 ●示教编程 可以通过文本显示器、触摸屏进行轨迹示教,编写简单的轨迹控制程序,不需要学习任何编程语言。 ●USB通讯口和U盘接口 支持USB1.1全速通讯接口及U盘接口。可以通过USB接口从PC机下载用户程序、设置系统参数,也可用U盘拷贝程序。

●程序存储功能 程序存储器容量达32M,G代码程序最长可达5000行。 ●直线、圆弧插补及连续插补功能 具有任意2-4轴高速直线插补功能、任意2轴圆弧插补功能、连续插补功能。应用场合: 电子产品自动化加工、装配、测试 半导体、LCD自动加工、检测 激光切割、雕铣、打标设备 机器视觉及测量自动化 生物医学取样和处理设备 工业机器人 专用数控机床 特点: ■不需要PC机就可以独立工作 ■不需要学习VB、VC语言就可以编程 ■32位CPU, 60MHz, Rev1.0 ■脉冲输出速度最大达8MHz ■脉冲输出可选择: 脉冲/方向, 双脉冲 ■2-4轴直线插补 ■2轴圆弧插补 ■多轴连续插补 ■2种回零方式 ■梯型和S型速度曲线可编程

■多轴同步启动/停止 ■每轴提供限位、回零信号 ■每轴提供标准伺服电机控制信号 ■通用16位数字输入信号,有光电隔离 ■通用24位数字输出信号 ■提供文本显示器、触摸屏接口 技术规格: 运动控制参数 运动控制I/O 接口信号 通用数字 I/O 通用数字输入口 通用数字输出口 28路,光电隔离 28路,光电隔离,集电极开路输出 通讯接口协议

交流伺服电机选型手册

ST系列交流伺服电机型号编号说明 1: 表示电机外径,单位:mm。 2:表示电机是正弦波驱动的永磁同步交流伺服电机。 3:表示电机安装的反馈元件,M—光电编码器,X—旋转变压 器。 4:表示电机零速转矩,其值为三位数×0.1,单位:Nm。 5:表示电机额定转速,其值为二位数×100,单位:rpm。 6:表示电机适配的驱动器工作电压,L—AC220V,H—AC380V。7:表示反馈元件的规格,F—复合式增量光电编码器(2500 C/T), R—1对极旋转变压器。 8:表示电机类型,B—基本型。 9:表示电机安装了失电制动器。 SD系列交流伺服驱动器型号编号说明 1:表示采用空间矢量调制方式(SVPWM)的交流伺服驱动器 2:表示IPM模块的额定电流(15/20/30/50/75A) 3:表示功能代码(M:数字量及模拟量兼容) ●交流伺服电机及伺服驱动器适配表 ST系列电机主要参数 适配驱动 器ST系列电机 ST系列 电机 电机型号 额定 转矩 额定转 速 额定功 率 外形尺寸 零售价 (元) 110ST-M02030 2 Nm3000rpm0.6Kw SD15M SD20MN SD30MN SD50MN SD75MN 110×110×1581500 110ST-M04030 4 Nm3000rpm 1.2Kw110×110×1851700 110ST-M05030 5 Nm3000rpm 1.5Kw110×110×2001800 110ST-M06020 6 Nm2000rpm 1.2Kw110×110×2171900 110ST-M06030 6 Nm3000rpm 1.6Kw110×110×2171900 130ST-M04025 4 Nm2500rpm 1.0Kw130×130×1631800 130ST-M05025 5 Nm2500rpm 1.3Kw130×130×1712100 130ST-M06025 6 Nm2500rpm 1.5Kw130×130×1812400 130ST-M077207.7 Nm2000rpm 1.6Kw130×130×1952900 130ST-M077307.7 Nm3000rpm 2.4Kw130×130×1952900 130ST-M1001510 Nm1500rpm 1.5Kw130×130×2193200 130ST-M1002510 Nm2500rpm 2.6Kw130×130×2193200 130ST-M1501515 Nm1500rpm 2.3Kw130×130×2673620 130ST-M1502515 Nm2500rpm 3.8Kw130×130×2673620 ST系列交流伺服电机

伺服行业

伺服电机应用行业总结 现代交流伺服系统最早被应用到宇航和军事领域,比如火炮、雷达控制。逐渐进入到工业领域和民用领域。工业应用主要包括高精度数控机床、机器人和其他广义的数控机械,比如纺织机械、印刷机械、包装机械、医疗设备、半导体设备、邮政机械、冶金机械、自动化流水线、各种专用设备等。其中伺服用量最大的行业依次是:机床、食品包装、纺织、电子半导体、塑料、印刷和橡胶机械,合计超过75%。 在数控机床中使用永磁无刷伺服电机代替步进电机做进给已经成为标准,部分高端产品开始采用永磁交流直线伺服系统。在主轴传动中采用高速永磁交流伺服取代异步变频驱动来提高效率和速度也成为热点 ?无轴(电子轴)传动技术在印刷机上应用,也是目前全球印刷企业和机械制造商的焦点。无轴传动就是用多个单独的伺服电机取代传统的机械传动链,伺服驱动器之间依靠高速现场总线进行联系,通过软件保证各伺服轴对内部的虚拟数字电子轴保持严格同步。采用无轴传动技术为印刷机的生产制造、为印刷业服务革命带来了最佳解决方案,目前欧洲50%的凹印机采用了无轴技术,日本也有30%以上采用。其他采用无轴传动的机械包括卷筒纸印刷机、柔印机、上光机、烫金机、模切机等各类印刷设备。这一领域最顶级的伺服控制解决方案提供商是来自德国的博世力士乐、伦茨、日本的住友和奥地利的贝加莱。国内目前仅有北人和松德等个别厂家进行无轴传动印刷机的开发,部分规格的性能指标接近国际水平,但是其采用的电子轴传动伺服系统和套准控制系统均来自日本和欧洲,国内相关伺服厂家还鲜有涉足。国产伺服和控制系统要达到这个领域的要求,需要顶级的技术水平和对这个行业的透彻理解,看来还有漫长的路要走。 ?包装设备上,采用伺服控制可以提高单位时间的产量、提高资源利用率、增加品种适应性和提高产品质量,因此交流伺服在包装机械上的广泛使用只是时间问题。采用数字伺服技术的电子齿轮和电子凸轮将代替传统机械部件,随着价格的下降,成本也逐渐接近纯机械的方案。欧洲有个Elau公司专门针对包装机械设计开发数字伺服和运动控制解决方案,在大型连续包装设备方面居于领先地位,而我国尚没有出现如此专业的解决方案提供商。?中国伺服市场情况 ?市场的占有量以日本品牌为主,约40~50%以上,占据了国内市场的半壁江山。其次是欧美伺服产品,再者就是中国自产的伺服产品。这些厂家的伺服产品各有特色:日本伺服进入中国市场较早,产品性能、质量较好,价位较高;而欧美的伺服产品性能和功能最好,价格最高;国产伺服产品在性能和功能方面暂时逊色很多,只能跟在欧美日的后面走,但是具有明显的价格优势。

雷赛伺服 485控制方法

雷赛伺服485控制方法 1.引言 1.1 概述 概述 雷赛伺服控制方法是一种用于控制工业电机运动的技术。它采用了485通讯协议,通过发送和接收数据包来实现对伺服电机的控制。相比传统的控制方法,雷赛伺服485控制方法具有更高的精度和稳定性,适用于各种复杂的运动控制需求。本文将介绍雷赛伺服485控制方法的原理和优势,并探讨其在未来的发展前景。 雷赛伺服控制方法结合了伺服技术和485通讯技术,可以实现对伺服电机的多轴联动和高精度运动控制。通过使用485通讯协议,可以实现远距离传输和多设备之间的数据交换。这使得雷赛伺服485控制方法在工业自动化领域得到广泛应用。 相比传统的控制方法,雷赛伺服485控制方法具有以下优势。首先,它可以实现更高的控制精度和更低的误差。伺服电机可以通过接收控制信号和反馈信号进行实时调整,以达到更准确的位置和速度控制。其次,雷赛伺服485控制方法具有更高的稳定性和可靠性。通过使用485通讯协议,可以避免外界干扰和信号衰减的问题,保证控制信号的稳定传输。此外,485通讯协议还可以支持多设备之间的数据交换和协作,实现多轴联动控制。 未来,雷赛伺服485控制方法有着广阔的发展前景。随着工业自动化的不断发展和需求的增加,对于高精度和高效率的运动控制技术的需求也

会不断增加。雷赛伺服485控制方法正是满足这一需求的技术之一。同时,随着通讯技术的不断进步和发展,485通讯协议也将逐渐完善和优化,进一步提升雷赛伺服485控制方法的性能和可靠性。 综上所述,雷赛伺服485控制方法是一种高精度、高稳定性的工业电机控制技术,具有广阔的应用前景。本文将通过介绍其概述、原理和优势,以及对未来发展的展望,希望能够为读者提供深入了解和应用雷赛伺服485控制方法的参考。 文章结构部分的内容如下: 1.2 文章结构 本文主要分为引言、正文和结论三个部分。 1. 引言 引言部分主要对本文的主题进行概述,介绍雷赛伺服485控制方法的背景和意义。首先,将对雷赛伺服控制方法的基本概念进行简要介绍,包括其在工业自动化领域的应用。接着,将介绍本文的结构以及各个章节的主要内容。最后,明确本文的目的,即探究雷赛伺服485控制方法的优势并对其未来发展进行展望。 2. 正文 正文部分将详细阐述雷赛伺服控制方法的概述和485控制方法的优势。首先,在2.1节中,将对雷赛伺服控制方法进行全面的概述,包括其原理、特点、应用范围等方面的介绍。其次,在2.2节中,将重点探讨雷赛伺服485控制方法的优势,并通过实例分析展示其在实际应用中带来的好处。 3. 结论

国内步进电机驱动器生产厂家供应商

步进电机驱动器生产厂家 深圳市白山机电一体化技术有限公司 [省份:广东省] [1997-10-28] 公司成立于1997年,是一家专门从事自动控制方面机电产品研发、生产、销售为一体的高科技企业。公司现在主要产品为“BS”步进电机驱动器,共有两个系列20多个品种,规格齐全,功能强大,性能优良,品质可靠,完全可以和国外产品相媲美,并具有极高的性价比。同时公司还自主开发了多种型号的通用 ... 北京前苏电子科技公司 [省份:北京市] [2006-08-23] 作为精密运动控制产品的制造商和运动系统集成服务的提供者。我们愿以完备的咨询意见,结合我们的成熟产品,为您提供完整的运动控制方案,从计算机技术、数控技术、可编程控制技术、传动技术、位置和角度测量技术,实现最优化系统组态以满足您对速度和位移、角度和角速度的精确控制。同时,我们可为您进 ... 上海优爱宝机器人技术有限公司 [省份:上海市] [2010-04-19] 上海优爱宝机器人技术有限公司是一家有着海外留学生背景的高科技企业,注册于浦东张江高科技园区。公司主要研发力量来自于美国,研发人员具有多年工业及民用机器人的研发经验,曾经为军方开发海底探测机器人。核心研发人员个人拥有20余项世界级发明专利,并广泛应用于民用及军用场合。公司致力于工业 ... 北京宏伟步进科技发展有限公司 [省份:北京市] [2008-02-27] 本公司推出自主开发的驱动芯片BY-5064;这是一款小型化,多功能,效率高,使用方便的两相混合式步进电机专用电路,配合简单的外围电路即可实现高性能的驱动电路;大量采购惊喜价29元/片。此芯片经过我公司大量产品使用请放心购买。我公司生产的驱动器产品有;BY-2HB03M、B ... 星辰工控技术(浙江)有限公司 [省份:浙江省] [2005-06-02] 星辰工控技术(浙江)有限公司是一家民营科技型企业,集技、工、贸于一体,专业从事制袋机控制系统、步进电机驱动器、直流电机调速装置、纠偏控制器、制袋机打孔器及各类工业自动化装备研发、生产的企业。公司以“诚信、严谨、务实、创新”为宗旨,实施“重技术、重质量、重信誉”的经营方针;竭诚为新 ... 江苏常州苏泰电器有限公司 [省份:江苏省] [2008-10-09] 江苏常州苏泰电器有限公司位于中国经济最活跃的上海长三角经济圈内,同时也是身处中国最大的步进电机产业基地常州。苏泰公司得益于常州先进的步进电机生产技术和产业基地优势,使得公司不断壮大,公司下设混合式步进电机,步进电机驱动器二大生产部门。产品广泛应用于打印机,复印机,医疗 ... 硕兴机电有限公司 [省份:上海市] [2008-07-16]

雷赛编程技术

控制卡应用编程技巧几招(1) 声明一下,写下这些编程技巧,即不是什么祖传秘籍,也不是什么必杀招或绝招,在此只为方便同仁们在编程控制软件时,对此可以进行适当的斟酌。以下展现的编程思想及奉上的源代码都非常简易,但并不是随手写写,可都是经过实践的。若没有成功经验作后盾,我也就没有必要在此打字练五笔了。 事实上,正如一个编程大师所言(Michael Abrash),当你的软件正常而且有效率的运行起来时,好像一切都是那么显而易见。故,在此,我仍坚持那句编程口号,将事情变得越简单越好,越简单就越有效率,越稳定。 在以下的介绍中,我将尽可能的展示本人的编程思想,最大可能的给出知其然也知其所然的解释。若你有更好的见解,希望能得到你的指正。人长大了明显标志就是变得不太负责,而且不敢承认自己还需要努力,害怕面对自己的错误。若是这样,放心,我还没长大。因为我无法保证我能面面俱到。 关于源代码的阅读,需要读者有一定的C++编程基础,至少对以下表示形式不会产生误解: const char *pString; //指定pString邦定的数据不能被修改 char * const pString; //指定pString的地址不能被修改 const char * const pString; //含上面两种指定功能 当然,随便提醒一下,这些源代码若需要加入你的软件工程当中,还需要作一些调整和修改,因此,这些源代码实质上称为伪代码也可以,之所以展现它们,是让程序员们有个可视化的快感,特别是那些认为源代码就是一切的程序员。 同时,为了提高针对性,大部分控制卡调用的函数会明确指出是邦定哪些卡的,实际应用时,程序员可自行选择,以体现一下自己的智商是可以写写软件的。 一、控制卡类的单一实例实现 把控制卡类作一个类来处理,几乎所有C++程序员都为举双手表示赞同,故第一个什么都没有的伪代码就此产生,如下表现: class CCtrlCard { public: …Function public: …attrib } 于是,用这个CctrlCard可以产生n多个控制卡实例,只要内存足够。然而,针对现实世界,情况并不那么美好。通常情况下,PC机内只插同种类型的控制卡1到2张,在通过调用d1000_board_init或d3000_board_init函数时,它们会负责返回有效卡数nCards,然后从0-nCards*4 - 1自行按排好轴数。初始化函数就是C++的new或malloc的操作,取得系统的资源,但是控制卡的资源与内存不一样,取得资源后必需要释放才可以再次获取,即控制卡资源是唯一的。 既然控制卡资源是唯一的,那么最好Cctrlcard产生的实例也是唯一的,这样,我们可以方便的需要定义一个全局变量即可: CctrlCard g_Dmcard; 在其它需要调用的地方,进行外部呼叫: extern CctrlCard g_DmcCard; 以上方法实在太简单了,很多人都会开心起来。实质上,方法还有很多,即然可以产生n多对实例,我们的核心是只要保证调用board_init函数一次即可,故也可以单独定义一个InitBoard函数:

雷赛3800卡运动控制卡说明书

雷赛3800卡运动控制卡说明书 雷赛DMC3800八轴高性能点位卡特点概述: 八轴伺服/步进电机控制;八轴增量式编码器。 优秀的PVT规划;高速位置锁存\比较及触发。 丰富的IO控制与延时翻转;优秀的T型、S型速度曲线。 在线变速、在线变位置;简单直线插补、圆弧插补;总线扩展。 功能特性: DMC3000系列高级点位控制卡,是雷赛智能推出的功能丰富、性能优良的高性能脉冲型点位控制卡。可控制1-8轴伺服或步进电机,每轴最高频率4MHz,支持S型曲线,在线变速/变位置,PVT,简单直线插补,圆弧插补,高速位置锁存,高速位置比较输出,编码器反馈等高级点位功能。位置指令可用单脉冲(脉冲+方向)或双脉冲(CW脉冲+CCW脉冲)方式输出,可以是单端或者差分式,适合控制各种接口的伺服、步进及其组合。 另外控制卡本身自带多路通用I/O口,能满足大部分应用场合的I/O需求。同时,支持CAN 总线I/O扩展,通过外接总线模块也可满足大批量I/O点数的场合,方便控制系统的I/O扩展与升级。 该系列产品配备有WINDOWS系统下的动态链接库,方便编写自己的应用软件,还提供了功能丰富、界面友好的MOTION3000调试软件,无需编程即可测试控制卡接口及电机驱动系统。 卓越的运动控制性能 优秀的PVT规划 轻松调用内置PVT函数,您只需要输入位置、时间或位置、速度、时间参数就能实现复杂的轨迹规划,有效缩短开发时间,让应用开发变得更简单。

优秀的速度控制 初速度、加速时间和停止速度、减速时间可独立设置,对称和非对称的T型、S型速度控制功能,加减速快、平顺稳定。 在线变速、在线变位置 速度模式下,T型/S型在线变速(同向/反向);位置模式下,在线变速/变位置,让速度控制、位置控制更加智能、快捷。 直线插补 DMC3000系列运动控制卡支持简单直线插补功能,插补速度快,精度高,最大位置误差在1个脉冲内。

雷赛SMC6480锁螺丝机控制系统的应用介绍

SMC6480锁螺丝机控制系统的应用介绍 深圳市雷赛智能控制股份有限公司刘玉平赵向前 摘要: 编程是自动化设备开发过程中非常重要的一部分,目前有很多种流行的自动化设备开发语言,各种语言的编程难易程度、功能特点均不尽相同,而G代码因其易学易用、编程方便等优点已被广泛应用与数控机床以及其他自动化设备中。 SMC6480运动控制器与传统PLC运动控制系统相比在编程灵活性、插补性能及成本控制方面具有极大优势,不但具有PLC的I/O逻辑控制功能,而且不需要任何扩展模块即可实现高精度高速度直线插补、圆弧插补、螺旋插补等轨迹控制。本文通过一个自动锁螺丝机运动控制系统的案例,详细介绍了使用SMC6480运动控制器通过G代码编程控制锁螺丝动作并自动检测各种IO信号的方法。 关键词:运动控制器、G代码、锁螺丝 一、运动控制器简介 SMC6480运动控制器是雷赛智能自主研发的基于10/100M以太网的通用型独立式运动控制器,可支持多个控制器和PC机组成运动控制系统;也可脱机独立运行,应用于各种需要独立运行的场合。 本控制器基于嵌入式处理器和FPGA的硬件结构,插补算法、脉冲信号的产生及加速和减速控制、I/O信号的检测处理,均由硬件和固件实现,确保了运动控制高速、高精度及系统稳定。该系列控制器可控制4个步进或伺服电机,具有最高5MHz脉冲频率、四轴直线插补、两轴圆弧插补、连续曲线插补、S形曲线速度控制等高级功能。通过简单的编程即可开发出稳定可靠的高性能连续轨迹运动控制系统。 二、全自动锁螺丝机 图1、图2是某公司开发的两款全自动锁螺丝机,核心控制单元均采用SMC6480控制器,使用G代码编程控制整个锁螺丝的过程,其单轴锁螺丝的动作流程如图3所示。

ACS606用户使用说明书

ACS606 数字交流伺服驱动器 使用手册 版权所有不得翻印 【使用前请仔细阅读本手册,以免损坏驱动器】

目录 (1) 前言 (2) 安全注意事项 (3) 概述 (5) 一. 技术特点 (5) 二. 应用领域 (5) 三. 技术指标 (6) 1.技术参数 (6) 2.使用环境 (6) 3.机械安装尺寸 (7) 端口定义与接线 (8) 一. 端口定义 (8) 1.电源输入端口 (8) 2.电机连接端口 (8) 3.数字控制信号端口 (8) 4.编码器及霍尔反馈信号输入端口 (9) 5.RS232C通信端口 (10) 二. 控制信号应用接线 (10) 伺服系统安装与调试 (11) 一. 准备工作 (11) 二. 调试伺服参数 (11) 1.输入模式设置 (11) 2.电流环调节 (12) 3.位置环调节 (13) 三. 指示灯及故障判断 (14) 四. 典型接线图 (15) 版权为深圳市雷赛机电技术开发有限公司所有URL: https://www.360docs.net/doc/9119132397.html,

前言 感谢选用深圳市雷赛机电技术开发有限公司ACS系列交流伺服驱动器。 本手册阐述了ACS606系列交流伺服驱动器(50W~400W范围)的安装、调试、维护、运行等方面。使用前,请认真阅读本手册,熟知本产品的安全注意事项。 本手册,因产品改进、规格、版本变更等原因,将会适当改动,本公司将不另行通知。 在使用本公司产品时如有任何疑问,请查阅相关说明书或致电联系本公司技术服务部,我们会在最短的时间内满足您的要求。电话:(86)755- 26471182,传真:(86)755-26402718,E_mail:***************。 符号与警示标志: 危险:表示该操作错误可能危及人身安全! 注意:表示该操作错误可能导致设备损坏! 版权为深圳市雷赛机电技术开发有限公司所有URL: https://www.360docs.net/doc/9119132397.html,

雷赛电机手册

雷赛电机使用手册 一、简介 雷赛电机是一种高效、稳定、可靠的电机产品,广泛应用于工业自动化领域。本手册将为您介绍雷赛电机的使用方法、参数设置、维护保养以及故障排除等内容,帮助您更好地使用和维护电机。 二、设备安装 1.安装前应仔细阅读本手册,了解电机的安装和使用要求。 2.根据电机的型号和规格,选择合适的安装位置和基础,确保电机安 装稳固、可靠。 3.连接电机与电源时,应确保电源电压与电机额定电压相符,并采用 适当的电缆和开关进行连接。 4.在安装过程中,应遵循电机的旋转方向要求,确保电机正常运转。 三、操作流程 1.接通电源前,应检查电机是否正确安装,确保电机周围环境清洁、 干燥、无杂物。 2.接通电源后,电机应正常运转,无异常声响和振动。如有异常,应 立即停机检查。 3.在操作过程中,应根据实际需求调整电机的转速和转向,以实现所 需的运动方式和运动轨迹。 4.操作结束后,应关闭电机电源,并清理现场。 四、参数设置

1.电机的主要参数包括电压、电流、转速、功率等,应根据实际需求进行设置。 2.在调整电机参数时,应遵循电机的工作特性和使用要求,避免超载或过载。 3.参数设置完成后,应保存并重启电机,以确保参数生效。 五、维护与保养 1.定期检查电机的电源线、电缆和插头是否完好,如有破损应及时更换。 2.定期清理电机表面的灰尘和油污,保持电机清洁。 3.检查电机的轴承、齿轮等部件是否磨损严重,如有问题应及时更换。 4.在保养过程中,应遵循电机的拆装要求和注意事项,避免损坏电机或造成安全事故。 六、故障排除 1.如电机出现异常声响、振动或过热等现象,应立即停机检查。 2.根据电机的故障现象,分析可能的原因并采取相应的措施进行排除。如无法排除,应及时联系专业人员进行检查和维修。 3.在故障排除过程中,应注意安全操作,避免造成人员伤害或设备进一步损坏。 七、安全须知 1.使用电机时应遵守相关安全规定和操作规程,确保人员和设备安全。 2.在操作过程中,应注意防止触电、机械伤害等安全事故的发生。

雷赛混合伺服驱动系统资料

雷赛HBS系列混合伺服系统 雷赛混合伺服驱动系统的特点 雷赛HBS混合伺服技术是雷赛科技基于十几年步进与伺服研发经验开发成功的一种新型驱动技术,结合步进与伺服驱动的双重优势,共有如下十大优点:1、混合伺服与开环步进驱动相比 1)不会发生丢步现象,能够保证电机准确定位; 2)高速性能提升约30%,提高设备工作速度; 3)电机发热下降约20%,延长电机使用寿命 4)电机振动明显减小,运行更平稳; 5)采用变电流控制技术,节省电能消耗; 2、混合伺服与交流伺服相比: 1)无须参数调整,使用更加方便; 2)零速停止稳定,高速停止时不抖动; 3)位置响应极快,尤其适合应用于短距离快速启停场合; 4)本钱降低50%以上; 5)转矩更大,安装尺寸更小; 一、闭换控制技术,与交流伺服系统一样不丢步 HBS混合伺服系统采用闭环控制模式,根据安装在电机轴上的编码器实时反应当前的指令输出信号,指令输入信号与实际输出信号比拟产生位置偏差,然后输入给控制系统进展位置补偿控制,实时纠正电机轴的位置偏差,从而实现步进电机不丢步。 二、有效降低电机发热

由于混合伺服驱动系统是根据负载和速度的变化而实现变电流控制,当负载比拟大和速度比拟高时,驱动器控制电流自动变大,当负载比拟小和速度比拟低时,驱动器控制电流自动变小,从而实现电机的智能控制,此控制方式可以有效降低电机发热,提高效率。 三、较大提升电机的高速性能 与传统的开环步进驱动系统不同,混合伺服驱动系统采用最优化的电流控制方式,在一样运行条件下,混合伺服系统的高速性能要比开环步进提高20%以上,有效转矩能提升到保持转矩的70%以上,从而使电机在高速运动过程中还能保持高转矩运行,保证步进电机在工作过程中不丢步。 四、减小电机加减速和高速定位响应时间 由于交流伺服系统是通过编码器实时反应电机轴的当前位置与指令位置进展比拟,通过

【雷赛智能】L7EC系列伺服适配雷赛PLC实现运动控制

【雷赛智能】L7EC系列伺服适配雷赛PLC 实现运动控制 L7通用型交流伺服系统L7通用型交流伺服系统是雷赛智能历时十七年研发和七代升级精心打造的,包含EtherCA T总线、RS485、脉冲三种通讯类型。上市以来,L7系列凭借高性能、高品质、高稳定性、易用性等众多优点,在电子制造、激光、雕刻、注塑机械手、机床、物流、纺织、医疗、新能源等行业自动化设备上成熟运用,并获得一致好评!为了让大家轻松玩转L7EC系列与欧姆龙、基恩士、倍福、雷赛等主流主站之间的连接与调试,小编将为大家安排一系列的培训课堂。本期为大家介绍与雷赛PLC主站的关键连接步骤:Part 01、新建工程,配置驱动器参数打开软件,新建工程,选择对应的PLC 版本和编程语言。点击“PMC600“,在对应主界面中点击“扫描网络“,即可实现PLC和编程软件通讯连接,点击“PMC控制器信息“,读取PLCIP地址,或者设置新的IP地址。点击“工具“,选择设备存储库,将ESI文件导入,控制器即可识别对应的驱动器。点击“Network“,弹出系统配置页面,根据驱动器的实际配置,选择对应的驱动器即可。选择对应的驱动器后,进行PDO配置:通用页面勾选“启用专家设置“,在专家过程数据页面进行PDO配置。可以根据需要增加或者删除PDO。点击“编译”,然后将对应的配置下发到PLC。Part 02、驱动器简单运行在伺服轴下添加CIA402轴,在此页面进行轴运动参数配置。打开主程序页面,编写使能模块和JOG模块,编译程序,将程序下发到PLC,点击启动,在使能功能块,将对应的参数设置为1,即可实现驱动器使能,在JOG功能块,将正转或者反转参数设置为1,即可实现正转或者反转。以上是本期视频的分享,更多精彩视频教程,敬请期待。雷赛智能“视频课堂”将持续进行,欢迎文末留言,提出您对培训课程的需求,我们将尽快安排您需要的课程上线。

雷赛DM556驱动器

• •主要特点 •DM556 产品概述 DM556是雷赛公司新推出的数字式,,采用最新32位DSP技术,用户可以设置512内的任意细分以及额定电流内的任意电流值,能够满足大多数场合的应用需要。由于采用内置微细分技术,即使在低细分的条件下,也能够达到高细分的效果,低中高速运行都很平稳,噪音超小。驱动器内部集成了参数自动整定功能,能够针对不同电机自动生成最优运行参数,最大限度发挥电机的性能。 主要应用领域 适合各种中小型自动化设备和仪器,例如:雕刻机、打标机、切割机、激光照排、绘图仪、数控机床、自动装配设备等。在用户期望小噪声、高速度的设备中应用效果特佳。

驱动器功能说明 参数设定 DM556驱动器采用八位拨码开关设定细分精度、动态电流和半流/全流。详细描述如下:

工作电流设定 微步细分设定

雷赛步进驱动器DM556 DM556 雷赛步进驱动器DM556 主要规格/特殊功能 •产品规格: 特性高性能、低价格供电电压最高达40VDC;29VAC最高驱动电流可达2.0A(H420); 3.5A(HA335B)具低速减振功能可选半步或整步方式光隔离信号输入静止时电流自动减 半可驱动任何2.0A(H420);3.5A(HA335B)相电流以下的两相、四相混合式电机应用领 域适合各种中小型自动化设备和仪器,例如:打标机、贴标机、割字机、绘图仪、小型 雕刻机、数控机床、拿放装置等。 概述 H420/HA335是采用中国专利技术生产的高性能步进驱动器(H = Half Step),适合驱动中 小型的任何两相或四相混合式步进电机。由于采用新型的双极性恒流斩波驱动技术,使 用同样的电机可以比其它驱动方式输出更大的速度和功率。此驱动器还具有其它许多理 想特点,例如:单电源供电、光隔离输入、整步半步可选、低速减振等。每秒两万次的 斩波频率,可以消除驱动器中的斩波噪声。另一有用的功能是静止自动减流:当电机处 于停止状态时,输出电流可自动降至一半值,从而减少电机和驱动器的发热。驱动器侧 面装有六位拨码开关组,可用来轻易设定电机工作电流(共15等级)、静态减流和半步工 作方式。HA335是一可以接受交流输入(10-29VAC)的新型设计,它也可以接受 18-46VDC直流输入。使用交流输入时,用户不必购买自制直流电源,仅需接一个几十 瓦的变压器即可,因此可节省成本,使用更加方便。 产品概述 DM556是雷赛公司新推出的数字式,,采用最新32位DSP技术,用户可以设置512内的任意细分以及额定电流内的任意电流值,能够满足大多数场合的应用需要。由于采用内置微细分技术,即使在低细分的条件下,也能够达到高细分的效果,低中高速运行都很平稳,噪

2020年中国工业自动化控制行业发展现状分析

2020年中国工业自动化控制行业发展现状分析 2019年中国自动化市场规模达到1865亿元,较2018年增长1.8%。随着《智能制造发展规划(2016-2020年)》战略目标的逐步实现,作为智能制造装备业重要组成部分的工业自动化控制行业有望迎来良好的发展机遇。 20世纪80年代后行业迅速发展 工业自动化技术是一种运用控制理论、仪器仪表理论、计算机和信息技术,对工业生产过程实现检测、控制、优化、调度、管理和决策,达到增加产量、提高质量、降低消耗、确保安全等目的的综合性技术。工业自动化控制系统作为智能制造装备的重要组成部分,是发展先进制造技术和实现现代工业自动化、数字化、网络化和智能化的关键,是实现产业结构优化升级的重要基础,广泛应用于机床、风电、纺织、起重、包装、电梯、食品、塑料、建筑、电子、暖通、橡胶、采矿、交通运输、印刷、医疗、造纸和电源等行业的生产设备。 2019年中国自动化市场规模达到1865亿元,较2018年增长1.8%;预计到2022年,中国自动化市场规模将达到2085亿元。随着《智能制造发展规划(2016-2020年)》战略目标的逐步实现,作为智能制造装备业重要组成部分的工业自动化控制行业有望迎来良好的发展机遇。 国产人机界面生产商发展势头良好 工控产品中的人机界面(HMI)、可编程逻辑控制器(PLC)、伺服系统、步进系统、变频器、传感器、仪器仪表、数据采集与监视控制系统(SCADA)、分布式控制系统(DCS)、现场总线控制系统(FCS)等是智能制造装备的核心产品。 近年来,我国经济发展迅速,制造业的较多领域成为世界工厂,快速增长的工控产品需求,以及良好的投资收益预期吸引了众多国际知名工业自动化控制产品生产企业在我国投资设立全资或者合资企业。目前,欧美、日本及台湾知名人机界面制造商凭借品牌和整体解决方案等方面的优势,在我国人机界面市场中占据了较大的市场份额。

步进电机编程

步进电机编程(总5页) -CAL-FENGHAI.-(YICAI)-Company One1 -CAL-本页仅作为文档封面,使用请直接删除

第一讲步进电机驱动器的使用 步进电机控制原理图 项目开发中采用了雷赛科技公司型号为DM542的步进电机驱动器。处理器型号为STC89C52,本项目中选用57系列步进电机,力矩5NM,满足要求。细分数可以通过驱动器上的拨码开关(红圈中就是拨码开关)设定,细分数就是步进电机转一圈需要的脉冲数。

DM542配57电机典型接法如图所示 使用步进电机驱动器大大降低了驱动步进电机工作的难度,只需要用三路信号就可以驱动步进电机运动。他们分别是PUL-、DIR-和ENA-,具体情况看下表。硬件设计时PUL+、DIR+和ENA+需要接直流+5V。

为了能够使步进电机能够正常运转,单片机通过IO口给出的信号要满足上图中的时间顺序。首先需要让使能信号置为高电平。这就相当于告诉驱动器,我要开始控制你了。 然后就是给驱动器一个方向信号,高速驱动器要控制电机顺时针转动还是逆时针转动。而且这个时间是有要求的,要大于5微秒。就是使能信号给出后,大于5微秒后再给一个方向信号。 接下来就是让步进电机转起来,通过单片机输出脉冲信号,送给步进电机驱动器,进而控制步进电机。方向信号给了之后,也是需要至少大于5微秒之后再给脉冲控制信号。

具体操作请看下面的程序 //本程序可以实现蜗轮蜗杆减速器输出轴转动1圈,细分数400,减速比1:10,4000个脉冲转一圈 //------------头文件区------------------------------------------------------------------------------------- //包括:单片机芯片的配置头文件 // 其他编程中需要调用的C语言自带头文件 // 自己编写的专用头文件 //--------------------------------------------------------------------------------------------------------- #include //-----------自定义区-------------------------------------------------------------------------------------- //包括:常量、变量、符号等 //--------------------------------------------------------------------------------------------------------- sbit pul=P0^2; // 脉冲 sbit dir=P0^1;// 方向 sbit ena=P0^0;// 使能

雷赛步进电机选型参考

步进电机的种类和特点 步进电机在构造上有三种主要类型:反应式(Variable Reluctance,VR)、永磁式(Permanent Magnet,PM)和混合式(Hybrid Stepping,HS)。 *反应式 定子上有绕组、转子由软磁材料组成。结构简单、成本低、步距角小,可达1。2°、但动态性能差、效率低、发热大,可靠性难保证。 *永磁式 永磁式步进电机的转子用永磁材料制成,转子的极数与定子的极数相同。其特点是动态性能好、输出力矩大,但这种电机精度差,步矩角大(一般为7。5°或15°)。 *混合式 混合式步进电机综合了反应式和永磁式的优点,其定子上有多相绕组、转子上采用永磁材料,转子和定子上均有多个小齿以提高步矩精度。其特点是输出力矩大、动态性能好,步距角小,但结构复杂、成本相对较高。 按定子上绕组来分,共有二相、三相和五相等系列。最受欢迎的是两相混合式步进电机,约占97%以上的市场份额,其原因是性价比高,配上细分驱动器后效果良好.该种电机的基本步距角为1。8°/步,配上半步驱动器后,步距角减少为0。9°,配上细分驱动器后其步距角可细分达256倍 (0.007°/微步).由于摩擦力和制造精度等原因,实际控制精度略低。同一步进电机可配不同细分的驱动器以改变精度和效果。 雷赛步进电机系列 雷赛两相、三相混合式步进电机,采用优质冷轧钢片和耐高温永磁体制造,产品规格涵盖35-130范围。具有温升低、可靠性高的特点,由于其具有良好的内部阻尼特性,因而运行平稳,无明显震荡区。可满足不同行业、不同环境下的使用需求。 雷赛采用专利技术研发的三相步进电机驱动系统,更好地解决了传统步进电机低速爬行、有共振区、噪音大、高速扭矩小、起动频率低和驱动器可靠性差等缺点,具有交流伺服电机的某些运行特性,其运行效果可与进口产品相媲美. 两相步进电机命名规则 <〉 上例表示机座号为57mm,两相混合式,步距角为1.8度,扭矩0。9Nm,设计序号01,单边出轴的电机。 三相步进电机命名规则 〈〉 上例表示机座号为57mm,三相混合式,步距角为1.8度,扭矩0。9Nm,设计序号01,单边出轴的电机.

S7-1214C与第三方步进电机的组态及编程

S7-1214C与第三方步进电机的组态及编程自S7-1200的PLC面市以来,一直没有找个机会自己亲手验证一下 S7-1214C与步进电机的组态及编程,之前做过第三方连接步进电机的项目。主要原因还是硬件条件的不满足,这不,机会来了。前不久,在给工厂修理一台激光刻字设备时,遇到某运动轴用的是雷赛86HS80步进带刹车电机故障。虽然最后通过仔细调整刹车间隙,搞定的设备的故障。但是,为确保以后再次遇到类似的问题,而无法及时提供设备备件前提下,耽误生产,我还是提前预订了一个第三方的步进电机及驱动器。这样也给我验证创造了硬件条件,待有时间验证一下,S7-1200是如何与第三方步进电机实现硬件组态及编程的。 硬件: 1)一个S7-1214C DC/DC/DC,订货号:6ES7 214-1AG40-0XB0 2)一个86系的步进电机+相应的驱动器 3)一个20A的西门子24V电源(步进驱动器及plc电源) 4) Portal V15版本 组态及编程: 1)创建一个验证项目,添加cpu(S7-1214C),双击“工艺对象”,选择“运动控制”的TO_PositioningAxis V6.0版本: 2)“确定”后,系统自动生成名称“轴_1”的硬件组态界面,一步一步类似于向导的组态下去吧,在“常规”选项中选择PTO(脉冲输出方式)控制:

3)在“驱动器”选项中选择脉冲发生器Pulse_1(V4.2版本支持4个轴的组态),信号类型:脉冲+方向(默认);脉冲输出(Q0.0)、方向输出(Q0.1)的地址(默认)。因为连接的是步进电机,步进驱动器没有反馈信号,这里仅仅只提供PLC给步进驱动器电源的控制信号Q0.2,提供外部继电器驱动,将步进驱动器所需的24V电源提供给步进驱动器,该窗口的其它选项不选择。 感觉,该窗口非常简洁的描述了硬件连接图示,PTO信号、启动命令给驱动器,驱动器再启动电机,驱动器反馈这些基本的步进、伺服控制方式。

相关主题
相关文档
最新文档