[西门子] 西门子1200PLC-SCL编程语言编写抢答器控制系统

[复制链接]
查看179 | 回复0 | 2024-7-26 19:40:15 | 显示全部楼层 |阅读模式
案例:
设计抢答器控制系统。
1.有A、B、C、D四个抢答按钮,当主持人按下抢答开始按钮,抢答指示灯点亮,并伴有三秒钟报警提示音,提示结束后才可进行抢答。
2.提示音结束前按下抢答按钮视为犯规,取消抢答资格。
3.谁先按下抢答按钮,谁就抢答成功,其余三人再按抢答无效。
4.A、B、C、D分别有抢答按钮及抢答成功指示灯,抢答成功指示灯点亮并闪烁3次后常亮。
5.主持人按下复位按钮,所有的灯全部熄灭。
分析:
1.编写此类练习题程序,可以把主持人和选手分开来,先编写主持人的开始动作

2.可以先编写A选手的动作,不考虑犯规,不考虑其他选手,不考虑主持人开始才能抢答

3.写完A的常规动作(不考虑犯规,不考虑其他选手,不考虑主持人开始才能抢答)后,在写好的动作上加条件:
1)考虑主持人开始才能抢答

只需要加上主持人动作里的开始指示灯即可
2)考虑犯规
考虑犯规,需要根据要求将犯规动作写出来,犯规动作如下

加入犯规动作的程序如下

3)考虑其他选手
根据要求,可以先考虑有A选手和B选手两人,其他的C和D直接复制粘贴更改地址就行,动作一样,B选手考虑主持人开始,考虑犯规写法与A选手一至,考虑A选手和B选手,只需要其中一选手抢到以后,置位一个变量,在用这个变量把条件断掉即可,写入如下:


4.编写主持人复位动作

通过分析,编写好的程序如下:
//主持人开始动作
#R_1(CLK:=#开始按钮);
IF #R_1.Q THEN
#指示灯 := #提示音 := 1;
END_IF;
#T0(IN := #提示音,
PT := T#5S);
IF #T0.Q THEN
#提示音 := 0;
END_IF;
//主持人复位动作
#R_2(CLK:=#复位按钮);
IF #R_2.Q THEN
#指示灯 := #A成功指示灯 :=#B成功指示灯
:= #C成功指示灯 :=#D成功指示灯 := 0;
#空闲标志 := #A犯规 := #B犯规
:=#C犯规 := #D犯规 := 0;

END_IF;
//选手犯规动作
#R_A(CLK := #A抢答按钮);
IF #R_A.Q AND #提示音 THEN
#A犯规 := 1;
END_IF;
#R_B(CLK := #B抢答按钮);
IF #R_B.Q AND #提示音 THEN
#B犯规 := 1;
END_IF;
#R_C(CLK := #C抢答按钮);
IF #R_C.Q AND #提示音 THEN
#C犯规 := 1;
END_IF;
#R_D(CLK := #D抢答按钮);
IF #R_D.Q AND #提示音 THEN
#D犯规 := 1;
END_IF;
//A选手
IF #R_A.Q AND #指示灯 AND NOT #A犯规 AND NOT #空闲标志 THEN
#A中间 := 1;
#空闲标志 := 1;
END_IF;
IF #A中间 THEN
#A成功指示灯 := 1;
END_IF;
#T1(IN:=#A中间,
PT:=T#0.5S);
IF #T1.Q THEN
#A成功指示灯 := 0;
END_IF;
#T2(IN:=#T1.Q,
PT:=T#0.5S);
IF #T2.Q THEN
RESET_TIMER(#T1);
#A选手成功指示灯闪3次计数 += 1;
END_IF;
IF #A选手成功指示灯闪3次计数>=3 THEN
#A成功指示灯 := 1;
#A中间 := 0;
#A选手成功指示灯闪3次计数 := 0;
END_IF;
//B选手
IF #R_B.Q AND #指示灯 AND NOT #B犯规 AND NOT #空闲标志 THEN
#B中间 := 1;
#空闲标志 := 1;
END_IF;
IF #B中间 THEN
#B成功指示灯 := 1;
END_IF;
#T3(IN := #B中间,
PT := T#0.5S);
IF #T3.Q THEN
#B成功指示灯 := 0;
END_IF;
#T4(IN := #T3.Q,
PT := T#0.5S);
IF #T4.Q THEN
RESET_TIMER(#T3);
#B选手成功指示灯闪3次计数 += 1;
END_IF;
IF #B选手成功指示灯闪3次计数 >= 3 THEN
#B成功指示灯 := 1;
#B中间 := 0;
#B选手成功指示灯闪3次计数 := 0;
END_IF;
//C选手
IF #R_C.Q AND #指示灯 AND NOT #C犯规 AND NOT #空闲标志 THEN
#C中间 := 1;
#空闲标志 := 1;
END_IF;
IF #C中间 THEN
#C成功指示灯 := 1;
END_IF;
#T5(IN := #C中间,
PT := T#0.5S);
IF #T5.Q THEN
#C成功指示灯 := 0;
END_IF;
#T6(IN := #T5.Q,
PT := T#0.5S);
IF #T6.Q THEN
RESET_TIMER(#T5);
#C3 += 1;
END_IF;
IF #C3 >= 3 THEN
#C成功指示灯 := 1;
#C中间 := 0;
#C3 := 0;
END_IF;
//D选手
IF #R_D.Q AND #指示灯 AND NOT #D犯规 AND NOT #空闲标志 THEN
#D中间 := 1;
#空闲标志 := 1;
END_IF;
IF #D中间 THEN
#D成功指示灯 := 1;
END_IF;
#T7(IN := #D中间,
PT := T#0.5S);
IF #T7.Q THEN
#D成功指示灯 := 0;
END_IF;
#T8(IN := #T7.Q,
PT := T#0.5S);
IF #T8.Q THEN
RESET_TIMER(#T7);
#D3 += 1;
END_IF;
IF #D3 >= 3 THEN
#D成功指示灯 := 1;
#D中间 := 0;
#D3 := 0;
END_IF;
—THE END—






免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

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

本版积分规则