回复:S71200 程序编程请教

难难难

  • 帖子

    13
  • 精华

    0
  • 被关注

    1

论坛等级:游民

注册时间:2018-11-02

普通 普通 如何晋级?

发布于 2019-03-01 15:26:39

5楼

试一下看看,是不是你要的效果,我放在云盘里https://pan.baidu.com/s/1FxkOLf6r4pfafxZFEGgIIQ


FUNCTION_BLOCK "templight"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT
      InputData : Int;
   END_VAR

   VAR
      Complete : Bool;
      n { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int;
      ArryQ : Array[0..15] of Bool;
   END_VAR

   VAR_TEMP
      Timeons : Bool;
   END_VAR


BEGIN
 "R_TRIG_DB"(CLK:="Clock_2Hz",
             Q=>#Timeons);
 
 CASE #InputData OF
     1:
         IF #Timeons& #n < 8 THEN
             #ArryQ[#n] := 1;
             //支持GATHER就用  GATHER(IN := #ArryQ,OUT => "Output");  //output=%QW0,
             "Q0.0" := #ArryQ[0];
             "Q0.1" := #ArryQ[1];
             "Q0.2" := #ArryQ[2];
             "Q0.3" := #ArryQ[3];
             "Q0.4" := #ArryQ[4];
             "Q0.5" := #ArryQ[5];
             "Q0.6" := #ArryQ[6];
             "Q0.7" := #ArryQ[7];
             #n := #n + 1;
         ELSIF #n=8 THEN
             #n := 0;
             FILL_BLK(IN := 0, COUNT := 8, OUT => #ArryQ[0]);
           
         ELSE
             FILL_BLK(IN := 0, COUNT := 8, OUT => #ArryQ[0]);
            
       END_IF;
        
     2:
         IF #Timeons & #n < 7 THEN
             #ArryQ[#n] := #ArryQ[#n + 1] := 1;
             //支持GATHER就用  GATHER(IN := #ArryQ,OUT => "Output");  //output=%QW0,
             "Q0.0" := #ArryQ[0];
             "Q0.1" := #ArryQ[1];
             "Q0.2" := #ArryQ[2];
             "Q0.3" := #ArryQ[3];
             "Q0.4" := #ArryQ[4];
             "Q0.5" := #ArryQ[5];
             "Q0.6" := #ArryQ[6];
             "Q0.7" := #ArryQ[7];
             #n := #n + 1;
         ELSIF #n=7 THEN
             #n := 0;
             FILL_BLK(IN := 0, COUNT := 8,OUT => #ArryQ[0]);
         ELSE
             FILL_BLK(IN := 0, COUNT := 8,OUT => #ArryQ[0]);
          
         END_IF;
        
     3:        IF #Timeons & #n < 6 THEN
             #ArryQ[#n] := #ArryQ[#n + 1] := #ArryQ[#n + 2] := 1;
             //支持GATHER就用  GATHER(IN := #ArryQ,OUT => "Output");  //output=%QW0,
             "Q0.0" := #ArryQ[0];
             "Q0.1" := #ArryQ[1];
             "Q0.2" := #ArryQ[2];
             "Q0.3" := #ArryQ[3];
             "Q0.4" := #ArryQ[4];
             "Q0.5" := #ArryQ[5];
             "Q0.6" := #ArryQ[6];
             "Q0.7" := #ArryQ[7];
             #n := #n + 1;
         ELSIF #n=6 THEN
             #n := 0; FILL_BLK(IN := 0,COUNT := 8, OUT => #ArryQ[0]);
         ELSE
             FILL_BLK(IN := 0,   COUNT := 8,  OUT => #ArryQ[0]);
         END_IF;
      //4:....
            
 END_CASE;
END_FUNCTION_BLOCK


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15620条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。