子程序中上升沿置位的問題
劉玉蓉
發(fā)布于2014-10-11 17:13
7
0
標簽:
主程序:
網(wǎng)絡(luò)1
LD I0.0
LPS
A T37
A I0.0
S V301.0, 1
LPP
TON T37, 20
網(wǎng)絡(luò)2
LDN I0.0
LPS
A T50
AN I0.0
R V301.0, 1
LPP
TON T50, 20
網(wǎng)絡(luò)3
LD I0.5
CALL SBR_0:SBR0
子程序SBR_0
LD V301.0
EU
S Q0.0, 1
1。程序大意是V301.0先被置位成1,之后打開I0.5進子程序,但是Q0.0還是有可能被置位?
2。我反復試程序,發(fā)現(xiàn)有時候Q0.0沒亮,有時候又亮。請問這是什么問題?
3?;蛘呶业某绦蜻@樣有問題的話,該如何寫才能保證在V301.0先被置位的情況下Q0.0不亮
問題補充:
我的困惑是,每次調(diào)試程序我總是先打開I0.0置位V301.0,之后再打開I0.5。但是有時候Q0.0不亮,有時候又會亮。
在實際程序中,I0.0是一個周期性的信號,I0.5是一個隨機性的信號。程序目的是,I0.5打開之后,I0.0置位,這時Q0.0亮;
I0.0先置位,I0.5再打開,這時Q0.0不亮,需要等到下一個周期的I0.0置位時才會亮。
佳答案
首先要明確,邊沿檢測是靠檢測兩個掃描周期的狀態(tài)來實現(xiàn)的,如果子程序某一次調(diào)用時V301.0是0后子程序停止調(diào)用,因子程序不被調(diào)用時子程序里的邊沿存儲位不會改變,那么再一次調(diào)用子程序時只要V301.0為1EU指令將檢測到上升沿。
除了一直調(diào)用并只調(diào)用一次的子程序,不推薦在子程序里使用邊沿指令。
相信不用子程序,你應(yīng)該能實現(xiàn)你的目的。
子程序取消,網(wǎng)絡(luò)3改一下
主程序:
網(wǎng)絡(luò)1
LD I0.0
LPS
A T37
A I0.0
S V301.0, 1
LPP
TON T37, 20
網(wǎng)絡(luò)2
LDN I0.0
LPS
A T50
AN I0.0
R V301.0, 1
LPP
TON T50, 20
網(wǎng)絡(luò)3
LD V301.0
EU
A I0.5
S Q0.0, 1