Звязок MATLAB з ОРС Сервером

Для з’єднання MATLAB з базою даних процесу через OPC-інтерфейс, використовується OPC-Toolbox. OPC-Toolbox являє собою набір об’єктів та функцій, що реалізують ієрархічний об'єктно-орієнтований підхід до зєднання з OPC серверами (рис.1).


Об’єкт OPC Data Access Client  (opcda client) забезпечує зв’язок з OPC Сервером. Тобто, MATLAB OPC Toolbox забезпечує мультиклієнтну та мультисерверну архітектуру, оскільки може з’єднатися з декількома серверами, та забезпечувати декілька з’єднань з одним і тим самим сервером. Об’єкт opcda client може вміщувати декілька об’єктів Data Access Group  (dagroup) які в свою чергу вміщують один або декілька items (daitem). Як видно, об’єктна архітектура OPC Toolbox MATLAB дуже схоже на модель OPC DA Automation інтерфейсу.

Для перегляду списку зареєстрованих ОРС-Серверів використовується функція opcserverinfo, в яку в якості аргументів передається адреса ПК 

info = opcserverinfo('localhost')

У відповідь повертається структурна змінна типу opcserverinfo, з полями

Host – ім’я ПК;

ServerID – масив-перелік ProgID OPC-Серверів;

ServerDescription – масив-перелік описів OPC-Серверів;

OPCSpecification - масив-перелік версій специфікацій OPC-Серверів;

ObjectConstructor  - масив-перелік функцій для виклику з’єднання  з OPC-Серверами;

Для роботи з ОРС в MATLAB необхідно зробити наступну послідовність дій:

1. Спочатку створюється об'єкт типу OPC Client для доступу до даних (функція opcda), що представляє зв'язок між MATLAB і сервером OPC. Першим параметром вказується ім’я ПК а другим ProgID OPC-Серверу:  

da=opcda('localhost','SchneiderElectric.SCADA.OpcDaServer.1');

Після створення об’єкту opcda необхідно встановити з’єднання між ним та ОРС-Сервером за допомогою функції connect, де в якості аргументів вказується об’єкт opcda.

connect(da);

Після встановлення з'єднання з сервером OPC, необхідно створити об'єкти dagroup, які представляють колекції Items OPC доступу до даних. Для перегляду переліку ItemID в межах ОРС-Серверу можна використати функцію getnamespace, в яку в якості аргументів вказується об’єкт opcda:

ns = getnamespace(da)

У відповідь повертається масив структурних змінних з полями:

Name – ім’я вузла в дереві ItemID;

FullyQualifiedID – повне ім’я ItemID;

NodeType – тип вузла дерева: 'branch' – гілка, тобто яка вміщує інші елементи, 'leaf' – лист, який не вміщує ніяких елементів.

Для створення групи використовується функція addgroup, в аргументах яких вказується об’єкт opcda, та опціонально ім’я групи, а повертається об’єкт dagroup. 

grp1 = addgroup(da);

grp2 = addgroup(da, 'MyGroup');

Для створення OPCItem в групі використовується функція additem, в якості аргументів для якої вказується об’єкт dagroup, ItemID потрібного елементу, та опціонально тип змінної Item. Після виклику функції повертається об’єкт daitem.

OPC.FT101=additem(grp1,'FT101');

tm2 = additem(grp1, 'Random.UInt2', 'double')

Для знищення об’єктів OPCToolBOX використовується функція delete:

delete(da1)

OPCToolbox надає всі можливості OPC для операцій читання та запису. Можна скористатися механізмом періодичного читання з оповіщенням. Для цього необхідно правильно налаштувати властивості об’єкту dagroup, а саме: 

UpdateRate – періодичність оновлення в секундах;

Subscription - 'on' – активувати механізм підписки,  'off' – деактивувати механізм підписки;

Active - 'on' – активувати періодичне читання,  'off' – деактивувати;

При періодичному читанні автоматично змінюються властивості об’єкту daitem: Value, Quality та TimeStamp. Якщо властивість об’єкту dagroup  DataChangeFcn вказує на функцію, то при цьому також буде викликана дана функція.

Для синхронного запису окремих OPCItem використовується функція write, де в якості аргументів передається об’єкт daitem та значення для запису:

write(itm2, 10.34)

Для асинхронного запису окремих OPCItem використовується функція writeasync, де в якості аргументів передається об’єкт daitem та значення для запису. Функція повертає номер транзакції.

tid = writeasync(itm2, 57.8)

Для синхронного читання  окремих OPCItem використовується функція read, а для асинхронного – readasync.

read(itm1, 'device')

tid = readasync(itm1)

Для групових операцій синхронного та асинхронного читання і запису використовуються ті самі функції, однак в якості аргументів вказуються об’єкт dagroup.  

Приклад звязку MATLAB з SCADA VijeoCitect:

 

da = opcda('localhost', 'SchneiderElectric.SCADA.OpcDaServer.1');

connect(da);

grp1 = addgroup(da);

 

OPC.FT101=additem(grp1,'FT101');

OPC.FT101_1=additem(grp1,'FT101_1');

OPC.FT200_4=additem(grp1,'FT200_4');

OPC.FT300=additem(grp1,'FT300');


Comments