直到电机到达指定位置再用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 发来的信息。
另外,从您的问题来看,这个程序多半不是您自己写的,不清楚您是否有修改的能力。如果真的不是,以上都是废话,您和程序的原作者沟通比较有效率。
这个我程序我能自行更改,
如果您要该这个程序的话,有几处细节不妨考虑一下。
1、延迟等待时间
BG C
AM C
WT 4
运动结束后,等待4ms,然后读当前编码器位置。这个4ms是不是足够,可能是要考虑的。控制卡认为运动结束了,电机动作结束了,运动机构稳定了,这三者之间依次是有延迟的,如果是比较大的减速度,可能后面的指令
pTemp1=_TPC
读到的就不是机构真正停下来时的位置。依据这样的位置做补偿,肯定会出现误差。
2、循环的异常出口
JP#XMOVECL,@ABS[pTemp2]>=3
如果定位误差大,则继续修正,如果定位误差小,则退出循环。这个是循环的正常出口,建议增加一个异常的出口,比如累计修正50次后,退出循环,并通过设置变量之类的方式提示异常状态。
3、位置修正的异常保护
在执行这个指令前,先检查下_TDC与_TPC*1.6之间的偏差是否过大,如偏差大于正常范围,则不再动作,做异常状态退出。在编码器反馈出问题的时候,如果没有这个处理,机构会一直走到极限处。