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