循环运行

有5指示灯,任意选取只数,选取完后任意循环运行。还得开几秒停几秒后再运行。
模式一
选取1、2、4,号指示灯,一只循环, 开两秒停三秒,
1 开两秒停三秒   / 2 开两秒停三秒 /4开两秒停三秒 /1 开两秒停三秒   / 2 开两秒停三秒...........
模式二
选取1、2、4、5,三只循环,开两秒停三秒
1、2、4开两秒停三秒,2、4、5开两秒停三秒,4、5、1开两秒停三秒,5、1、2开两秒停三秒。。。。。
用s7200写,怎么写呢?谢谢。求大神。

最佳答案

提供一个思路
 1先判断第一个灯是否选择,是3,否判断下一个灯是否选择,反复执行判断,直到有灯被选择
 

3开灯,延时开灯时间,4
4关灯,延时关灯时间  1


TYPE "light"
VERSION : 0.1
   STRUCT
      select : Bool;
      out : Bool;
      open : Time := T#2s;
      close : Time := T#3s;
   END_STRUCT;

END_TYPE

FUNCTION_BLOCK "块_2"
{ S7_Optimized_Access := ''''TRUE'''' }
VERSION : 0.1
   VAR 
      step : Int;
      no : Int;
      i : Int;
      count : Int;
      open : Int;
      close : Int;
      start : Bool;
      stop : Bool;
      light : Array[0..10] of "light";
      OpenTime {InstructionName := ''''TON_TIME''''; LibVersion := ''''1.0''''} : TON_TIME;
      closeTime {InstructionName := ''''TON_TIME''''; LibVersion := ''''1.0''''} : TON_TIME;
   END_VAR


BEGIN
 
 #OpenTime(IN:=#step=3,
           PT:=#light[#no].open);
 
 #closeTime(IN := #step = 4,
            PT := #light[#no].close);
 
 
 
 IF #start THEN  //启动循环
     #start := FALSE;
     #step := 1;
     #no := 1;
 END_IF;
 IF #stop THEN // 停止循环
     #stop := FALSE;
     #step := 0;
     #no := 1;
     FOR #i := 0 TO 10 DO
         #light[#i].out := FALSE;
     END_FOR;
     
 END_IF;
 
 CASE #step OF
     1://判断本次要开的灯
         #i := #no;
         IF #light[#i].select THEN //直接找到本次要开的灯
             #step := 2;//进入开灯流程
         ELSE
             WHILE NOT #light[#i].select DO //找下一个被选择的灯
                 #i := #i + 1;
                 IF #i > 5 THEN
                     EXIT;
                 END_IF;
             END_WHILE;
         END_IF;
         #no := #i;
         IF #no > 5 THEN
             #no := 1;
             #count := #count + 1;
         END_IF;
         IF #count > 1 THEN
             #step := 0;
             #no := 1;
             #count := 0;
         END_IF;
         
     2:
         #count := 0;
         #light[#no].out := true; //开本次灯
         #step := 3;
     3://开启时间判断
         IF #OpenTime.Q THEN
             #light[#no].out := FALSE; //关本次灯
             #step := 4;
         END_IF;
     4:// 关闭时间
         IF #closeTime.Q THEN
             #step := 1;
             #no := #no + 1; //指向下一个灯
         END_IF;
 END_CASE;
 
END_FUNCTION_BLOCK

提问者对于答案的评价:
不是我想要的,还是受教

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc361695.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日 下午12:00
下一篇 2021年7月5日 下午12:00

相关推荐

  • 请问200的软件STEP MICROWIN哪里下载

    请问200的软件STEP MICROWIN哪里下载 钻石用户推荐最佳答案 STEP7 MicroWIN V4.0 SP8 和&nb…

    SIMATIC S7-200 2021年7月5日
  • EM231连接问题

    将EM231的一个通道为例,如第一个通道它有三个接线端RA,A+,A-。如果它要是使用的话A+和A-分别接传感器的正和负这没有问题,问题是RA和A+还需要短接这是必需的吗(接的电流…

    SIMATIC S7-200 2021年7月5日
  • s7200smart高速计数器

    有两个编码器接在同一个plc上分别测不同设备的转速,定义了HSC0和HSC2,但只能读到HC0中的数值。请问各位大神,这是什么情况? 问题补充:刚开始计数模式都定义为9,也读不到H…

    SIMATIC S7-200 2021年7月5日
  • 请问那里有protool/pro v6.0软件下载

    请问那里有protool/pro v6.0中文软件下载。或那位大侠有请给在下一个,小弟先谢谢了! huailin1963@sina  问题补充:以前接…

    SIMATIC S7-200 2021年7月5日
  • EM231电流输入问题

    电流信号采用四线制,当电流信号未连接到EM231时,测量电流信号+  -之间有4MA电流,当电流-信号段接到EM231的A-段子,将万用表串联在电流+信号段与E…

    SIMATIC S7-200 2020年11月1日
  • s7-200CPU、扩展模块怎么计算要提供多大的电流?

    前两天跟了公司的师傅去做了个项目,留下了些疑问,主要是计算各个部分的电流损耗,然后选择电源的问题,望高手解答:1.手册上CPU的电流消耗是120-900MA,是不是就是说要给CPU…

    SIMATIC S7-200 2018年12月2日
  • win10 企业版安装STEP 7-MicroWIN SMART后双击打不开

    安装过程还是很顺利的,但安装完双击没反应 图片说明:       最佳答案 打开任务管理器看下有没有MWSmart.exe进程,结束此进程,…

    2021年7月5日
  • S7-200,300格雷码转二进制的指令在哪?

    在两个软件里的指令里都没有找到这个指令?遇到二进制转格雷码的情况怎么办呢?自己怎么编写呢? 最佳答案 S7-300沒有现成的转换功能块,具体请参考:《S7-300有没有格雷码转二进…

    SIMATIC S7-200 2020年10月31日
  • 问个问题

    我是个新手刚学,越学越糊涂,特别是传送指令,和功能指令(加,减,乘,除).请问这两个指令在什么情况下使用.能否详解.谢谢. 最佳答案 1,传送指令为了将某些内容传输到特定的或是你定…

    SIMATIC S7-200 2021年7月5日
  • PLC高速脉冲输出的最大频率问题?

    一台200plc226DCDCDC的,脉冲输出通道最大频率是20KHZ,在程序中控制的脉冲频率比额定频率(20KHZ)高,为什么伺服电机运行速度比脉冲控制在20KHZ时还要快,不是…

    SIMATIC S7-200 2017年6月5日

发表回复

登录后才能评论