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

Тема: Неустойчивое соединение ПЛК323 мастер - СПК107 слейв.

  1. #1

    По умолчанию Неустойчивое соединение ПЛК323 мастер - СПК107 слейв.

    Проблема:
    Неустойчивое соединение ПЛК323 мастер - СПК107 слейв. От мастера (16(0x10)) приходят в слейв pBuffer, COM_Service,- нормально. Из pBuffer в мастер (3(0x03)) иногда приходят данные с задержкой в несколько минут, иногда нет.
    Контроллеры:
    ПЛК323: мастер; (v.3.947); (Версия: 3.5.0.40); Port4 - 14 device (DI, DO) - нормально в работе, на нём же СПК107 (Версия: 3.5.2.0) - периодически мигает красным (шина не запущена); Port5 - 10 device (AO,AI) - нормально в работе; через библиотеку MB_TCP_Slave - нормально в работе; Port6 - зарезервирован под ASCII.
    СПК107: слейв; (v.5.472); (Версия: 3.5.4.26); через библиотеку COM_Service (3.5.4.2) вроде в работе в буфер отправляет, принимает. Стандартный Modbus_Slave не работает, никакой версии почему-то?!
    Что делал. Проект в разработке:
    м1) До этого работал ПЛК323 Modbus_Slave (3.4.0.0) - СПК107 Com_Serice (3.1.0). Работал вяло, устойчиво.
    * Нужно было преодолеть ограничение 40 переменных на ПЛК323 Modbus_Slave. Нажатия на СПК107 плохо срабатывали, соединение не устойчивое, но работало.
    *-- Предпринял усилия улучшить конфигурацию, преодолеть ограничение 40 переменных, чёткость touch.
    * Переменные в Visu из GVL - это нормально? Поставил VISU_TASK (Интервал t#200ms, приоритет 15), что такое Восприимчивость(1) из конфигурации СПК? . Как ещё улучшить чёткость touch СПК107?
    * Чёткость touch СПК107 улучшилась, но видимо можно лучше. Возвратить к устойчивому варианту не удалось. Где-то ошибка.
    м2) Программа. Опрос в ПЛК323 Modbus_Slave, Обработка в СПК107 COM_Service разбиты на шаги, проверку ошибок. Алгоритм выполняется.
    м3) Добавлял задержки в программу опроса, обработки. Нет результата. Мастер не получает данные, либо с неприемлемой задержкой. От мастера в слейв данные поступают можно сказать нормально, если бы не периодические (2 мин.) потери соединения. Где-то ошибка.
    м4) После отключения СПК, иногда ПЛК323 Modbus_Slave теряет соединение. Находиться в состоянии "шина не запущена" (красный), не восстанавливается. Добавил код, но похоже он не восстанавливает Modbus_Slave:
    //----------------------------------------------------------------
    // Перезапуск соединения, задержка TON1, счётчик ошибок CTU1
    //----------------------------------------------------------------
    IF Modbus_Slave_COM_Port_SPK107_Adr51_Touch5.xError THEN
    TON1(IN:= NOT TON1.Q, PT:= T#60S, Q=> , ET=> );
    IF TON1.Q THEN
    TON2(IN:= NOT TON2.Q, PT:= T#5S, Q=> , ET=> );
    IF TON2.Q THEN
    Modbus_Slave_COM_Port_SPK107_Adr51_Touch5.xReset := TRUE;
    END_IF;

    CTU1 (
    CU:= Modbus_Slave_COM_Port_SPK107_Adr51_Touch5.xReset,
    RESET:= ,
    PV:= ,
    Q=> ,
    CV=> wCurrentCounterValue
    );
    Modbus_Slave_COM_Port_SPK107_Adr51_Touch5.xReset := FALSE;

    END_IF;
    ELSE
    Modbus_Slave_COM_Port_SPK107_Adr51_Touch5.xReset := FALSE;
    END_IF;
    Можно ли программно восстановить Modbus_Slave_COM_Port у СПК107?

  2. #2

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    возможно не на тот форум Вы обратились, Вам к Гудвину надо в Изумрудный город.
    Есть же документ https://ftp.owen.ru/index.html/CoDeS...dbus_v.1.1.pdf обработка ошибок с реконнектом там описана, зачем отсебятину то писать, полурабочий код
    Спасибо, увидел. При возникновении ошибки в Modbus_Slave_COM_Port.. надо Modbus_Master_COM_Port.xResetComPort активировать на один цикл. Видел же, но не использовал прямо приведенный пример "СПК Настройка обмена по Modbus Руководство для начинающих и продвинутых пользователей". Это надо будет перезагрузить более 20 устройств или более. Корректен ли такой подход? Возможно надо будет остановить процесс для других устройств на линии. Это новый дополнительный код.
    У устройства Modbus_Slave_COM_Port_""..."" есть выход <.xReset >. Такой метод не применим для одного слейв устройства на линии? А полурабочий код, это одна из обвязок на скорую руку, но проверка на ошибку нужна. Когда, чего зависнет, из-за чего, это сложно выяснять, писать лог, общаться по телефону, искать виновных. Не критически важный объект, простая перезагрузка нормально.
    Поэтому, спрашиваю у более опытных коллег как правильно делать. Заранее благодарю за ответы, участие.

  3. #3

    По умолчанию

    Перезапустить, одно устройство Modbus_Slave_COM_Port_ в Modbus_Master_COM_Port возможно, не перезапуская весь Modbus_Master_COM_Port.xResetComPort.
    Ошибка одного устройства Modbus_Slave_COM_Port_.xError появляется спустя где-то минуту после потери соединения.
    Вот код:
    TYPE CLIENTSTATE :
    (
    STARTCLIENT := 0,
    SENDCLIENT := 1,
    RECIEVECLIENT := 2,
    ERRORCLIENT := 3
    );
    END_TYPE

    //----------------------------------------------------------------
    // Обработка одного устройства Modbus_Slave_COM_Port
    //----------------------------------------------------------------
    //----------------------------------------------------------------
    // Обработка ошибки одного устройства Modbus_Slave_COM_Port.xError
    //----------------------------------------------------------------

    CASE CLIENTSTATE1 OF
    STARTCLIENT :
    Modbus_Slave_COM_Port_.xReset := FALSE;

    IF Modbus_Slave_COM_Port_.xError THEN
    CLIENTSTATE1:= ERRORCLIENT;
    ELSE
    CLIENTSTATE1:= SENDCLIENT;
    END_IF;

    SENDCLIENT:
    //----------------------------------------------------------------
    // SEND
    //----------------------------------------------------------------
    actChannelWriteSpk(); // Send

    IF Modbus_Slave_COM_Port_.xError THEN
    CLIENTSTATE1:= ERRORCLIENT;
    ELSE
    CLIENTSTATE1:= RECIEVECLIENT;
    END_IF;

    RECIEVECLIENT:
    //----------------------------------------------------------------
    // RECIEVE
    //----------------------------------------------------------------

    actChannelReadSpk(); // Recieve

    IF Modbus_Slave_COM_Port_.xError THEN
    CLIENTSTATE1:= ERRORCLIENT;
    ELSE
    CLIENTSTATE1:= SENDCLIENT;
    END_IF;

    ERRORCLIENT:
    //----------------------------------------------------------------
    // Перезапуск соединения, задержка TON1, счётчик ошибок CTU1, счётчик перезапусков CTU2,
    //----------------------------------------------------------------
    CTU1 (
    CU:= Modbus_Slave_COM_Port_.xError,
    RESET:= ,
    PV:= ,
    Q=> ,
    CV=> wCurrentCounterValuexError
    );
    IF Modbus_Slave_COM_Port_.xError THEN
    TON1(IN:= NOT TON1.Q, PT:= T#60S, Q=> , ET=> );
    IF TON1.Q THEN
    Modbus_Slave_COM_Port_.xReset := TRUE;
    END_IF;
    CTU2 (
    CU:= Modbus_Slave_COM_Port_.xReset,
    RESET:= ,
    PV:= ,
    Q=> ,
    CV=> wCurrentCounterValuexReset
    );
    ELSE
    Modbus_Slave_COM_Port_.xReset := FALSE;
    END_IF;

Похожие темы

  1. Ответов: 1
    Последнее сообщение: 26.09.2014, 00:07
  2. Ответов: 3
    Последнее сообщение: 06.05.2014, 08:32
  3. плк110-30 мастер ип320 слейв+сп270 слейв
    от валерий72 в разделе Панели оператора (HMI)
    Ответов: 10
    Последнее сообщение: 30.01.2014, 10:42
  4. Ответов: 5
    Последнее сообщение: 07.09.2011, 09:36
  5. ПЛК мастер и слейв
    от yra75 в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 26.01.2010, 22:19

Метки этой темы

Ваши права

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