各位大神好,
我的问题是OC命令进行编码器位置比较输出,但是在测试过程中,把命令: OCA=100,300 加入到任何一段能正常运行的代码中,程序就会到这句时卡住,不知道为什么……谢谢各位了。
以下是OC 命令的说明:功能:输出比较
说明:OC 命令根据主编码器之一的位置产生输出脉冲。在输出比较信号(在 ICM-1900 及
ICM-2900 上所标的 CMP)时,可提供大约 600 毫微枷周期的低沿脉冲。
使用此命令,不能用于步进电机及辅助编码器。
注:OC 命令要求主、辅编码器的配置完全相同(见命令 CE)例如:CEO,CE5,CEIO,
CE15。
参数:OC x=m,n
其中:x=A、B、C、D、E、F、G、H 指定用于哪个编码器输入。
M=首脉冲绝对位置。范围是-2.109~2.109 之间的整数。
n:脉冲之间的增量式距离。范围是-65535~65535 之间的整数。
注:OCx=0 没有圆弧比较功能。
参数 n 将指出输出比较时所运动的方向。当移动到反方向时,脉冲在增量式距离
65536-|n|位置上发生输出比较,而|n|是 n 的绝对值。
用途: 缺省:
运动进行中 Yes 缺省值 -
在程序中 Yes 缺省格式 -
命令行 Yes
适用控制器 所有型号控制器
操作应用:
_Ocx 读取 OC 功能的状态。
_OCx=0:具备 OC 功能,但不产生任何脉冲
_OCx=l:OC 函数无效或已产生首输出脉冲
举例:
OCA=300,100 选择 A 编码器作为位置传感器,首脉冲为 300,后续脉冲为
400,500……
回复内容:
对: 刘岩利 “ OCA=100,300 加入到任何一段能正常运行的... 内容的回复!
程序如下:就是一段简单的两轴扫查程序,我把OCA命令加在程序任何位置程序到OCA就不继续执行了。板卡是DMC2143,ICM20105ID 1.6E .这个中文说明是在百度找到的…………
我记得反馈的错误信息是:?119,在手册查119是没有这个错误代码的,有时还会提示?7或者?8,不明觉励了……我是想用OCA命令进行编码器比较输出来触发超声探伤的板卡。
#A
S=0
#LOOP
PR 2000
SP100
AC30000
DC30000
BGA
AMA
SP100
PR,-50
BGB
AMB
PR -2000
BGA
AMA
PR,-50
BGB
AMB
S = S + 2
JP #LOOP,S<10
EN
"MT是2.5 CE是12"
这样 OC 指令是不能用的。要使用OC指令,MT必须是1或者-1,CE必须是0、5、10、15之一。
以下是指令手册中对OC指令使用限制的说明:
Limitations:
The Output Compare function is only valid with incremental encoders.
The Output Compare function is not valid with SIN/COS (AF settings of 5-12), standard analog (AF setting of 1), BiSS or SSI feedback (SS or SI commands).
The OC function cannot work for an axis configured as a stepper.
The auxiliary encoder of the corresponding axis cannot be used when in this mode.
Dual loop mode (which uses the aux encoder input) will not operate when the OC command is enabled.
The OC function requires that the main encoder and auxiliary encoders be configured exactly the same (see the command, CE). For example: CE 0, CE 5, CE 10, CE 15.
OC only requires an encoder, and is independent of axis tuning, and motion profiling.
"我还富裕两个轴,您的意思是并接以后 设置此轴的MT,CE属性可用OC命令,然后用此轴进行比较输出?"
是的,把A轴的编码器信号并节在空闲轴上,将根据需要的计数方式/方向设置CE参数,MT参数设置为1或者-1都可以(反正也不需要控制输出)。OC指令针对这个轴设置,原本针对A轴的一些位置设置指令,也要针对这个轴作出相应设置,比如原本有 DEA=0指令的地方,现在还要多写一个DPC=0(脉冲输出和模拟输出模式下,设置编码器计数值的指令不同)。
“我用vb的timer控件发送g.command命令 询问编码器位置,得到后在进行计算,然后在判断 感觉好像很费时间也没有效率,像您说的用循环是在galil里面做吗?”
是的,循环在galil里面做。
"我在比较输出口接了个发光二极管 想看比较输出的效果 这个想法好像有点天真…………哈哈"
这个,确实难度比较大。
以前也经常有用户说:这个信号没有输出,用万用表量不到。我都会在电话里给他们算一下:信号宽度是600ns,0.6us,0.0006ms,0.0000006s,就算万用表能反应过来(那要多贵的万用表),您也是看不见的。
有的人还会说,我让这个信号持续输出,总该看到平均电压的变化吧?我还要给他们算一下,就算您的信号频率作到了10khz,那么一个周期也有0.1ms,其中0.0006ms是输出信号,占比例0.6%,有信号输出和没有信号输出的平均电压也就差0.6%,您约定您的万用表能量出这个差异来么?。
回复内容:
对: 刘岩利 "我在比较输出口接了个发光二极管 想看比较输出的效果 ... 内容的回复!
刘老师还是上次的问题,按您说的 把A轴编码器并接到C轴上,用C轴做OCC比较输出,可是接收触发那边的板子没反应,能确定板子是好的,板子的信号需求是:
Compatible TTL input loaded with internal pull-up of 4.7 KW to +5V
Low level : 1 mA
High level: < 1 mA
Fall and rise time < 1 µsec. Without glitch that could trigger random Pulses.
High level must last at least 5 µsec. , Pulse triggering on falling flank of PRF IN.
请问Galil的性能可以满足吗?还是我需要接上拉电阻?电阻我我试过也不知道接的对不。还有就是 板子接收端有两个口,一个事外触发,一个是地,那Gaili比较输出口是接触发还是接地啊?焦头烂额的…………麻烦您了