关于@RND、@ABS两个参数的理解 点击:829 | 回复:8



zyz358052984

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 5回
  • 年度积分:0
  • 历史总积分:13
  • 注册:2015年7月19日
发表于:2015-09-12 13:46:47
楼主

如图所示的代码中,@RND和@ABS两个参数各代表什么意思?改变他们的数值对于电机的运动有什么影响?请知道的大神指点指点




刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8240回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2015-09-14 10:06:59
1楼

@RND和@ABS是两个函数,在GALIL指令中,@开头的保留字都是函数。@RND是取整,@ABS是取绝对值。

zyz358052984

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 5回
  • 年度积分:0
  • 历史总积分:13
  • 注册:2015年7月19日
发表于:2015-09-14 11:06:33
2楼


回复内容:

对: 刘岩利 @RND和@ABS是两个函数,在GALIL指令中,@开... 内容的回复!

谢谢刘工的回答,但是我现在还不是很明白这个函数能对我电机运动产生什么影响?而且我经常在使用MG信号的时候返回的信号收不到,不知道是为什么?

netluck

  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 93回
  • 年度积分:0
  • 历史总积分:108
  • 注册:2015年8月30日
发表于:2015-09-14 14:59:16
3楼

学习了,谢谢,高手很多啊


刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8240回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2015-09-15 10:08:56
4楼

但是我现在还不是很明白这个函数能对我电机运动产生什么影响?

@RND产生的影响是:函数的计算结果是C轴的移动距离。

@ABS产生的影响是:函数的计算结果决定是否推出循环。

 

而且我经常在使用MG信号的时候返回的信号收不到,不知道是为什么?

您是怎么使用MG指令的?

zyz358052984

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 5回
  • 年度积分:0
  • 历史总积分:13
  • 注册:2015年7月19日
发表于:2015-09-15 12:49:32
5楼

回复内容:

对:刘岩利 但是我现在还不是很明白这个函数能对我电机运动产生什么影响?@RND产生的影响是:函数的计算结果是C轴的移动距离。@ABS产生的影响是:函数的计算结果决定是否推出循环。 而且我经常在使用MG信号的时候返回的信号收不到,不知道是为什么?您是怎么使用MG指令的?     内容的回复:

如上图所示,在电机达到指定位置时,用AM、WT来等待电机完成任务。直到电机到达指定位置再用MG来向pc机发送完成信号,但是经常性的没有反馈,不知道是不是软件的问题?还是我的用法上出错?

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8240回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2015-09-16 09:12:57
6楼

直到电机到达指定位置再用MG来向pc机发送完成信号,但是经常性的没有反馈,不知道是不是软件的问题?还是我的用法上出错?

可能的原因有:

1、MG指令确实没有被执行

比如循环没有结束,如果传动机构本身的误差比较大,这个也是可能发生

 

2、MG指令将没有将信息发送到PC

在非PCI接口的控制卡中,经常出这样的问题。这样的卡通常有一个串口和一个网口(有的型号是两个,但是逻辑上可以当作一个)。一个网口支持使用四个、6个或者8个句柄(handle)通讯。这样就相当于有5个、7个或者9个不同的通讯通道。而这些通讯通道未必都指向pc,有些可能根本就是空的。MG指令如果不明确制定使用的信息通道,则使用 CF 指令定义的默认通道。如果也没有明确的定义CF的话,那就不知道MG指令把信息发到哪里去了。(我看您的程序中把CFA这个指令注释掉了)。

 

3、PC端软件漏过了MG指令发来的信息

这个,要看您的软件才能知道。

 

建议改善方案:

尽量不要在DMC程序中使用 MG 指令

尽量不要依赖控制卡主动向外发送信息,而是有PC对信息进行查询。对于上面的程序来说,随便设置个变量表示当前运动是否结束的状态,程序执行前和变量POSITC一起赋值。比如设置MOVEEND=0,运动到位后,程序中设置 MOVEEND=1,PC程序去检查 MOVEEND的值,而不是检查有没有 MG 发来的信息。

 

另外,从您的问题来看,这个程序多半不是您自己写的,不清楚您是否有修改的能力。如果真的不是,以上都是废话,您和程序的原作者沟通比较有效率。

zyz358052984

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 5回
  • 年度积分:0
  • 历史总积分:13
  • 注册:2015年7月19日
发表于:2015-09-16 19:33:31
7楼


回复内容:

对: 刘岩利 直到电机到达指定位置再用MG来向pc机发送完成信号,但... 内容的回复!

刘工的回复简直没有任何漏洞,非常感谢。这个我程序我能自行更改,只不过最初对于MG指令的理解不是非常透彻,学习了,谢谢!

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8240回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2015-09-17 12:05:25
8楼

这个我程序我能自行更改,

如果您要该这个程序的话,有几处细节不妨考虑一下。

1、延迟等待时间

BG C

AM C

WT 4

运动结束后,等待4ms,然后读当前编码器位置。这个4ms是不是足够,可能是要考虑的。控制卡认为运动结束了,电机动作结束了,运动机构稳定了,这三者之间依次是有延迟的,如果是比较大的减速度,可能后面的指令

pTemp1=_TPC

读到的就不是机构真正停下来时的位置。依据这样的位置做补偿,肯定会出现误差。

2、循环的异常出口

JP#XMOVECL,@ABS[pTemp2]>=3

如果定位误差大,则继续修正,如果定位误差小,则退出循环。这个是循环的正常出口,建议增加一个异常的出口,比如累计修正50次后,退出循环,并通过设置变量之类的方式提示异常状态。

3、位置修正的异常保护

PRC=@RND[pTemp2*1.6]

在执行这个指令前,先检查下_TDC与_TPC*1.6之间的偏差是否过大,如偏差大于正常范围,则不再动作,做异常状态退出。在编码器反馈出问题的时候,如果没有这个处理,机构会一直走到极限处。


热门招聘
相关主题

官方公众号

智造工程师