Что же это такое? С чем приходиться больше сталкиваться: больше с промышленностью или с программированием? Лично у меня на это свой ответ: все зависит от технологии конкретного производства и, конечно, от степени внедренности на предприятии it-технологий. Также для меня стало очевидно, что круг вопросов программирования становится иным, весь фокус ложится именно на разработку промышленной логики (алгоритм) и визуализацию данной логики (по-сути - разработка интерфейса, позволяющего пользователю взаимодествовать с данной логикой в рамках технологических процессов). С этой точки зрения, промышленное программирование эквивалентно классическому: также - разработка алгоритма и также - разработка интерфейсной части. Но инструменты (язык) при этом свои, а ведь именно инструмент накладывает свои отпечатки на образ мышления. Думать по "С++" - ному - не то что думать по "PHP" - шному. Уверен, что Вы со мной согласитесь. Это же относится и к промышленному программированию.
Разработка помышленной логики (алгоритм).
Для кодинга в этом направлении используются свои языки. Все зависит от того, какой контроллер используется на предприятии. В моем случае - RSLogix, скорее это даже не язык, а среда разработки - RSLogix 5000 (разработка компании Rockwell Automation) для контроллеров производителя Allen Bredly (Allen Bredly Programmable Controller).
В RSLogix реализованы три подхода в программировании:
1 - Ladder Diagram (по-сути - RAD (от англ. rapid application development — быстрая разработка приложений));
2 - Function Block (графичский подход, ориентировано больше на инженеров по микроэлектронике);
3 - Structered Text (можно сказать - Паскаль в действии);
В большей степени на практике использую именно первый подход - Ladder Diagram. Ниже представлен небольшой пример программы: каждые 0,1 секунду контроллер считывает внешний сигнал - Signal - и записывает полученные значения в одномерный массив test[i]. И так - 10 раз. Программа конечно несложная, скорее - наглядная.
Сам по себе, синтаксис паскалеподобный.
Типы данных представлены не только такими как - bool, int, dint (double int), string, real (аналог float), timer, но и специфичными - alarm, hmi_button, etc.
Максимальная допустимая к созданию размерность массива - `3`мерная (Array Dimensions). Если в Паскале мы имеем дело с процедурой, то здесь представлены `Add-on`ы (Control module), в которых есть как внешние (Parameters), так и внутренние (Local Tags) члены, есть возможность назначить модификаторы доступа как в классах ООП (required, visibility).
Раасматривать другие возможности здесь не буду, просто скажу, что все, что есть в обычном программировании - есть и здесь, плюс свои "штучки".
Вообще, когда начинаешь программировать, то приходиться работать с 1) со множеством сигналов от различных датчиков, устройств, моторов, клапанов, ну и прочего оборудования и 2) центром всего - контроллером. Когда мы сидим за ноутом или компом и программируем, то часто не берем в счет то, что мы также обращаемся к микрокотроллеру - центральному процессору. Для высокоуровневых языков с ООП подходом - нормально, но если взять ассемблер - без этого никак. Ниже представлен промышленный контроллер. Протокол общения - сетевой стандарт - tcp/ip.
Для контоллеров Siemens используется Simatic Step7. Подходы теже самые, но со своими нюансами.
Визуализация промышленной логики (графический интерфейс пользователя).
"Общение" программы с конечным пользователем происходит на уровне интерефейса, в большей степени - графическом интерфейсе. В промышленном программировании - конечным пользователем является так называемый - оператор, причем так звучит должность человека на фабрике. Все серьезно :) Отсюда понятно, что интерефейс должен быть интуитивно понятным, а значит - графическим (70 % информации "бежит" по глазам). Поэтому приходиться решать и чисто дизайнерские задачи. Для наглядности приведен скриншотик рабочей зоны вот такого вот интефейса.
Вообще, система визуализации в промышленности именуется SCADA (аббр. от англ. supervisory control and data acquisition, диспетчерское управление и сбор данных). На самом деле, визуализация - это не просто создание интерфеса, это система сбора, управления и вывода данных. У нас на фабрике используется системная платформа - Archestra SCADA компании Invensys Systems. Также есть альтернативные системы, например - Elipse.
Стоит отметить и еще одну вещь. Теги (англ. tag — ярлык, этикетка, бирка; метить). После знакомства с промышленным программированием, понятие тега встречается практически на всех этапах. Для меня тег - не просто какая-то высокоуровневая метка, это носитель информационных единиц (true/false), также и носитель физических данных между контроллером и человеком. Своего рода теговый мостик (Tags bridge). Ниже представлены модели взаимодействия контроллера со SCADA с одной стороны, и с другой - датчиками, моторами, клапанами и другими устройствами.
Вот такое небольшое введение в промышленное программирование. Всем удачи :)