设为首页
收藏本站
PLC技术网
开启辅助访问
切换到宽版
登录
注册哦
只需一步,快速开始
微信扫码登录
门户
Portal
论坛
BBS
导读
排行榜
积分充值
帖子
搜索
本版
文章
帖子
用户
PLC论坛-全力打造可编程控制器专业技术论坛
»
论坛
›
工控技术交流区
›
『国外:三菱/西门子/欧姆龙/松下』
›
S7-1200 -1500 SCL入门基础(九)
返回列表
发新帖
[三菱]
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
回复
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册哦
本版积分规则
发表回复
回帖后跳转到最后一页
member2
回复楼主
返回列表
『国外:三菱/西门子/欧姆龙/松下』
『国产:台达/汇川/信捷产品交流区』