Лекция 109.1. Организация работ задач в системах ОС РВ.
Самым простым методом организации и планирования для систем реального времени является использование в программах циклического алгоритма. Основа закладывается при программировании. Программист продумывает последовательность (цикл) команд, после выполнения которого, происходит возврат в какую то начальную точку. Каждый «цикл», представляет собой отдельную подпрограмму, где одни и теже команды выполняются постоянно с возвратом на указанный адрес.Адрес выбирается таким, чтобы заново не вводить параметры, являющиеся константами, например, коэффициенты, шкалы приборов. При этом придерживаться следующих правил:
1. Подпрограммы не должны содержать циклов ожидания неопределенной длинны. 2. Подпрограммы должны выполнять свою работу как можно быстрее, без действий,и расчетов, котрых можно избежать в этом цикле. 3. При необходимости подпрограмма может сохранять свое окружение и текущие результаты, чтобы в следующем цикле возобновить работу с того же места.
Под «начало» понимается подпрграмма ввода коэффициентов и постоянных величин.
Использование циклического алгоритма довольнло простото и прозрачно для понимания. Циклы обычнопомогают минимизиовать размеры кода и данных.
Наличие циклов означает что отсутствует типичное «нормальное» завершение запрограммированного процесса, заключающееся в том, что выполнены все команды и работа остановлена.Циклическая программа непрерывно обрабатывет данные и вседа ждет прерывания, говорящего о важном событии. Получив такое собщение, прогаммма выходит на подпрграмму «обработки прерывания», выполняет его и затем возвращается в то самое место цикла, откуда она вышла для обработки. Программа реального времени это последовательный код команд, исполняющийся в бесконечном цикле. Такая программа останавливается либо аварийно, либо принудительно- оператором процесса.
Для реальных систем паралельнно используются множество циклических алгоритмов, между которыми нужно организовать взаимодействие.Потому возникает необходимостьвведения приоритетности, очередей, обмена сигналами и запретами. При разработке каждого программного модуля должны быть выделены защищенные области ресурсов – критические секции. Вход и выход в эти секции должен координинироваться методами синхронизации, например семафорами.
Приоритетная многозадачность с вытеснением – это наиболее часто используемый в ОС РВ принцип планирования. Основная идея состоит в том, что высокоприоритетная задача, как только для нее появляется работа, немедленно прерывает низкоприоритетную.
Операционная система, которая может обеспечить требуемое время выполнения задачи реального времени даже в худших случаях, называется операционной системой жёсткого реального времени.Операционная система, которая может обеспечить требуемое время выполнения задачи реального времени в среднем, называется операционной системой мягкого реального времени.Как правило, разработчики стараются свести свою систему реального времени к наиболее простым конфигурациям, характерным для систем «жесткого» реального времени, иногда даже в ущерб эффективности использования вычислительных ресурсов.В системе мягкого реального времени задержка реакции считается восстановимой ошибкой, которая может привести к увеличению стоимости результатов и снижению производительности, но не является фатальной. Примером может служить работа компьютерной сети[. Если система не успела обработать очередной принятый пакет, это приведет к остановке на передающей стороне и повторной посылке (в зависимости от протокола). Данные при этом не теряются, но производительность сети снижается.9.2. Синхронизация задач
В Windows реализована вытесняющая многозадачность - это значит, что в любой момент система может прервать выполнение одной процесса и передать управление другой. Все потоки, принадлежащие одному процессу, разделяют некоторые общие ресурсы - такие, как адресное пространство оперативной памяти или открытые файлы. Эти ресурсы принадлежат всему процессу, а значит, и каждой его нити. Следовательно, каждая нить может работать с этими ресурсами без каких-либо ограничений. Но, если один поток еще не закончил работать с каким-либо общим ресурсом, а система переключилась на другой поток, использующую этот же ресурс, то результат работы этих нитей может чрезвычайно сильно отличаться от задуманного. Такие же конфликты могут возникнуть и между потоками, принадлежащими различным процессам.
Предположим, разрабатывается программа, в которой параллельно работают два потока. Каждый поток обращается к одной разделяемой глобальной переменной. Один поток при каждом обращении к этой переменной выполняет её увеличение, а второй – уменьшение. При одновременной асинхронной работе потоков возникает такая ситуация:- первый поток прочитал значение глобальной переменной в локальную;- ОС прерывает его, так как закончился выделенный ему квант времени процессора, и передаёт управление второму потоку;- второй поток также считал значение глобальной переменной в локальную, изменил её и записал новое значение обратно в глобальную;- ОС вновь передаёт управление первому потоку, тот, ничего не зная о действиях второго потока, увеличивает свою локальную переменную и записывает её значение в глобальную.Очевидно, что изменения, внесённые вторым потоком, будут утеряны.
Для исключения подобных ситуаций необходимо разделить во времени использование совместных данных. В таких случаях используются механизмы синхронизации, которые обеспечивают корректную работу нескольких потоков.Средства синхронизации в ОС Windows:
1) критическая секция (Critical Section) – это объект, который принадлежит процессу, а не ядру. А значит, он защищает свои потоки, но не может синхронизировать потоки из разных процессов.Критическая секция помогает программисту выделить участок кода, где поток получает доступ к разделяемому ресурсу, и предотвратить одновременное использование ресурса. Перед использованием ресурса поток входит в критическую секцию (вызывает функцию EnterCriticalSection). Если после этого какая-либо другойпоток попытается войти в ту же самую критическую секцию, его выполнение приостановится, пока первыйпоток не покинет секцию с помощью вызова LeaveCriticalSection. Используется только для нитей одного процесса. Существует так же функции создания и удаления, вхождения и выхода из критической секции:создание – InitializeCriticalSection(…), удаление – DeleteCriticalSection(…),вход – EnterCriticalSection(…), выход – LeaveCriticalSection(…).Среди синхронизирующих объектов критические разделы наиболее просты.
Этот объект работе процесса анализирует значение специальной переменной процесса, которая используется как флаг, предотвращающий исполнение некоторого участка кода несколькими потоками одновременно.Среди синхронизирующих объектов критические разделы наиболее просты.
2) mutex – mutable exclude. Это специальные объекты ядра-объекты-взаимоисключения, у них есть имена. С их помощью можно синхронизировать доступ к общим данным со стороны нескольких процессов, точнее, со стороны потоков разных процессов. Ни один другой поток не может завладеть мьютексом, который уже принадлежит одному из потоков. Если мьютекс защищает какие-то совместно используемые данные, он сможет выполнить свою функцию только в случае, если перед обращением к этим к нему каждый из потоков проверит состояние этого мьютекса. Windows расценивает мьютекс как объект общего доступа, который можно перевести в защищенное (сигнальное) состояние или сбросить. Сигнальное состояние объекта (т.е. состояние "установлен") соответствует моменту времени, когда объект не принадлежит ни одномупотоку и его можно "захватить". И наоборот, состояние "сброшен" (не сигнальное) соответствует моменту, когда какой-либо поток уже владеет этим объектом. Доступ к объекту разрешается, когда поток, владеющий объектом, освободит его.
Потоки должны самостоятельно анализировать текущее состояние мьютексов. Если требуется, чтобы к мьютексу могли обратиться потоки других процессов, ему надо присвоить имя.Функции:CreateMutex(имя) – создание, hnd=OpenMutex(имя) – открытие,WaitForSingleObject(hnd) – ожидание и занятие,ReleaseMutex(hnd) – освобождение, CloseHandle(hnd) – закрытие.Два (или более) потока могут создать мьютекс с одним и тем же именем, вызвав функцию CreateMutex. Первыйпоток действительно создает мьютекс, а следующие - получают дескриптор уже существующего объекта. Это дает возможность нескольким потокам получить дескриптор одного и того же мьютекса, освобождая программиста от необходимости заботиться о том, кто в действительности создает мьютекс. Мьютекс можно использовать в защите от повторного запуска программ.
3) семафор – semaphore. Объект ядра “семафор” используются для учёта ресурсов и служат для ограничения одновременного доступа к ресурсу нескольких потоков. Используя семафор, можно организовать работу программы таким образом, что к ресурсу одновременно смогут получить доступ несколько потоков, однако количество этих потоков будет ограничено. Создавая семафор, указывается максимальное количество потоков, которые одновременно смогут работать с ресурсом. Каждый раз, когда программа обращается к семафору, значение счетчика ресурсов семафора уменьшается на единицу. Когда значение счетчика ресурсов становится равным нулю, семафор недоступен.Создание -CreateSemaphore, открытие- OpenSemaphore,занять - WaitForSingleObject, освобождение –ReleaseSemaphore. Данный объект позволяет "захватить" себя определенному количеству потоков. После этого "захват" будет невозможен, пока один из ранее "захвативших" семафор потоков не освободит его. Семафоры применяются для ограничения количества нитей, одновременно работающих с ресурсом. Объекту при инициализации передается максимальное число потоков, после каждого "захвата" счетчик семафора уменьшается. Сигнальному состоянию соответствует значение счетчика больше нуля.
4) событие – event. События обычно оповещают об окончании какой-либо операции, они также являются объектами ядра. Можно не просто явным образом оповестить о завершении операции, но также провести операция установки события (начало операции). События могут быть мануальными (manual) и единичными (single).
Единичное событие (single event) – это скорее общий флаг для нескольких потоков, но разрешительным он будет только для одного из них- «автосброс для одного потока». Событие будет находится в сигнальном состоянии (внимание!), если его установил какой-нибудь поток раньше. При использовании события с автосбросом уведомление получит и продолжит свое выполнение только однин ожидающий поток, остальные будут ожидать дальше«ручного» сброса флага. Сбросить это событие может только тот самый единственный поток.
Мануальное событие (manual event) — это не просто общий флаг для нескольких потоков. Оно выполняет более сложные функции. Любой поток может установить это событие или сбросить (очистить) его. Если событие установлено, оно останется в этом состоянии сколь угодно долгое время, вне зависимости от того, сколько потоков ожидают установки этого события. Когда все потоки, ожидающие этого события, получат сообщение о том, что событие произошло, оно автоматически сбросится.
Функции: SetEvent, ClearEvent, WaitForEvent.Типысобытий:1) событие с автоматическим сбросом: WaitForSingleEvent.2) событие с ручным сбросом (manual), тогда событие необходимо сбрасывать: ReleaseEvent.
Имеется ещё один объект синхронизации:WaitAbleTimer – объект ядра ОС, который самостоятельно переходит в свободное состояние через заданный интервал времени (будильник).
9.3Для обеспечения режима реального времени в ОС могут быть реализованы следующие требования:поддержка динамических приоритетов (которые можно менять в процессе выполнения задачи) в многозадачном режиме;возможность наследования приоритетов;возможность вытеснения задач ядром ОС;ограниченная латентность прерываний (время, в течение которого прерывание запрещено - на время обработки критической секции кода);выполнение сервисов ОС с приоритетом, который назначается клиентом сервиса.
В системах РВ обычно отсутствует виртуальная память, поскольку этот метод использует подкачку страниц с диска, время выполнения которой является непредсказуемым.
ОСРВ- не похожа на Windows. Система ОСРВобычно компилируется с Вашей программой и она становится частью комплекса системы реального времени.Для того, чтобы ПЛК работал с написанной Вами программой, в контроллере должна быть установлена система исполнения (ОСРВ).С этой систему выкомпилируете свою разработку. Установку системы исполненияв контроллер выполняет изготовитель контроллера. Изготовитель обеспечивает также поддержку всех модулей ПЛК, поэтому конечный пользователь может сосредоточиться на разработке только прикладной программы.
Среды исполнения самых распространеных комплексов разработкипрограмм для ПЛКCoDeSys и ISaGRAFмогут функционировать в ПЛК под управлением различных операционных систем или вообще без них, в том числе на обычном персональном компьютере. Собственное ядро реального времени может устанавливать контроллерный цикл с точностью до нескольких микросекунд. Прикладная программа остается работоспособной даже при зависании ОС.Часто ОСРВ предлагают библиотеки для работы вашей программы, например, с графикой, с интернетом, базами данных и т.д. Они удобны,стоит их использовать. Однако, помните, что без ОСРВ, для которой они написаны, они работать не будут.
Наиболее распространенными в ПЛК и компьютерах для решения задач автоматизации являются операционные системы Windows CE, QNX Neutrino и OS-9.
Лекция 11. Несмотря на то, что Windows NT создавалась как сетевая операционная система, в нее при создании были заложены элементы реального времени, а именно - двухуровневая система обработки прерываний (ISR и DPC), классы реального времени (процессы с приоритетами 16-32 планируются в соответствии с правилами реального времени). Может быть причина появления этих элементов кроется в том, что у разработчиков Windows NT за плечами есть опыт создания классической для своего времени операционной системы реального времени RSX11М (для компьютеров фирмы DEC).
Одиниз путей решения проблем реального времени – построение комбинированных систем с использованием СКАДА. На примере системыTRACE MODE.Монитор реального времени этой системы производит первичную обработку информации, поступающей из контроллеров или систем телемеханики (фильтрация, масштабирование, контроль границ и т.д.), управление и регулирование технологических процессов, перераспределение данных по локальной сети (I-NET TCP/IP), визуализацию информации на анимированных мнемосхемах и трендах (HMI), расчет в реальном времени статистических параметров процесса (SPC - statistical process control), ведение исторических архивов, управление собственной промышленной СУБД реального времени SIAD/SQL™ 6, генерирование отчетных документов, обеспечение связи с СУБД и приложениями через SQL/ODBC и встроенный OPC-сервер (поставляется опционально). В таких системах задача непосредственной связи с объектом управления переложена на программируемые контроллеры. Но остальные задачи, допускающие использование «мягкой» системы реального времени, выполняются в специализированных программах SCADA.
10 Технологии DCOM.
COM ( ComponentObjectModel — объектная модель компонентов; это стандарт от компании Microsoft, предназначенный для создания программного обеспечения на основе взаимодействующих компонентов, каждый из которых может использоваться во многих программах одновременно. Стандарт воплощает в себе идеи полиморфизма. Стандарт COM закрепился в основном на операционных системах семейства Microsoft Windows. В современных версиях Windows COM используется очень широко. На основе COM были реализованы технологии: Microsoft OLE Automation, ActiveX, DCOM, COM+, DirectX, а также XPCOM. Эта технология имела базой и предшественником техногию OLE.
OLE (ObjectLinkingandEmbedding) — технология связывания и внедрения объектов в другие документы и объекты, разработанная корпорацией Майкрософт.В 1996 году Microsoft переименовала технологию в ActiveX.OLE позволяет передавать часть работы от одной программы редактирования к другой и возвращать результаты назад. Например, установленная на персональном компьютере издательская система может послать некий текст на обработку в текстовый редактор, либо некоторое изображение в редактор изображений с помощью OLE-технологии.Основное преимущество использования OLE (кроме уменьшения размера файла) — в том, что она позволяет создать главный файл, картотеку функций, к которой обращается программа. Этот файл может оперировать данными из исходной программы.После обработки данные возвращаются в исходный документ.OLE-сервера и клиенты взаимодействуют с системными библиотеками при помощи таблиц виртуальных функций ( VTBL). Эти таблицы содержат указатели на функции, которые системная библиотека может использовать для взаимодействия с сервером или клиентом. Библиотеки OLESRV.DLL (на сервере) и OLECLI.DLL (на клиенте) первоначально были разработаны для взаимодействия между собой с помощью сообщения WM_DDE_EXECUTE, предоставляемого операционной системой.
OLE 1.1 позднее развился в архитектуру COM (componentobjectmodel) для работы с компонентами программного обеспечения. Основным понятием, которым оперирует стандарт COM, является COM-компонент. Программы, построенные на стандарте COM, фактически не являются автономными программами, а представляют собой набор взаимодействующих между собой COM-компонентов. Каждый компонент имеет уникальный идентификатор (GUID-128-бит) и может одновременно использоваться многими программами. Компонент взаимодействует с другими программами через COM-интерфейсы — наборы абстрактных функций и свойств. Под интерфейсом понимают группу логически связанных между собой функций, прототипы и порядок использования которых жестко определены, а реализация — нет. Эти функции принято называть методами интерфейса. Интерфейсы строго типизованы и не могут изменяться. Каждый COM-компонент должен, как минимум, поддерживать стандартный интерфейс «IUnknown», который предоставляет базовые средства для работы с компонентом. Все интерфейсы должны быть его наследниками (прямыми или косвенными). Никакие исключения из этого правила не допускаются.Интерфейс «IUnknown»имеет идентификатор (GUID) и содержит в себе три метода (функции): QueryInterface, AddRef, Release.Первые три входа любой таблицы виртуальных функций vtbl занимают эти методы и именно в таком порядке. Эти методы ничего особенного не делают.
Метод QueryInterface. Предназначен для преобразования указателя на интерфейс - на вход принимается GUIDинтерфейса и адрес переменной, куда нужно поместить выход метода-указатель на интерфейс,вызываемый данным идентификатором. Если запрашиваемый интерфейс действительно имеется и реализуется данным объектом, то метод помещает указатель на него в предоставленную переменную. Если нет - метод возвращает код возврата E_NOINTERFACE идолжен вернутьNULL в предоставленной переменной. Обратите внимание - метод принимает на вход идентификатор любого интерфейса (произвольный GUID), а возвращает указатель на него, если интерфейс реализуется объектом. Получает он информацию из реестра операционной системы.Нужную пользователю программу(COM-компонент),пишет сам пользователь, наследуя уже подготовленный и понятный операционной системе объект «IUnknown». Получается рограмма разработанная какобъект-интерфейс. Для реализации всех созданных пользователем методов-интерфейсов использутся одной реализация метода QueryInterface –подготовленной и единой для всего COM-объекта.Разработчик реализует свои методы (функции) обработки данных, используя в качестве исходной структуры интерфейс «IUnknown» с его исходными методами, который создан разработчиком опнрационной системы. Любой новый интерфейс (любой COM-компонент)наследуется от IUnknown и обязан реализовать объявленные в нем методы.Интерфейс (COM-компонент) получает от своего предка возможность регистрировать в реестре операционной ситстемы свои,самостоятельно написанные, методы .
Функции _AddRef и _Release служат для управления временем жизни COM-объекта, экспортирующего интерфейсы. Метод AddRef. Предназначен для продвижения вперед на единицу счетчика ссылок. Должен возвращать новое значение этого счётчика ссылок - от 1 до n, но пользоваться этим значением можно только для отладки. Microsoft сообщает, что иногда это значение может быть "нестабильно". Что означает "нестабильно"- я не знаю. Видимо имеется в виду то, что в многопоточной среде значение счётчика совершенно точно известно только самому этому счётчику, который защищён от одновременного доступа нескольких потоков сразу. Фактически смысл этого счётчика на клиентской стороне действительно имеется только при отладке, ничего другого на этом значении построить не удаётся.
Метод Release. Предназначен для продвижения счетчика ссылок назад на единицу. Возвращает новое (после вычитания) значение счётчика ссылок, которое тоже может использоваться только для отладки. При этом, если счётчик становится равным нулю - реализация метода должна освободить ресурсы, примитивно говоря - уничтожить объект.
Объявление интерфейса в Delphi реализуется ключевым словом interface:
Type
IMyInterface = interface
['{412AFF00-5C21-11D4-84DD-C8393F763A13}'] //GUID procedureDoSomething(var I: Integer); stdcall;function DoSomethingAnother(S: string): Boolean;end;
IMyInterface2 = interface(IMyInterface)['{412AFF01-5C21-11D4-84DD-C8393F763A13}']//GUIDprocedure DoAdditional(var I: Integer); stdcall;end;
Когда разработчик объекта добавляет свой интерфейс IMyInterface, предоставляющий методы и свойства некоторого объекта, в таблице VTBL новые методы располагаются за первыми тремя базовыми методами.
Они представляют пользователю пространство для записи параметров, которые требуется передать другому компоненту (программе) для обработки и пространство для возврата параметров содержащих результаты обработки. Естественным образом возникает программа которая передает свой запрос на обработку – программа клиент. Естественным образом возникает программа которая передает свой запрос на вызова для программы обработки данных – программа клиент. И должна быть программа которая вызывается операционной системой, получает данные, обрабатывает их и возвращает результат через адрес в том же компонете с интерфейсом «IUnknown». И должна быть программа, которая получает данные, обрабатывает их и возвращает результат через адрес, полученый компонетом с интерфейсом «IUnknown». Эта вторая программа – «сервер». Она имеет свои GUID-идентификаторы, зарегистрированные в реестре операционной системы. Эта программа лежит тихо на «дне» океана памяти системы пока клиент через ОС и через СОМ-компонент программы- сервера, написанного разработчиком, не вызовет один из её методов IMyInterface и не передаст данные для обработки. О существовани сервера знает только операционая система. Кому сервер передаёт данные через методы IMyInterface, (дополнительно разработанные программистом), сам сервер тоже не знает. Возможность зарегистрировать программу-сервер обеспечивает базовый для операционной системы интерфейс «IUnknown», которуму наследует программа сервер.
ОС может позволить клиенту увидеть через реестр наличные СОМ интерфейсы, подтведив что такие сервера имеются, и доступны для связи. Естественно, параметры которые передаются, должны быть в формате понятном компоненту «сервер», так и компоненту «клиент». Программист должен, взяв за базу стандарный интерфейс «IUnknown», расширить объект своми методами, обеспечить взаимопонимание данных между «клиентом» и «сервером». Каждый из новых методов будет иметь свой идентификатор (GUID). Программист должен знать работу обеих программ и организовывать выдачу и прием данных через адреса расширенного COM-интерфейса. Форматы дожны быть согласованных для методы описанных в процедурах, ОС находит компоненты COM-интерфейсы по их идентификаторах (GUID). COM позволяет помещать COM-объекты в DLL- или EXE-модули и подгружать их при необходимости. СОМ технология работает в пределах одного компьютера.
WindowsAPI предоставляет базовые функции, позволяющие использовать COM-компоненты. Библиотеки MFC иATL/WTL предоставляют средства для работы с COM. Библиотека ATL от Microsoft до сих пор остаётся самым популярным средством создания COM-компонентов. Но COM-разработка остаётся ещё довольно сложным делом, программистам приходится вручную выполнять многие рутинные задачи, связанные с COM (особенно это заметно в случае разработки на C++). Впоследствии (в технологиях COM+ и особенно .NET) Microsoft попыталась упростить задачу разработки COM-компонентов. COM позволяет помещать COM-объекты в DLL- или EXE-модули и подгружать их при необходимости.СОМ технология работает в пределах одного компьютера.
Лекция 12 Позднее архитектура COM была преобразована и стала называться DCOM. Выпущенная в 1996 году технология DCOM ( DistributedCOM — распределённая COM) основана на технологии DCE/RPC (разновидности RPC).Распределенные системы поддерживают механизм вызова удаленных процедур (RPC). Клиент в одном узле запрашивает удаленную процедуру сервера, находящегося в другом узле. Вызов удаленной процедуры аналогичен вызову локальной процедуры, поэтому тот факт, что сервер находится далеко, скрыт от клиента. DCOM позволяет COM-компонентам взаимодействовать друг с другом по сети.
11. Технология OPC (OLE for Process Control) — семейство программных технологий, предоставляющих единый интерфейс для управления объектами автоматизации и технологическими процессами. Многие из OPC протоколов базируются на Windows-технологиях: COM/DCOM. Технология OPC определяет способ обмена данными между программами на ПЭВМ под управлением ОС Windows. Разработана международной организацией OPC Foundation как промышленный стандарт для взаимодействия программ, обслуживающих комплексы контроллеров и телемеханики разных производителей. Опубликована спецификация OPC — набор документов, определяющий правила для реализации взаимодействия.
Программа «ОРС-сервер» выполняет непосредственное взаимодействие с аппаратурой, используя сетевое оборудование интерфейсов компьютера. ОРС-cервер обеспечивает сбор данных, передачу команд управления, диагностику каналов связи и т.д. OPC-сервер являетсяпрограммной частьюОРС-интерфейса, обеспечивающие доступ к данным. Программа для которой предназначены данные, собираемые OPC-сервером, также должна поддерживать технологию ОРС и быть OPC-клиентом. OPC-клиент, например SCADA, получает данные через ОРС -сервера и выполняет их комплексную обработку — использует для визуализации, строит графики, выводит на печать, сохраняет на диске и т.д. В системе управления станцией ГГС 5 клиент сервером является SCADA «TraseMode».
OPCDAVersion 2.05a
Наиболее широко используемая. В этом стандарте помимо синхронного обмена данными, при котором клиент ждет ответа от сервера, введена поддержка асинхронного обмена данными. Асинхронный обмен данных позволяет продолжать выполнение программы без ожидания ответа устройства. Этот метод снижает нагрузку на сеть и должен быть рекомендован как основной. Получение данных реализуется с помощью callback-функции пользовательской программы, которая вызывается в момент прихода ответа от устройства. Callback или фу́нкция обра́тного вы́зова — передача исполняемого кода в качестве одного из параметров другого кода. Обратный вызов позволяет в функции исполнять код, который задаётся в аргументах при её вызове. Пример алгоритма, которому желательно передавать в аргументе функцию, — алгоритм обхода какого-либо хранилища объектов с применением действия (например, опроса) к каждому объекту. Обратный вызов может оформляться в роли этого действия. Действие, передаётся основной процедурой в качестве кода аргумента. Это действие происходит при наступлении какого-то события (например, ответ от опрашиваемого модуля контроллера) и результат передается обратно основной процедуре, как ответ на первый звонок (вызов связи) к интересующему нас объекту.
ОPCUnifiedArchitecture
Спецификация OPCUA открывает новые горизонты для применения OPC-технологий. В частности, обеспечивается кросс-платформенная совместимость и отказ от использования COM-интерфейса. Новый стандарт должен обеспечить более высокий уровень безопасности данных, чем OPCDA. Кроме того, новая спецификация дает возможность организации передачи информации через сеть интернет.