В соответствии с этим вопросом можно отправить TCP/IP-сообщение от ПЛК на ПК с использованием лестничной логики. Какие? Я уверен, что это имеет смысл для людей из мира PLC, но я изо всех сил пытаюсь понять, что это происходит из мира встроенных систем C/C++.
Может ли кто-нибудь объяснить или указать на объяснение, где именно происходит связь с ПЛК? Это из цикла проверки PLC, и в этом случае... как ожидания, задержки, тайм-ауты, повторы и т.д. Обрабатываются без расширения цикла сканирования? Точно так же существует ли способ, с помощью которого такая функциональность согласуется с электронной метафорой "рельсов и переключателей" логической схемы лестницы или эта метафора простирается до точки разрушения?
Мне кажется, что есть задачи (не обязательно комм-задачи), которые трудно перевернуть в течение нескольких миллисекунд цикла сканирования ПЛК. Расширение этого цикла ради таких задач представляется несостоятельным. Так существуют ли способы и средства в мире ПЛК для выполнения этих задач за пределами цикла проверки ПЛК, который каким-то образом интегрирует их вход/выход/управление в цикл проверки ПЛК? Я подозреваю, что это так, но не нашел ничего, что ясно говорит об этом.
как ожидания, задержки, тайм-ауты, повторы и т.д.
Вы просто не делаете этого в одном цикле. Вместо того, чтобы приостанавливать поток, вы проверяете, нужно ли ему двигаться дальше, а если нет, вы начинаете делать остальную часть цикла немедленно, пропуская все, что хотите, как только вы закончите ждать.
Любая немедленная (блокирующая) задача выполняется в несколько циклов, будь то высокоуровневые ввод-вывод данных или какой-то реальный "реальный мир". Коммуникационные вызовы, например, read(), write(), send(), receive() и т.д., Не являются блокирующими, иногда даже асинхронными. В LD и других (IEC 61131-3) языках все обрабатывается с использованием флагов, триггеров и т.д.
Вот какой-то реальный код, который отправляет запрос и считывает данные измерений с цифрового датчика через последовательный порт RS-485. Обратите внимание, что нет блокирующих вызовов, и не имеет значения, как короткий цикл сканирования.
Используя библиотеки, предоставленные производителем вашей системы управления, большинство из них обрабатывается асинхронно на более низком уровне, и вам не нужно иметь дело с ним в коде ПЛК (который обычно является "в режиме реального времени", синхронным и блокировка по дизайну).
Проблема в том, что ПЛК были разработаны для управления своими задачами и отправки данных в реальном времени через ProfiBus, Ethercat, ProfiNet и т.д. Связь TCP/IP действительно довольно громоздка, если смотреть с компьютерного программирования.
То, что мне помогло, - это прочитать очень толстые руководства по коммуникации от ПЛК и к ним. Особенно такие вещи, как количество данных, которые могут быть отправлены или прочитаны за один цикл (!). И используйте wizzards как можно больше. Проверьте сайты поддержки.
Положительная сторона производства ПЛК заключается в том, что у них есть поддержка, которая больше готова помочь, чем мир программного обеспечения. Просто попробуйте и спросите их, сможет ли вам помочь вам дальше.