У меня похожая ситуация: в сети Modbus TCP к ПЛК 110 нужно подключить несколько панелей.
Давайте уточним для ясности:
1) Разные порты нужны для разных модулей TCP в ПЛК: один порт для Modbus Slave и другой для Modbus Master? Правильно я понял, или нет?
2) Несколько мастеров (панелей или ПК), которые опрашивают и пишут в один ПЛК Slave в сети TCP вполне могут работать за счет параллельно открытых TCP соединений. Это так? Или нет?
Правда в последнем случае возникает вопрос стабильности и скорости, особенно когда панелей больше 2х. И вот тут сразу возникает мысль о сервере. Но только я задумывался об отдельном устройстве, как посреднике между панелями и ПЛК. Как здесь может помочь тот-же ПЛК: не совсем понимаю?
Нет. Серверу-слейву порт назначаете Вы, мастеру - местная ОС.
Так, но чтоб и порт слейва один - только при программном слейве.
А для штатного слейва - к одному слейву прицепить несколько портов. Внешние мастера цепляются к разным портам, но всё падает в одну область слейва - штатно различить откуда прилетело не сможете. (Открытое окно на улицу. Кто украл трусы с подоконника - не узнаете)
Стабильность одинаковая во всех случаях. Предел (для МО2) около 1000 модбас-запросов в секунду.
Для программного : в принципе можно сделать больше за счет потока запросов от одного клиента. Но тут уже сам клиент должен уметь организовать поток запросов. Ну и при программном исполнении никто не запрещает несколько "расширить" модбас.
Для каких-то конкретных задач - поможет. Для других - лишнее звено.
Эксперимент подтвердил: подключается только один мастер.
Кроме панели Овен СП-310 в проекте планируется использовать в качестве панелей несколько iPad и Android планшетов с помощью ПО Iridium Mobile.
Оно умеет только в режиме Мастер. Сбило утверждение разработчиков что множество панелей нормально работают с одним контроллером.
Как теперь выяснилось, не все контроллеры поддерживают множественные подключения и ОВЕН в их числе.
Трюк с портом срабатывает, благодарю за подсказку! Но этот вариант усложняет разработку и обновление проектов.
Возможно придется разработать процедуру автоматического выбора порта при подключении, или внедрять Iridium сервер, который несомненно решит проблему за счет удорожания.
Буду думать. Благодарю за обсуждение!
Подскажите пожалуйста, на сайте Овен нашел библиотеку СЭТ-4ТМ.03М для Codesys 3.5, а есть ли для версии Codesys 2.5?
Добрый день господа, подскажите в какую сторону думать, необходимо реализовать многозадачность на плк, первая программа основная (PLC_PRG) должна работать при срабатывании какого либо события (в моем случае это автоподмена аквариума по кнопке), вторая программа doliv (автодолив воды в коллектор аквариума) тоже должна работать при включенной переменной (другой кнопке). На просторах разных форумов нашел лишь кусочек кода в котором не смог разобраться как его прилепить и работает ли он вообщев конфигурации задач если выставить выполнение по событию, то он не сбрасывает значение выхода что критично, в библиотеках порылся и не совсем разобрался как реализовать этот останов программы, привлекла внимание лишь SysLibTasks.lib, помогите кто знает или имел делоIF ФлагОбнаруженияСиналаСтоп=TRUE
THEN ПрограммаПустышка
ELSE ОсновнаяПрограмма
END_IF;
По умолчанию ПЛК циклически выполняет задачу, содержащую вызов одной программы PLC_PRG в которой Вы и пишете свой алгоритм на одном из выбранных языков.
При этом, в зависимости от заданных Вами условий (значения входов ПЛК например), выполняется то или иное действие, программа может ветвится, запуская в нужный момент дополнительные функции, блоки и подпрограммы.
Когда программа пользователя отработает один цикл, ПЛК считывает состояние входов, устанавливает выходы, обрабатывает коммуникационные каналы и снова запускает программу. И так примерно 1000 раз в секунду, ну или медленнее если программа достаточно сложная.
Конфигурация задач на закладке Ресурсы позволяет гибко настроить этот механизм, но если Вы новичок оно Вам точно не нужно.
Вам просто нужно описать алгоритм своей задачи по типу "если ... то".
Посмотрите простые примеры программ. Думаю разберетесь. Если будут затруднения, опишите подробнее свой алгоритм, подскажем. Успехов
Уважаемые знатоки, почему переменная "а" всегда False? Как это работает?
UPD: b - переменная типа WORD. Если изменить тип переменной на INT, то компилятор будет ругаться.
Добрый день.
Попробуйте поставить b=10 в скобки, так процедура сравнения будет проводиться корректно.
a:= NOT (b = 10);
Александр Андреевич Симонов
Инженер по продуктам «ПЛК, модули и OwenCloud»
Не работаю в ОВЕН с 01.07.22
По всем вопросам обращайтесь на почту: support@owen.ru