Страница 71 из 121 ПерваяПервая ... 2161697071727381 ... ПоследняяПоследняя
Показано с 701 по 710 из 1205

Тема: Обновленный ПЛК110?

  1. #701
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    Поставьте в программе функцию max.
    на вход время цикла из модуля статистики и выходное значение, выход сохраняйте.
    Похоже у Вас где-то зацикливание или очень большое время цикла.
    Всю программу просмотреть не возможно. В целом толково и удобно для отладки,но...

  2. #702
    Пользователь
    Регистрация
    30.11.2012
    Адрес
    40RUS
    Сообщений
    316

    По умолчанию

    Полный сброс программы не должен происходить при перезагрузке, если программа сохранена во флеш.
    Это-то меня и напрягает немного, т.к. пару раз был свидетелем того что CDS заявляет об отсутствии программы, хотя я до этого не один раз создавал загрузочный проект. Думаю попробовать в этот момент просто презапустить ПЛК с полным отключением питания.

    Перезагрузиться может, если к примеру в бесконечный цикл вошел или собака сработала.
    Да, но сколько ему надо времени, чтобы после этого "прийти в чувства"? Иногда пропадает связь с ПЛК так, что он даже не пингуется и вывести его из этого состояния можно только путём сброса рычажком или питанием. Подмечено: всякие чудеса происходят при плохой связи, видимо начинается TCP-шная возьня по восстановлению коннекта. Надо переходить на UDP и на одном протоколе (у меня их два реализовано, для поключения к разным серверам) я это уже сделал и убедился, что в тех же условиях UDP работает гораздо стабильней. Но другой сервер не поддерживает UDP, да и просто хотелось бы разобраться...

    У Вас какое время цикла используется?
    Время цикла использую нулевое. Объясню: в моей задаче нет какого-либо цикличного техпроцесса. Я управляю подвижным объектом, таким образом все события, которые обрабатывает контроллер происходят асинхронно в произвольный момент времени: срабатывание дискретных входов, получение команд от сервера через сокет. Таким образом моя задача состоит в том чтобы как можно быстрее реагировать на появление этих событий. Нулевой время цикла гарантирует нам с одной стороны максимальную частоту выполнения кода(а следовательно и минимальное время реакции на событие), а с другой стороны выполнение коммуникационных задач в полном объёме.

    Ваша программа очень сложная. Чтобы понять в чем причина проблемы (в прикладной программе или в железе) напишите простую программу и потестируйте на ней.
    Угу, периодически этим занимаюсь путём комментирования различных частей кода. Однако необъяснимые события все равно случаются...
    Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.

  3. #703

    По умолчанию

    Для сохранения проекта во флеше без выключения питания - надо использовать команду flush в PLCBrowser-е.
    И ещё. Если тумблер стоит в стопе - ПЛК программу не запустит и при логине будет говорить что её нет. Хотя она есть

    Где логи?

    По программе:
    1. Цикл - что показывает модуль Statistic? Причём надо накапливать данные по времени исполнения, для этого все задачи надо вызывать (на время отладки) из одной задачи PLC_PRG и накапливать мин/мах время цикла, а ещё лучше гистограмму - позволяет отлавливать медленные куски кода.
    И зачем ставили 0 во времени цикла?
    2. Watchdog-и не выставлены на все задачи.
    3. Почему нет обработчиков событий Start и Stop? Ресурсов выделяется много - а при загрузке новой программы, к примеру, их надо освободить. Для того и обработчики создали.
    4.Если тестируете ПЛК/программу и ожидаете неправильного поведения - подключите терминал в режиме записи лога, используйте снифер или внешний регистратор, на другом ПЛК, к примеру, чтобы записывать в 23:01:34 ПЛК перестал выдавать тактовые сигналы...
    5. Используете указатели и функции типа SysMemCpy - всегда (ну хотя бы на время отладки) надо проверять аргументы функций доступа к ОЗУ и указатели на ликвидность перед применением. Как говорится: "Одно неверное движение - и Вы папа"
    6. В момент тестирования визуализация работала?
    7. Очень много копирования сообщений туда-сюда. Например CCPSendBuf (). Это много времени требует и нет проверок размеров копирования. По идее можно обойтись без копирования - очередь буферов для сообщений, признак свободен, захвачен, надо передать, принят и диспетчер, который манипулирует буферами и сокетами. Тогда предавать надо межу программами не данные, а номер буфера и никаких лишних копирований.

    А так хорошо структурированная программа. Но монстр
    Последний раз редактировалось Филоненко Владислав; 07.12.2014 в 18:56.
    Тролль-наседка, добрый, нежный и ласковый

  4. #704
    Пользователь
    Регистрация
    30.11.2012
    Адрес
    40RUS
    Сообщений
    316

    По умолчанию

    Для сохранения проекта во флеше без выключения питания - надо использовать команду flush в PLCBrowser-е.
    Я правильно понимаю, что: если у меня ранее был сохранён загрузочный проект, затем я его изменял в режиме онлайн и создавал новый загрузочный проект, то он не сохранится в случае если ПЛК зависнет во время выполнения программы и перезагрузится по вочдогу?

    Если тумблер стоит в стопе - ПЛК программу не запустит и при логине будет говорить что её нет. Хотя она есть
    Тумблер всегда в работе. Использую его только для сброса...

    По поводу логов см. личку
    Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.

  5. #705

    По умолчанию

    Цитата Сообщение от _Pavel_ Посмотреть сообщение
    Я правильно понимаю, что: если у меня ранее был сохранён загрузочный проект, затем я его изменял в режиме онлайн и создавал новый загрузочный проект, то он не сохранится в случае если ПЛК зависнет во время выполнения программы и перезагрузится по вочдогу?
    По поводу логов см. личку
    Есть вероятность.
    Тролль-наседка, добрый, нежный и ласковый

  6. #706
    Пользователь
    Регистрация
    30.11.2012
    Адрес
    40RUS
    Сообщений
    316

    По умолчанию

    Владислав, спасибо за советы по программе в ближайшее время займусь их реализацией, а пока несколько комментариев:
    1. Модуль статистики с применение функции МАХ показывает около 7 мс +-1. Отдельно пробовал замерять времена работы стадий общения через сокеты, выяснилось самый медленный - приёмник, 5-6 мс. Что характерно, ибо там цикл REPEAT-UNTIL, пока не прочитаем все данные на текущий момент из сокета.
    2. На задачи с явно линейным кодом я не ставил watchdog, думал нет смысла...
    3. Да, Вы правы, надо бы добавить.
    4. Обязательно так и сделаю, как только налажу работу сниффера
    5. Ух этож скокаж проверок потребуется
    6. Не, визуализация не работала, CDS не был подключен. Крутился тест, который долбил 2 раза в секунду одну и ту же команду, на которую контроллер определённым образом одинаково отвечает. Никаких ветвлений, всё линейно, ну кроме качества связи, специально снизил уровень сигнала до -75-80 Дб. Пол часа при мне всё работало, утром прихожу - "в контроллере нет программы"...
    7. Да копирований много. Принцип работы примерно такой:
    Используется событийная модель. Срабатывание входа или достижение определённой переменной определённого значения вызывает событие, которое формирует пакет-сообщение (байтовый массив, сформированный по определённому протоколу) для передачи оповещения о нём хосту. Т.к. за время прохождения одного цикла может произойти несколько событий, это сообщение помещается в FIFO буфер, в котором хранятся сообщения готовые к отправке. Далее отдельная процедура в конце PLC_PRG следит за этим буфером и, если в нём имеются неотправленные сообщения, она склеивает несколько сообщений из буфера в один большой пакет и ставит эту склейку на передачу в сокет. Я искусственно ограничил максимальный размер склейки 512-ю байтами, так... на всякий случай. В случае если сообщения не умещаются в лимит буфера передатчика, они остаются в буфере и будут переданы в последующих циклах, но это крайне редкое событие. Конечно же размер буфера сообщений контролируется и в случае достижения максимального значения новое сообщение не добавится, да к тому же произойдёт разрыв соединения и переподключение. После каждого успешного сеанса передачи обязательно запускается сеанс приема, даже если в буфере имеются неотправленные сообщения. Если сообщений на передачу нет сокет находится в режиме приёма.
    для поддержания TCP-соединения каждую секунду сервер посылает в ПЛК маленький "Пульс-пакет", получив который ПЛК незамедлительно отвечает таким же. Если в течении 3-х секунд не был получен ни один пульс-пакет, соединение разрывается, вызывается переинициализация сокета.
    Для одного из протоколов реализован обмен по UDP. Каждое сообщение помимо постановки в буфер отправки копируется в другой буфер неподтверждённых сообщений. Хост, получив от контроллера сообщение отправляет подтверждение получения определённого сообщения (у каждого сообщения имеется уникальная сигнатура). Контроллер получив такое потверждение от хоста в свою очередь утилизирует это сообщение из буфера неподтверждённых сообщений, сдвигая остальные на его место. В случае если в течении определённого времени (200 мс.) контроллер не получает ни одного подтверждающего сообщения, он инициирует повторную отправку всего буфера неподтверждённых сообщений аналогичным методом склейки в один большой пакет.
    Как-то так...
    Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.

  7. #707

    По умолчанию

    7мс цикл - и 0(1) мс уставка цикла - явное несоответствие. Уставка цкла должна быть больше как минимум на 20% чем время цикла. Разбивайте программу на много маленьких подпрограммок.
    Тролль-наседка, добрый, нежный и ласковый

  8. #708
    Пользователь
    Регистрация
    30.11.2012
    Адрес
    40RUS
    Сообщений
    316

    По умолчанию

    Тут где-то на форуме была очень интересная темка по поводу нулевого времени цикла и прочитав её, а также изучив документацию по данному вопросу я подумал, что 0 - это мой случай.
    Владислав, если вам не сложно, пожалуйста, объясните ещё разок: в каких случаях можно устанавливать время цикла ПЛК в ноль?
    Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.

  9. #709
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    Павел, в ноль можно ставить, но это не гарантирует в некоторых случаях корректного выполнения операций.
    Я у Вас не случайно спросил про это сразу. Попробуйте поставить цикл 10мс.
    Сколько ни смотрел за s400, время цикла 15-17мс. Для быстрых задач или прямое управление входами-выходами или булевые модули используют.
    Не выиграете много на 2-3мс в цикле, а стабильность потеряете.

  10. #710

    По умолчанию

    Значит так. На новом 110-м 0===1. Режим цикла без контроля времени не реализовывался вообще, в связи с его баганутостью.
    Тролль-наседка, добрый, нежный и ласковый

Страница 71 из 121 ПерваяПервая ... 2161697071727381 ... ПоследняяПоследняя

Похожие темы

  1. приобрел обновленный плк110
    от Ruffian в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 04.12.2009, 12:01

Ваши права

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