使用按钮依次切换8个输出且可控制输出通道

电子说

1.3w人已加入

描述

本案例使用按钮依次切换8个输出且可控制输出通道,比如控制指示灯,可以输入序号来点亮该序号指示灯,连接时钟信号可以实现跑马灯效果。点击正向按钮则正序依次切换指示灯,如此反复。点击反向按钮则逆序依次切换指示灯。

功能介绍

跑马灯

  • 如果EN为FALSE,则所有输出均为FALSE。输入EN必须为TRUE,在E = TRUE时只有一个输出Qn为TRUE。
  • 当E = TRUE时,使用输入UP从输出Qn切换到Qn +1,而输入DN将输出Qn切换到Qn-1。
  • 当E = TRUE时,可以由SET输入和输入IN值选择主动输出Q0..Q7。如SET=TRUE,IN=5将输出Q5=TRUE,而所有其他输出都设置为FALSE。
  • 当E = TRUE时,输入RST=TRUE将输出Q0设置为TRUE,而所有其他输出都设置为FALSE。
  • 当E = TRUE时,状态输出总是显示当前选择了哪个输出Qn;当E=FALSE时,状态输出保持不变,E再次变为TRUE时,Qn再次输出。

SELECT_8源代码

SELECT_8实现的是选择器的功能,内部调用一个取模函数INC,详见下面介绍取模运算(INC)以及其代码。

跑马灯

跑马灯

跑马灯

01

取模运算(INC)

取模是除以两个数字时查找余数的操作。因此,当你问“什么是2 mod 2?”时,你是在问 “当你把 2 除以 2 时,余数是多少?”

跑马灯

SELECT_8源代码

FUNCTION_BLOCK "SELECT_8"
TITLE = 'SELECT_8'
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      E : Bool;
      SET : Bool;
      IN : Int;
      UP : Bool;
      DN : Bool;
      RST : Bool;
   END_VAR




   VAR_OUTPUT 
      Q0 : Bool;
      Q1 : Bool;
      Q2 : Bool;
      Q3 : Bool;
      Q4 : Bool;
      Q5 : Bool;
      Q6 : Bool;
      Q7 : Bool;
      STATE : Int;
   END_VAR




   VAR 
      last_up : Bool;
      last_dn : Bool;
   END_VAR








BEGIN


IF #RST THEN
  #STATE := 0;
ELSIF #SET THEN
  #STATE := #IN;
ELSIF #UP AND NOT #last_up THEN
  #STATE := "INC"(X := #STATE, D := 1, M := 7);
ELSIF #DN AND NOT #last_dn THEN
  #STATE := "INC"(X := #STATE, D := -1, M := 7);
END_IF;
#last_up := #UP;
#last_dn := #DN;


#Q0 := FALSE;
#Q1 := FALSE;
#Q2 := FALSE;
#Q3 := FALSE;
#Q4 := FALSE;
#Q5 := FALSE;
#Q6 := FALSE;
#Q7 := FALSE;


IF #E THEN
  CASE #STATE OF
    0:
      #Q0 := TRUE;
    1:
      #Q1 := TRUE;
    2:
      #Q2 := TRUE;
    3:
      #Q3 := TRUE;
    4:
      #Q4 := TRUE;
    5:
      #Q5 := TRUE;
    6:
      #Q6 := TRUE;
    7:
      #Q7 := TRUE;
  END_CASE;
END_IF;




END_FUNCTION_BLOCK

INC源代码

FUNCTION "INC" : Int
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      X : Int;
      D : Int;
      M : Int;
   END_VAR








BEGIN


#INC := (#X + #D + #M + 1) MOD (#M + 1);
END_FUNCTION
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分