Вход на форум 
В начало e-Mail

Форум

Ресурсы Rockwell

Product Directory

Essential Components

Literature Library

Knowledge Base

Electronic News&Magazines

Блог

Encompass Program

Product Certification

  
Smart Solutions VDT :: Просмотр темы - Использование VBA в RSView32
 FAQFAQ   ПоискПоиск   ГруппыГруппы   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Использование VBA в RSView32

 
Начать новую тему   Ответить на тему    Список форумов Smart Solutions VDT -> Программные средства систем автоматизации
Предыдущая тема :: Следующая тема  
Автор Сообщение
KPY
Частый гость
Частый гость


Зарегистрирован: Dec 22, 2005
Сообщения: 24
Рейтинг: +0/-0
Откуда: Казахстан

СообщениеДобавлено: Вт 14 Мар, 2006 8:01:22    Заголовок сообщения: Использование VBA в RSView32 Ответить с цитатой

Уважаемые знатоки RSView32. Подскажите пожалуйста как решить данную задачу.
На мнемосхеме есть две кнопки Старт и Стоп которые запускают/останавливают заполнение емкости. Свойство Visible кнопок завязано на тег Control_Filling_Tank. Тег дискретный (связан с тегом контроллера) по истинному значению которого начинается заполнение емкости (включается контур упрвления). Но для включения контура управления необходимо чтобы емкость была нагрета, насосы работали и т.д., то есть необходимо выполнять проверку опреде-ленных условий. Если хоть одно из условий не выполняется об этом нужно сообщить операто-ру. Проверку я сделал при помощи VBA следующим образом:
Код:
Sub Start_Fiiling_Tank()
    Tank_is_Hot = Application.ActiveProject.TagDb.GetTag("Status\Tank_is_Hot")
    Pump_OK = Application.ActiveProject.TagDb.GetTag("Status\Pump_OK")
    Dim Temp_Str As Tag
    Set Temp_Str = Application.ActiveProject.TagDb("Control\Error_Action")
    Dim Command_Control As Tag
    Set Command_Control = Application.ActiveProject.TagDb("Control\Supply_water_to_Tank")
        If Tank_is_Hot = 0 Then
        Temp_Str = "Емкость не нагрета!"
        Application.ActiveProject.Command.Execute "Display popup_banan /T Control\Error_Action /cc"
    ElseIf Pump_OK = 0 Then
        Temp_Str = "Нет готовности насосов"
        Application.ActiveProject.Command.Execute "Display popup_banan /T Control\Error_Action /cc"
    Else
        Command_Control = 1
    End If
End Sub

Процедуру написал для примера, реально каждая процедура обрабатывает большее ко-личество условий. Вызывается она при нажатии на кнопку старт.
Все это дело реально выливается в то, что при нажатии на кнопку старт, кнопка не исче-зает сразу как бы хотелось (пока процедура зачитает статусные теги, пока пропишет значение в тег контроллера, пока зачитается новое значение и изменится свойство Visible ). Это дает воз-можность нажать на кнопку еще раза 3-4 что иногда приводит к ошибкам бейсика.
1. Велосипед изобрел?
2. Как бы так извратиться и в обработчике нажатия кнопки написать что-то типа
If Status\Tank_is_Hot = =1 then Control\Supply_water_to_Tank=1 else Display Блаблабла
3. Можно ли как-то асинхронно, что ли, получать значения тегов в процедурах VBA. Уж очень он тормозит, если надо зачитать 5-6 статусных тегов и выдать пару управляющих команд.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
oldDad
Site Admin
Site Admin


Зарегистрирован: May 05, 2005
Сообщения: 2773
Рейтинг: +89/-5

СообщениеДобавлено: Вт 14 Мар, 2006 8:51:36    Заголовок сообщения: Ответить с цитатой

Чё-то как бы сложно всё Smile

Я бы вот что сделал:

1. На кнопку надето Visibility, связанное с дискретным тэгом в контроллере, имеющим смысл команды: "Начать процесс проверки условий и после их успешной проверки запустить процесс".

2. Как только кнопку нажали, тэг установили (немедленно!) и кнопка исчезла с экрана.

3. Оператор уже ни на что не нажмёт, т.к. кнопки нет, а можно пока что помигать надписью "Подождите, команда выполняется".

4. Процессор спокойно проверяет все условия и в зависимости от результата появляется табличка "Всё в порядке, всё ОК, дорогой товарищ оператор, ванна наполняется тёплой водой" или, если условие/я не соблюдаются, соответственно, надпись "Вот это условие не выполняется". И тогда сбросить тэг команды. Появится кнопка.

