УкраїнськаEnglishmRussian
Вход/Новый
В теме много сообщений

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


Автор Сообщение
Сообщение создано: 20. 10. 2013 [18:28]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 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. И еще мб глупый вопрос, просто нигде еще пока не встретил ответа на него. Как то можно сделать скрипт, запускающий сразу проект визуализации на исполнение? То есть, чтобы оператор мог миновать запуск проекта или среды визуализации, из которых я сейчас запускаю проект на исполнение?

[Сообщение редактировалось 1 раз(а), в последний раз 20.10.2013 в 18:29.]
Вложенный файл

text_ind.png (Тип файла: image/png, Размер: 308.33 килобайт) — 1700 загрузок
Сообщение создано: 21. 10. 2013 [11:54]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"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.
Сообщение создано: 21. 10. 2013 [12:21]
IrmIngeneer
Константин \m/
Contributor
Sponsor
Зарегистрирован(а) с: 16.09.2010
Сообщения: 185
Настройки модуля Vision->"Рабочий пользовательский интерфейс" и "QT GUI пускатель" посмотрите.
Так же поизучайте сам xml-файл конфигурации, там много чего полезного.
Сообщение создано: 29. 10. 2013 [16:10]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 32
Все получилось, единственное - не могу пока разобраться, как сделать опрос параметров контроллера не по времени, а после события (по истечению некоторого времени с момента записи регистра предыдущей командой). То есть по нажатию кнопки в интерфейсе команда ушла на котроллер и здесь же по, истечении 5 сек, произошел опрос регистров Modbus.
Эти регистры оформлены в виде параметров в контроллере в модуле DAQ.Modbus. По идее, если б можно было запустить опрос из обработчика кнопки как то так - DAQ.Modbus.[Controller].[Attr].Start, то проблема была б исчерпана. Или же, если у контроллера есть параметр, отвечающий за следующий запуск - поменять кнопкой этот параметр, провести опрос, поменять обратно...

P.S. Не пинайте сильно, если это уже где - то описано :) Если не трудно, просто укажите где почитать.
Сообщение создано: 29. 10. 2013 [17:05]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"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.
Сообщение создано: 31. 10. 2013 [16:14]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 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, и снова никакого эффекта.

[Сообщение редактировалось 1 раз(а), в последний раз 31.10.2013 в 18:01.]
Сообщение создано: 31. 10. 2013 [18:08]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"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.
Сообщение создано: 01. 11. 2013 [01:15]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 32
Черт, и правда id объекта "ModBus", а не "ModBUS". :oops: Извиняюся, работает все...
Сообщение создано: 04. 11. 2013 [14:04]
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 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)... Или же это где-то может быть настроено в модеме - пока что не нашел в интернете ответ. Кто то сталкивался с подобным?




[Сообщение редактировалось 1 раз(а), в последний раз 04.11.2013 в 14:16.]
Сообщение создано: 04. 11. 2013 [14:57]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"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.



2277