西門子1200 SCL-自動售貨機(jī) 編程練習(xí)
西門子1200 SCL-自動售貨機(jī) 編程練習(xí)
案例:自動售貨機(jī)系統(tǒng)
要求如下:
1.此售貨機(jī)可投入1元,5元,10元幣,投幣口分別為LS1(I0.0),LS2(I0.1),LS3(I0.2).
2.所售商品有4元(I0.3:按鈕;Q0.0:指示燈;Q0.4:驅(qū)動閥),6元(I0.4:按鈕;Q0.1:指示燈;Q0.5:驅(qū)動閥),10元(I0.5:按鈕;Q0.2:指示燈;Q0.6:驅(qū)動閥),12元(I0.6:按鈕;Q0.3:指示燈;Q0.7:驅(qū)動閥)商品。
3.當(dāng)投入貨幣總值大于等于所需要購買的商品價(jià)格,對應(yīng)的商品指示燈就會點(diǎn)亮,此時(shí)按下相應(yīng)的商品按鈕就會驅(qū)動閥動作掉出我們所需要的商品,出口閥驅(qū)動時(shí)間為2秒。
4.同一時(shí)間只能購買一種商品,不找錢。
分析:
1).編寫此類練習(xí)題,可以逐步分析,細(xì)化,比如:先編寫投幣動作,再編寫對應(yīng)商品指示燈亮動作,最后編寫購買商品動作!
2).可以分析購買4元、6元、10元和12元商品動作一樣,那可以先把4元的寫出來,購買其他商品的動作與4元商品的動作只需要更改變量即可。
3)將所有商品購買動作寫出來以后,再考慮同一時(shí)間只能購買一種商品動作。
程序:
1)投幣動作
2)指示燈接通動作
3)購買四元商品動作
4)購買六元商品動作
5)購買十元商品動作
6)購買十二元商品動作
完整程序:
//投幣動作
#R_1(CLK:=#"1元投口");
IF #R_1.Q THEN
#貨幣總額 += 1;
END_IF;
#R_5(CLK := #"5元投口");
IF #R_5.Q THEN
#貨幣總額 += 5;
END_IF;
#R_10(CLK := #"10元投口");
IF #R_10.Q THEN
#貨幣總額 += 10;
END_IF;
//指示燈亮動作
IF #貨幣總額>=4 THEN
#"4元商品指示燈" := 1;
ELSE
#"4元商品指示燈" := 0;
END_IF;
IF #貨幣總額 >= 6 THEN
#"6元商品指示燈" := 1;
ELSE
#"6元商品指示燈" := 0;
END_IF;
IF #貨幣總額 >= 10 THEN
#"10元商品指示燈" := 1;
ELSE
#"10元商品指示燈" := 0;
END_IF;
IF #貨幣總額 >= 12 THEN
#"12元商品指示燈" := 1;
ELSE
#"12元商品指示燈" := 0;
END_IF;
// 購買四元商品
#R_TRIG_4(CLK:=#"4元商品按鈕");
IF #R_TRIG_4.Q AND #"4元商品指示燈" AND NOT #空閑標(biāo)志 THEN
#空閑標(biāo)志 := 1;
#"4元商品驅(qū)動閥" := 1;
END_IF;
#T4(IN:=#"4元商品驅(qū)動閥",
PT:=T#2S);
IF #T4.Q THEN
#空閑標(biāo)志 := 0;
#"4元商品驅(qū)動閥" := 0;
#貨幣總額 -= 4;
#"4元商品按鈕" := 0;
END_IF;
// 購買六元商品
#R_TRIG_6(CLK := #"6元商品按鈕");
IF #R_TRIG_6.Q AND #"6元商品指示燈" AND NOT #空閑標(biāo)志 THEN
#空閑標(biāo)志 := 1;
#"6元商品驅(qū)動閥" := 1;
END_IF;
#T6(IN := #"6元商品驅(qū)動閥",
PT := T#2S);
IF #T6.Q THEN
#空閑標(biāo)志 := 0;
#"6元商品驅(qū)動閥" := 0;
#貨幣總額 -= 6;
#"6元商品按鈕" := 0;
END_IF;
// 購買十元商品
#R_TRIG_10(CLK := #"10元商品按鈕");
IF #R_TRIG_10.Q AND #"10元商品指示燈" AND NOT #空閑標(biāo)志 THEN
#空閑標(biāo)志 := 1;
#"10元商品驅(qū)動閥" := 1;
END_IF;
#T10(IN := #"10元商品驅(qū)動閥",
PT := T#2S);
IF #T10.Q THEN
#空閑標(biāo)志 := 0;
#"10元商品驅(qū)動閥" := 0;
#貨幣總額 -= 10;
#"10元商品按鈕" := 0;
END_IF;
// 購買十二元商品
#R_TRIG_12(CLK := #"12元商品按鈕");
IF #R_TRIG_12.Q AND #"12元商品指示燈" AND NOT #空閑標(biāo)志 THEN
#空閑標(biāo)志 := 1;
#"12元商品驅(qū)動閥" := 1;
END_IF;
#T12(IN := #"12元商品驅(qū)動閥",
PT := T#2S);
IF #T12.Q THEN
#空閑標(biāo)志 := 0;
#"12元商品驅(qū)動閥" := 0;
#貨幣總額 -= 12;
#"12元商品按鈕" := 0;
END_IF;