Владимир, спасибо большое за проделанную работу![]()
Владимир, спасибо большое за проделанную работу![]()
Все циклы абсолютно рабочие в макросе. На данный момент у меня этот макрос вообще реализован БЕЗ единой обратной связи только требует жесткого наличия переменных на входе и выходе. Например если я им считаю время и мне не нужны секунды, я все равно обязан создать переменную для секунд.
Это точно не является проблемой в падении работы макроса, когда в него добавляется все 4 оригинала SelChange.
А второй пример смотрели с SEL после макроса ? там вообще НИ ЕДИНОЙ обратной связи нет.
БЛИН. ПОВТОРЯЮ ВОПРОС ЕЩЕ РАЗ.
независимо как компилятор вычисляет шаги для блоков, связей и так далее. ПОЧЕМУ НАРУШАЮТСЯ ШАГИ прямой и обратной линии связи, идущие от ОДНОГО ВЫХОДА ???? Забудьте, что программа для каждого блока назначает свой шаг цикла, речь идет, что происходит нарушение в одной конкретной точке.
з.ы. я уже не знаю, как русским языком написать вопрос, чтобы его поняли программисты
И главное, что такого в SEL, если при 1 на входе он передает данные с одного входа, а при нуле с другого ?
Проблема в красном кружке, когда на выходе ADD появляется 1, то на входе EQ сразу фиксируется 1 на обоих входах, хотя должно быть на одном шаге 1, 0, на следующем 1, 1
То, что в синем кружке работает при этом корректно.
И прошу заметить, что проблема начинается если в макросе вставлено все 4 блока оригинала макроса SelChange, когда вставлено 2 и 3 блока нарушений в работе нет.
Последний раз редактировалось melky; 21.10.2016 в 16:18.
Вы приводите слишком много примеров. Это и хорошо и плохо одновременно.
Плохо то, что когда говорите "второй пример", то можете говорить конкретнее?
Там два многомегабайтных ОЛ проекта. Вы что понимаете под вторым примером?
Если честно, я, увидев кольцо из не-обратных связей, прекратил исследования, т.к. "правильно" работать оно вряд ли может.
Владислав как-то говорил, что в ОЛ прошло много лет, прежде чем победили все проблемы с обратными связями.
Мне не верилось, и, похоже, действительно, все "проблемы" вызваны не самими обратными, а тем, что часть "не обратных" неявно превращается в обратные. Т.е. ОЛ-то работает как и заявлено, но просто оно не предупреждает пользователей, что "нельзя делать кольца из необратных связей".
Передам палочку Максиму =)
Последний раз редактировалось Владимир Ситников; 21.10.2016 в 16:48.
0) Ты суслика видишь? а он есть!
1) "обратные связи" бывают явные и не явные
2) если есть цикл, то обязательно есть обратная связь, даже если вы её не рисовали...
3) неявная обратная связь может быть блуждающей, т.е. перемещаться по циклу в при незначительном изменении схемы
(именно из-за этого её и ввели разработчики, кстати, по моей просьбе)
4) то что "обратные связи" используют как "прямые", но "с задержкой на такт" - это недокументированная фича
(обнаруженная и впервые примененная опять же мной на практике в макросе "стек на новый лад")
PS вроде всё это я уже где-то писал...
PPS пора делать FAQ
Последний раз редактировалось AI!; 21.10.2016 в 17:48.
начинающий профессионал
AI! то, что прямые связи могут быть "неявными обратными" это и так понятно, вопрос то в другом, что "обратная" связь в понятии ОЛ должна полностью на цикл затормозить сигнал, а этого не происходит. Точнее происходит, но то правильно, то неправильно.
Еще один момент, как это реализован компилятор, что внешние цепи, не относящиеся к макросу влияют на его работу ? макрос как и любой FBD должен выполняться строго в своей области памяти, со своими переменными и на его ВНУТРЕННИЕ переменные не должна влиять сама программа, а она почему-то влияет
Выходят из одной точки, входят в две разные.
Кстати компилятор Siemens LOGO! в такой ситуации выдает предупреждение и предлагает установить флаг (M2, M3 на схеме)
Компилятор CodeSys сам разбирается с флагами, при чем вполне корректно.
Только ОЛ пока хромает.
![]()
Вам уже все сказали, что от цикла из не-обратных связей вы ничего хорошего не получите.
Ещё раз: у вас в программе есть кольцо из "не обратных" связей. Есть кольцо -- значит никто не гарантирует как именно оно будет работать.
Что мешает вот так сделать?
Снимок экрана 2016-10-21 в 19.20.27.png
Убираем кольцо из необратных связей и, о чудо, начинает работать.
Владимир Ситников Компилятор такой умный, что непонимает, что на входе сигнал придет позже и соответственно и на выходе из узла он окажется позже ?
именно сменит свое состояние в другой момент ? - браво.
Евстигнеев Максим, вот, теперь несколько понятнее, что макрос в ОЛ, просто кусок программы, завернутый в эфемерную оболочку.
Все равно все ломается
Объясните, как элементы в красном, влияют на работоспособность того, что в синем ?
Последний раз редактировалось melky; 21.10.2016 в 20:29.