Сообщение от
energvk
Понятно, спасибо. А почему при этом статус висит постоянно и циклы останавливаются? Я так понимаю, что происходит остановка на каком-то моменте внутри программы и она дальше не выполняется? Тогда непонятно почему не происходит исключение по сторожевому таймеру...
Сообщение от
energvk
Перестает выполняться одна программа и при этом перестает выполняться задача, в которой эта программа находится. Происходит это на 501 или 502 цикле. Ссылку на программу сейчас скину
Как я понял в итоге после разбора программы - происходит зависание на выполнении функциональных блоков:
этого
Код:
rtr_a1(CLK:= in1, Q=> ); b1:=rtr_a1.Q;
rtr_a2(CLK:= in2, Q=> ); b2:=rtr_a2.Q;
rtr_a3(CLK:= in3, Q=> ); b3:=rtr_a3.Q;
rtr_a4(CLK:= in4, Q=> ); b4:=rtr_a4.Q;
rtr_a5(CLK:= in5, Q=> ); b5:=rtr_a5.Q;
rtr_a6(CLK:= in6, Q=> ); b6:=rtr_a6.Q;
rtr_a7(CLK:= in7, Q=> ); b7:=rtr_a7.Q;
rtr_a8(CLK:= in8, Q=> ); b8:=rtr_a8.Q;
rtr_a9(CLK:= in9, Q=> ); b9:=rtr_a9.Q;
rtr_a10(CLK:= in10, Q=> ); b10:=rtr_a10.Q;
rtr_a11(CLK:= in11, Q=> ); b11:=rtr_a11.Q;
rtr_a12(CLK:= in12, Q=> ); b12:=rtr_a12.Q;
rtr_a13(CLK:= in13, Q=> ); b13:=rtr_a13.Q;
rtr_a14(CLK:= in14, Q=> ); b14:=rtr_a14.Q;
rtr_a15(CLK:= in15, Q=> ); b15:=rtr_a15.Q;
rtr_a16(CLK:= in16, Q=> ); b16:=rtr_a16.Q;
rtr_out (CLK:=(b1 OR b2 OR b3 OR b4 OR b5 OR b6 OR b7 OR b8 OR b9 OR b10 OR b11 OR b12 OR b13 OR b14 OR b15 OR b16), Q=>out);
либо
Код:
//регистрация вкл/выкл события
rtr_1(CLK:= in1, Q=> ); rtr_2(CLK:= in2, Q=> ); rtr_3(CLK:= in3, Q=> ); rtr_4(CLK:= in4, Q=> ); rtr_5(CLK:= in5, Q=> );
rtr_6(CLK:= in6, Q=> ); rtr_7(CLK:= in7, Q=> ); rtr_8(CLK:= in8, Q=> ); rtr_9(CLK:= in9, Q=> ); rtr_10(CLK:= in10, Q=> );
on_1:=rtr_1.Q; on_2:=rtr_2.Q; on_3:=rtr_3.Q; on_4:=rtr_4.Q; on_5:=rtr_5.Q;
on_6:=rtr_6.Q; on_7:=rtr_7.Q; on_8:=rtr_8.Q; on_9:=rtr_9.Q; on_10:=rtr_10.Q;
ftr_1(CLK:= in1, Q=> ); ftr_2(CLK:= in2, Q=> ); ftr_3(CLK:= in3, Q=> ); ftr_4(CLK:= in4, Q=> ); ftr_5(CLK:= in5, Q=> );
ftr_6(CLK:= in6, Q=> ); ftr_7(CLK:= in7, Q=> ); ftr_8(CLK:= in8, Q=> ); ftr_9(CLK:= in9, Q=> ); ftr_10(CLK:= in10, Q=> );
off_1:=ftr_1.Q; off_2:=ftr_2.Q; off_3:=ftr_3.Q; off_4:=ftr_4.Q; off_5:=ftr_5.Q;
off_6:=ftr_6.Q; off_7:=ftr_7.Q; off_8:=ftr_8.Q; off_9:=ftr_9.Q; off_10:=ftr_10.Q;
//упаковка в биты
actions.0:=on_1;
actions.1:=off_1;
actions.2:=on_2;
actions.3:=off_2;
actions.4:=on_3;
actions.5:=off_3;
actions.6:=on_4;
actions.7:=off_4;
actions.8:=on_5;
actions.9:=off_5;
//выходные переменные
IF rtr_1.Q OR ftr_1.Q OR rtr_2.Q OR ftr_2.Q OR rtr_3.Q OR ftr_3.Q OR rtr_4.Q OR ftr_4.Q OR rtr_5.Q OR ftr_5.Q
OR rtr_6.Q OR ftr_6.Q OR rtr_7.Q OR ftr_7.Q OR rtr_8.Q OR ftr_8.Q OR rtr_9.Q OR ftr_9.Q OR rtr_10.Q OR ftr_10.Q THEN
event:= actions;
save:= TRUE;
ELSE save:= FALSE;
END_IF
Ранее периодически происходило исключение на первых строках этих блоков, в причине так и не разобрался. Вроде зависать не на чем. Закомментировав вызовы программ, где они используются, останов задач прекратился. Только не ясно почему перестало происходит Исключение - останов программы...