OpenSCADAWiki: Doc/HTTP ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 
This is an old revision of Doc/HTTP from 2010-06-10 11:34:23..

Модуль подсистемы “Протоколы” <HTTP>

English (1 Kb) English Version
Ukrainian (1 Kb) Українська версія


Модуль:HTTP
Имя:HTTP
Тип:Протокол
Источник:prot_HTTP.so
Версия:1.4.1
Автор:Роман Савоченко
Описание:Предоставляет поддержку протокола HTTP для WWW-основанных пользовательских интерфейсов.
Лицензия:GPL

Contents

Введение

Модуль транспортного протокола HTTP предназначен для реализации поддержки сетевого протокола HTTP(Hypertext Transfer Protocol) в системе OpenSCADA.


Протокол HTTP используется для передачи содержимого WWW. Так, через HTTP передаются следующие типы документов: html, xhtml, png, java и многие другие. Добавление поддержки HTTP в систему OpenSCADA в комплексе с транспортом Sockets позволяет реализовывать различные пользовательские функции на основе WWW интерфейса. По состоянию на версию 1.3.0 модуль HTTP реализует два основных метода протокола HTTP: GET и POST. Модуль HTTP обеспечивает контроль целостности HTTP-запросов и, в согласии с транспортом Sockets, позволяет “собирать” целостные запросы из их фрагментов, а также обеспечивать сохранение соединения живым (Keep-Alive).


Для гибкого подключения пользовательских интерфейсов к данному модулю используется модульный механизм в рамках самого модуля HTTP. В роли модулей используются модули подсистемы “Пользовательские интерфейсы” с дополнительным информационным полем “ имеющим значение “WWW”.


В запросах к Web ресурсам принято использовать URL(Universal Resource Locator), следовательно URL передаётся как основной параметр через HTTP. Первый элемент запрашиваемого URL используется для идентификации модуля UI. Например URL: http://localhost:10002/WebCfg означает обращение к модулю WebCfg на хосте http://localhost:10002. В случае ошибочного указания идентификатора модуля или при обращении вообще без идентификатора модуля HTTP модуль генерирует диалог информации о входе и с выбором одного из доступных пользовательских интерфейсов. Пример диалога показан на рисунке 1. Модулем поддерживается аутентификация в системе OpenSCADA при предоставлении авторизированного доступа к модулям WEB-интерфейсов (рис.2). Диалог формируется на языке XHTML 1.0 Transitional!


Диалог выбора модуля WWW-интерфейса. (43 Kb)
Рис.1. Диалог выбора модуля WWW-интерфейса.

Диалог авторизации в системе OpenSCADA. (12 Kb)
Рис.2. Диалог авторизации в системе OpenSCADA.

1. Модули пользовательского WEB-интерфейса

Модули пользовательского интерфейса (UI), предназначенные для совместной работы с модулем HTTP, должны устанавливать информационное поле “ значением “WWW” и поле "Auth" значением "1", если модуль требует аутентификации при входе. Для связи модуля HTTP и модулей UI используется расширенный механизм коммуникации. Этот механизм подразумевает экспорт интерфейсных функций. В данном случае UI модули должны экспортировать функции:


Далее в случае поступления HTTP запроса GET будет вызываться функция HttpGet, а в случае запроса POST будет вызываться функция HttpPost в соответствующем модуле UI.

2. API функции исходящих запросов

Функция исходящих запросов оперирует обменом содержимым HTTP-запросов, завёрнутыми в XML-пакеты. Структура запроса имеет вид:

<req Host="host" URI="uri">
  <prm id="pId">pVal</prm>
  <cnt name="cName" filename="cFileName">
    <prm id="cpId">cpVal</prm>
    cVal
  </cnt>
</req>

Где:

Результатом запроса является ответ со структурой:

<req Host="host" URI="uri" err="err" Protocol="prt" RezCod="rCod" RezStr="rStr">
    <prm id="pId">pVal</prm>
    respVal
  </req>

Где:

В качестве примера использования данной функции в пользовательских процедурах приведём формирование GET и POST запросов на языке JavaLikeCalc.JavaScript:

//GET запрос
req = SYS.XMLNode("GET");
req.setAttr("URI","/");
SYS.Transport.Sockets.out_testHTTP.messIO(req,"HTTP");
test = req.text();

//POST запрос
req = SYS.XMLNode("POST");
req.setAttr("URI","/WebUser/FlowTec.txt");
cntNode = req.childAdd("cnt").setAttr("name","pole0").setAttr("filename","Object2-k001-100309-17.txt");
cntNode.childAdd("prm").setAttr("id","Content-Type").setText("text/plain");
cntText = "Object2-k001\r\n";
cntText += "\r\n";
cntText += "v002\r\n";
cntText += " n1\r\n";
cntText += "  09.03.10 16   Polnyj    7155.25    216.0  32.000  17.5\r\n";
cntText += "v005\r\n";
cntText += " n1\r\n";
cntText += "  09.03.10 16   Polnyj     188.81    350.0   4.000  40.0\r\n";
cntText += "\r\n";
cntNode.setText(cntText);
SYS.Transport.Sockets.out_testHTTP.messIO(req,"HTTP");

Ссылки

Referring pages: Doc
Doc/WebUser
Doc/WebVision
Using/PLC/firmware
Using/SmartHouse


 
There are no files on this page.[Display files/form]
There is no comment on this page. [Display comments/form]