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

Вопросы по визуализации и не только


Author Message
Written on: 20. 10. 2013 [18:28]
Waterdisp
Александр Иванов
Topic creator
registered since: 03.10.2013
Posts: 32
Добрый день! В процессе создания своего проекта на Openscada, натолкнулся на пару трудностей:

1. Делая визуализацию, хотел создать кнопку-индикатор состояния ВКЛ/ВЫКЛ дополнительно с текстом по центру. Создал составной элемент на основе примитива Box, вставил в него "Скругленный прямоугольник", на него "Текст". Сделал 1 входную связь для нового составного элемента - логическую переменную (установил Обраб. в yes и Конфигурацию во "входная связь"), дабы потом в проекте можно было привязать ее к регистру Modbus на контроллере. Написал скрипт в "обработке":

using Special.FLibSYS;
Text1_text=(Input_val)?"ВКЛ":"ВЫКЛ";
Text1_backColor=(Input_val)?"red":"grey";
rnd_sq_gr11_fillColor=(Input_val)?"red":"grey";

Попробовал добавить элемент в свой проект, привязал его к переменной объявленного мной контроллера типа LogicLev, ну и ,как вы понимаете, не заработало ничего... Хотя, очень похожая конструкция реализована в элементе «сигнализация», с той лишь разницей, что там простой элемент и нет обращения к атрибуту подэлемента, а напрямую к атрибуту (заливке) элемента в целом.

2. Мой контроллер соединен с GSM-модемом, с таким же модемом соединен компик с Openscada. Из-за дороговизны GSM-связи, не могу опрашивать его чаще, чем раз в 10-15 минут, однако часто нужно управлять насосом через контроллер и после управления через пару секунд снова считывать состояние контроллера, дабы знать запустился насос или нет. Можно ли как то, или привязать опрос к сеансу управления, или запускать его сразу же после сеанса? Сейчас, фактически получается, что я команду на контроллер послал, а узнать реально включилось или нет устройство смогу только после следующего опроса. Идеально было бы, чтобы после команды управления контроллер не отключал бы транспорт с модемом (модем не клал бы трубку), выжидал 3-4 секунды и опрашивал состояние. Если так нельзя, то хотяб запланировать обычный опрос сразу же после сеанса управления — стандартное описание поля планирования запроса содержит только формат cron и формат задания времени напрямую.

3. И еще мб глупый вопрос, просто нигде еще пока не встретил ответа на него. Как то можно сделать скрипт, запускающий сразу проект визуализации на исполнение? То есть, чтобы оператор мог миновать запуск проекта или среды визуализации, из которых я сейчас запускаю проект на исполнение?

[This article was edited 1 times, at last 20.10.2013 at 18:29.]
Attachment

text_ind.png (File type: image/png, Size: 308.33 kilobytes) — 1827 downloads
Written on: 21. 10. 2013 [11:54]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"Waterdisp" wrote:

using Special.FLibSYS;
Text1_text=(Input_val)?"ВКЛ":"ВЫКЛ";
Text1_backColor=(Input_val)?"red":"grey";
rnd_sq_gr11_fillColor=(Input_val)?"red":"grey";

Первая строка тут не нужна.

"Waterdisp" wrote:

Попробовал добавить элемент в свой проект, привязал его к переменной объявленного мной контроллера типа LogicLev, ну и ,как вы понимаете, не заработало ничего... Хотя, очень похожая конструкция реализована в элементе «сигнализация», с той лишь разницей, что там простой элемент и нет обращения к атрибуту подэлемента, а напрямую к атрибуту (заливке) элемента в целом.

Вероятно в обработку не включили сами Text1_text и Text1_backColor.
Вообще для поиска этой проблемы берёте и отслеживаете прохождение сигнала через всю цепочку, включая и интерфейс в контексте сеанса исполняемого проекта: http://wiki.oscada.org/Doc/VCAEngine/files?get=VCAeng_pg_ses.png

"Waterdisp" wrote:

