Показано с 1 по 4 из 4

Тема: Ошибка ПО из-за возможного перекрытия в памяти

  1. #1

    По умолчанию Ошибка ПО из-за возможного перекрытия в памяти

    Добрый день!
    При отладке программы обнаружилась ошибка, вероятно из-за перекрытия в памяти.
    В отладочном режиме при прохождении шага в переменную fl_Measure_mode значение TRUE не присваивается.
    Проверил в коде присвоения для переменных типа Array, визуально не нашел выходы за пределы диапазона массивов.
    В диагностическом модуле Codesys "Память" у вышеназванной переменной стоит 0.
    Подскажите, пожалуйста, как пользоваться данным модулем, т.е. откуда берется этот 0?
    В чем может быть причина ошибки?

    P.s. Справа от вышеназванной переменной в модуле "Память" располагаются элементы массива dwMachIconColor, после того как я закоментировал
    участки кода с этим массивом, ошибка ушла. Массив определен с 1-го элемента (не с нулевого как обычно). Не создается ли средой автоматически 0-й элемент
    массива все-равно? Может быть в этом причина?
    Изображения Изображения
    Последний раз редактировалось alekstani; 18.09.2022 в 19:21.

  2. #2

    По умолчанию

    По трём картинкам отладить код и решить вашу проблему... Думаю данных для выдачи советов недостаточно. Выложите код.

  3. #3

    По умолчанию

    Выложите пожалуйста весь код и объявления, которые относятся к массиву и его обходу.
    Явно же где-то идёт выход за границы массива или данных.

    Нет, никаких "нулевых" элементов массива не создаётся. Всё работает даже для [10..20] - пофиг, память будет распределена верно.

    Также хотелось спросить: то, что fbMeasureMode вызывается только при совпадении условия (IF...) - это так задумано специально или это тоже ошибка? ОБЫЧНО FBШки вызываются постоянно, но с разными параметрами.

    Что ещё можно сделать:
    а) Проверить, не используются ли в проекте жёстко заданные адреса (как любили делать в CodeSys 2.3) через %xxx-что-то-там (использовал один раз, намучился, не стал даже учить)
    б) Почитать справку и найти в ней функцию проверки границ массива, которую можно переопределить и через неё отвлеживать выход за границы массивов. Я про это слышал, но ещё не пользовался, поэтому даю информацию на уровне "что-то такое есть". Искать в справке "CheckBounds".
    Вроде как в FAQ была возможность записывать события в системный журнал от имени визуализации (на английском). Я пользуюсь таким кодом:
    Код:
    Sys_DelayedLogText := 'PLC Started with FIRST (DT = 0) run - MinMax/Avg Reset';
    Sys_DelayedLogLevel := LogClass.LOG_WARNING;
    
    VisuElems.Visu_Output(Sys_DelayedLogText, Sys_DelayedLogLevel);
    Эту фишку можно использовать для того, чтобы записать в лог выход за границы массива в том самом POU CheckBounds.
    в) Во всяких циклах обхода массивов можно можно использовать функции типа LOWER_BOUND/UPPER_BOUND, которые подставят размерность массивов и не дадут загнать цикл за границы.

    Но лучше дать нам код сюда.
    Последний раз редактировалось Cs-Cs; 19.09.2022 в 07:35.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  4. #4

    По умолчанию

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

Похожие темы

  1. ПЛК 110 (М02). Возможна ли ошибка в памяти ПЛК?
    от KIP_Dimon в разделе ПЛК1хх [М02]
    Ответов: 8
    Последнее сообщение: 18.06.2020, 09:51
  2. Использование памяти в ПЛК
    от Mikhael_2 в разделе ПЛК (среда MasterSCADA 4D)
    Ответов: 0
    Последнее сообщение: 05.07.2019, 17:30
  3. Ячейка памяти
    от Project M в разделе Среда программирования OWEN Logic
    Ответов: 21
    Последнее сообщение: 10.07.2017, 08:59
  4. регистры памяти плк 150
    от Columbariy в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 15.10.2012, 22:32
  5. Распределение памяти
    от Milchuk в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 01.06.2007, 09:26

Ваши права

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