找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
问题
取消精华
首页精华问答
取消推荐
高端用户推荐
申请置评
已申请置评
修改
修改标签
添加标签
官方认证
取消官方认证
修改标签
添加标签
转移分类
删除
{{itemCategory}}
收藏({{answerDetail.Q_FavoriteCounts}})
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
专家建议
取消最佳答案
修改
提供一个思路
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
等您来回答
换一换
{{item.CoinValue}}西币
{{item.VisitNum}}人想问
本版相关问题
换一换
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!

西门子商城