Идеально было бы, чтобы после команды управления контроллер не отключал бы транспорт с модемом (модем не клал бы трубку), выжидал 3-4 секунды и опрашивал состояние.

Объект исходящего транспорта и кладёт трубку с указанным таймаутом:
HTML
Время жизни соединения, в секундах. Если в течении этого времени будет отсутствовать передача данных через транспорт то соединение будет разорвано.

И это время по умолчанию 30 секунд.

"Waterdisp" wrote:

3. И еще мб глупый вопрос, просто нигде еще пока не встретил ответа на него. Как то можно сделать скрипт, запускающий сразу проект визуализации на исполнение? То есть, чтобы оператор мог миновать запуск проекта или среды визуализации, из которых я сейчас запускаю проект на исполнение?

FAQ читаем: http://oscada.org/ua/forum/topics/chasto_zadavaemye_voprosy_faq/

Learn, learn and learn better than work, work and work.
Written on: 21. 10. 2013 [12:21]
IrmIngeneer
Константин \m/
Contributor
Sponsor
registered since: 16.09.2010
Posts: 185
Настройки модуля Vision->"Рабочий пользовательский интерфейс" и "QT GUI пускатель" посмотрите.
Так же поизучайте сам xml-файл конфигурации, там много чего полезного.
Written on: 29. 10. 2013 [16:10]
Waterdisp
Александр Иванов
Topic creator
registered since: 03.10.2013
Posts: 32
Все получилось, единственное - не могу пока разобраться, как сделать опрос параметров контроллера не по времени, а после события (по истечению некоторого времени с момента записи регистра предыдущей командой). То есть по нажатию кнопки в интерфейсе команда ушла на котроллер и здесь же по, истечении 5 сек, произошел опрос регистров Modbus.
Эти регистры оформлены в виде параметров в контроллере в модуле DAQ.Modbus. По идее, если б можно было запустить опрос из обработчика кнопки как то так - DAQ.Modbus.[Controller].[Attr].Start, то проблема была б исчерпана. Или же, если у контроллера есть параметр, отвечающий за следующий запуск - поменять кнопкой этот параметр, провести опрос, поменять обратно...

P.S. Не пинайте сильно, если это уже где - то описано :) Если не трудно, просто укажите где почитать.
Written on: 29. 10. 2013 [17:05]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"Waterdisp" wrote:

Все получилось, единственное - не могу пока разобраться, как сделать опрос параметров контроллера не по времени, а после события (по истечению некоторого времени с момента записи регистра предыдущей командой). То есть по нажатию кнопки в интерфейсе команда ушла на котроллер и здесь же по, истечении 5 сек, произошел опрос регистров Modbus.
Эти регистры оформлены в виде параметров в контроллере в модуле DAQ.Modbus. По идее, если б можно было запустить опрос из обработчика кнопки как то так - DAQ.Modbus.[Controller].[Attr].Start, то проблема была б исчерпана. Или же, если у контроллера есть параметр, отвечающий за следующий запуск - поменять кнопкой этот параметр, провести опрос, поменять обратно...

Это почти так и можно: SYS.DAQ["Modul"]["Controller"].start(true)

Learn, learn and learn better than work, work and work.
Written on: 31. 10. 2013 [16:14]
Waterdisp
Александр Иванов
Topic creator
registered since: 03.10.2013
Posts: 32
Странно, не могу запустить контроллер.
Пробовал :
SYS.DAQ.ModBUS.PLK_63_SecReq.start(true);
SYS.DAQ.ModBUS.PLK_63_SecReq.start(newST=true);
SYS.DAQ.ModBUS.PLK_63_SecReq.start;
SYS.DAQ.ModBUS.PLK_63_SecReq.start(1);
Пробовал также
SYS.DAQ.ModBUS.PLK_63_SecReq.run(true);

Что я не так делаю?

P.S. Попробовал также только что SYS.DAQ.ModBUS.PLK_63_SecReq.start=true, и снова никакого эффекта.

