Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Останов работы ПЛК

  1. #1
    Пользователь
    Регистрация
    10.01.2007
    Адрес
    Красноярск
    Сообщений
    138

    По умолчанию Останов работы ПЛК

    Помогите разобраться в особенностях ПЛК.

    С периодичностью в 2-3 часа происходит самопроизвольный останов работы ПЛК. Контроллер не перегружается, а просто останавливает выполнение программы. В log.txt сообщение "2 PLC STOPED". Попытка запуска кнопочкой СТАРТ/СТОП на мордочке ПЛК происходит удачно и контроллер продолжает работать до следующего самопроизвольного останова.

    Проект и лог-файл вложены.

    Судя по значениям переменных, в остановленном состоянии ПЛК, останов происходит при значении переменной takt=1 инструкции CASE. Т.е. во время ожидания приема данных по интерфейсу RS232.

    В чем может быть причина или как диагностировать причину останова ПЛК?

    Контроллер ПЛК100 K.L
    Прошивка 2.01.8
    Таргет 2.04
    Вложения Вложения
    • Тип файла: txt log.txt (7.1 Кб, Просмотров: 23)
    • Тип файла: zip pech.zip (20.5 Кб, Просмотров: 30)

  2. #2

    По умолчанию

    1. Вы используете библиотеку SysLibMem, вы уверены, что вы работаете только с областью I/O и массивом данных в программе? Если вы где-либо ошиблись и записали не в ту область, то результаты непредсказуемы! Прямое обращение к памяти очень опасно. Поищите в этом направлении.

  3. #3

    Post

    У меня такое тоже было :-)
    Правда проблема заключалась в том что версия прошивки и версия торгет файла не совпадали. После экспорта программы и импорта в новый проект (созданный с новыми торгет-файлами) проблема больше не повторялась.
    P. S. Забыл добавить первоначально проект был создан с старыми торгет-файлами :-) Удачи
    Последний раз редактировалось Gans; 12.11.2007 в 16:26. Причина: Торможу :-)

  4. #4
    Пользователь
    Регистрация
    10.01.2007
    Адрес
    Красноярск
    Сообщений
    138

    По умолчанию

    Использование библиотеки SysLibMem безусловно требует аккуратности. И все рассчеты адресов для прямого доступа к памяти I/O выполняются с предварительной проверкой на допустимый диапазон.
    Даже если и есть ошибка, которую допустили в программе, хотелось бы, чтобы контроллер отдавал информацию больше чем сообщение "PLC STOPED".

    Что касается соответствия таргета и прошивки. PLC Configuraton был экспортирован, создан новый проект под таргетом 2.04, далее импортирован PLC Configuration в новый проект. Но проблема не ушла.
    Последний раз редактировалось SergeyNG; 13.11.2007 в 12:12.

  5. #5

    По умолчанию

    Цитата Сообщение от SergeyNG Посмотреть сообщение
    Что касается соответствия таргета и прошивки. PLC Configuraton был экспортирован, создан новый проект под таргетом 2.04, далее импортирован PLC Configuration в новый проект. Но проблема не ушла.
    а весь проект полностью со всеми POU и тд. и тп. не пробывали!?

  6. #6
    Пользователь
    Регистрация
    10.01.2007
    Адрес
    Красноярск
    Сообщений
    138

    По умолчанию

    а весь проект полностью со всеми POU и тд. и тп. не пробывали!?
    А смысл? Текст программы и описание переменных были перенесены в новый проект через буфер обмена.

    Закоментили в тексте программы функции прямого обращения к памяти из бибилотеки SysLibMem. Таким образом исключили возможность записи значений по каким-нибудь адресам вне диапазона ввода/вывода и внутрених переменных программы. Но останов ПЛК не ушел. Не здесь зверь зарыт.

  7. #7
    Пользователь
    Регистрация
    10.01.2007
    Адрес
    Красноярск
    Сообщений
    138

    По умолчанию

    Продолжу тему по поводу самопроизвольного останова ПЛК.
    Появилось следующее предположение.
    Для проекта используем контроллер ПЛК100 K.L (объемом памяти ввода/вывода 360 байт).

    В PLC Configuration объявлен модуль Owen (Master) и к нему подцеплены 45 подэлемента Float variable Comm (Listen) и 21 подэлемент Float variable Comm (Write). Оба используемых типа включают в себя значение типа REAL и комманду на чтение/запись типа BYTE, т.е. всего 5 байт. Если вести подсчет напрямую получаем 45*5+21*5 = 330 байт области вывода этого контроллера. 330 байт < 360 байт, которыми ограничена область ввода/вывода, поэтому для проекта был выбран контроллер с ограниченной лицензией.

    При детальном изучении размеров областей памяти во вкладке Target Settings замечено, что область входов занимает 16#7A (122) байта, а область выходов 16#EA (234) байта. Т.е. 330 байт, которые ложатся в области вывода, перекрывают допустимую область вывода для контроллера.

    Вопросы:
    1. Во время компиляции и загрузки проекта не ругается ни CoDeSys, ни контроллер на превышение допустимых размеров области вывода. Как контролировать попали мы в ограничение или нет? Только подсчитывать на листке бумаги?
    2. Было замечено, что подэлементы Float variable Comm (Listen) и Float variable Comm (Write), которые внутри себя имеют типы REAL и BYTE, занимают в памяти контроллера не 5 байт, а 8 байт. А для области ввода/вывода эти подэлементы занимают 5 байт или 8 байт? Если 8, то тут даже прямой расчет на бумаге не поможет.
    3. Самый главный вопрос. В своей программе мы перекрыли область памяти за ограниченные контроллером байты вывода и программа работает. Каких результатов ожидать? Может ли это быть причиной самопроизвольных остановов выполнения программы контроллера?

  8. #8

    По умолчанию

    Цитата Сообщение от SergeyNG Посмотреть сообщение
    Продолжу тему по поводу самопроизвольного останова ПЛК.
    Появилось следующее предположение.
    Для проекта используем контроллер ПЛК100 K.L (объемом памяти ввода/вывода 360 байт).

    В PLC Configuration объявлен модуль Owen (Master) и к нему подцеплены 45 подэлемента Float variable Comm (Listen) и 21 подэлемент Float variable Comm (Write). Оба используемых типа включают в себя значение типа REAL и комманду на чтение/запись типа BYTE, т.е. всего 5 байт. Если вести подсчет напрямую получаем 45*5+21*5 = 330 байт области вывода этого контроллера. 330 байт < 360 байт, которыми ограничена область ввода/вывода, поэтому для проекта был выбран контроллер с ограниченной лицензией.

    При детальном изучении размеров областей памяти во вкладке Target Settings замечено, что область входов занимает 16#7A (122) байта, а область выходов 16#EA (234) байта. Т.е. 330 байт, которые ложатся в области вывода, перекрывают допустимую область вывода для контроллера.

    Вопросы:
    1. Во время компиляции и загрузки проекта не ругается ни CoDeSys, ни контроллер на превышение допустимых размеров области вывода. Как контролировать попали мы в ограничение или нет? Только подсчитывать на листке бумаги?
    2. Было замечено, что подэлементы Float variable Comm (Listen) и Float variable Comm (Write), которые внутри себя имеют типы REAL и BYTE, занимают в памяти контроллера не 5 байт, а 8 байт. А для области ввода/вывода эти подэлементы занимают 5 байт или 8 байт? Если 8, то тут даже прямой расчет на бумаге не поможет.
    3. Самый главный вопрос. В своей программе мы перекрыли область памяти за ограниченные контроллером байты вывода и программа работает. Каких результатов ожидать? Может ли это быть причиной самопроизвольных остановов выполнения программы контроллера?
    По поводу ограничения памяти и его подсчета.
    1. CoDeSys следит за расходованием памяти и если память исчерпалась - сообщает о ошибке. Просто надо все переменные использовать.
    2. Подсчет - действительно затруднен из-за ограничений в архитектуре ARM-процессора, а именно требования к выравниванию. Но с учётом п.1. это не так важно, т.к. при переполнении вылезет ошибка.

    Цитата Сообщение от SergeyNG Посмотреть сообщение
    Использование библиотеки SysLibMem безусловно требует аккуратности. И все рассчеты адресов для прямого доступа к памяти I/O выполняются с предварительной проверкой на допустимый диапазон.
    Даже если и есть ошибка, которую допустили в программе, хотелось бы, чтобы контроллер отдавал информацию больше чем сообщение "PLC STOPED".

    Что касается соответствия таргета и прошивки. PLC Configuraton был экспортирован, создан новый проект под таргетом 2.04, далее импортирован PLC Configuration в новый проект. Но проблема не ушла.
    Т.е. Вы использовали старый проект с новым таргетом? так делать нельзя.

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

  9. #9
    Пользователь
    Регистрация
    10.01.2007
    Адрес
    Красноярск
    Сообщений
    138

    По умолчанию

    1. CoDeSys следит за расходованием памяти и если память исчерпалась - сообщает о ошибке. Просто надо все переменные использовать.
    Все переменные объявленные в PLC Configuration используются. Только коственным путем через указатель адреса.
    Предварительно перед написанием такого "большого" проекта были выполнены проверки, что переменные объявленные в PLC Configuration имеют определенную длину и ложатся в памяти в определенной последовательности. А если это так, то для программиста использовать в данном случае вместо 66 переменных типа REAL и 66 переменных типа BYTE всего лишь 1 указатель адреса и обьявить всего лишь одну переменную в начале массива было гораздо удобнее и быстрее.

    Только что проверил. Задал последней переменной в PLC Configuration имя. Как Вы и написали, Владислав, CoDeSys выдал ошибку. И тут я все понял , и теперь буду писать проекты так, чтобы CoDeSys понял, что произошло переполнение памяти ввода/вывода. Но в целом считаю это не правильным, т.к. переменная МЭК %XXX.XX.XX уже объявлена в проекте, хоть и без имени, и среда разработки должна контролировать выход ее за пределы области ввода/вывода, а ПЛК эту переменную ест и даже обновляет соответствующие ей сетевые переменные. Прошу момент учесть во благо всех пользователей данного продукта!

  10. #10

    По умолчанию

    т.к. вы прямо не используете эту переменную, а получаете доступ к ней по указателю, то компилятор не может проследить за её использованием. и это правильно, т.к. действует принцип "спасение указателеиспользующих - дело самих указателеиспользующих"!
    да, указатель - элегантно и даже круто, но в ответственных приложениях я бы вообще не советовал их использовать, как и выделение памяти и прочие "небезопасные вещи!"

Страница 1 из 2 12 ПоследняяПоследняя

Ваши права

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