5. В контроллере добавить проверку: "Если кнопка была нажата (была команда "Старт") и проверены условия, и процесс ещё не пошёл " - запомнить это событие и запустить процесс. Сброс - по окончании процесса.
_________________
Обращайтесь к профессионалам.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
KPY
Частый гость
Частый гость


Зарегистрирован: Dec 22, 2005
Сообщения: 24
Рейтинг: +0/-0
Откуда: Казахстан

СообщениеДобавлено: Ср 15 Мар, 2006 6:24:43    Заголовок сообщения: Ответить с цитатой

oldDad
Чё-то как бы сложно всё
Да уж. Незнание компенсированное фантазией Very Happy
Спасибо за советы, рекомендации учту, будет возможность все переделаю к чертям Shocked
Подкину еще вопросик? Можно ли каким-либо образом вызывать процедуру VBA которой в качесвте параметра передавать значение тега. Сколько не бьюсь не получается.
Уже как только не изголялся, при вызове процедуры передается только имя тега. Например при выполнении VBAExec SuperPuper tag1,tag2 в процедуру передается "tag1" а не его значение. Кавычки, скобки и т.д. не помогают.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
oldDad
Site Admin
Site Admin


Зарегистрирован: May 05, 2005
Сообщения: 2773
Рейтинг: +89/-5

СообщениеДобавлено: Ср 15 Мар, 2006 9:29:19    Заголовок сообщения: Ответить с цитатой

Но ведь можно, наверное, прочесть тэг прямо в процедуре, а не передавать его имя в вызове?

Вообще, VBAExec позволяет при вызове указывать параметры, количество и спецификации которых определяются процедурой.
_________________
Обращайтесь к профессионалам.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Даниил
Частый гость
Частый гость


Зарегистрирован: Jan 26, 2006
Сообщения: 25
Рейтинг: +0/-0
Откуда: Донецк

СообщениеДобавлено: Ср 15 Мар, 2006 10:27:18    Заголовок сообщения: Ответить с цитатой

Уважаемый Павел, а чем Вас не устраивает имя тега Wink :

Код:

В данном примере тегу присваивается среднее значение трех других тегов. Для выполнения сценария и записи среднего трех тегов с именами Scale1, Scale2 и Scale3, в тег с именем AvgWeight, выполните следующую команду: VbaExec Average AvgWeight, Scale1, Scale2, Scale3.

Sub Average(sAvgTag As String, sTag1 As String, sTag2 As String, sTag3 As String)
   On Error Resume Next
   Dim fAverage As Single
   'Вычисление среднего
   fAverage = (gTagDb.GetTag(sTag1).Value + gTagDb.GetTag(sTag2).Value + gTagDb.GetTag(sTag3).Value) / 3
   'Запись среднего в тег
   gTagDb.GetTag(sAvgTag).Value = fAverage
End Sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
KPY
Частый гость
Частый гость


Зарегистрирован: Dec 22, 2005
Сообщения: 24
Рейтинг: +0/-0
Откуда: Казахстан

СообщениеДобавлено: Чт 16 Мар, 2006 13:47:19    Заголовок сообщения: Ответить с цитатой

Еще раз СПАСИБО господа, за участие!
Даниил

Уважаемый Павел, а чем Вас не устраивает имя тега
Устраивает в принципе, на данный момент процедуры работают именно таким образом. Просто когда у меня в VBA вылетает ошибка, брекпоинт всегда указвает именно на строку с оператором Tank_is_Hot = Application.ActiveProject.TagDb.GetTag("Status\Tank_is_Hot") вот я и захотел попробовать передавать значение тега. На нет и суда нет. Оставлю все как есть.

oldDad
Вообще, VBAExec позволяет при вызове указывать параметры, количество и спецификации которых определяются процедурой.
Целиком и полностью с Вами согласен, проблема в моем случае как раз не с VBA, а с RSView, потому как процедура вызывается из последней.(полагаю RSView женского рода Smile )
Сегодня попробовал сделать управление Visible кнопок отдельным тегом не связанным с тегом контроллера. Все работает "мухой" как и мечталось, но тут появились другие "грабли". "Машин" с которых у меня может выполняться управление процессом несколько, соответственно нужна процедура синхронизации видимости кнопок, которая должна быть завязана на "глобальные" теги. Получилось с чем боролся на то и напоролся. Confused
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Даниил
Частый гость
Частый гость


Зарегистрирован: Jan 26, 2006
Сообщения: 25
Рейтинг: +0/-0
Откуда: Донецк

