Перенести VBA один в один не получится, т.к. сильно отличается как системная концепция, так и объектная модель.
Цитата:
VBA and the FactoryTalk View Object Model
Microsoft Visual Basic for Applications (VBA) is an integral part of both RSView32 and FactoryTalk View Site Edition. However, the way in which VBA is implemented, and the types of object models exposed, are signifi cantly different between the two products. Because of these differences, RSView32 VBA code does not migrate to FactoryTalk View SE, although VBA code that does not use the RSView32 object model can be copied and reused in FactoryTalk View SE.
RSView32 has a server-side object model. VBA code triggers actions that run on the server, and not on individual clients. The RSView32 object model supports creating, deleting, and modifying HMI tags, but does not offer any objects, properties, methods, or events for manipulating
graphic displays.
FactoryTalk View Site Edition uses a very different client-side object model. The purpose of the FactoryTalk View SE object model is to provide fl exible access to graphic display objects and to
make it easy to customize and manipulate graphic displays on individual client computers. VBA code, attached to an associated graphic display, triggers actions that run on the client computer and not on the HMI server. The FactoryTalk View SE object model supports reading and writing values from both directly referenced tags and HMI tags, but does not support creating, deleting, or modifying tags.
When a graphic display opens on an FactoryTalk View SE client computer, the VBA code executes independently on that client. For example, suppose the same graphic display is opened on two different client computers at the same time. When an operator on the first computer clicks a button on the display, the action causes the VBA code to run. The same display, open on another client computer, does not execute the VBA code until an event on that client triggers it.
Use VBA code to customize the behavior of graphic displays on individual client computers. To allow for independent, local user interaction on each client, replace memory tags and event expressions used in RSView32 graphic displays with VBA code in FactoryTalk View SE displays.
See the following link:
• 51770 - Sample VBA: Exercise in migrating an RSView32 application with VBA to FactoryTalk View SE.
ftalk-qr004_-en-p.pdf _________________ Обращайтесь к профессионалам.
В документе "FTViewSEUsers2_ru.pdf" стр.271 сказано:
Цитата:
События удаляются на сервере FactoryTalk View SE Server (также называемый
сервером HMI).
Слово "удаляются" надо понимать как "выполняются" (ошибка перевода)?
В том же месте, в документе "viewse-um006_-en-e.pdf" стр.629 я не вижу данной цитаты...
Судя по работе и предупреждениям в клиенте, к событиям можно привязывать только команды, выполняемые на сервере HMI ("FTViewSEUsers1_ru.pdf" стр.420)?
Т.е. я не могу вызвать дисплей, используя событийную модель на тегах HMI?
В документе "FTViewSEUsers2_ru.pdf" стр.271 сказано:
Цитата:
События удаляются на сервере FactoryTalk View SE Server (также называемый
сервером HMI).
Слово "удаляются" надо понимать как "выполняются" (ошибка перевода)?
Конечно - выполняются.
DIMIOKS писал(а):
Судя по работе и предупреждениям в клиенте, к событиям можно привязывать только команды, выполняемые на сервере HMI ("FTViewSEUsers1_ru.pdf" стр.420)?
Т.е. я не могу вызвать дисплей, используя событийную модель на тегах HMI?
Теоретически да. Но если сильно надо, тогда можно, только реши для себя какому клиенту нужно принудительно открыть окно.
Успешно решали: в проекте два полноценных клиента (два компьютера) и один клиент (ViewOnly) на сервере HMI, все в одном помещении, к серверу HMI подключен телевизор 55".
Заказчик: "Я можно ли на большом экране открывать другие экраны?"
Исполнитель (т.е. мы): "Можно, откройте шкаф с сервером и ...".
З: "Это неудобно, вот если бы..."
И: "Подумаем"
Сделали:
- на любом из клиентов открывается нужный экран - перемещается, масштабируется (разрешаем только для трендов).
- нажимается <CTRL>+<PageUP> - на 55" открывается активный экран клиента.
- при необходимости открытия нескольких экранов - действия повторить.
- <CTRL>+<PageDown> - закрывает все открытые таким образом экраны.
Задействовано:
- Event Detector
- VBA, на полноценных клиентах код одинаковый, на ViewOnLy отличается.
PS. Про VBA очень грубо и упрощенно:
RSView32: код принадлежит проекту, доступ к внутренностям проекта.
FT View SE: код принадлежит экрану, доступ к объектам экрана.
Но если сильно надо, тогда можно, только реши для себя какому клиенту нужно принудительно открыть окно.
У меня один клиент
dv_ писал(а):
Сделали:
- на любом из клиентов открывается нужный экран - перемещается, масштабируется (разрешаем только для трендов).
- нажимается <CTRL>+<PageUP> - на 55" открывается активный экран клиента.
- при необходимости открытия нескольких экранов - действия повторить.
- <CTRL>+<PageDown> - закрывает все открытые таким образом экраны.
Дисплей у меня должен открывать однозначно без участия оператора, только по изменению тега в контроллере, в любое время работы проекта.
dv_ писал(а):
Задействовано:
- Event Detector
- VBA, на полноценных клиентах код одинаковый, на ViewOnLy отличается.
Evet Detector имеется виду Logiс and Control\Events? Если да, то пока ещё не докопался...
dv_ писал(а):
FT View SE: код принадлежит экрану, доступ к объектам экрана.
Так то да, но через Application всё таки можно взять некоторую информацию о состоянии приложения и выполнить некоторые действия с дисплеями. While, DoEvents не отменили, так что через одно место всё таки можно имитировать подобие глобального кода. Зачем отменили стандартный StringList Приходится использовать динамические массивы
Но если сильно надо, тогда можно, только реши для себя какому клиенту нужно принудительно открыть окно.
У меня один клиент
Тогда тебе нужна FTView SE Station, но все равно это клиент - сервер.
DIMIOKS писал(а):
Evet Detector имеется виду Logiс and Control\Events?
Event Detector - тот же, что и в RSView32, но помни - исполняется сервером. Logiс and Control\Events может в v6.1 переименовали. Или Alarm&Event - в SE новое средство, мощнее, чем Alarm в 32-ом.. Рекомендую освоить.
DIMIOKS писал(а):
Дисплей у меня должен открывать однозначно без участия оператора, только по изменению тега в контроллере, в любое время работы проекта.
Т.е. надо принудительно в зависимости от ситуации открывать экран? Для Station это будет легче, т.к. не надо индентифицировать клиента, от которого пришла команда, но суть не меняется (клиент - сервер).
Такое великолепно делается в ME - штатное средство.
В SE (твой случай - один клиент) - сделай экран, который загружается без отображения (ключи загрузки как и в 32-м). На этом экране сделай отображение нужного тега контроллера и в VBA контролируй его изменение - легче, чем привязываться к тегу из памяти.
Если есть экран, который открыт всегда, тогда этот тег можно разместить на нем и поставить атрибут невидимости...
Так то да, но через Application всё таки можно взять некоторую информацию о состоянии приложения и выполнить некоторые действия с дисплеями. While, DoEvents не отменили, так что через одно место всё таки можно имитировать подобие глобального кода. Зачем отменили стандартный StringList Приходится использовать динамические массивы
Не берусь отвечать, т.к. я большой противник использования VBA.
Event Detector - тот же, что и в RSView32, но помни - исполняется сервером. Logiс and Control\Events может в v6.1 переименовали. Или Alarm&Event - в SE новое средство, мощнее, чем Alarm в 32-ом.. Рекомендую освоить.
Извиняюсь за настойчивость, но мы уже голову сломали, интерпретируя слова Event Detector, тем более, что...
dv_ писал(а):
Event Detector - тот же, что и в RSView32
Мы много лет работаем на RSView32, но, к нашему стыду, никто из нас не может ответить на этот вопрос - что такое Event Detector
В RSView32, так же как и в FTView SE 6.1 для создания моделей (компонентов) событий используется редактор Events, который вызывается из эксплорера по дереву:
-Logic And Control
--Events
В SE (твой случай - один клиент) - сделай экран, который загружается без отображения (ключи загрузки как и в 32-м). На этом экране сделай отображение нужного тега контроллера и в VBA контролируй его изменение - легче, чем привязываться к тегу из памяти.
Если есть экран, который открыт всегда, тогда этот тег можно разместить на нем и поставить атрибут невидимости...
А разве не проще объявить тот же тег как событийный на VBA и дальше уже обрабатывать событие. Я только что проверил - работает норм...
Кстати, их хелпа:
Цитата:
Optional. Keyword that specifies that varname is an object variable used to respond to events triggered by an ActiveX object. WithEvents is valid only in class modules. You can declare as many individual variables as you like using WithEvents, but you can't create arrays with WithEvents. You can't use New with WithEvents.
На самом деле объявлять, инициализировать и обрабатывать событие можно не только в class modules, но и в ThisDisplay - работает.
В RSView32, так же как и в FTView SE 6.1 для создания моделей (компонентов) событий используется редактор Events, который вызывается из эксплорера по дереву:
-Logic And Control
--Events
Что такое Event Detector?
Он самый. Термины, которыми я пользуюсь из далекого прошлого, но от Rockwell.
DIMIOKS писал(а):
А разве не проще объявить тот же тег как событийный на VBA и дальше уже обрабатывать событие. Я только что проверил - работает норм...
Можно, но в моем случае меньше кода VBA. , т.к. нет кода для подключения тега.
Попробуй - выбери любой объект на экране и по правой кнопке мышки выбери VBA Code - понравится, но имей ввиду можешь наплодить пустышек типа:
Он самый. Термины, которыми я пользуюсь из далекого прошлого, но от Rockwell.
Ок Согласованность в терминологии - основа взаимопонимания.
dv_ писал(а):
Можно, но в моем случае меньше кода VBA.
Никто не любит VBA. Но когда нет выбора, я пользуюсь тем инструментом, который есть.
dv_ писал(а):
, т.к. нет кода для подключения тега.
Тут не понял. В VBA безусловно можно использовать теги и работать с ними. Причём, как выяснилось, время выполнения процедуры (грубо - через GeyTickCount) с одним и тем же кол-вом тегов, привязанных к устройству, выполняется на порядок быстрее, чем в RSView32, и это радует.
dv_ писал(а):
Попробуй - выбери любой объект на экране и по правой кнопке мышки выбери VBA Code - понравится, но имей ввиду можешь наплодить пустышек типа:
Код:
Private Sub Group239_Click()
End Sub
Ну, такую мелочь мы увидели в первый же час после открытия FTView SE, на первом созданным для ознакомления с ПО дисплее.
Тут не понял. В VBA безусловно можно использовать теги и работать с ними. ...
Мне нет необходимости обрабатывать кучу тегов в VBA, т.к. хватает штатных средств. Если есть необходимость использования какого-либо тега, например для действия на клиенте, тогда отображаю этот тег на экране (большей частью с атрибутом невидимости) и в VBA использую объект экрана связанный с этим тегом.
Мне нет необходимости обрабатывать кучу тегов в VBA, т.к. хватает штатных средств. Если есть необходимость использования какого-либо тега, например для действия на клиенте, тогда отображаю этот тег на экране (большей частью с атрибутом невидимости) и в VBA использую объект экрана связанный с этим тегом.
Тут нельзя не согласиться. Если брать чисто обработку события изменения объекта, то просто NumericDisplay_Change и NumericDisplay.Value, возможно, выполнят свою задачи при меньшем количестве кода VBA, причем не только в невидимости, но и перекрытые другими дисплеями.
...возможно, выполнят свою задачи при меньшем количестве кода VBA, причем не только в невидимости, но и перекрытые другими дисплеями.
Перекрытие другими не важно, важнее чтобы нужный экран был открыт. Под невидимостью я имел ввиду - невидимость объекта, например: служебный тег (персонал даже не подозревает о его существовании) на всегда открытом экране.
Перекрытие другими не важно, важнее чтобы нужный экран был открыт.
То, что экран с исполняемым кодом должен быть открыт и так ясно.
Но критически важно именно выполнение кода при перекрытии другими дисплеями, т.к. позволяет один раз прописать события, др. код, работу с БД и др. И не копировать постоянно изменения на каждый дисплей, где они нужны, при разработке и отладке проекта. Пока это не выяснилось, вопрос стоял уже о выборе SCADa...
dv_ писал(а):
Под невидимостью я имел ввиду - невидимость объекта, например: служебный тег (персонал даже не подозревает о его существовании) на всегда открытом экране.
Под "невидимостью" я понимаю свойство только визуальных компонентов, которые имеют методы прорисовки. Для класса, не имеющего таких методов, понятие "невидимость" бессмысленно изначально. Проще ведь сказать: "я работаю с событием компонента ххх, к которому привязан тег". И тогда понятно станет любому новичку. А уж какие свойства объекта - видимый ли он, какого размера и цвета, на каких координатах расположен - дело десятое.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
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.165 секунды