DMC-B140的VB.NET编程问题 点击:1576 | 回复:16



莫小西

    
  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 7回
  • 年度积分:0
  • 历史总积分:16
  • 注册:2012年12月07日
发表于:2013-03-26 19:56:53
楼主

各位前辈,我现在用的是DMC-B140,用vb.net编程,现在遇到一些问题,请各位帮帮忙,谢谢。

 G1_control.commandValue("PA,, 7500 ;BGC;AMC")
                Do Until G1_control.commandValue("SCC") = 1

                 Application.DoEvents()

                  LOOP

G1_control.commandValue("PA,, -7500 ;BGC;AMC")
                Do Until G1_control.commandValue("SCC") = 1
                Application.DoEvents()
                Loop           

我想做的是让C轴先向下运动3mm,然后再向反方向运动3mm,但是程序会报错,报错的原因是没有足够的

时间读取下一个命令,但是我已经用SCC这个命令来判断C轴是否已经停止,为什么还会有错呢?之后在

帖子中看到刘工建议用_BGX来判断当前轴的运动状态,G1_control.commandValue("_BGC")但是程序不

识别该指令,是我的格式不正确,还是有其他的原因呢?

 

还有个问题,看资料上,应该是选用TP来反馈当前轴卡的运动位置,但是通过GAILTOOL来观察时,

TPX的数值只有我发送的脉冲数的一半,并且不稳定,一直在跳变,是该选用TD来反馈吗?




刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8239回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2013-03-28 09:08:38
1楼

1、AMC本身就是一个需要时间的指令

 

2、_BGC不是一个指令,只是一个参数,不能作为指令单独使用。要查询这个参数的状态,需要使用指令 MG_BGC

 

3、TP值得到的是实际编码器反馈的计数值,一般来说,在停止状态下有一个分辨率的跳动是正常的,当然不跳也是正常的。这个数值实际反映了运动的状态。TD得到的是发送脉冲的计数值。如果TP与TD差一半,多半是伺服的电子齿轮比没设好。

莫小西

  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 7回
  • 年度积分:0
  • 历史总积分:16
  • 注册:2012年12月07日
发表于:2013-03-30 19:01:23
2楼

回复内容:

对: 刘岩利  1、AMC本身就是一个需要时间的指令 2、_BGC不是... 内容的回复!


 

非常感谢刘工的热心解答。

我还有一些困惑之处

1)如果电子齿轮比设置正常的情况下,TPX的值是不是应该几乎等于TDX的值,有一个脉冲的差别是正常的,我的理解对吗?我上次问题中提到值会跳变,通常会有6,7个脉冲的变化,这还正常吗?

2)是通过调用TVX的命令来反馈各轴运动的速度吗?通过galil tool 观察TVX的值,一直在跳变。轴卡运动的速度和脉冲的比例是由哪些因素决定的?

3)机台完成的主要任务是做画线,通常只用PA,PR,LM等命令,很不理解JOG运动命令,跟随指令,电子齿轮同步功能这些是特定的功能才需运用吗?

我是一只菜鸟,还请刘工多包容我提的这些比较幼稚的问题

 

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8239回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2013-04-01 10:29:39
3楼

1)如果电子齿轮比设置正常的情况下,TPX的值是不是应该几乎等于TDX的值,有一个脉冲的差别是正常的,我的理解对吗?

一般来说,是建议电子齿轮比这样设置。

 

我上次问题中提到值会跳变,通常会有6,7个脉冲的变化,这还正常吗?

这要看您使用的伺服和机械了。有些号称高分辨反馈的伺服,但是实际应用中自己就不能定位在1-2个分辨率以内。当然,也可能是机械本身有扰动或者驱动器参数不太合适。

 

2)是通过调用TVX的命令来反馈各轴运动的速度吗?通过galil tool 观察TVX的值,一直在跳变。轴卡运动的速度和脉冲的比例是由哪些因素决定的?

TVX得到的是编码器反馈的速度,而且是最近0.25s内的平均速度。鉴于您的编码器反馈值就在不停的跳,那么TVX的值肯定也是不停的跳。

 

3)机台完成的主要任务是做画线,通常只用PA,PR,LM等命令,很不理解JOG运动命令,跟随指令,电子齿轮同步功能这些是特定的功能才需运用吗?

作为通用运动控制卡,当然要提供很多功能给不同的用户使用。这些功能指令本身对于其它用户可能是基本功能,对您来说,也可以算是特定的功能。这个没有严格的标准定义。

莫小西

  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 7回
  • 年度积分:0
  • 历史总积分:16
  • 注册:2012年12月07日
发表于:2013-05-28 18:55:22
4楼

回复内容:

对: 刘岩利  1)如果电子齿轮比设置正常的情况下,TPX的值是不是应... 内容的回复!


 

