Показано с 1 по 10 из 1207

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от _Pavel_ Посмотреть сообщение
    Нет, всё правильно у нас реализована событийная модель обмена, и клиент и сервер могут отправлять сообщения в произвольный момент времени, ожидая ответа или нет.


    Да, версия ПО именно 0.2.24, эта версия последняя что публиковалась в этом топике, если я ничего не пропустил... А где взять последнюю?

    Часть проекта во вложении
    1. Последнюю версию ПО можно запросить в нашей техподдержке + она должна появится на сайте.
    2. Обязанность клиента (в терминологии стека ТСP) поддерживать соединение, постоянно передавая пакеты, иначе сработает таймаут.
    3. Таймауты на повтор пакетов у Вас великоваты - 3 секунды - поставьте 1.
    3а. Таймаут должен отсчитываться во всех состояниях с установленным соединением.
    4. В программе ожидается определённое количество байт и считываются только они - если придёт лишний - он никогда не будет считан и буфера закончатся Правильно - всегда считывать все данные из сокета до момента возврата нуля в ответе SySSockRecv(). Иначе будет вышеописаное.
    5. По задачам - за 1 цикл ПЛК способен выполнить только 1 задачу, даже если ещё 20 уже заждались очереди. Т.о. если я правильно расшифровал текстовые поля в описании задач - (лучше бы проект .pro прислали чтобы не мучится), то у Вас множество задач по событиям (т.е. возможно каждый цикл будут вызываться) и MainTask в режиме свободного вызова (крайне не рекомендую на CoDeSys 2 Embedded, ведёт себя непредсказуемо).
    При такой конфигурации период вызова MainTask не определён. Попробуйте вычленить коммуникационную часть и с учётом рекомендаций 3 и 4 проверить в монопольной задаче.
    Тролль-наседка, добрый, нежный и ласковый

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

    По умолчанию

    Владислав, спасибо за ответ!

    1. Последнюю версию ПО можно запросить в нашей техподдержке + она должна появится на сайте.
    Хорошо, попробую запросить.

    Обязанность клиента (в терминологии стека ТСP) поддерживать соединение, постоянно передавая пакеты, иначе сработает таймаут.
    Да, я это знаю. Только у нас это немного не так реализовано: при подключении клиента сервер начинает посылать раз в секунду специальные пакеты (PulsePacket), на которые клиент сразу же отвечает. Если сервер не получит хотя бы один из этих пакетов в течении определённого времени (20 сек), он закроет сокет.

    3. Таймауты на повтор пакетов у Вас великоваты - 3 секунды - поставьте 1.
    3а. Таймаут должен отсчитываться во всех состояниях с установленным соединением.
    Таймаут в 3 секунды здесь задан как раз для контроля Pulse-пакетов от сервера, если в течении 3-х секунд мы не получили от сервера Pulse-пакет или вообще чего-нибудь, то мы закрываем сокет и переподключаемся.

    4. В программе ожидается определённое количество байт и считываются только они - если придёт лишний - он никогда не будет считан и буфера закончатся Правильно - всегда считывать все данные из сокета до момента возврата нуля в ответе SySSockRecv(). Иначе будет вышеописаное.
    Не совсем так: чтение происходит в несколько этапов:
    1. Читаем шапку пакета (4 байта) в которой мы должны распознать принадлежность пакета и считать его размер. (это заложено в нашем протоколе)
    2. Запускаем процедуру обработки пакета, которая считывает из сокета определённое количество байт, указанное в шапке, далее идёт разбор пакета и выполнение определённых действий.
    3. Далее мы повторяем вышеописанные действия, проверяя нет ли ещё данных в сокете. Завершаем цикл при выполнении одного из условий: чтение сокета вернуло 0, либо кончилось количество попыток. Может быть в этом и есть ошибка: я должен обязательно дочитать все данные до 0... Я ограничил количество попыток 5-ю, дабы потенциально не раздувать время цикла.

    5. По задачам - за 1 цикл ПЛК способен выполнить только 1 задачу, даже если ещё 20 уже заждались очереди. Т.о. если я правильно расшифровал текстовые поля в описании задач - (лучше бы проект .pro прислали чтобы не мучится), то у Вас множество задач по событиям (т.е. возможно каждый цикл будут вызываться) и MainTask в режиме свободного вызова (крайне не рекомендую на CoDeSys 2 Embedded, ведёт себя непредсказуемо).
    Да, событийных задач довольно много: срабатывание каждого дискретного входа ПЛК, задний фронт. Одна циклическая задачка 3 раза в секунду. Но, относительно времени цикла ПЛК ( не более 0,7 - 1,2 мс судя по модулю статистики), эти события ооочень редки,а выполняются они ооочень быстро, поэтому при временных расчётах ими вообще можно пренебречь. То есть ситуация когда событийные задачки будут вызываться каждый цикл абсолютно исключена. Т.о. коммуникационная часть выполняется максимально часто. Т.е. насколько я понял в моём случае нужно ставить минимальное время цикла в ноль.
    Напильник, велосипед, бубен, грабли и костыли - основные инструменты программиста.

Похожие темы

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

Ваши права

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