循环运行

有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

相关推荐

  • 关于SM0.3的问题

    大家好,小弟刚学s7-200,关于SM0.3的问题,(开机后进入RUN方式,该位将ON一个扫描周期,该位可用作在启动操作之前给设备提供一个预 热时间)《我想问:SM0.3…

    SIMATIC S7-200 2021年7月4日
  • 怎样打开文件“three_PWM.lsc”

    我下载了这个文件“three_PWM.lsc”,不知道用什么程序打开,请教了。 问题补充:我是在siemens下载中心下载的,没有说明 最佳答案 好像是“Logo"的程序…

    SIMATIC S7-200 2021年7月5日
  • 200PLC通过以太网上载程序 通信超时

    243模块  最佳答案 你配置过一个cp243模块?如果是第一次使用,需要配置这个模块,然后用ppi方式下载的。 提问者对于答案的评价: 最佳答案作者回复:CP243-1…

    SIMATIC S7-200 2021年7月5日
  • s7200与斯菲尔PD194Z-2S4MODBUS通讯

    小弟最近在做一个低压监控系统,用224XP读斯菲尔PD194Z-2S4内的电流电压这些数据,用的PORT0的主站指令但是一直都通讯不上MSG指令和仪表的设置都是一样地址是1&nbs…

    SIMATIC S7-200 2020年11月1日
  • 变频器和PLC的应用

    如果不需要闭环控制的话,还有必要用PLC控制变频器吗 ?谢谢1 最佳答案 是否采取闭环控制,直接影响到的是你的系统最后的控制精度、稳态误差这些技术指标; &nb…

    SIMATIC S7-200 2021年7月5日
  • 生产量累计问题

    现有一批储料桶需要做称重程序,设定一个给定下料量SV,桶底截料阀打开开始下料,等下料量PV=SV时关闭截料阀,此为一个批次下料量,现要做累计下料量,即下料一次需将下料量累计,过程中…

    SIMATIC S7-200 2017年6月4日
  • s7-200 怎么连接

    帮我看下怎么连接这个模块plc   什么软件 什么连接线   插哪个接口  怎么设地址 最…

    SIMATIC S7-200 2021年7月5日
  • S7 200 smart 高速脉冲输出没有波形

    我用向导建立了三个轴,用运动控制面板调试一下,当脉冲频率低于200HZ的时候,输出还是24V的方波,当随着频率的加大,用示波器看,就逐渐变成24V的直流信号了,只是带点和频率一样的…

    SIMATIC S7-200 2017年6月10日
  • EM 253 控制面板不能用

    我用EM253模块控制,但是程序点动前进和后退现在只能一个方向转。进入控制面板,面板内容都被禁止不能用,不知道为什么。 最佳答案 要激活控制面板,需要将CPU转入STOP状态 提问…

    SIMATIC S7-200 2021年7月4日
  • 无功功率计算、模拟量输入转换、扫描时间

    最近要做一个项目,须计算一个交流电正弦波周期内积分的问题,也就是说要在20毫秒内采集足够多的点。我刚开始感觉PLC不可能完成这个任务,后来领导说其他厂家有做,没办法还是得做。&nb…

    SIMATIC S7-200 2020年10月31日

发表回复

登录后才能评论