EnglishУкраїнськаmRussian
Login/New
Topic with no new replies

SelfSystem


Author Message
Written on: 27. 11. 2014 [22:21]
coro
Bkmz Bkmz
Topic creator
registered since: 08.10.2014
Posts: 12
Доброго времени суток!
Есть ли примеры использования запросов(реквестов)? После изучения http://wiki.oscada.org/Doc/SelfSystem, дальше установки сессии дело не ушло. Дело в синтаксисе, но почему не возвращает никакую ошибку не пойму.
Питоном отправляем на сокет:
JAVASCRIPT
sock.send(to_bytes("SES_OPEN %s %s\n"%(LOGIN,PASSWORD)))

ответ:
REZ 0 1754831288

Дальше отправка реквеста:
JAVASCRIPT
sock.send(to_bytes("REQ "+sess_id.decode("utf-8")+" 2048 \n <get path=\"/sub_DAQ/mod_System/cntr_AutoHD/prm_CPU\" user=\"root\"/>"))

Ну и все возможные варианты тегов, методов и конца строки согласно:
REQ 1:[/b] "REQ <ses_id> <req_size> \n <control interface command>"
REQ 2: "REQDIR <user> <password> <req_size> \n <control interface command>"
REZ OK: "REZ 0 <rez_size> \n <control interface command result>"
REZ ERR: "REZ 1 Auth error. Session no valid.\n"
REZ ERR: "REZ 2 <control interface err>"
Основные запросы: сеансовый и прямой. Реализуются путём отправки стандартной команды интерфейса управления OpenSCADA в поле <control interface command>. В результате будет получен ответ интерфейса управления <control interface command result> или одна из ошибок.

В ответ на REQ и REQDIR молчание, сессии работают нормально, комманд формат эррор вываливается нормально. Тут http://wiki.oscada.org/Doc/API?v=12a0#h154-1 тоже был. Подскажите пример использования данных функций, пожалуйста.
Written on: 27. 11. 2014 [22:41]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3747
"coro" wrote:

Дальше отправка реквеста:
JAVASCRIPT
sock.send(to_bytes("REQ "+sess_id.decode("utf-8")+" 2048 \n <get path=\"/sub_DAQ/mod_System/cntr_AutoHD/prm_CPU\" user=\"root\"/>"))


Очевидное несоответствие запроса его размеру.
Вообще берите WireShark и всё увидите.

Learn, learn and learn better than work, work and work.
Written on: 28. 11. 2014 [08:13]
coro
Bkmz Bkmz
Topic creator
registered since: 08.10.2014
Posts: 12
"roman" wrote:

"coro" wrote:

Дальше отправка реквеста:
JAVASCRIPT
sock.send(to_bytes("REQ "+sess_id.decode("utf-8")+" 2048 \n <get path=\"/sub_DAQ/mod_System/cntr_AutoHD/prm_CPU\" user=\"root\"/>"))


Очевидное несоответствие запроса его размеру.
Вообще берите WireShark и всё увидите.

WireShark ничего нового не показал


SES_OPEN root openscada
REZ 0 1241334251
REQ 1241334251 2048 <get path="/sub_DAQ/mod_System/cntr_AutoHD/prm_CPU" user="root"/>


Размер ответа! Если установить размер ответа больше 65, то скада молчит, меньше - работает. Не могли бы Вы поподробнее рассказать в чём проблема.

[This article was edited 1 times, at last 28.11.2014 at 08:19.]
Written on: 28. 11. 2014 [09:50]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3747
"coro" wrote:

WireShark ничего нового не показал

А на трафик QTCfg посмотреть?

"coro" wrote:

Размер ответа! Если установить размер ответа больше 65, то скада молчит, меньше - работает. Не могли бы Вы поподробнее рассказать в чём проблема.

Каким образом число 2048 это размер ответа?
Это размер этого запроса, который должен точно соответствовать данному запросу, а не браться с потолка!
И используется размер для обнаружения окончания пакета, что типично для пакетных протоколов вроде TCP.

Learn, learn and learn better than work, work and work.
Written on: 30. 11. 2014 [13:39]
coro
Bkmz Bkmz
Topic creator
registered since: 08.10.2014
Posts: 12
"roman" wrote:

А на трафик QTCfg посмотреть?

Логично. Спасибо! Вместо Вайршарка для мониторнига использовал хромовский встроенный дебаггер, удобнее получилось.

"roman" wrote:

Каким образом число 2048 это размер ответа?
Это размер этого запроса, который должен точно соответствовать данному запросу, а не браться с потолка!
И используется размер для обнаружения окончания пакета, что типично для пакетных протоколов вроде TCP.

Я "вроде" разобрался с <req_size> и <rez_size>, но присутствуют какие то недопонимания. <req_size> я получаю функцией, предварительно удаляя лишнее:
JAVASCRIPT
sys.getsizeof(bytes((re.sub("^\s+|\n|\r|\s+$", '', request), 'UTF-8')))

У меня работает не всегда, на маленькие запросы (info) приходится вручную выставлять значения, как я писал выше в сообщениях 60-70. Пробовал добавлять дополнительные байты к функции автоматического вычисления - безрезультатно. Так же проблема возникает при получении большого ответа, доходит не всё, при указании любого количества байт. Я так понимаю я должен получить первые сколько то байт, в которых будет содержаться <rez_size>, а дополучить остальное с указанием количества получаемых байт: sock.recv(rez_size), но вроде это чушь какая то, которая работать не будет. Помогите разобраться, пожалуйста. (3.4 x86/ Win7x64 может в этом дело)
Written on: 01. 12. 2014 [22:51]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3747
"coro" wrote:

Логично. Спасибо! Вместо Вайршарка для мониторнига использовал хромовский встроенный дебаггер, удобнее получилось.

Когда это инструментарий разработчика Chrome начал показывать трафик отличный от HTTP?

"coro" wrote:

У меня работает не всегда, на маленькие запросы (info) приходится вручную выставлять значения, как я писал выше в сообщениях 60-70. Пробовал добавлять дополнительные байты к функции автоматического вычисления - безрезультатно. Так же проблема возникает при получении большого ответа, доходит не всё, при указании любого количества байт. Я так понимаю я должен получить первые сколько то байт, в которых будет содержаться <rez_size>, а дополучить остальное с указанием количества получаемых байт: sock.recv(rez_size), но вроде это чушь какая то, которая работать не будет. Помогите разобраться, пожалуйста. (3.4 x86/ Win7x64 может в этом дело)

Не ждите, что я Вам тут начну пересказывать как работать с сетью по TCP для сторонних программ!
Особенно если учесть, что исходники OpenSCADA доступны и их всегда можно посмотреть, как тот-же Protocol.SelfSystem.

Learn, learn and learn better than work, work and work.



0965