Часть 1. История систем автоматизации Часть 2. Немного про ПЛК Часть 3. Мифы on-line модификации прикладного ПО ПЛК Часть 4. Немного про SCADA Варианты реализации функций модификации прикладной программы без отключения контроллера (сохранения состояния выходов) и останова технологического процесса (в большинстве вариантов это не on-line модификация, как это заявляет изготовитель ПЛК): Контроллер переводится из режима «работа» в режим «программирование» или «обслуживание» с «замораживанием» текущего состояния выходов, в контроллер загружается новая версия прикладного ПО, контроллер переводится в режим «работа», после выполнения одного цикла программы состояние выходов обновляется в соответствии с результатами вычислений. Недостатки: останавливается выполнение функций контроллера на время обновления ПО, возможны ошибки при загрузке обновленного ПО с отказом контроллера и отключением выходов, проверка работоспособности загружаемого ПО должна выполняться во внешней среде до загрузки в контроллер, полноценная отладка затруднительна, есть вероятность ошибок в новой версии ПО, которые будут выявлены только после загрузки  программы в контроллер. Если вы используете сложные алгоритмы, которые формируют итоговое значение выходных переменных за несколько программных циклов (используете промежуточные переменные или «любите» FBD блоки с перекрестными связями и неопределенной последовательностью выполнения), то состояние выходов после первого цикла программы у вас будет непредсказуемым и «безударной» загрузки ПО у вас не получится. Любые, даже самые небольшие изменения требуют повторной загрузки всего объема прикладного ПО. Целесообразно применять на объектах, где отказ или останов контроллера не приведет к критичным последствиям. Память контроллера имеет резерв свободного места для загрузки нескольких экземпляров прикладного ПО. Новая версия прикладного ПО загружается в свободную память, и после успешной загрузки ей передается управление. Это более безопасный метод, функции управления на время загрузки не прерываются, в случае неудачной загрузки сбоя в работе контроллера не происходит. Недостатки: необходимость отладки ПО вне контроллера, как и в предыдущем случае ограничения по «безударному» переходу при сложных алгоритмах, любые даже самые небольшие изменения требуют повторной загрузки всего объема прикладного ПО. Возможность загрузки обновленного ПО зависит от наличия достаточного количества свободной памяти и реализации функции (количество обновлений может быть ограничено, если новые версии ПО по объему больше предыдущих может наступить момент, когда нет свободной непрерывной области памяти для загрузки очередного обновления и необходим полный перезапуск контроллера). Это достаточно простой в реализации и поэтому распространенный метод обновления ПО без прерывания технологического процесса, но он имеет свои ограничений и «подводные камни», которые надо учитывать. Для ПЛК с более сложной организацией прикладного ПО, когда есть  разделение на программные блоки (функции, подпрограммы, процедуры, блоки данных и т.д.) возможна модификация и последующая загрузка в ПЛК отдельного программного блока. Существует несколько вариантов:  все блоки имеют одинаковый фиксированный размер, при загрузке модифицированный блок помещается на место текущего, на время загрузки контроллер переводится в режим «программирование» с «заморозкой выходов» и сохранением текущего значения переменных; измененный блок загружается в свободную память и после загрузки система обрабатывает новый блок вместо текущего, размер блока может быть фиксированным или условно переменным (память делится на сегменты фиксированной длины, а программный блок может размещаться в нескольких сегментах, это позволяет более эффективно расходовать память); выгрузка из контроллера (сохранение) текущего состояния программного блока с текущим значением всех переменных, внесение изменений и последующая загрузка. Метод больше похож на недокументированную функцию, позволяющую обеспечить «безударный переход», при условии, что за время модификации и загрузки блока не будет критических изменений значения переменных. Такую операцию инженер выполняет на «свой страх и риск».  Не все контроллеры обеспечивают такой функционал. Для реализации данных методов требуется более сложная организация ПО контроллера, более сложная организация и схема распределение памяти, сама процедура загрузки и управления обновлением прикладного ПО тоже значительно сложнее. Данные методы более прогрессивны, но во многом сохраняются недостатки, описанные в предыдущих вариантах, в первую очередь необходимость отладки ПО вне контроллера и обеспечение «безударного» перехода для сложных алгоритмов. Методы так же не лишены «подводных камней», которые не описываются в документации производителя. На практике почти у всех производителей есть ограничения, которые не всегда позволяют безопасно выполнить загрузку обновленного ПО без останова технологического процесса. И этот метод нельзя назвать on-line модификацией, так как изменения выполняются в off-line режиме с последующей загрузкой.   Функционал полноценной on-line модификации прикладного ПО. Для этого программное обеспечение контроллера и среды разработки должны поддерживать on-line режим, когда непосредственно в среде разработки есть возможность просмотра исполнения прикладного ПО непосредственно загруженного в контроллер, при этом инженер видит актуальное состояние всех переменных и выполнение всех алгоритмов (задач, процедур, программ, функций и т.д.). Возможности on-line модификации и порядок внесения изменений зависят от организации контроллера и прикладного ПО. Распространенное решение, когда в памяти контроллера для модифицирования создается параллельная структура алгоритма (линия лестничной логики, функция, подпрограмма, лист FBD диаграммы и т.д.). Текущая структура продолжает штатно работать. В алгоритм новой структуры вносятся изменения, все переменные в новой структуре активны, но выходные переменные не передаются за пределы модифицированной структуры. При модификации алгоритмов инженер видит поведение измененных функций, различие в поведении текущего и измененного алгоритма, при необходимости для проверки алгоритмов можно заменить фактические значения переменных на виртуальные, все изменения происходят в пределах модифицируемой структуры и не влияют на выполнение алгоритмов контроллера, т.е. есть возможность полноценной проверки нового алгоритма. Когда все проверки успешно пройдены, инженер может включить модифицированную структуру в работу взамен текущей, а при необходимости переключится обратно на текущую. Когда процедура модификации полностью закончена, модифицированная структура сохраняется как часть текущего прикладного ПО и продолжает штатно работать, а старая структура удаляется. Данный функционал очень сложен, полноценно реализуется в «дорогом» сегменте, возможности и безопасность выполнения зависят от производителя контроллера и прикладного ПО, даже у одного производителя в полном объеме поддерживается не для всех линеек ПЛК. На практике очень хорошо работает при использовании лестничной логики, для FDB из-за сложности реализации могут быть проблемы. Функционал очень полезен при применении ПЛК для непрерывных и ответственных технологических процессов, с межремонтным интервалом от года и более, когда есть потребность модифицировать прикладное ПО и кроме on-line модификации другой возможности просто нет.  Для реализации функций безопасности с сертификацией на SIL функционал on-line модификации не применим по формальным причинам. После любых изменений контур безопасности должен быть испытан в полном объеме включая датчик и исполнительное устройство (например, необходимо задатчиком подать установленное значение давления на датчик давления и убедится, что контроллер отработал и отсечной клапан закрылся, т.е. контур безопасности полностью работоспособен). В большинстве случаев нет возможности испытать весь контур безопасности без останова технологического оборудования. На практике инженеры используют on-line модификацию алгоритмов контуров безопасности, но нужно понимать, что формально отвечать требованиям SIL этот контур будет только после полного испытания со срабатыванием исполнительного устройства.  инженер со стажем