[This article was edited 1 times, at last 31.10.2013 at 18:01.]
Written on: 31. 10. 2013 [18:08]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"Waterdisp" wrote:

Странно, не могу запустить контроллер.


У меня всё запускается. Вызываю в DemoDB:
JAVASCRIPT
SYS.DAQ.ModBus.testTCP.start(true);

ModBus.testTCP пошёл опрашивать.

"Waterdisp" wrote:

SYS.DAQ.ModBUS.PLK_63_SecReq.start(true);

С какого потолка снят идентификатор "ModBUS", как минимум? Нет там такого объекта!

Learn, learn and learn better than work, work and work.
Written on: 01. 11. 2013 [01:15]
Waterdisp
Александр Иванов
Topic creator
registered since: 03.10.2013
Posts: 32
Черт, и правда id объекта "ModBus", а не "ModBUS". :oops: Извиняюся, работает все...
Written on: 04. 11. 2013 [14:04]
Waterdisp
Александр Иванов
Topic creator
registered since: 03.10.2013
Posts: 32
Еще 1 непонятная мне вещь появилась... Модем,подключенный к скаде как транспорт, при отключении транспорта не вешает трубку. То есть создан последовательный исходящий транспорт с настройками вида:

/dev/ttyS1:9600:8N1::[номер], на вкладке "модем" транспорта я ничего не менял.

Пробую вручную запустить транспорт - вижу в логах:

0|/AGLKS/sub_Transport/mod_Serial/ | Отправлено на модем 29: 'ATZ'.
0|/AGLKS/sub_Transport/mod_Serial/ | Получено из модема 29: 'OK'.
0|/AGLKS/sub_Transport/mod_Serial/ | Отправлено на модем 29: 'ATD0636826185'.
0|/AGLKS/sub_Transport/mod_Serial/ | Получено из модема 29: 'CONNECT'.

Транспорт соединился!

Далее хочу его выключить - снимаю галочку "Включен" -

0|/AGLKS/sub_Transport/mod_Serial/ | Отправлено на модем 29: '+++'.
0|/AGLKS/sub_Transport/mod_Serial/ | Отправлено на модем 29: '+++ATH'.

И все... ответа от модема не приходит, соединение остается открытым - индикатор соединения на модеме продолжает гореть.

Делаю то же самое через minicom:

ATZ
OK
ATD0636826185
CONNECT 9600/RLP
+++
OK
ATH
OK

И Модем кладет трубку как надо...

Если отослать +++ATH вместо ATH, все тоже отрабатывает отлично.

Пробую ввести команду +++ATH через minicom не дожидаясь ответа OK на последовательность +++ - и она не срабатывает... Похоже перед вводом команды ATH нужно ждать таймаут перехода модема в режим команд, но создается впечателние, что модуль транспорта не ждет и посылает 2 команды подряд (+++ и +++ATH)... Или же это где-то может быть настроено в модеме - пока что не нашел в интернете ответ. Кто то сталкивался с подобным?




[This article was edited 1 times, at last 04.11.2013 at 14:16.]
Written on: 04. 11. 2013 [14:57]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"Waterdisp" wrote:

Пробую ввести команду +++ATH через minicom не дожидаясь ответа OK на последовательность +++ - и она не срабатывает... Похоже перед вводом команды ATH нужно ждать таймаут перехода модема в режим команд, но создается впечателние, что модуль транспорта не ждет и посылает 2 команды подряд (+++ и +++ATH)... Или же это где-то может быть настроено в модеме - пока что не нашел в интернете ответ. Кто то сталкивался с подобным?

Особенность модема наверное такая, а вообще:
JAVASCRIPT
TTr::writeLine(fd,mdmExit());
        if(mdmPreInit() > 0) TSYS::sysSleep(mdmPreInit());
        //> HangUp
        TTr::writeLine(fd,mdmHangUp());

Т.е. между командой выхода "+++" и пложить трубку "+++ATH" есть таймаут инициализации.
А значения самих команд типично и взято из kppp.
Попробуйте команду положить трубку записать просто "ATH".

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



3986