刘工,您好,我最近又遇到一些问题,还请您帮忙答疑,非常谢谢

1) 我们用sp xx的命令设置单轴运动时轴的速度,如果我要求A轴速度为10mm/s,那么sp xx的xx 该设为多少呢,这个中间的比例怎么换算呢?加速度又是怎么换算的?

2)我现在想让机台做动作,Z轴放下,画一条线(可以是直线或者是斜线),抬起,然后移动到其他点,再下降Z轴,画线,抬起,多次重复这个动作,但是每次画线的位置不一样。

想请教下是采用多轴运动还是插补(A,B轴)或插补三轴的的方式来完成这个动作呢?它们有什么区别吗?

我现在选用的插补(A,B轴),但是遇到了一个问题,在画完一条线时,是用下列语句来判断这个插补动作是否完成,

Do UntilG1_control.commandValue("MG_BGA") = 0 And G1_control.commandValue("MG_BGB")= 0

Application.DoEvents()

Loop

又因为DOevents要处理的动作就是Z轴画线产生的相关消息,那么即使这时已经查询插补运动已经完成了,但是还因为DO EVENT这个动作一直才进行,所以不能跳出这个循环,您有什么好的建议吗?

3)机台进行的另一个动作是Z轴放下,画一圈线,再抬起,如果我采用的是三轴插补的运动方式,就是将所到所要运动的指令都存放在LI指令中,只有在整个插补运动完成后才作一个判断,那么我该怎么判断LI中存放的那些指令是否执行完?

4)插补运动中速度Vs=sqr(Va*2+Vb*2),如果我要画一条斜线的速度为10mm/s,那是否设置Vs=10即可?

5)是不是想让机台运动的更精确,都应该在每个动作是都需添加加速度和减速度的指令呢?加速度和减速度又需怎么设置才合理呢

 

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8239回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2013-05-29 11:11:22
5楼

"1) 我们用sp xx的命令设置单轴运动时轴的速度,如果我要求A轴速度为10mm/s,那么sp xx的xx 该设为多少呢,这个中间的比例怎么换算呢?加速度又是怎么换算的?"

SP指令,是以输出的指令脉冲的频率为单位的。至于和您的机构实际运动速度中间的比例是多少,这个我是不可能知道的。您和机构设计以及电气设计人员确认一下,一个指令脉冲对应的移动距离是多少。加速度也是同样的转换方式。

 

 

“2)我现在想让机台做动作,Z轴放下,画一条线(可以是直线或者是斜线),抬起,然后移动到其他点,再下降Z轴,画线,抬起,多次重复这个动作,但是每次画线的位置不一样。

想请教下是采用多轴运动还是插补(A,B轴)或插补三轴的的方式来完成这个动作呢?它们有什么区别吗?

我现在选用的插补(A,B轴),但是遇到了一个问题,在画完一条线时,是用下列语句来判断这个插补动作是否完成,

Do UntilG1_control.commandValue("MG_BGA") = 0 And G1_control.commandValue("MG_BGB")= 0

Application.DoEvents()

Loop

又因为DOevents要处理的动作就是Z轴画线产生的相关消息,那么即使这时已经查询插补运动已经完成了,但是还因为DO EVENT这个动作一直才进行,所以不能跳出这个循环,您有什么好的建议吗?”

比较简单直接的建议就是改善您“处理的动作就是Z轴画线产生的相关消息”的相关程序代码。

如果需要其它建议,那么还需要确认您的动作要求,比如画线的动作是否连续,画两根线之间,有没有其它的动作要做?

至于是两轴插补还三轴插补来实现画线的动作,主要区别是速度的变换,如果是三轴插补,Z轴的升降会比较生硬,需要额外处理一下。用两轴的简单一点。

 

“3)机台进行的另一个动作是Z轴放下,画一圈线,再抬起,如果我采用的是三轴插补的运动方式,就是将所到所要运动的指令都存放在LI指令中,只有在整个插补运动完成后才作一个判断,那么我该怎么判断LI中存放的那些指令是否执行完?”

无论是两轴还是三轴插补,都可以查询操作数 _CS 得到当前执行的是第几段插补线

 

“4)插补运动中速度Vs=sqr(Va*2+Vb*2),如果我要画一条斜线的速度为10mm/s,那是否设置Vs=10即可?”

当然不行,除非您的机构是一个脉冲就可以移动1mm的,否则,就要做好比例换算。

 

“5)是不是想让机台运动的更精确,都应该在每个动作是都需添加加速度和减速度的指令呢?加速度和减速度又需怎么设置才合理呢”

您是指插补的线段么?如果下一条线段与当前的线段的方向夹角不大 的话,就不必额外的加、减速处理。如果是一般的定位运动,则不需要每次都重新设置,控制卡会记得并使用您上次的设置值。

