呵呵,不好意思,我描述的不是很清楚,比如我在CM C的状态下,连续使用CD 500两次马达可以动作,而使用CD -500马达不动作。我用数组填充缓冲区,用一个变量记录数组下标,用MG _CM输出缓冲区剩余容量。当使用CD -500,CD -500,...当缓冲区MG _CM 输出为1后,程序就停下来了,CD指令就不会继续执行。RPC是输入错误,我用PRC 500和PRC -500马达都动作,但是CD使用负数时就没有反应。C轴我用LDC =3禁用了限位开关,查看正负软件限位都是一个非常的数值,好像是27XXXXX吧,具体数值我也记不清楚了
没关系 。还有一个问题想要请教刘工,我用arraydownload和arraydownfile函数下载数据时发现这两个API貌似占用的机器周期有些长,测试发现使用API下载CSV文件时占用机器周期较长,开始以为是windows读写硬盘速度慢引起的,于是将数据提前读入数组,使用下载数组的API函数性能并没有多大改善。我在终端输出时间,发现下载文件时,终端输出会停顿一下,时间差至少是140个工作周期数,最多1000多个,机器在动作时,中间会出现明显的停顿。如果有大量数据的话,就不能简单的通过将数据下载到数组中进行操作。我现在直接3使用*250个数据,机械手运动完成后,下载新的数据,然后继续运行。看来缓冲区少的运动控制器使用Countour模式还是有些难度。
我是用的是两个数组,{A[100],B[100],C[100]}和{D[100],E[100],F[100]},用个变量做指针,当一个数组数据发完之后,切换到另外一个数组,但是数组下载的时候的时候感觉控制器会产生较大的时延。我原来的想法是CD指令执行一次,就从上位机下载一个数据,感觉效率不是太高,但是基本上可以保证两个CD指令之间的时间差不会相差太大。我用的是GalilTools,不知道DMCWin是否也可以支持DMC-B140,因为我记得注册时,提示无法识别的控制器。我用的VC 6.0,所以就使用的COM编程。今天修改程序时碰见一个比较奇怪的问题,不知道是我自己的程序出现了问题,还是别的问题。症状大体如下:(1)在程序里使用command发送AM指令(命令手册里提到不让使用command发送AM指令),即使发送了只是command会提示超时报错,现在的状况是,马达运动了,但是查看TD和TP,发现并没有到目标位置。(2)去掉发送AM指令,反复测试,偶尔也会出现TD和TP不能到达目标位置,一般第一次运动会出现偏差的概率较大 (3)将函数中的AC和DC指令设定去掉,暂时测试正常。我现在还没有弄明白出现问题出现在哪里。我的程序结构如下。
发送位置指令
while(查询马达是否停止 && 马达是否报警 )
{
查询马达是否超时;
}
“马达运动了,但是查看TD和TP,发现并没有到目标位置。”
"是马达运动结束后,TD没有到位么?至于TP,您在编码器接口上接的是什么啊?"
TD和TP都没有到位,后来经过检查,可能是马达报警接线有些问题。编码器接口上接的是步进电机的编码器
能否问一下 “查询马达是否停止”和“马达是否报警”,以及“查询马达是否超时”的具体指令内容?
查询马达是否停止使用的是 MG _TS。马达是否报警我使用的是外部的输入板卡,查询马达是否超时是马达开始运动时,读取当前时间,然后加上马达的超时值,如果马达在停止时,读取的时间值<当前数值+超时值,就认为没有超时,否则认为马达运行超时,系统报错。
“将函数中的AC和DC指令设定去掉,暂时测试正常。”
您原本是设置了什么样的AC与呢?具体的指令内容是什么?
原来AC和DC只是设置的加速度,问题可能不是这里引起的
请教刘工:现在设备已经可以正常作业了,但是我通过观察发现在每次发送指令之间通过GalilToolsLite查看TC,每次指令开始之前都会产生一个123 TCP lost sync or timeout TCP通讯错误,在命令手册里有这样的描述“在运行控制器上的用户程序时,如出现以太网通讯错误(123 TCP lost sync or 则自动在 0 线程运行以此标号开头的子程序。出现这样的错误,意味着通讯句柄 TCP应答信号(例如,由于连接线断开) 。这种情况下,出错的句柄被关闭。”是什么原因导致的123错误呢?
我现在的做法是每次发指令前都通过putaddress连接控制器,然后发送指令。有没有可能每次使用的通讯句柄都不相同,而导致这个错误?或者不需要频繁连接控制器?
还有一个问题就是42 Contour data being sent too slowly 轮廓数据提供太慢,这个错误会偶然发生,查询CM为31,而不是正常值的32,也就是说有一个数值一直发送不出去。我也没有想清楚是什么原因导致的?这个错误一般出现在走直线段的情况下,在走直线段时,我为了减小机械振动,将DT指令的时间值增大了1,也就是速度慢了一倍。
如果出现了42号错误,采用什么样的办法是相对安全的?可以让设备继续运行,而不需要初始化。在报错的情况下,我通过GalilTools查看编码器的数值,发现数值应该还是可以正常变化的。是不是可以采用读取编码器的数,然后让系统使用RS让控制器复位,然后恢复编码器的数值。貌似这种方法比较复杂,实在不行我就直接报错,让机台重新初始化。