Прощу помощи в решении следующей задачи.
Возможно возникновение трёх событий bEvent0, bEvent1, bEvent2 и bEvent3 (могут возникнуть как одновременно, так и нет), которые нужно записать в журнал событий панели оператора (панель НЕ Овен). Т.к. записать одновременно эти события нельзя, по фронту возникновения события присваиваю соответствующей переменной bEvent0W, bEvent1W, bEvent2W или bEvent3W значение "TRUE". Как только появилось событие для записи, то устанавливаю флаг записи _Samp_His_Buf_.0 на 10 секунд в "единицу" и записываю в журнал событий соответствующее значение переменной _byEventToLog_, в это время включаю ФБ TON TONSampHisBuf(IN:= _Samp_His_Buf_.0, PT:=t#10s , Q=> , ET=> TimeTONSampHisBuf) и по условию TONSampHisBuf.Q=TRUE сбрасываю флаг записи _Samp_His_Buf_.0. Но почему-то программа успевает зайти в условие сброса не один раз, а столько, сколько одновременно событий возникло (что и показывает счётчик byTONCount), из-за этого в журнал событий записывается только одно из событий. Если я правильно понял логику работы ФБ TON, то при сбросе входа IN в 0, выход Q тоже сбрасывается в 0.
Код:RTRIGEvent0(CLK:= bEvent0, Q=>); IF RTRIGEvent0.Q THEN bEvent0W:= TRUE; END_IF; RTRIGEvent1(CLK:= bEvent1, Q=>); IF RTRIGEvent1.Q THEN bEvent1W:= TRUE; END_IF; RTRIGEvent2(CLK:= bEvent2, Q=>); IF RTRIGEvent2.Q THEN bEvent2W:= TRUE; END_IF; RTRIGEvent3(CLK:= bEvent3, Q=>); IF RTRIGEvent3.Q THEN bEvent3W:= TRUE; END_IF; IF bEvent0W AND NOT _Samp_His_Buf_.0 THEN _byEventToLog_:=0; _Samp_His_Buf_.0:= TRUE; bEvent0W:= FALSE; END_IF; IF bEvent1W AND NOT _Samp_His_Buf_.0 THEN _byEventToLog_:=1; _Samp_His_Buf_.0:= TRUE; bEvent1W:= FALSE; END_IF; IF bEvent2W AND NOT _Samp_His_Buf_.0 THEN _byEventToLog_:=2; _Samp_His_Buf_.0:= TRUE; bEvent2W:= FALSE; END_IF; IF bEvent3W AND NOT _Samp_His_Buf_.0 THEN _byEventToLog_:=3; _Samp_His_Buf_.0:= TRUE; bEvent3W:= FALSE; END_IF; TONSampHisBuf(IN:= _Samp_His_Buf_.0, PT:=t#10s , Q=> , ET=> TimeTONSampHisBuf); IF TONSampHisBuf.Q THEN byTONCount:=byTONCount+1; _Samp_His_Buf_.0:=FALSE; END_IF;




Ответить с цитированием