加速度和减速度的设置,是以符合设备需要为合理的标准。首先,驱动部分要能够实现,加速和减速都是要靠电机输出的力或力矩来实现的,如果电机本身输出的力矩就不够,设置过的啊的加速度无法实现,反而回带来问题。其次,机构要能承受,设备不会因为过大的加速度带来严重的晃动。不要反复运动几次以后,机构就散架了。最后,在满足前两点的前提下,数值尽量大一点,提高效率。

莫小西

  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 7回
  • 年度积分:0
  • 历史总积分:16
  • 注册:2012年12月07日
发表于:2013-05-29 14:37:34
6楼

回复内容:

对: 刘岩利  "1) 我们用sp xx的命令设置单轴运动时轴的速度,... 内容的回复!


多谢刘工热情解答,可能是我表达的有些不清楚,有些问题还是不太理解,还请帮忙

 1)现在机台的设置是A轴运动1mm,需要发送1000个脉冲,那么对应的1mm/s的速度是否也是就是设定SP1000呢?加速度?

2)

如果我要让机台执行上图这个动作,我可以采取这种方法,

第一种就是比较笨拙的,采用PAA,PAB的多轴运动,每次运动到一个点,就用MG_BG的方式判断是否完成,完成再进行下一个点;

第二种是采用插补方式,大概就是

我们用一个定时器不停的获取机台当前的坐标,设为xx,yy

a)

PA x0,y0

do until()

loop

PA,,z1                                                    

do until()

loop

LMAB

LI  x1-xx, y1-yy

LI  x2-xx, y2-yy

……

LE

PA,,-z1

BG

这段程序可以准确的完成图中的动作?

b)

把上段程序中间那段的换成

LMAB

LI  x1-x0, y1-y0

LI  x2-x1, y2-y1

……

LE

这样写和上一段程序是否有区别吗?

因为我担心机台由于从(x0,y0) 走到(x1,y1),是否有可能因为速度等相关问题,还未完全走完,就又开始向(x2,y2)运动,是否采取第一段程序要更精确?

c)如果不想调单独调用PA这个指令,是否采用三轴插补的也可满足

LMABC

LI  x0-xx,x0-yy,0

LI  0,0,Z1

LI  x1-x0, y1-y0,0

LI  x2-x1, y2-y1,0

……

LI  0,0,-z1

这样可行吗 ?

 

 3)插补运动中速度Vs=sqr(Va*2+Vb*2),我要画一条斜线的速度为10mm/s,假设我们的比例是10mm/s对应SP=10000,那VS=10000还是VS=sqr(10000*2+10000*2)

4)上图中的拐角是否也只能加速,减速的方式去改善?

 

 

 

 

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8239回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2013-05-29 18:07:58
7楼

1、是的,SP1000

 

2、不知道你写出来的是VB的程序,还是DMC程序,VB程序应该不能识别PA这样的指令,而DMC程序中不能包含do指令的。如果只是示意流程的话,就不好说细节有没有问题。

    动作是可以实现的,但是每两个线段之间都是拐直角,建议在没个线段的末端加山减速,否则多半有震荡的。

    在有,就是不理解xx、yy、x0、y0是什么意思,尤其xx和yy,是运动中随时要变的么?

 

3、VS10000

 

4、应该说是必须的

莫小西

  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 7回
  • 年度积分:0
  • 历史总积分:16
  • 注册:2012年12月07日
发表于:2013-05-30 09:37:24
8楼

复内容:

对: 刘岩利  1、是的,SP1000 2、不知道你写出来的是VB的程... 内容的回复!


 刘工您好,很感谢您每次热心的解答

我上面那段程式的确是个大概的流程,上面图中的线段是由7个点构成的,我用(x0,y0),(x1,y1),(x2,y2)……表示这个7个点的坐标,(xx,yy)是我用一个定时器不断抓取当前机台反馈的位置,z1是机台抬起或下降的距离;

