Запись значений в контроллеры
Author |
Message |
Written on: 19. 01. 2009 [13:14]
|
kvser
Виталий Харин
Topic creator
registered since: 16.10.2008
Posts: 14
|
Здравствуйте!
К примеру рассмотрим какой-нибудь контроллер модуля Modbus с 1 параметром "R:0:wr:par:parametr".
Хочется в визульной среде при нажатии на кнопку b1 записать в регистр (параметр "R:0000:wr:par:parametr".) значение 1, при нажатии кнопки b2 - значение 2.
Также при этом хочется, чтобы каждый час по таймеру записывалось в этот регистр значение 0.
Какие есть варианты реализации этого?
Я пока не понял каким образом передать в модуль Modbus значение параметра для записи, так чтобы он[модуль] сформировал команду записи значения для какого-либо регистра и отправил ее непосредственно физическому контроллеру.
|
Written on: 19. 01. 2009 [21:21]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
kvser wrote:
К примеру рассмотрим какой-нибудь контроллер модуля Modbus с 1 параметром "R:0:wr:par:parametr".
Хочется в визульной среде при нажатии на кнопку b1 записать в регистр (параметр "R:0000:wr:par:parametr".) значение 1, при нажатии кнопки b2 - значение 2.
Также при этом хочется, чтобы каждый час по таймеру записывалось в этот регистр значение 0.
Какие есть варианты реализации этого?
В демо БД полно примеров подобных ситуаций. А в целом пишется скрипт для виджета контейнера кнопок или самих кнопок где обрабатываются события http://diyaorg.dp.ua/oscadawiki/Doc/KoncepcijaSredyVizualizacii?v=4zph778-1 от них типа:
//Event process
while(true)
{
ev_wrk = strParse(event,0,"\n",off);
if( ev_wrk == "" ) break;
if( ev_wrk == "BtPress:/b1" ) modBusPrmA = 1;
else if( ev_wrk == "BtPress:/b2" ) modBusPrmA = 2;
else ev_rez+=ev_wrk+"\n";
}
Где атрибут modBusPrmA создаётся в виджете со свойством "Конфигурация" "Выходная или Полная связь" http://diyaorg.dp.ua/oscadawiki/Doc/KoncepcijaSredyVizualizacii?v=4zph781-1. После этого во вкладке "Связи" он связывается с атрибутом нужного параметра контроллера.
А по таймеру, можно устанавливать в томже скрипте анализируя время функциями Special.FLibSYS.tmTime() и Special.FLibSYS.tmDate() http://diyaorg.dp.ua/oscadawiki/Doc/FLibSYS?v=6ath378-3.
Learn, learn and learn better than work, work and work.
|
Written on: 20. 01. 2009 [09:15]
|
kvser
Виталий Харин
Topic creator
registered since: 16.10.2008
Posts: 14
|
Аааа...значение атрибута modBusPrmA передается в параметр контроллера при помощи "Связи". Получается что DAQ.Modbus при изменении параметра контроллера(при получении события или еще как) передаст в шину команду изменения регистра соответствующего устройства?
Понятно, но я бы хотел использовать запись по таймеру на стороне сервера, где бы не было графических примитивов. Возможно?
|
Written on: 20. 01. 2009 [12:24]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
kvser wrote:
Аааа...значение атрибута modBusPrmA передается в параметр контроллера при помощи "Связи". Получается что DAQ.Modbus при изменении параметра контроллера(при получении события или еще как) передаст в шину команду изменения регистра соответствующего устройства?
При записи в атрибут modBusPrmA отличного от исходного значения новое значение пойдёт по связи в контроллер.
kvser wrote:
Понятно, но я бы хотел использовать запись по таймеру на стороне сервера, где бы не было графических примитивов. Возможно?
Конечно. Выбирайте:
- http://diyaorg.dp.ua/oscadawiki/Doc/JavaLikeCalc
- http://diyaorg.dp.ua/oscadawiki/Doc/BlockCalc
Или в целом: http://diyaorg.dp.ua/oscadawiki/Doc/SredaProgr
Learn, learn and learn better than work, work and work.
|
Written on: 21. 05. 2009 [07:33]
|
fLegmatik
Азат Газизов
registered since: 19.02.2009
Posts: 16
|
Уже долгое время вникаю, но никак не могу реализовать простое управление включением/выключением выхода ПЛК. Сам ПЛК уже запрограммирован на нужную функциональность (управление выходом осуществляется не только со скада-системы, но физически кнопками по месту). Переменная по модбас хорошо читается и записывается, это можно наблюдать на вкладке Атрибуты (addr:/sub_DAQ/mod_ModBus/cntr_plc/prm_electro/a_out1). Однако установить полноценную желаемую связь с модулем СВУ по разным причинам не удаётся. Поскольку уже есть близкая тема, не буду создавать новую.
roman wrote: В демо БД полно примеров подобных ситуаций.
Когда начинаешь двигаться по параметрам в дереве демо БД, рано или поздно натыкаешься на матмодель ОУ, что немного сбивает с толку.
roman wrote: А в целом пишется скрипт для виджета контейнера кнопок
Пример "одна кнопка - одна модбас-переменная" довольно прост. Хочется универсальности с использованием виджетов, какую мы видим в демонстрации. Попробую описать свою задачу и своё видение решения, как бы велико это описание ни было. Возможно, при таком описании сам найду ошибки и неработающие связи. (Впрочем, много букв в маленькое окошко редактирования сообщения на этом форуме трудно вписать.)
Задача. Имеется несколько объектов, состояние которых описываются булевскими переменными (вкл/выкл), а именно электроприводы, если кому интересно. Требуется отобразить эти объекты и их состояние на мнемосхеме. При выборе одного из объектов сбоку должна открываться панель управления с кнопками "Пуск", "Стоп" и статусными индикаторами "Вкл", "Выкл". Что делают кнопки, думаю, объяснять не надо.
Наиболее простое решение, на мой взгляд, заключается в переделке алгоритмов управления демонстрационными КШ под свои нужды. Однако, как я говорил выше, КШ в демопроекте представлены моделями (апериодическим звеном), на входы которых отправляются команды и с выходов снимается состояние. Так же отличие моей задачи заключаются в следующем: у выхода ПЛК никакие промежуточные значения не учитываются, время срабатывания привода оператору абсолютно не интересно.
Учитывая вышесказанное, я решил отказаться от использования модулей BlockCalc и JavaLikeCalc, читая и отправляя переменные сразу в Modbus.
Шаг первый. Рисуем виджет, визуально похожий на объект управления. При рисовании одну из областей закрашиваем цветом fillColor (вернее не указываем цвет), другую -- c1. Цвет с1 будет показывать фокус на данном объекте, а обычная заливка -- состояние вкл-выкл. Кроме того, для этого виджета на вкладке Обработка создаём атрибут st_on (тип Логический, обработка Да, конфигурация Полная связь, конфигурационный шаблон "Параметр|st_on"). Для c1 указываем тип Цвет, обработка Да, конфигурация Нет, конфигурационный шаблон "" (ничего не пишем).
На этой же вкладке текст программы на языке JavaLikeCalc.JavaScript:
[код]c1=(focus && c1=="white") ? "gray" : "white";
if( st_on != EVAL_BOOL ) fillColor = st_on ? "green" : "red";[/код]
Окажу помощь в организации связи OpenSCADA <--modbus--> Овен ПЛК.
xmpp:ag@jabber.ufanet.ru
[Сообщение редактировалось 65535 раз(а), в последний раз 19.01.2038 в 03:14.]
|
Written on: 21. 05. 2009 [07:50]
|
fLegmatik
Азат Газизов
registered since: 19.02.2009
Posts: 16
|
Чтобы открывалась панель управления, в закладке Атрибуты созданного виджета в Обработке событий прописываем ws_FocusIn:pen:/pg_control/pg_ElCadr
Шаг второй. Имеющийся pg_ElCadr награждаем виджетами com_start, st_on, st_off (копии соответственно com_open, st_open, st_close), изменив на них надписи. Кнопка Стоп уже присутствует.
На вкладке Обработка по образу prmOpenSt создаём атрибут prmOnSt, единственное отличие в поле конфигурационный шаблон (Параметр|st_on).
Модифицируем текст программы, добавляя строчки.
...
else if( prmCom != EVAL_BOOL || prmOpenSt != EVAL_BOOL || prmOnSt != EVAL_BOOL )
{
com_start_en = com_stop_en = (prmOnSt != EVAL_BOOL);
st_on_en = st_off_en = (prmOnSt != EVAL_BOOL);
...
else if( ev_wrk == "ws_BtPress:/com_stop" )
{
prmOnSt = false;
messPut("OP:user",2,"Электропривод '"+prmShifr+"'. Режим : СТОП : ");
}
else if( ev_wrk == "ws_BtPress:/com_start" )
{
prmOnSt = true;
messPut("OP:user",2,"Электропривод '"+prmShifr+"'. Режим : ПУСК : ");
}
...
if( st_on_en ) st_on_color = prmOnSt ? "green" : "gray";
if( st_off_en ) st_off_color = prmOnSt ? "grey" : "red";
}
[This article was edited 1 times, at last 21.05.2009 at 07:50.]
Окажу помощь в организации связи OpenSCADA <--modbus--> Овен ПЛК.
xmpp:ag@jabber.ufanet.ru
[Сообщение редактировалось 65535 раз(а), в последний раз 19.01.2038 в 03:14.]
|
Written on: 21. 05. 2009 [08:06]
|
fLegmatik
Азат Газизов
registered since: 19.02.2009
Posts: 16
|
Шаг третий. Кажется, теперь можно закинуть свой виджет на страницу мнемосхемы. У этой страницы на закладке Связи появляется строка privod1.st_on, в которую мы прописываем адрес той самой булевой переменной, передаваемой по модбас (addr:/sub_DAQ/mod_ModBus/cntr_plc/prm_electro/a_privod1).
На мой взляд, на этом работа заканчивается. Однако же при запуске проекта и выборе объекта в лучшем случае я вижу его мигание (фокус), появляется панель управления, на которой пишется название объекта (Shifr), однако кнопки пуск, стоп и индикаторы отсутствуют. Что я мог упустить или не так написать?
Кстати, если кто-то решится взглянуть на проект. Я не могу понять, почему весь лог забивается строкой "4|/WorkStation/sub_UI/mod_VCAEngine/wlb_originals/wdg_Document/ | Ошибка исполнения инструкции: Ошибка компиляции: Ошибка символа, syntax error, unexpected ERR, pos: (1,-(1,39)."
[This article was edited 1 times, at last 21.05.2009 at 08:07.]
Окажу помощь в организации связи OpenSCADA <--modbus--> Овен ПЛК.
xmpp:ag@jabber.ufanet.ru
[Сообщение редактировалось 65535 раз(а), в последний раз 19.01.2038 в 03:14.]
Attachment
|
Written on: 22. 05. 2009 [06:17]
|
fLegmatik
Азат Газизов
registered since: 19.02.2009
Posts: 16
|
Так, проблему с отображением элементов управления вкл/выкл/пуск/стоп на панели управления удалось решить. Оказалось, требуется ещё один шаг по редактированию /prj_AGLKS/pg_control/pg_ElCadr в добавок к упомянутому во втором шаге /wlb_Main/wdg_ElCadr . Если в библиотечный виджет мы добавили атрибут prmOnSt, конфигурационный шаблон которого записан в виде "Параметр|st_on", то в проектном виджете это поле надо поправить на "<page>|st_on". Почему автор демопроекта не записал это поле в таком виде сразу в библиотеку, чтобы не пришлось править одно и то же в двух разных местах, решительно не понятно: либо по недосмотру, либо по злому умыслу, либо ничего в этом случае не работает.
Кстати, после обнаружения этой загвоздки я накатал ещё одну тему о непростых кровно-родственных отношениях библиотечных виджетов и их детишек в проектах.
http://oscada.org.ua/index.php?id=24&L=1&tx_mmforum_pi1[action]=list_post&tx_mmforum_pi1[tid]=60 -- ужасный урл отказался помещаться в тег [урл]. Видимо, надо подкрутить апачевский modrewrite для typo3, чтобы сделать адреса человекомашинопонятными.
Но на этом ещё не все дела закончены. Хоть виджеты и видны, но они не отображают состояния реальных объектов и не управляют ими. Где-то какой-то связи не хватает. Ищу.
________________________
Боюсь, последние мои сообщения на этом форуме отпугнут начинающих проектировщиков тем, что представят OpenSCADA чрезвычайно усложнённой, а они ещё даже линукс не ставили, чтоб начать изучение открытого проекта. Но никто и не говорил, что опенскада проста. На самом деле я не поэтому начал подробное описание своих действий вплоть до щелчков мыши. Я надеюсь, что кто-нибудь оптимизирует эти записи, выкинув излишнее действия и добавив нехватающие, и включит эту инструкцию в пособие по (быстрому старту в) OpenSCADA. А то ведь по отдельным модулям документация подробная, а вот как связать их между собой переменными -- ни слова. Например, что означает столбец "конфигурационный шаблон" в таблице атрибутов на закладке Связи, я представляю крайне смутно.
[This article was edited 1 times, at last 22.05.2009 at 07:52.]
Окажу помощь в организации связи OpenSCADA <--modbus--> Овен ПЛК.
xmpp:ag@jabber.ufanet.ru
[Сообщение редактировалось 65535 раз(а), в последний раз 19.01.2038 в 03:14.]
Attachment
|
Written on: 22. 05. 2009 [18:02]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
fLegmatik wrote:
Если в библиотечный виджет мы добавили атрибут prmOnSt, конфигурационный шаблон которого записан в виде "Параметр|st_on", то в проектном виджете это поле надо поправить на "<page>|st_on". Почему автор демопроекта не записал это поле в таком виде сразу в библиотеку, чтобы не пришлось править одно и то же в двух разных местах, решительно не понятно: либо по недосмотру, либо по злому умыслу, либо ничего в этом случае не работает.
Потому что этот кадр в других местах может использоваться не для динамического связывания. Например, в группе контуров.
fLegmatik wrote:
На самом деле я не поэтому начал подробное описание своих действий вплоть до щелчков мыши. Я надеюсь, что кто-нибудь оптимизирует эти записи, выкинув излишнее действия и добавив нехватающие, и включит эту инструкцию в пособие по (быстрому старту в) OpenSCADA. А то ведь по отдельным модулям документация подробная, а вот как связать их между собой переменными -- ни слова. Например, что означает столбец "конфигурационный шаблон" в таблице атрибутов на закладке Связи, я представляю крайне смутно.
Вам этого недостаточно? http://wiki.oscada.org.ua/Doc/VCAEngine?v=cxw#h668-12
А QuickStart планируется после версии 0.6.4, потому как некоторые вещи сейчас ещё дополняются.
Learn, learn and learn better than work, work and work.
|
Written on: 08. 06. 2009 [05:20]
|
fLegmatik
Азат Газизов
registered since: 19.02.2009
Posts: 16
|
fLegmatik wrote:
Шаг третий. Кажется, теперь можно закинуть свой виджет на страницу мнемосхемы. У этой страницы на закладке Связи появляется строка privod1.st_on, в которую мы прописываем адрес той самой булевой переменной, передаваемой по модбас (addr:/sub_DAQ/mod_ModBus/cntr_plc/prm_electro/a_privod1). Вот в чём была моя ошибка. Вместо addr:/sub_DAQ/mod_ModBus/cntr_plc/prm_electro/a_privod1 надо было выбрать prm:/ModBus/plc/electro/privod1 . Теперь желаемая цель достигнута, можно сказать, до внедрения остаётся всякая мелочёвка.
fLegmatik wrote:
Кстати, если кто-то решится взглянуть на проект. Я не могу понять, почему весь лог забивается строкой "4|/WorkStation/sub_UI/mod_VCAEngine/wlb_originals/wdg_Document/ | Ошибка исполнения инструкции: Ошибка компиляции: Ошибка символа, syntax error, unexpected ERR, pos: (1,8 )-(1,39)."
Окажу помощь в организации связи OpenSCADA <--modbus--> Овен ПЛК.
xmpp:ag@jabber.ufanet.ru
[Сообщение редактировалось 65535 раз(а), в последний раз 19.01.2038 в 03:14.]
|
|
|