由于项目工艺要求类似停剪功能(即主轴先走速度模式,然后检测到外部传感器信号后切换到定位模式),看了松下的小PLC,只有FP0R有类似的功能,即JOG定位指令。
但是我仔细看了下FP0R的使用手册,遇到麻烦了! 手册介绍需要先将定位的目标脉冲输入, 再启动JOG指令,然后再根据需要自己用指令切换到定位模式。 也就是在JOG指令前就要确定定位的脉冲个数!!!
可是我的工艺要求在传感器信号的上升沿和下降沿所定位的距离不同,即需要先走JOG指令发出脉冲控制步进电机运转,然后根据检测到信号的沿状态(上升沿还是下降沿)来决定定位脉冲的数目!!! 请问有什么办法可以实现吗? 还是手册上介绍得不太对,实际可以在JOG指令触发后再指定脉冲数目? 希望有经验的朋友解答一下! 我手头没有PLC可做测试! 谢谢!
另外,相关的应用,OMRON的指令就完全可以实现我的要求,可是我习惯了IEC类的软件啊,习惯用结构文本和语句表编程(不会用梯型图了!)。 用西门子的又太贵了(帮朋友做个小设备,要考虑成本), 用松下的FPWIN PRO软件上手还是很容易! 用OMRON的CP1H,只要插入个FB块,就只能用梯型图编程了,极厌恶啊!
楼主最近还看过
to zhang--008 :
首先感谢关注这个贴子!
1、OMRON的CX-Programmer不是标准的IEC软件,它是支持ST,但是针对小型CP系列的PLC只有有功能块里才支持! 关键吧,你只要一添加FB,结果循环程序里就只能使用梯形图,连语句表(指令码方式,类似西门子的STL)都转换不了! 郁闷!
2、我就是手头没有硬件,所以做不了实验了! 你完全理解了我的要求。 但是我看了FP0R中文手册上是需要先定义好目标位置,再动作(即:只要脉冲发出来,那么后续定位的目标值就不能再改了)。 而我需要的是先走发脉冲走速度模式(在定位指令给出之前,持续发脉冲), 然后程序检测到上升沿立即定位X个脉冲,如果是检测到下降沿则定位Y个脉冲。 X和Y可随时修改。
我都没看到FPX手册上提到这个功能,只有FP-R0手册上有这个应用例子。
另外,你所说的E文手册,地址能列出来么? 我下载的全是中文手册,都是基于FPWIN GR的!
谢谢!
虽然现在一些小PLC都具有这种功能,但是实际的定位精度却极少手册能提及。 比如松下的这款PLC的运动控制周期是多少? 我了解的OMRON的CP1H应该是4ms(这是我推测的,因为它的斜坡函数是以4ms为基数计算的,而且在指令说明里我找到了这样的定位指令响应时间大于4ms(一个周期),而小于8ms(两个周期))。 根据这个参数我认为最大的电气误差时间为4ms,再加上中断的响应时间200us左右, 乘以速度(我的机器速度最大250mm/s),推出最大电气误差1mm左右。 如果用松下做,不知道能达到一个什么样的精度。
顶楼提及的“JOG定位指令”我在英文手册中看到了说明,但是这个F函数仅仅针对FP0R,我手头上为FP-X硬件,因此无法针对你的问题进行印证。
PulseOutput_Jog_TargetValue_FB, JOG operation with target value
这个FB适用于FP-X和FP0R,另外还有两个FB,
PulseOutput_Jog_Positioning0_FB, JOG operation and positioning以及
PulseOutput_Jog_Positioning1_FB, JOG operation and positioning仅仅适用于FP0R,关于这三个FB的说明可以在FPwin Pro中找到,我的软件环境:FPwin Pro V 6.414英文版,另外安装了一个V6.411的帮助文件,不会上传图片啊!!
另外那个英文手册,我也找不到出处了,好像是在松下一个英文网站上下载的,要不你留个信箱我发给你。
关于你提到的误差我是这么理解的,不知道你的设备是什么样的,转盘还是输送带?运动速度“(即主轴先走速度模式,然后检测到外部传感器信号后切换到定位模式)”这里指“主轴先走速度模式”这里这个速度,这个速度如果是无级调速的话,可以细分划定几个(或多个)速度区间,针对你说的误差是不是可以通过人为减少定位模式下的给定脉冲(给定脉冲对应检测到信号(up沿或down沿)后需要行走的距离。)进行补偿呢?PulseOutput_Jog_TargetValue_FB, JOG operation with target value这个FB所走的脉冲类似一个梯形,输入参数包括起始、结束速度,上升、下降时间,目标速度以及所走脉冲总个数diTargetValue。我的做法是首先将diTargetValue赋予一个很大的值,在FB执行过程中,人为修改diTargetValue(当检测到外部传感器信号后,sys_diPulseChannel1ElapsedValue+所要走的定长脉冲(自己转化)=diTargetValue)。这个过程我利用硬件进行了模拟(FP-X 60T,X3作为外部传感器信号,没有伺服或步进执行机构),效果和设想的一致,另外每次执行需要将sys_diPulseChannel1ElapsedValue清零。
如果omron能够做到的话,为何不选择呢?ST搞得定的话,LAD对于你来说应该也就一周的时间,是不是,呵呵!
如果有时间,帮忙发一份这个文档给我 kimsoul#126.com (将#换成@即可)
1、事实上,从松下技术支持给出答复后,我就已经选定欧姆龙的CP1H了,程序已经完成,等机械装好了就可以调了。 不过我没有用FB块, 所以都还可以用语句表(ST)来完成,也还过得去。只是可惜不能用IL(结构文本)做数据运行,稍显麻烦。 至于LAD我是从不碰的,不会用那些框框,而且一个页面显示不了同行逻辑代码,看着难受。
2、至于电气精度,可有好多要注意的咯。 sys_diPulseChannel1ElapsedValue 这个值是实时刷新?还是扫描周期刷新呢? 如果是扫描周期刷新则受程序周期影响。 意味着在你的上升沿或者下降沿读取的sys_diPulseChannel1ElapsedValue并不是准确的。 象OMRON的脉冲当前值存在A276(Pusle0)内,这就是周期更新的。 同时还可以用PRV指令做立即刷新。 就象我们访问I/O寄存器的映像区或者是立即刷新一样……
还有我说的运动控制周期,不知道松下的后台处理方式,还有硬件中断任务的延迟时间……
我想,在我没有完全搞清楚这些参数前,还是谨慎选择,所以还是折中选了OMRON了!
谢谢您的参与!
to zhang--008 :
我还是有点不死心,正好趁着五一在家,找朋友借了一台FP0R-C32T的硬件来做实验。 验证结果如下(我是针对脉冲输出0通道实验的):
1、sys_diPulseChannel0ElapsedValue是指令实时的,不受扫描周期影响!
2、PulseOutput_Jog_Positioning0_FB及PulseOutput_Jog_Positioning1_FB确实是我所讲的中断定位功能, 而且如我所预料:在脉冲输出过程中,更改目标脉冲数,是无效的。
3、退而求其次,实验PulseOutput_Jog_TargetValue_FB指令。 结果发现在脉冲输出过程中,更改目标脉冲数,也是无效的! 我推测你是否是在更改目标脉冲数时,将该指令的执行条件给断开了?
希望看到这个贴子时,能给出解释,谢谢!
下班后,我又去借了个FP-X C14T做了实验,真的可以! 总结一下:
实验的硬件分别为FP0R C32T和FP-X C14T。
1、FP0R 支持PulseOutput_Jog_Positioning0_FB和PulseOutput_Jog_Positioning1_FB, 但是在脉冲输出过程中不能重新更改目标位置。
2、FP0R 支持PulseOutput_Jog_TargetValue_FB, 但是在脉冲输出过程中不能重新更改目标位置。
3、FP-X 支持PulseOutput_Jog_TargetValue_FB, 且在脉冲输出过程中可以重新更改目标位置(需要新的目标值大于当前脉冲值)。
4、吐槽一下:帮助文件里要求bAbsolute := FALSE,结果是FP-X如果将bAbsolute设置成FALSE就会报指令错误,且不输出脉冲,最好抱着试试的心态将bAbsolute设置成TRUE,就可以正常工作了! 另外针对FP0R,bAbsolute无论设置成TRUE或者FALSE都一样可以输出脉冲。