OpenSCADAWiki: Doc/HTTP ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 
This is an old revision of Doc/HTTP from 2010-09-20 16:49:34..

Модуль подсистемы “Протоколы” <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 интерфейса. Модуль HTTP реализует два основных метода протокола HTTP: GET и POST. Модуль HTTP обеспечивает контроль целостности HTTP-запросов и, совместно с транспортом Sockets, позволяет “собирать” целостные запросы из их фрагментов, а также обеспечивать сохранение соединения живым (Keep-Alive).


Для гибкого подключения пользовательских интерфейсов к данному модулю используется модульный механизм в рамках самого модуля "HTTP". В роли модулей используются модули подсистемы “Пользовательские интерфейсы” с дополнительным информационным полем “SubType”, имеющим значение “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, должны устанавливать информационное поле “SubType” значением “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]