Страница 24 из 25 ПерваяПервая ... 1422232425 ПоследняяПоследняя
Показано с 231 по 240 из 245

Тема: Критическая ошибка в среде программирования Овен ЛОДЖИК или это я д-ак

  1. #231

    По умолчанию

    Цитата Сообщение от wal79 Посмотреть сообщение
    Задержка и обновляется в конце, это верно... Может так более понятно будет... Вложение 32565Вложение 32566
    Переменная 3 на первом скрине и переменная 1 на втором...
    Проблема в том что чтение переменной идет до записи в нее константы.
    Тут скорей всего нужно будет пересмотреть обход ЛЗ. Покумекаю...
    Ну, да, хрень какая-то.
    На всякий случай, упростил схему. Действительно воспроизводится на одном XOR элементе.

    Снимок экрана 2017-08-10 в 16.07.14.png
    Вложения Вложения

  2. #232

    По умолчанию

    Цитата Сообщение от pop70 Посмотреть сообщение
    Какой переменной?
    У Вас каждой связи назначено 2 переменных?
    Повторяю. Проблема в цепи без ЛЗ (переменной). Константа подана на вход напрямую.
    Любая константа инициализируется до любых статических и динамических переменных. Это правило такое общепринятое.
    Так вам показали же лог: Вложение 32565
    Переменная №3 это и есть "хранилище, которое используется для того, чтобы подать 1 на вход XOR'а".
    В логе видно, что ОЛ почему-то пыталось "поместить значение константы в переменную 3" уже намного позже вычисления самого XOR'а (XOR обрабатывал переменную 4=="линия задержки" и переменную 3=="простая связь" ).

    ЛЗ к этой самой "переменной 3" (надеюсь) никак не относится.

    Цитата Сообщение от pop70 Посмотреть сообщение
    Потом статические переменные...
    Это всё, конечно, красивые рассуждения про "космические карабли", но точно такой же баг может образоваться и без констант.
    Поэтому баг нужно исправлять не "починкой констант", а починкой самого компилятора, который допустил use-before-def.

    Вот тот же самый баг без констант:
    Снимок экрана 2017-08-10 в 16.21.59.png

  3. #233

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Ну и как тут вычисляется?
    Пошагово?
    По всем канонам здравого смысла:
    Начало
    1. Конст1:=1* (может быть ещё при компилляции, и запись в тело программы, в пзу)
    2. ЛЗ1:=0
    3. ЛЗ2:=0
    Инициализировали все переменные.
    НЦ
    4. Выход:=ЛЗ1
    5. ЛЗ2- В стек
    6. Константа - в стек
    7. XOR
    8. Результат - в ЛЗ1
    9. Константа - в ЛЗ2
    КЦ

    3 дерева:
    1.От выхода(шаг 4)
    2. От ЛЗ1 (на выходе)(шаги 5-8)
    3. От ЛЗ2 (на входе)(шаг 9)

    Если 3е выполняется раньше второго, то на вход хоr с линии задержки прилетит 1 к моменту расчёта xor.
    Но ни при каких условиях на второй вход не прилетит 0 от константы.

  4. #234

    По умолчанию

    Цитата Сообщение от pop70 Посмотреть сообщение
    Ну и как тут вычисляется?
    По всем канонам здравого смысла:
    Да хватит привязываться к константам и ПЗУ.
    Рассмотрите лучше пример, где я воспроизвёл баг на "входе" макроса.
    Значение входа-то уж никак в ПЗУ не запишешь.

  5. #235

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Так вам показали же лог: Вложение 32565
    Переменная №3 это и есть "хранилище, которое используется для того, чтобы подать 1 на вход XOR'а".
    3=="простая связь" ).

    ЛЗ к этой самой "переменной 3" (надеюсь) никак не относится.
    Там вообще не нужны переменные.
    Всё легко тусуется прямо в стеке.
    (Имею в виду статические переменные).

  6. #236

    По умолчанию

    Цитата Сообщение от pop70 Посмотреть сообщение
    5. ЛЗ2- В стек
    6. Константа - в стек
    7. XOR
    Да посмотрите же на лог.
    В конкретном случае ОЛ приняло решение константу 1 сохранить в переменную. Наверное, из-за того, что используется в нескольких местах.
    Поэтому и последовательности операций "константа-в стек; xor" вообще нет в логе.

    Цитата Сообщение от pop70 Посмотреть сообщение
    Если 3е выполняется раньше второго, то на вход хоr с линии задержки прилетит 1 к моменту расчёта xor.
    Но ни при каких условиях на второй вход не прилетит 0 от константы.
    Здесь у вас ошибка.

    Судя по логу, секция "инициализации начальных значений до цикла" отсутсвует как класс. Да, это может звучать "не по канонам", но это неважно, ведь точно такая же ошибка может возникнуть и при любых других вычислениях (обработке входов, например)

  7. #237

    По умолчанию

    Цитата Сообщение от pop70 Посмотреть сообщение
    Там вообще не нужны переменные.
    Всё легко тусуется прямо в стеке.
    (Имею в виду статические переменные).
    Результат используется в нескольких местах (из "константы" выходят две связи), и вполне логично, что компилятор сохранил этот самый результат в промежуточную переменную.
    Могла бы эта переменная соптимизироваться? Могла. Но эта оптимизация повлияла бы лишь на скорость работы.
    А скорость работы сейчас всех устраивает.

  8. #238

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Да хватит привязываться к константам и ПЗУ.
    Рассмотрите лучше пример, где я воспроизвёл баг на "входе" макроса.
    Значение входа-то уж никак в ПЗУ не запишешь.
    Значения входа пишутся в переменные в начале цикла - до расчёта. Это тот же самый баг-багище чтения из ненужной и неинициализированной переменной.

  9. #239

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Да посмотрите же на лог.
    В конкретном случае ОЛ приняло решение константу 1 сохранить в переменную. Наверное, из-за того, что используется в нескольких местах.
    Поэтому и последовательности операций "константа-в стек; xor" вообще нет в логе.


    Здесь у вас ошибка.

    Судя по логу, секция "инициализации начальных значений до цикла" отсутсвует как класс. Да, это может звучать "не по канонам", но это неважно, ведь точно такая же ошибка может возникнуть и при любых других вычислениях (обработке входов, например)
    Не может. Входы по определению пишутся до расчёта цикла.
    Отсутствие инициализации констант и статических переменных при запуске программы (до первого цикла) - это путь к непредсказуемому поведению ПР при включении.
    На время первого цикла, на выходах может оказаться любой мусор, никак не связанный с запрограммированным поведением. Это БАГИЩЕ, недопустимый в промавтоматике.

  10. #240

    По умолчанию

    Цитата Сообщение от pop70 Посмотреть сообщение
    Не может. Входы по определению пишутся до расчёта цикла.
    Похоже, вы не поняли сущность бага: значение, к которому подключено несколько связей, сохраняется во вспомогательную переменную.
    Поэтому не так важно что находится на входе, а будет использовано именно значение из вспомогательной переменной.

    То же самое будет и в любом другом вычислении. Надо просто результат вычисления подключить двумя связями (простой и ЛЗ) и можно получить баг (в зависимости от указанного приоритета ЛЗ).

Страница 24 из 25 ПерваяПервая ... 1422232425 ПоследняяПоследняя

Похожие темы

  1. Два вопроса по ОВЕН-Лоджик.
    от Sargon в разделе Среда программирования OWEN Logic
    Ответов: 33
    Последнее сообщение: 06.02.2017, 15:45
  2. ФИЧИ И БАГИ ОВЕН ЛОДЖИК
    от rovki в разделе Программируемые реле
    Ответов: 649
    Последнее сообщение: 29.07.2016, 10:33
  3. Универсальные макросы для ОВЕН ЛОДЖИК
    от rovki в разделе Программируемые реле
    Ответов: 197
    Последнее сообщение: 28.06.2016, 09:53
  4. Пожелания по развитию овен лоджик
    от rovki в разделе Программируемые реле
    Ответов: 146
    Последнее сообщение: 25.04.2013, 23:47
  5. Драйвер для ОВЕН ТРМ210 в среде LabVIEW
    от tzpp в разделе Помощь Разработчикам
    Ответов: 3
    Последнее сообщение: 16.02.2010, 13:06

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •