任务
电梯功能需要明确目标楼层,想要利用循环功能实现,但梯形图是与通常的编程语言不同,而更类似汇编语言,需要从本质的位的移动入手。
思路
考虑用一个字节(byte)共计8位(bit)来对有6层的电梯楼层进行外呼与内选登记,则通过从当前楼层根据运行方向,循环遍历楼层得到最近的目标楼层,并进行前往。
实现过程
首先梯形图提供的函数块为循环移位ROR与ROL,分别为循环右移与循环左移,采用循环可以保留数值不丢失;移动需要脉冲信号激发,故首先产生定时脉冲。
产生脉冲
参考怎样在 STEP 7 (TIA Portal) 中编写一个脉冲发生器程序?,例程如下所示,其中Trig_Out为输出脉冲信号。
No. | 脉冲发生器的功能 |
1 | 输入 I0.0 “Release” 用于激活此脉冲发生器。 |
2 | 标志 M0.1 “Out” 初始值为 “False” ,因此,下面一条接通延迟定时器指令 “TON”开始计时。 |
3 | 当接通延时时间到达的时候,标志 M0.0 “Trig” 将被置位并且输出 Q0.1 “Trig_Out” 获得 “True” 信号。 |
4 | M0.0 的”True” 信号将触发上面一条”TON” 指令开始计时。 |
5 | 当第二次接通延时时间到达的时候,标志 M0.1″Out” 被置位。 |
6 | M0.1 的 “True” 信号将断开下面一条 “TON” 指令的计时条件并中断该定时器,同时使标志 “M0.0” 被复位。输出 Q0.1 “Trig_Out” 获得 “False” 信号。 |
7 | M0.0 的 “False” 信号将中断上面一条”TON” 指令,并将 M0.1 复位。 |
8 | 标志 M0.1 的 “False” 信号将重新触发下面一条 “TON” 指令,然后整个过程再次重新开始。 |
循环移位
在PLC的教程视频中,关于循环移位的例程正是跑马灯,符合需要。
注意问题:
- 复制过程定时器切记二次修改,否则公用的定时器需要同时满足使能条件才开始工作
- 使用的函数块FC,故须利用数据块的数据存放,否则无法保留
- 采用上升沿触发循环移位,否则移位数目不定
问题
当发现循环移位并非根据上升沿脉冲单次触发,与计数器的协调工作使我困惑。
今天突然想到解决方案——先得到不同的计数,再将计数进行移位,判定是否存在楼层。