之前做过的项目中有用到先入先出的指令,但那个项目的程序有点大,不方便阅读理解这个功能。现在用FX3U的做了个小测试程序与大家分享一下,程序中用了8个工位,每个工位有一个请求按钮,按下后执行工作请求预约,执行机构会根据先后顺序依次执行完成。
程序具体功能:
1、启动后按下M10~M17(对应1#~8#工位的外部按钮,用PLC做测试的时候没接那么多的按钮,所以用M代替;另外为减少程序量此外使用的变址输入的形式)——对按下的工位号进行编码(0~7对应1#~8#工位)——置位M110~M117(对应1#~8#工位已请求预约,已预约过未执行的再次按下请求按钮无效)——请求预约信号脉冲M110~M117——复位请求信号M10~M17(测试时方便而设);
2、执行先入先出移位写入指令(SFWR)——当前预约工位号写入D10+1(D10为指针,记录已写入的数据数量,每写入一次加1),同时之前写入的数据依次后移,测试程序中由于只有8个工位故设置后面的N为K9(只保存N-1个预约请求信号);
3、在设备未输出执行的情况下执行先入先出移位读出指令(SFRD)——最先保存的工位号读出,使用变址控制外部输出Y00~Y07;
4、外部输出设了个动作时间,可以将每个动作的时间设的长一点,便于确认预约功能的详细动作及指针的变化;
5、外部输出时间到达后将输出复位——该工位执行计数——执行子程序(判定各工位执行次数是否到达设定次数,可用于指定执行设定次数的工艺项目中);执行次数到达后该工位即预约无效,所有的工位执行次数到达后自动停止;
6、按钮X00延时2S后复位计数值、判定值等中间计算变量,可再次执行启动;
该测试程序仅供三菱的先入先出指令共同学习探讨使用,实际在项目中还要考虑相应的安全互锁、设备断电或中止等异常情况下的数据保持等情况,可根据实际的项目要求进行相应的变更、追加或变通等。大家在测试中发现有什么不对之处,请多多指教,共同学习方能走的更远。