Добрый день,
Описание проблемы:
- Контроллер СПК110
- SMC EX600
- И модули ввода/вывода МВ210
Все они соединены между собой по Modbus TCP
Внутри CODESYS все настроено, проверено с помощью руководств и FAQов, но есть нюанс...
Обмен который происходит по Modbus TCP выполняется медленно на практике, и запуске ПЛК всегда есть ошибки на модуле SMC EX600 (ошибки появляются не сразу)
Сам обмен настроен так:
У ПЛК цикл выполнения задач = 25мс
у ОВЕН модулей МВ210 - дискретные = 25мс, у аналогового 400мс
у EX600 тоже обмен стоит по 25мс
Итого на практике получается следующее:
При включении выхода на МВ210 или на EX600, с панели через кнопку - задержка по сути только визуальная, которая складывается из времени цикла визуализации и реакции системы.
Иными словами если я включу один выход на МВ210 или на EX600, руками с панели - проблем особо нет.
Однако в рамках технологии мне нужно на EX600, одновременно включить 4ре выхода на разных адресах в модуле. И тут начинается проблема - это по сути невозможно сделать.
Как проверялось - я сделал цикл 100мс/500мс/1000мс (как это сделано написано в отдельной ветке форума, потому что и там тоже не гладко)
***
Сразу оговорка по Фрейду - мои действия в настройке программы могут быть ошибочны или не правильными, поэтому я пытаюсь понять, что не так в моих действиях или что не так в настройках ПО
***
Собственно поставил 4 бита разных адресов, включаться каждую секунду - результат включение рандомно, то 1 выход, то 2 выхода, то 1 и 3й выход включаться - одновременно их включить не получается
Попробовал уменьшить время до 500мс - тоже самое
Пробовал на МВ210-403 - тоже самое
Вспомнил то как когда то вручную писал обмен на Segnetics, для Modbus RTU, там нужно было прям прописать байтами запрос и получив байтовый ответ, разобрать его.
Тут ситуация иная - в самом CODESYS есть возможность привязки переменных, что я и сделал.
Привязал битовые данные к выходам (ниже будет вырезка из EX600)
Пробовал использовать запись по коду 05 или 15 - разницы нет, результат один и тот же.
Единственное, что не пробовал - так это, привязывать цикл шины к задаче, но об этом ниже - вопросы.
Картинки того как настроено все - ниже
Screenshot 2024-12-03 070959.png
Screenshot 2024-12-03 071120.png
Вопросы:
1. Допускается ли использование битовых переменных при обмене по Modbus TCP именно в CODESYS?
2. Есть ли разница при записи через код 5 или код 15 при использовании битовых переменных?
Тут вопрос, про код 15 больше, так как я изменяю 1 бит в low byte, остальные не трогаю - по сути изменения записываются сами средствами ПЛК - или это не так?
3. нужно ли привязать цикл шины к циклу ПЛК, например к main_prg?
4. Более "абстрактный" вопрос - в чем может быть причина асинхронной работы модулей вывода?
Вопрос касается поведения описанного выше. Я беру 4 бита из адресного пространства 0х0000 / 0х0010 / 0х0020 - и получаю глюки, вместо одновременного включения.