张国良
级别: 探索解密
精华主题: 0
发帖数量: 68 个
工控威望: 138 点
下载积分: 707 分
在线时间: 64(小时)
注册时间: 2020-02-06
最后登录: 2024-11-10
查看张国良的 主题 / 回贴
楼主  发表于: 2024-03-24 12:05
有ABCD三个风机,触摸屏上可以任意排序,比如A可以是一号可以是二号也可以是三号也可以是四号,BCD同理,现在要求一号风机开10秒停5秒,然后二三四号依次运行,如果是A是一号B是二号,C是三号,D是四号这样固定好了可以写出来,但是ABCD是任意排序的,如果下一次ABCD排序成2341,这样应该怎么写,plc是三菱的
flyfeky
bilibili 工控贵族
级别: 论坛先锋
精华主题: 0
发帖数量: 885 个
工控威望: 1034 点
下载积分: 1987 分
在线时间: 687(小时)
注册时间: 2012-05-09
最后登录: 2024-11-17
查看flyfeky的 主题 / 回贴
1楼  发表于: 2024-03-25 21:31
按道理, 这里有个数据结构 , 叫做队列, 也就是先进先出 。   可以自己实现队列算法,如果有现成的也可以。

简单的可以如下,不算队列算法,具体的启停逻辑,我下面是不对的啊.

把 A/B/C/D 用数字1/2/3/4  分别放到存储器   D1,D2,D3,D4 中,标识这四个风机。  多的话用数组和循环,比如100个风机。    Y1 Y2 Y3 Y4 表示输出。

第一步要设置  D0 D1 D2 D3的值。   比如2341;  /  1234 /  3412/      step的转换条件 就是 时间到  step:=step+1;
case  step of  
1 :

IF  D1=1  THEN
Y1:=TRUE;  //  Y1通10S 停2s
ELSE IF D1=2 THEN
Y2:=TRUE; //  Y2通10S 停2s
ELSE IF D1=3 THEN
Y3:=TRUE; //  Y3通10S 停2s
ELSE IF D1=4 THEN
Y4:=TRUE; //  Y4通10S 停2s
END IF;

2 :

IF  D2=1  THEN
Y1:=TRUE;
ELSE IF D2=2 THEN
Y2:=TRUE;
ELSE IF D2=3 THEN
Y3:=TRUE;
ELSE IF D2=4 THEN
Y4:=TRUE;
END IF;


3:

4:

end case;
[ 此帖被flyfeky在2024-03-25 22:00重新编辑 ]
本帖最近评分记录:
  • 下载积分:+1(libin520) 真诚感谢!
  • 西门子倍福WPF+C#数据库,槽式设备专家