СообщениеДобавлено: Чт 16 Мар, 2006 14:22:30    Заголовок сообщения: Ответить с цитатой

KPY писал(а):
Просто когда у меня в VBA вылетает ошибка, брекпоинт всегда указвает именно на строку с оператором Tank_is_Hot = Application.ActiveProject.TagDb.GetTag("Status\Tank_is_Hot") вот я и захотел попробовать передавать значение тега.


А что за ошибка? Может быть для нее можно написать обработчик?!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
oldDad
Site Admin
Site Admin


Зарегистрирован: May 05, 2005
Сообщения: 2773
Рейтинг: +89/-5

СообщениеДобавлено: Чт 16 Мар, 2006 14:48:35    Заголовок сообщения: Ответить с цитатой

Цитата:
oldDad
Вообще, VBAExec позволяет при вызове указывать параметры, количество и спецификации которых определяются процедурой.
Целиком и полностью с Вами согласен, проблема в моем случае как раз не с VBA, а с RSView, потому как процедура вызывается из последней.(полагаю RSView женского рода Smile


Думаю, женского всё-таки Smile

Командной строке вызова RSView, в принципе, всё равно, что за параметры Вы передаёте в скрипт VBA. Она просто передаёт параметры в процедуру, обеспечивает интерфейс, не разбираясь в семантике. Смысл и формат параметров - это в процедуре VBA.


Цитата:
Сегодня попробовал сделать управление Visible кнопок отдельным тегом не связанным с тегом контроллера. Все работает "мухой" как и мечталось, но тут появились другие "грабли". "Машин" с которых у меня может выполняться управление процессом несколько, соответственно нужна процедура синхронизации видимости кнопок, которая должна быть завязана на "глобальные" теги. Получилось с чем боролся на то и напоролся.


Сейчас разберёмся Smile

Я имел в виду, что тэг видимости кнопки (кнопок) находится не в RSView, а в контроллере, т.е. является как раз глобальным для всех машин Smile

1. Тэг, по которому кнопка видна, находится в контроллере, так?
2. Каждая RSView на каждой машине "смотрит" на этот тэг, так?
3. Если ни на одной из машин кнопки не нажаты, то на всех машинах кнопки видны, так?
4. Если на одной машине нажать на кнопку, то тэг в контроллере перекидыается и все кнопки на всех машинах больше не видны, так?

Правильно?
_________________
Обращайтесь к профессионалам.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
KPY
Частый гость
Частый гость


Зарегистрирован: Dec 22, 2005
Сообщения: 24
Рейтинг: +0/-0
Откуда: Казахстан

СообщениеДобавлено: Пт 24 Мар, 2006 6:08:12    Заголовок сообщения: Ответить с цитатой

oldDad писал(а):
1. Тэг, по которому кнопка видна, находится в контроллере, так?
2. Каждая RSView на каждой машине "смотрит" на этот тэг, так?
3. Если ни на одной из машин кнопки не нажаты, то на всех машинах кнопки видны, так?
4. Если на одной машине нажать на кнопку, то тэг в контроллере перекидыается и все кнопки на всех машинах больше не видны, так?

4 Да Smile
Извиняюсь я за то, что мозги вам пудрю, похоже у меня проблема не с VBA а с проектом в целом. Отписал в другой ветке, думаю тут связь прямая. Как только обмен по сети наладится, кнопки будут пропадать своевременно.
Даниил писал(а):
А что за ошибка? Может быть для нее можно написать обработчик?!

Ошибка: Run-time error 4170. COM: Unspecifed Error
Если я сейчас еще обработчики начну городить, ужас чё будет Shocked
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
oldDad
Site Admin
Site Admin


Зарегистрирован: May 05, 2005
Сообщения: 2773
Рейтинг: +89/-5

СообщениеДобавлено: Пт 24 Мар, 2006 12:58:16    Заголовок сообщения: Ответить с цитатой

Хорошая ошибка Smile Главное, никакого отношения к RockSoft не имеет Smile Smile
_________________
Обращайтесь к профессионалам.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Smart Solutions VDT -> Программные средства систем автоматизации Часовой пояс: GMT + 1
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах

Powered by phpBB © 2001, 2005 phpBB Group
Яндекс цитирования

Smart Solutions VDT GmbH | Friedrich-List-Allee 38, D-41844 Wegberg-Wildenrath, Germany
Tel.: +49 2432 933 57 83 | e-Mail: office@vdt-solutions.de
Все товарные знаки и торговые марки являются собственностью их владельцев.
При использовании материалов сайта ссылка на данный сайт обязательна.
Открытие страницы: 0.160 секунды
/n