From OpenSCADAWiki
Jump to: navigation, search

Програмний інтерфейс OpenSCADA, для реалізації протокольного шару, представлено об'єктами та віртуальними функціями викликів із ядра OpenSCADA:

  • TProtocol->TModule — Кореневий об'єкт модуля підсистеми "Протоколи":
    • void itemListIn( vector<string> &ls, const string &curIt = "" ); — Перелік піделементів у вхідному протоколу, якщо протокол їх передбачає. Використовується при обранні у конфігурації об'єкту вхідного транспорту.
    • void outMess( XMLNode &io, TTransportOut &tro ); — Реалізована передача даних об'єктами ядра OpenSCADA у дереві XML in віддаленій системі за посередництвом транспорту tro и поточного вихідного протоколу. Надання даних у дереві XML in не уніфіковано та специфічно до логічної структури протоколу. Ці дані серіалізуються (переводяться у послідовність байтів згідно протоколу) та надсилаються через вказаний вихідний транспорт tro, функцією messIO(), вище.
    • TProtocolIn *in_open( const string &name ) — Викликається при відкритті або створені нового об'єкта вхідного транспортного протоколу name, цим модулем.
  • TProtocolIn — Об'єкт протоколу обробки вхідних запитів із об'єкта вхідного транспорту TTransportIn, вище. На кожний сеанс вхідного запиту створюється об'єкт пов'язаного вхідного протоколу, який залишається живим до моменту завершення повного сеансу "Запит->Відповідь". Адреса транспорту, який відкрив екземпляр протоколу, вказано у srcTr():
    • bool mess( const string &request, string &answer, const string &sender ); — Передача послідовності даних request об'єкту протоколу для їх розбору згідно з реалізацією протоколу, з вказанням адреси того хто запитав у sender. Ця функція протоколу мусить обробити запит, сформувати відповідь у answer та повернути "false" у випадку повноти запиту. У випадку якщо запит поступив не весь потрібно повертати "true" для індикації транспорту "очікувати завершення", при цьому першу частину запиту потрібно зберігати у контексті об'єкта протоколу.