两轴插补程序:

  G1_control.commandValue("LMAB;LI (x0-xx) ,(y0-yy) ;LE;BGS)

  Do Until G1_control.commandValue (MG_BGA") = 0 And                                                                     G1_control.commandValue("MG_BGB") =0
   Application.DoEvents()

Loop

 

 G1_control.commandValue("PA,,z1;BGC;")
  Do Until G1_control.commandValue("MG_BGC") = 0
    Application.DoEvents()

   loop

 

  G1_control.commandValue("LMAB;VS10000;VA100000;VD100000;

                                                           LI (x1-x0) ,(y1-y0) ;

                                                           LI (x2-x1) ,(y2-y1) ;

                                                            ……

                                                           LI (x6-x5) ,(y6-y5) ;

                                                            LE;BGS)

Do Until G1_control.commandValue (MG_BGA") = 0 And                                                                     G1_control.commandValue("MG_BGB") =0

   Application.DoEvents()

Loop

 

 G1_control.commandValue("PA,,-z1;BGC;")
  Do Until G1_control.commandValue("MG_BGC") = 0
    Application.DoEvents()

   loop

 

三轴插补程序

  G1_control.commandValue("LMABC;VS10000;VA100000;VD100000;

                                                LI (x1-x0) ,(y1-y0),0;

                                                LI 0 ,0,z1;

                                                LI (x2-x1) ,(y2-y1),0;

                                                LI (x3-x2) ,(y3-y2),0;

                                                ……

                                                 LI (x6-x5) ,(y6-y5),0;

                                                 LI 0 ,0,-z1;

                                                 LE;BGS“) 

Do Until G1_control.commandValue (MG_BGA") = 0 And                                                                     G1_control.commandValue("MG_BGB") =0  And 

              G1_control.commandValue("MG_BGC") =0

   Application.DoEvents()

Loop

(1)请教刘工这两段程序是否都能实现图中的动作?除了您上次回答说,三轴插补运动中Z轴升降生硬,其他是否无区别?

 

(2)您说“但是每两个线段之间都是拐直角,建议在没个线段的末端加山减速,否则多半有震荡的。”

是否用“VA100000;VD100000;”可以满足?还是需要另加其他指令?

 

(3)因为插补运动是将多个指令依次执行完成,是否会有从第一点走向第二点,第二点还未到达,就向第三点运动的可能?

 

 

 

 

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8239回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2013-05-30 14:20:10
9楼

1、是的

 

2、不只是设置VA、VD的问题,也不需要加新的指令,而是在每个LI指令中加上速度参数。

 

3、单纯就控制起而言,肯定是规划完一段才开始下一段。但是如果您的电机运动明显滞后于控制卡的发送脉冲,那么实际的运动是有肯能出现这个情况的。而在脉冲信号控制伺服的工作模式下,通常电机的运动都会滞后于脉冲信号(而且滞后量基本正比于脉冲频率),只是滞后量的大小是否会产生足够影响的问题。

莫小西

  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 7回
  • 年度积分:0
  • 历史总积分:16
  • 注册:2012年12月07日
发表于:2013-06-03 14:30:37
10楼

回复内容:

对: 刘岩利  1、是的 2、不只是设置VA、VD的问题,也不需要加新... 内容的回复!


 刘工,还得和您请教个问题

每个线段的末端加上减速,是在每个LI指令中加上速度参数,我不太明白,能不能请您举个例子?

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8239回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2013-06-03 15:56:33
11楼

比如:

LI 1000,0,0 <10000>1000

莫小西

  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 7回
  • 年度积分:0
  • 历史总积分:16
  • 注册:2012年12月07日
发表于:2013-06-06 08:41:12
12楼

回复内容:

对: 刘岩利  比如:LI 1000,0,0 <10000>1000 内容的回复!


 刘工,不好意思,我还得请您确认下

LMAB;VS10000;VA100000;VD100000;

LI 1000,0<10000>1000

LI  0,1000<10000>1000

LI  -1000,0<10000>1000

LE;BGS

 

 这样写是否就可以实现10mm/s(SP10000)的速度来走一段折线

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8239回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2013-06-06 13:15:38
13楼

但是,由于在每个线段的末端都要减速,在下一段开始的时候再加速,估计实际运行的平均速度只有一半多一点吧。

Tiger周

  • 精华:0帖
  • 求助:2帖
  • 帖子:15帖 | 34回
  • 年度积分:0
  • 历史总积分:58
  • 注册:2014年5月27日
发表于:2014-12-30 13:00:44
14楼

刘工,一个4轴联动的运动控制系统。其中XYW轴做3轴线性插补运动,使用CAS; LMXYW。还有一个Z轴与XY两个轴的矢量运动成电子齿轮比的速度关系(注意:Z轴和W轴无任何关系)。请问在Galil运动卡中如何实现此任务? (我看了资料只能用GAZ=S, 但这样Z只能与W关联了?)

Tiger周

  • 精华:0帖
  • 求助:2帖
  • 帖子:15帖 | 34回
  • 年度积分:0
  • 历史总积分:58
  • 注册:2014年5月27日
发表于:2015-01-03 11:18:05
15楼

老兄我也用VB.net编程,虽然很多人用C#, 但我就是坚持自己的。同时根据图形和图像处理,结合Galil一起做项目..

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 7回
  • 年度积分:0
  • 历史总积分:14
  • 注册:2006年8月18日
发表于:2015-11-13 10:13:25
16楼

我也用vb.net,现在可以检测到位置,可惜就是不会调用动作的函数,请给指教一下吧!谢谢!sunguirong_2001@163.com


回复内容:

对: Tiger周 老兄我也用VB.net编程,虽然很多人用C#, 但我就... 内容的回复!



热门招聘
相关主题

官方公众号

智造工程师