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