
| Автор | Сообщение |
|---|---|
|
Сообщение создано: 18. 09. 2011 [11:07]
|
|
|
dmpetrov
Дмитрий Петров
Создатель темы
Зарегистрирован(а) с: 15.09.2011
Сообщения: 4
|
Добрый день. Пытаюсь реализовать пассивный механизм сбора данных через фичу "Пользовательский протокол". Предполагается следующая последовательность операций: 1. Клиент посылает OpenSCADA данные на определенный порт 2. Запрос попадает на транспорт, затем в реализацию пользовательского протокола 3. Пользовательский протокол обрабатывает данные, сохраняет в системе, шлет ответ клиенту. Транспорт завелся с полпинка, реализация пользовательского протокола тоже вызывается. При написании реализации пользовательского протокола входящих запросов столкнулся со следующими проблемами: 1. Объект DAQ не определен в функции-реализации протокола входящих запросов. То есть, писать DAQ.(...) нельзя, можно только SYS.DAQ.(...) 2. Не получается вызывать пользовательскую функцию из функции-реализации протокола входящих запросов: вызов SYS.DAQ.JavaLikeCalc.lib_<имя либы>.<имя функции>(<параметры>) всегда возвращает нуль, а сама функция не вызывается. При этом объект SYS.DAQ.JavaLikeCalc.lib_<имя либы>.<имя функции> является объектом TCntrNodeObj. 3. Проверка следующего кода завершается с ошибкой: func1 = SYS.DAQ.lib_lib1["setValue1"]; func1(Value1); Ошибка: недопустимый символ '(', ожидается ';' Подскажите пожалуйста где может быть косяк. Спасибо! |
|
Сообщение создано: 18. 09. 2011 [17:21]
|
|
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3797
|
"dmpetrov" wrote: 3. Проверка следующего кода завершается с ошибкой: func1 = SYS.DAQ.lib_lib1["setValue1"]; func1(Value1); Ошибка: недопустимый символ '(', ожидается ';' Подскажите пожалуйста где может быть косяк. Спасибо! Прочитайте внимательнее документацию. Где-то рядом такой вопрос уже был: http://oscada.org/ru/forum/posts/proekt/rabota_so_strokami Цитата из документации: JAVASCRIPT Для адресации к функциям этой библиотеки можно использовать
статический адрес вызова "DAQ.JavaLikeCalc.lib_doc.{Func}"
или динамический "SYS.DAQ.JavaLikeCalc["lib_doc"]["{Func}"].call()".
Где {Func} — идентификатор функции в библиотеке. Learn, learn and learn better than work, work and work.
|
|
Сообщение создано: 21. 09. 2011 [18:33]
|
|
|
dmpetrov
Дмитрий Петров
Создатель темы
Зарегистрирован(а) с: 15.09.2011
Сообщения: 4
|
Большое спасибо, помогло. |
|
Сообщение создано: 05. 09. 2012 [19:18]
|
|
|
legend
Oleg N
Зарегистрирован(а) с: 13.04.2012
Сообщения: 63
|
"dmpetrov" wrote: 3. Пользовательский протокол обрабатывает данные, сохраняет в системе, шлет ответ клиенту. В пользовательском протоколе во входном транспорте ожидаю запроса от прибора. Запрос приходит, но я могу его записать только в архив сообщений, например SYS.messDebug("TEST REQ: ",request). А каким способом можно сохранить данные в системе, а именно передать в вычислитель на Java Like Calc для дальейшей обработки и сохранения полученных данных в архив? С ответами на исходящие запросы все понятно - XML Node, а вот во входном транспорте такого способа нету... [Сообщение редактировалось 1 раз(а), в последний раз 05.09.2012 в 19:20.] |
|
Сообщение создано: 06. 09. 2012 [08:03]
|
|
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3797
|
"legend" wrote: А каким способом можно сохранить данные в системе, а именно передать в вычислитель на Java Like Calc для дальейшей обработки и сохранения полученных данных в архив? В любой атрибут любого объекта контроллера в системе, включая и объектные атрибуты, которые могут быть и XMLNode. А так-же любые другие механизмы пользовательского API OpenSCADA: http://wiki.oscada.org/Doc/OpisanieProgrammy#h920-1 Learn, learn and learn better than work, work and work.
|
|
Сообщение создано: 29. 11. 2017 [13:16]
|
|
|
Vorgehen
Артём Корниевский
Зарегистрирован(а) с: 08.07.2012
Сообщения: 20
|
Добрый день всем. И всё таки остаётся не понятным (для меня) как из входящего протокола можно вытащить request в JavaLikeCalc. Для исходящего транспорта всё понятно существует функция messIO. Можно прямо из вычислителя отправлять запросы и обрабатывать всё в вычислителе, 5 лет уже так работает система у нас. А вот как переменную из UserProtocol input строку request забрать в вычислитель. Раз 10 уже прочитал текст документации на UserProtocol для входящих запросов и не могу осознать. Заранее благодарю за помощь. Опишу коротко задачу. 1. Есть датчик который набор байтов отправляет по ком порту. 2. Создаю входящий транспорт и отправляю всё в UserProtocol 3. необходимо этот набор байтов передать из модуля UserProtocol в контроллер JavaLikeCalc 4. Я издеваюсь над данными как хочу. с 1. 2. и 4. пунктами всё ясно. А вот как осуществить пункт 3 никак не вкурю. |
|
Сообщение создано: 30. 11. 2017 [12:03]
|
|
|
Vorgehen
Артём Корниевский
Зарегистрирован(а) с: 08.07.2012
Сообщения: 20
|
Решил проблему. Всё удивляюсь гибкости системы. Спасибо Роман. Набросал на Python3 скрипт name1. JAVASCRIPT import io import time import serial ser=serial.Serial(port='/dev/ttyS1', baudrate=9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS,timeout=1) y=ser.read(14) print(y[0]) print(y[1]) print(y[2]) print(y[3]) print(y[4]) print(y[5]) print(y[6]) print(y[7]) print(y[8]) print(y[9]) print(y[10]) print(y[11]) print(y[12]) print(y[13]) Потом вызвал из JavaLikeCalc при помощи JAVASCRIPT Rezult1=SYS.system("python3 /home/name1", false);p.s. так и не разобрался как из UserProtocol вытащить request в JavaLikeCalc [Сообщение редактировалось 2 раз(а), в последний раз 30.11.2017 в 12:42.] |
|
Сообщение создано: 30. 11. 2017 [12:42]
|
|
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3797
|
"Vorgehen" wrote: Решил проблему. Всё удивляюсь гибкости системы. Спасибо Роман. Набросал на Python3 скрипт name1. А если почитаете пользовательское API далее, за описанием функции system(), то найдёте функции записи в атрибуты параметров объектов контроллеров, включая и JavaLikeCalc, в чём однако я из вашего описания смысла не увидел. P.S. На данный момент для входных пользовательских протоколов я вижу только одно расширение, что сделало-бы его более удобным и унифицируемым, а именно добавить собственный контекст данных с возможностью использования единой процедуры - реализации протокола. Что позволит создавать полноценные библиотеки таких реализаций и возможностью их широкой параметризации под нужные входные-логические адреса, как DCON, ModBus и ссылки на модель данных — как-раз на параметры объектов контроллеров. Это можно делать и сейчас, но через модификацию самой процедуры, т.е. скопировать и прямо там поменять адреса, что отрывает копию от первичной-библиотечной реализации. Learn, learn and learn better than work, work and work.
|