Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
У меня СПК110 и скорость обмена с 5 модулями 19200.
В CODESYS ставлю частоту циклов основной программы 200 мс: I, II модули работают, III помигивает "аварией", а на IV "авария" светится постоянно.
Таймауты 1 секунда.
Методом тыка уменьшил частоту циклов основной программы до 90 мс, "аварии" исчезли.
Объясните пожалуйста, в какой задаче "сидит" подзадача обмена данными по RS485? В одном потоке с основным циклом?
Как правильно подобрать время цикла, кроме метода тыка?
Ведь может быть ситуация, когда циклу надо не менее 200 мс, а этого не хватает для полноценного обмена с модулями, который требует например не более 100 мс. Как тогда?
Спасибо.
Последний раз редактировалось Dmitro; 19.05.2018 в 17:00.
По умолчанию обмен происходит в задаче с наименьшим временем цикла. Если в проекте одна задача (у вас, видимо, так) - то, соответственно, обмен происходит в ней.
Можно создать отдельную задачу и привязать обмен к ней (см. настройки Modbus Master).
Но зачем? По умолчанию задача MainTask имеет время цикла 20 мс. Поднимать его выше я, честно говоря, не вижу смысла. Если вам необходимо выполнять какие-то операции раз в 200 мс - то лучше для этого использовать таймер в программе.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Евгений, спасибо за оперативный ответ.
В разделе "Конфигурация задач/монитор" можно увидеть "среднее время цикла (нс)". Можно ли его использовать
для выбора времени цикла? Или использовать "максимальное время цикла"? Оно бывает на порядок больше.
Если выбрать маленькое время цикла возможны же сбои, когда один цикл не завершился, а уже вызывается другой. Процессор будет забит под завязку и его может "кому-то" не хватить. или это не критично?
Буду очень благодарен, если разъясните.
1. Надо заметить, что в мониторинге конфигуратора задач время отображется в микросекундах.
2. В значительном числе случаев дефолтного времени (20 мс) для задачи пользовательского кода вполне хватает.
Но если внезапно нет - то можно порекомендовать задавать его как (среднее время цикла в мониторинге, переведенное в мс * 1.25)
3. В CODESYS 3.5 вытесняющая многозадачность. Все циклы так или иначе отработают полностью. Так что "маленькое" время цикла в значительном числе случаев действительно не критично.
P.S. - на всякий случай: мс = миллисекунды (не микро)
Последний раз редактировалось Евгений Кислов; 19.05.2018 в 22:21.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Спасибо!
То есть теоретически можно поставить обновление и 1 мс, и СПК будет работать нормально.
Не совсем правда понятно, если любой цикл (рабочей программы/обмена РС485/визуализации) прервется на половине своей работы, "вытеснится" другой задачей...
Нет, 1 мс - плохое решение. Начать следует с 20 мс. Далее можно смотреть по среднему времени реального цикла - если не укладывается, то повысить.То есть теоретически можно поставить обновление и 1 мс, и СПК будет работать нормально.
Представьте: вы 3 часа писали код, потом вам надоело (глаза устали), и вы решили сходить немного прогуляться. Теперь вы никогда не вернетесь домой и не допишите код?Не совсем правда понятно, если любой цикл (рабочей программы/обмена РС485/визуализации) прервется на половине своей работы, "вытеснится" другой задачей...
Наверное, нет (вернетесь и допишите).
ПЛК выполняет задачи не последовательно одну за другой, а небольшими фрагментами (т.е. задачи постоянно переключаются). Время цикла и приоритет определяют, сколько единиц времени будет отдано той или иной задачи.
В вашем случае достаточно поставить время цикла MainTask = 20 мс (тогда обмен будет идти нормально), а дальше в коде выполнять необходимые операции с нужной частотой, используя таймеры (см. библиотеку Standard).
Последний раз редактировалось Евгений Кислов; 20.05.2018 в 10:17.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Добрый вечер!
Первый раз пишу обмен по 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. Что еще почитать про обмен по Модбас, особенно когда используется конвертер, как у меня?
Заранее спасибо!
Добрый вечер.
1. Да, Modbus Serial Device.
2. Да.
3, 4. Вам поможет этот документ:
https://ftp.owen.ru/CoDeSys3/11_Docu...CADA_v.1.1.pdf
В нем описывается, как опросить СПК через OPC. Настройка со стороны SCADA будет примерно такой же.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Добрый день!
Спасибо, с чтением более-менее, а запись командой 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 ничего не меняется.
Почему не работает, как думаете?