[三菱] S7-1200 -1500 SCL入门基础(九)

[复制链接]
查看63434 | 回复0 | 6 天前 | 显示全部楼层 |阅读模式
S7-1200-1500 SCL入门基础(九)

一、WHILE循环语句:

●使用“满足条件时执行”指令可以重复执行程序循环,直至不满足执行条件为止。

●该条件是结果为布尔值(TRUE 或 FALSE)的表达式。

●可以将逻辑表达式或比较表达式作为条件。

●可以嵌套程序循环。在程序循环内,可以编写包含其它运行变量的其它程序循环。

●通过指令“复查循环条件”(CONTINUE),可以终止当前连续运行的程序循环。

●通过指令“立即退出循环”(EXIT) 终止整个循环的执行。         

● WHILE语句格式:

   WHILE <判断条件> DO

      <要执行的语句> ;

   END_WHILE;
//WHILE语句格式:   WHILE <判断条件> DO      <要执行的语句> ;   END_WHILE;●执行过程:
当<判断条件>为TRUE时,执行<语句>;否则跳出循环,不再执行<语句>。



程序片段

●参数类型:



参数类型

●使用WHILE语句的注意事项:

①WHILE循环的判断条件可以是BOOL型变量,也可以是表达式,但表达式的运算结果必须是BOOL型。

②WHILE循环语句可以嵌套,但不宜嵌套过多。

③WHILE循环是根据判断条件来决定是否执行,因此无法确定循环次数,一定要注意循环条件不能一直为TRUE,否则将陷入无限循环。

●FOR循环和WHILE循环的区别:

FOR循环有明确的循环次数,而WHILE循环的次数不确定。如果知道循环次数,可以使用FOR循环;如果不知道循环次数,可以使用WHILE循环。


程序片段

二、应用示例:   

① 使用WHILE语句计算1-100之间数据和;

1、编写程序:



//初始化"DB_Data".SumValue[2] := 0;//数据累加WHILE #k <= 100 DO    "DB_Data".SumValue[2] := "DB_Data".SumValue[2] + #k;     #k := #k + 1;END_WHILE;

2、下载仿真:



下载测试

②数组数据赋值;   



定义变量

1、编写程序:



//触发条件"DB_Data".EdgeU := "DB_Data".Start AND NOT "DB_Data".EsgeS;"DB_Data".EsgeS := "DB_Data".Start;//赋值IF "DB_Data".EdgeU THEN    #m := 0;    WHILE #m <= 9 DO        "DB_Data".ArrayValue[#m] := "DB_Data".SourceData;        #m := #m + 1;    END_WHILE;END_IF;
2、下载仿真:   



下载测试1



下载测试2

③ 使用WHILE语句获取数组中最大值、最小值;

1、新建FB块(BubbleSortW)、定义变量:   



定义变量

2、编写程序:



//上升沿信号判断#EnableEdgeUp := #Enable AND NOT #EnableEdgeHF;#EnableEdgeHF := #Enable;IF #EnableEdgeUp THEN    //获取数组的下限、上限    #statLowerBound := LOWER_BOUND(ARR := #arraySort, DIM := 1);    #statUpperBound := UPPER_BOUND(ARR := #arraySort, DIM := 1);    //冒泡排序    #i := #statLowerBound;    WHILE #i <= #statUpperBound - 1 DO        //内层循环        #j := #statLowerBound;        WHILE #j <= (#statLowerBound + #statUpperBound - #i - 1) DO            IF NOT #Mode THEN       //升序                IF #arraySort[#j] > #arraySort[#j + 1] THEN                    #tempReal := #arraySort[#j + 1];                    #arraySort[#j + 1] := #arraySort[#j];                    #arraySort[#j] := #tempReal;                END_IF;            ELSE                    //降序                IF #arraySort[#j] < #arraySort[#j + 1] THEN                    #tempReal := #arraySort[#j + 1];                    #arraySort[#j + 1] := #arraySort[#j];                    #arraySort[#j] := #tempReal;                END_IF;            END_IF;            #j := #j + 1;        END_WHILE;        #i := #i + 1;    END_WHILE;    //最大值、最小值输出      IF NOT #Mode THEN        #ArrayMax := #arraySort[#statUpperBound];        #ArrayMin := #arraySort[#statLowerBound];    ELSE        #ArrayMax := #arraySort[#statLowerBound];        #ArrayMin := #arraySort[#statUpperBound];    END_IF;END_IF;

编写程序

3、主程序调用、关联变量:   



主程序调用

4、下载仿真测试:



下载测试1



下载测试2

注:程序仅供参考!!!

(参考文章:S7-1200 -1500 案例之日期转换时间戳)

(参考文章:S7-1200-1500案例之获取数组的最大值最小值)

(参考文章:S7-200 SMART 案例之设备轮询控制优化)

(参考文章:S7-200 SMART获取数组最大值最小值)

   

参考文献《STEP7和WinCC Engineering系统手册》

STEP 7 和 WinCC EngineeringV16-V20

链接:https://pan.baidu.com/s/1yndwGyRb0o6o5m6N2SbYAA?pwd=1234 提取码:1234

全集成自动化获取 TIA Portal 相关信息的最短途径!

https://docs.tia.siemens.cloud/


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则