Страница 25 из 149 ПерваяПервая ... 1523242526273575125 ... ПоследняяПоследняя
Показано с 241 по 250 из 1642

Тема: CODESYS V3.5. Настройка обмена с другими устройствами (Modbus, ОВЕН, OPC и др.)

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,595

    По умолчанию

    По умолчанию обмен происходит в задаче с наименьшим временем цикла. Если в проекте одна задача (у вас, видимо, так) - то, соответственно, обмен происходит в ней.
    Можно создать отдельную задачу и привязать обмен к ней (см. настройки Modbus Master).

    Но зачем? По умолчанию задача MainTask имеет время цикла 20 мс. Поднимать его выше я, честно говоря, не вижу смысла. Если вам необходимо выполнять какие-то операции раз в 200 мс - то лучше для этого использовать таймер в программе.

  2. #2
    Пользователь
    Регистрация
    09.01.2017
    Адрес
    Киев
    Сообщений
    206

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    По умолчанию обмен происходит в задаче с наименьшим временем цикла. Если в проекте одна задача (у вас, видимо, так) - то, соответственно, обмен происходит в ней.
    Можно создать отдельную задачу и привязать обмен к ней (см. настройки Modbus Master).

    Но зачем? По умолчанию задача MainTask имеет время цикла 20 мс. Поднимать его выше я, честно говоря, не вижу смысла. Если вам необходимо выполнять какие-то операции раз в 200 мс - то лучше для этого использовать таймер в программе.
    Евгений, спасибо за оперативный ответ.
    В разделе "Конфигурация задач/монитор" можно увидеть "среднее время цикла (нс)". Можно ли его использовать
    для выбора времени цикла? Или использовать "максимальное время цикла"? Оно бывает на порядок больше.
    Если выбрать маленькое время цикла возможны же сбои, когда один цикл не завершился, а уже вызывается другой. Процессор будет забит под завязку и его может "кому-то" не хватить. или это не критично?
    Буду очень благодарен, если разъясните.

  3. #3
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,595

    По умолчанию

    1. Надо заметить, что в мониторинге конфигуратора задач время отображется в микросекундах.
    2. В значительном числе случаев дефолтного времени (20 мс) для задачи пользовательского кода вполне хватает.
    Но если внезапно нет - то можно порекомендовать задавать его как (среднее время цикла в мониторинге, переведенное в мс * 1.25)
    3. В CODESYS 3.5 вытесняющая многозадачность. Все циклы так или иначе отработают полностью. Так что "маленькое" время цикла в значительном числе случаев действительно не критично.

    P.S. - на всякий случай: мс = миллисекунды (не микро)

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

    По умолчанию

    Спасибо!
    То есть теоретически можно поставить обновление и 1 мс, и СПК будет работать нормально.
    Не совсем правда понятно, если любой цикл (рабочей программы/обмена РС485/визуализации) прервется на половине своей работы, "вытеснится" другой задачей...

  5. #5
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,595

    По умолчанию

    То есть теоретически можно поставить обновление и 1 мс, и СПК будет работать нормально.
    Нет, 1 мс - плохое решение. Начать следует с 20 мс. Далее можно смотреть по среднему времени реального цикла - если не укладывается, то повысить.

    Не совсем правда понятно, если любой цикл (рабочей программы/обмена РС485/визуализации) прервется на половине своей работы, "вытеснится" другой задачей...
    Представьте: вы 3 часа писали код, потом вам надоело (глаза устали), и вы решили сходить немного прогуляться. Теперь вы никогда не вернетесь домой и не допишите код?
    Наверное, нет (вернетесь и допишите).

    ПЛК выполняет задачи не последовательно одну за другой, а небольшими фрагментами (т.е. задачи постоянно переключаются). Время цикла и приоритет определяют, сколько единиц времени будет отдано той или иной задачи.

    В вашем случае достаточно поставить время цикла MainTask = 20 мс (тогда обмен будет идти нормально), а дальше в коде выполнять необходимые операции с нужной частотой, используя таймеры (см. библиотеку Standard).

  6. #6

    По умолчанию

    Добрый вечер!

    Первый раз пишу обмен по Modbus на Codesys 3.5, читал вот это краткое руководство - https://akytec.de/en/blog/modbus_kom...seinstellungen
    Есть СПК 107, конвертер Com<->Ethernet ЕТ-485 и Scada, которая вне проекта, в качестве отладки взял RapidScada.
    Нужно управлять СПК107 со стороны SCADA по Modbus TCP.
    Вопросы:
    1. В CDS один из Com-портов выделил под Modbus, его делать Master или Slave (Modbus_COM -> Modbus_Serial_Device)? По логике слейва достаточно, опрашивать СПК будет SCADA.
    2. Конвертер в этом случае должен быть мастером сети? В объекте Modbus_Serial_Device параметр Unit ID - это адрес СПК?
    3. Для передачи REAL значений в Modbus_Serial_Device на вкладке I/O Mapping нужно использовать <имя_переменной>.WordArray?
    4. Что еще почитать про обмен по Модбас, особенно когда используется конвертер, как у меня?

    Заранее спасибо!

  7. #7
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,595

    По умолчанию

    Добрый вечер.

    1. Да, Modbus Serial Device.
    2. Да.
    3, 4. Вам поможет этот документ:
    https://ftp.owen.ru/CoDeSys3/11_Docu...CADA_v.1.1.pdf

    В нем описывается, как опросить СПК через OPC. Настройка со стороны SCADA будет примерно такой же.

  8. #8

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый вечер.

    1. Да, Modbus Serial Device.
    2. Да.
    3, 4. Вам поможет этот документ:
    https://ftp.owen.ru/CoDeSys3/11_Docu...CADA_v.1.1.pdf

    В нем описывается, как опросить СПК через OPC. Настройка со стороны SCADA будет примерно такой же.
    Добрый день!

    Спасибо, с чтением более-менее, а запись командой 6 (Write Single Register) не работает.

    111.jpg

    На скрине две переменные, V0 и V1, объявлены обычно:
    VAR_GLOBAL
    V0:WORD;
    END_VAR

    PROGRAM PLC_PRG
    VAR
    V1:WORD;
    END_VAR
    Со стороны Скады пакеты такие:
    V0:
    Отправка (12): 00 00 00 00 00 06 01 06 00 00 00 64
    Приём (7/7): 00 00 00 00 00 06 01
    Приём (5/5): 06 00 00 00 64

    V1:
    Отправка (12): 00 00 00 00 00 06 01 06 00 01 00 C8
    Приём (7/7): 00 00 00 00 00 06 01
    Приём (5/5): 06 00 01 00 C8

    Если их распарсить, то все выглядит прилично, но в CDS ничего не меняется.

    Почему не работает, как думаете?

  9. #9

  10. #10

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    А что должно меняться в CDS? Вы значение записываемой переменной меняете?
    Ну да, я ожидаю, что V0 и V1 примут переданные значения. А разве не так должно быть?

Страница 25 из 149 ПерваяПервая ... 1523242526273575125 ... ПоследняяПоследняя

Похожие темы

  1. Настройка ПР200, управление 3-мя устройствами через RS-485
    от Orbes в разделе Среда программирования OWEN Logic
    Ответов: 20
    Последнее сообщение: 15.05.2017, 16:45
  2. СП3ХХ Пример настройка обмена с ПЛК на CODESYS 2.3
    от Denis_Kay в разделе Панели оператора (HMI)
    Ответов: 6
    Последнее сообщение: 02.03.2017, 15:12
  3. Ответов: 43
    Последнее сообщение: 13.04.2015, 14:05
  4. Универсальная функция для обмена с устройствами OwenIO и всеми любимый LabView.
    от Алексей Крагель в разделе Помощь Разработчикам
    Ответов: 0
    Последнее сообщение: 30.05.2014, 13:38

Ваши права

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