本帖最后由 12131213 于 2020-7-15 12:32 編輯
看了網(wǎng)上的交通燈程序似乎都沒(méi)有SCL版本的,就把自己 寫的SCL版本分享一下吧。 控制要求: 首先,南北方向紅燈亮25秒,與此同時(shí),東西方向綠燈先亮20秒,然后閃3秒,接著東西方向黃燈閃2秒;接下來(lái),東西方向紅燈亮30秒,南北方向綠燈先亮25秒,然后,南北綠燈閃3秒,南北黃燈閃2秒。 程序設(shè)計(jì)思路: 程序分為單定時(shí)器和雙定時(shí)器兩個(gè)版本,但思路是一樣的,都是根據(jù)在不同的時(shí)間點(diǎn),控制不同的燈亮。因?yàn)榭偟臅r(shí)長(zhǎng)為55秒,然后東西方向通行時(shí)間為25秒,南北方向通行時(shí)間為30秒,整個(gè)程序流程如下:
無(wú)標(biāo)題.png (15.75 KB, 下載次數(shù): 49)
下載附件
2020-7-15 12:31 上傳
然后簡(jiǎn)單說(shuō)一下單定時(shí)器和雙定時(shí)器的區(qū)別,他們的功能是一樣的,只不過(guò)雙定時(shí)器可以任意修改閃爍頻率,而單定時(shí)器版本的只能使用系統(tǒng)設(shè)定好的幾個(gè)頻率。因?yàn)閱味〞r(shí)器版本用的是PLC自帶的系統(tǒng)時(shí)鐘,使用方法是打開(kāi)”設(shè)備組態(tài)”,在“常規(guī)”里面找到“系統(tǒng)和時(shí)鐘存儲(chǔ)器”,勾選“時(shí)鐘存儲(chǔ)器位”就行了,然后就可以在PLC變量表里面看到相應(yīng)的變量了。圖片如下:
無(wú)標(biāo)題1.png (159.16 KB, 下載次數(shù): 57)
下載附件
2020-7-15 12:32 上傳
無(wú)標(biāo)題2.png (165.24 KB, 下載次數(shù): 66)
下載附件
2020-7-15 12:32 上傳
程序如下: 單定時(shí)器版本: - //交通燈:?jiǎn)味〞r(shí)器版本
- IF "啟動(dòng)" AND "停止" = 0 THEN
- "數(shù)據(jù)塊_1".啟動(dòng)值 := 1;
- "數(shù)據(jù)塊_1".停止值 := 0;
- ELSIF "停止" THEN
- "數(shù)據(jù)塊_1".啟動(dòng)值 := 0;
- "數(shù)據(jù)塊_1".停止值 := 1;
- "東西紅" := 0;
- "東西黃" := 0;
- "東西綠" := 0;
- "南北紅" := 0;
- "南北黃" := 0;
- "南北綠" := 0;
- END_IF;
- IF "數(shù)據(jù)塊_1".啟動(dòng)值 THEN
- "數(shù)據(jù)塊_1".定時(shí)器.IN := 1;
- "數(shù)據(jù)塊_1".定時(shí)器.PT := T#55s;
- "IEC_Timer_0_DB_2".TON(IN := "數(shù)據(jù)塊_1".定時(shí)器.IN,
- PT := "數(shù)據(jù)塊_1".定時(shí)器.PT,
- ET => "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間);
- IF "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間>=T#0s AND "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間<=T#20s THEN
- "東西綠" := 1;
- "南北紅" := 1;
- ELSIF "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間>T#20s AND "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間<=T#23s THEN
- "東西綠" :="Clock_2Hz" ;
- ELSIF "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間>T#23s AND "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間<=T#25s THEN
- "東西綠" := 0;
- "東西黃" := "Clock_2Hz";
- ELSIF "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間>T#25s AND "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間<=T#50s THEN
- "東西紅" := 1;
- "南北綠" := 1;
- "東西黃" := 0;
- "南北紅" := 0;
- ELSIF "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間>T#50s AND "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間<=T#53s THEN
- "南北綠" := "Clock_2Hz";
- ELSIF "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間>T#53s AND "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間<=T#55s THEN
- "南北黃" :="Clock_2Hz" ;
- "南北綠" := 0;
- END_IF;
- IF "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間 =T#55s THEN
- RESET_TIMER("IEC_Timer_0_DB_2");
- "東西紅" := 0;
- "東西黃" := 0;
- "東西綠" := 0;
- "南北紅" := 0;
- "南北黃" := 0;
- "南北綠" := 0;
- END_IF;
- END_IF;
復(fù)制代碼
雙定時(shí)器版本:
- //交通燈:兩個(gè)定時(shí)器版本
- IF "啟動(dòng)" AND "停止" = 0 THEN
- "數(shù)據(jù)塊_1".啟動(dòng)值 := 1;
- "數(shù)據(jù)塊_1".停止值 := 0;
- ELSIF "停止" THEN
- "數(shù)據(jù)塊_1".啟動(dòng)值 := 0;
- "數(shù)據(jù)塊_1".停止值 := 1;
- "東西紅" := 0;
- "東西黃" := 0;
- "東西綠" := 0;
- "南北紅" := 0;
- "南北黃" := 0;
- "南北綠" := 0;
- END_IF;
- IF "數(shù)據(jù)塊_1".啟動(dòng)值 THEN
- "數(shù)據(jù)塊_1".定時(shí)器.IN := 1;
- "數(shù)據(jù)塊_1".定時(shí)器.PT := T#55s;
- "數(shù)據(jù)塊_1".定時(shí)器1.PT := T#0.5s;
- //總定時(shí);55s
- "IEC_Timer_0_DB_2".TON(IN := "數(shù)據(jù)塊_1".定時(shí)器.IN,
- PT := "數(shù)據(jù)塊_1".定時(shí)器.PT,
- ET => "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間);
- //0~20s;南北紅燈,東西綠燈
- IF "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間>=T#0s AND "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間<=T#20s THEN
- "東西綠" := 1;
- "南北紅" := 1;
- //東西綠燈閃3s
- ELSIF "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間>T#20s AND "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間<=T#23s THEN
- "數(shù)據(jù)塊_1".定時(shí)器1.IN := 1;
- "數(shù)據(jù)塊_1".定時(shí)器1.PT := T#500ms;
- "IEC_Timer_0_DB".TON(IN := "數(shù)據(jù)塊_1".定時(shí)器1.IN,
- PT := "數(shù)據(jù)塊_1".定時(shí)器1.PT,
- Q => "數(shù)據(jù)塊_1".定時(shí)器輸出2);
- IF "數(shù)據(jù)塊_1".定時(shí)器輸出2 THEN
- "東西綠" := NOT "東西綠";
- RESET_TIMER("IEC_Timer_0_DB");
- END_IF;
- //東西黃燈閃2s
- ELSIF "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間>T#23s AND"數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間<=T#25s THEN
- "東西綠" := 0;
- "數(shù)據(jù)塊_1".定時(shí)器1.IN := 1;
- "數(shù)據(jù)塊_1".定時(shí)器1.PT := T#500ms;
- "IEC_Timer_0_DB".TON(IN := "數(shù)據(jù)塊_1".定時(shí)器1.IN,
- PT := "數(shù)據(jù)塊_1".定時(shí)器1.PT,
- Q => "數(shù)據(jù)塊_1".定時(shí)器輸出2);
- IF "數(shù)據(jù)塊_1".定時(shí)器輸出2 THEN
- "東西黃" := NOT "東西黃";
- RESET_TIMER("IEC_Timer_0_DB");
- END_IF;
- //東西紅燈,南北綠燈亮25S
- ELSIF "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間>T#25s AND "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間<=T#50s THEN
- "東西紅" := 1;
- "南北綠" := 1;
- "東西黃" := 0;
- "南北紅" := 0;
- //南北綠燈閃3s
- ELSIF "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間>T#50s AND "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間<=T#53s THEN
- "數(shù)據(jù)塊_1".定時(shí)器1.IN := 1;
- "數(shù)據(jù)塊_1".定時(shí)器1.PT := T#500ms;
- "IEC_Timer_0_DB".TON(IN := "數(shù)據(jù)塊_1".定時(shí)器1.IN,
- PT := "數(shù)據(jù)塊_1".定時(shí)器1.PT,
- Q => "數(shù)據(jù)塊_1".定時(shí)器輸出2);
- IF "數(shù)據(jù)塊_1".定時(shí)器輸出2 THEN
- "南北綠" := NOT "南北綠";
- RESET_TIMER("IEC_Timer_0_DB");
- END_IF;;
- //南北黃閃2s
- ELSIF "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間>T#53s AND "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間<=T#55s THEN
- "南北綠" := 0;
- "數(shù)據(jù)塊_1".定時(shí)器1.IN := 1;
- "數(shù)據(jù)塊_1".定時(shí)器1.PT := T#500ms;
- "IEC_Timer_0_DB".TON(IN := "數(shù)據(jù)塊_1".定時(shí)器1.IN,
- PT := "數(shù)據(jù)塊_1".定時(shí)器1.PT,
- Q => "數(shù)據(jù)塊_1".定時(shí)器輸出2);
- IF "數(shù)據(jù)塊_1".定時(shí)器輸出2 THEN
- "南北黃" := NOT "南北黃";
- RESET_TIMER("IEC_Timer_0_DB");
- END_IF;
- END_IF;
- //全部初始化
- IF "數(shù)據(jù)塊_1".定時(shí)器輸出時(shí)間 >=T#55s THEN
- RESET_TIMER("IEC_Timer_0_DB_2");
- "東西紅" := 0;
- "東西黃" := 0;
- "東西綠" := 0;
- "南北紅" := 0;
- "南北黃" := 0;
- "南北綠" := 0;
- END_IF;
- END_IF;
復(fù)制代碼
順便把歸檔文件也上傳一下,有需要的自取。
交通燈.zip
(611.46 KB, 下載次數(shù): 47)
2020-7-15 12:03 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|