Цитата(kaii @ 30.01.2021 - 21:40)
Если в первом варианте у вас просто никогда операция И не будет выполнена т.к. нужно 1 и 1 на входах (это не операция ИЛИ), и выход с этого И как раз и должен включать 1 необходимую, что никогда не произойдет.
Во втором варианте у вас петля получилась. Представьте, в теории (т.к. вряд ли вообще этот цикл будет работать т.к. значение IN0 не определенно как 0 даже), у вас на "in" пришло значение 23. В вычитании, в теории, 23 минус 0 получаем 23. Дальше через абсолют получаем 23. Через сравнение с 20 получаем что 23 больше чем 20 и на выходе имеем логическую единицу. SEL увидев единицу на G такой "настало время переключить на выход значение с IN1", что он успешно и делает. НО проследим цепочку дальше. На выходе с SEL число 23, которое отправляется на SUB. И что же получаем? 23 вычитается 23 и получаем 0, что меньше чем 20 и GE обратно переключается в 0, что дает сигнал на SEL, что переключает обратно на IN0. И теперь программа помнит что на IN0 число 23 и SUB нужно чтобы на "in" было число равное или больше 44 чтобы снова через сравнение пошла единица которая снова переключит SEL и вход IN0 СНОВА запомнит число 44 и будет его вычитать из "in". И так оно по кругу бесконечно будет не исполняться. Поняли цикл как идет у вас? Или запутанно объяснил?
Ближайшее решение это выкинуть SUB и ABS, а на GE заводить "in" и K20. На IN0 будет то же самое значение, что и на выходе, но оно использоваться не будет пока "in" больше 20, а когда станет меньше, то запомнит (ну, как запомнит, выключив и включив контроллер забудет и будет 0 передавать, пока снова больше 20 не будет) что переключилось когда было число 20 и будет его на выход посылать пока на G не появится снова единица. (Хотя нз, нужно ли начальному числу в IN0 определение, что там 0, и не будет ошибки.)
Спасибо.
На самом деле я затупил, и в данном случае если вместо линий на входы послать переменную out, то все работает. Заранее объявив ее при инициализации.