Предыдущие результаты
Здравствуйте, ув. спецы и простые смертные. :)
Проблема следующая.
Имеем RSview32 7.20, WinXP sp2.
В проекте используются процедуры VBA и некоторые запускаются периодически (раз в 2 минуты) и выполняются по времени 2-3 секунды.
Столкнулся с тем, что если при запущенном в runtime проекте нажать на клавиатуре ESC, вываливается сообщение
[b:c22c47bb1d]VBA code has been halted. Reason: User interrupt [/b:c22c47bb1d]
и кнопки Continue, End, Debug, Help.
При нажимании на Continue выполнение VBA продолжается без никаких проблем. Debug высвечивает текущую позицию в коде, где он был прерван. Help говорит, что при нажимании на Ctrl+Break (Windows) и Esc (в Excel) действует как брейкпоинт для VBA.
Но я то нажимаю ESC, а не Ctrl+Break, и не в Excel, а в RSView на любой картинке в рантайме, или даже в блокноте (notepad) при свернутом RSView! :evil:
Кто сталкивался и как с этой заразой бороться, плз
А вы всё работаете?
:D
[quote:142c418a29="FilmFilmFillm"]...Да и красивее будет когда кнопки обрабатываются(будет значит защита от дурака).
можно примерчиком кинуть в меня?[/quote:142c418a29]
В RSView32 есть функция [b:142c418a29]currentuserhascode( )[/b:142c418a29],
результат которой применяй к кнопке, например на видимость или
невидимость.
Нет кнопки - нет проблемы.
[quote:58f1e16c2f]иначе, у мну заходит по пользователем default.[/quote:58f1e16c2f]
Ну и что? оставьте пользователю с именем default только те права, на которые он должен иметь право.
Если хотите - можете написать после входа на стартовом экране, что "Вы зашли как пользователь по умолчанию (default) и имеет право только на то-то и то-то".
Пример - если будет побольше времени, то напишу.
[quote:5f4adaba2a="oldDad"]
А зачем обрабатывать кнопки?[/quote:5f4adaba2a]
потому что иначе, у мну заходит по пользователем default.
Да и красивее будет когда кнопки обрабатываются(будет значит защита от дурака).
можно примерчиком кинуть в меня?
В процессоре есть теги (может поможет)
@Mode
@ProcessorName
@Revision
и т.д.
Но каждый ест при передаче по одному конекшену.
А вообще правилом хорошего тона считается днлать экран состояния КТС, на котором отображается исправность каждого составляющего вашей системы.
Тогда версии сравнивать не нужно - сразу видно где косяк.
Используется RSView32 7.20. На объекте работают 3 равноправные операторские станции, связь по Ethernet. Проект на всех станциях работает один и тот же, только конфигурация Nod'ов в зависимости от конкретной станции меняется. А Нодов сконфигуривано везде 6:
3 Нода для каждой станции - (RSview OPC Tag Server, remote)
и еще три нода для OPC-сервера собственного производства, который на каждой станции связывается с определенными девайсами, тоже remote. Потом на каждой станции (локальной) убирается галочка с Enable в Нодах для RSview OPC Tag Server и OPC-сервер для девайсов делается не remote, а local. По рсвьюшному OPC передаются некоторые внутренние теги (memory), ну а по второму - теги с девайсов.
Проблема в том, что если на какой-то станции перезапускается RSView, или мой OPC-сервер, то на остальных станциях ее данные не подхватываются, они как бы "замораживаюся", (на экранах показыватся последнее значение, которое было до перезапуска).
Я посмотрел в Tag Monitor'е, в момент, когда теряется связь с одной из удаленных станций, статус ее тегов становится "Error".
Поэтому решил обработать эту ситуацию так. Через скрипт VBA регистрирую событие _StatusCommErr для коллекции тегов (пары внутренних тегов с каждой станции и еще пары тегов с девайсов) и по этому событию делаю нехитрую процедуру: деактивирую и тут же активирую соответствующий Node. И все.
Я проверял: если вручную убрать и поставить галку Enable в Node Editor для Node той станции, которая перезапустилась и не подхватывается - через пару секунд значения начинают нормально передаваться. Даже кнопки такие поделал на одном экране с командами "NodeDisable Node1; NodeEnable Node1" как временную меру на случай потери связи. Теперь захотел сделать это в автомате через скрипт, но не выходит: при потере связи теги в Tag Monitor переходят в состояние "error", но процедура моя не активируется почему-то. Как будто не было события StatusCommErr. Текст процедуры привожу ниже:
[code:1:67bf376e44]
Private Sub tConn_Monitor_StatusCommErr(ByVal CommErrTags As RSView32.Tags)
Dim ComErrTag As Tag
For Each ComErrTag In CommErrTags
If gNodes(ComErrTag.NodeName).Enabled = True Then
gNodes(ComErrTag.NodeName).Enabled = False
gNodes(ComErrTag.NodeName).WriteConfiguration
End If
gNodes(ComErrTag.NodeName).Enabled = True
gNodes(ComErrTag.NodeName).WriteConfiguration
Next
End Sub
[/code:1:67bf376e44]
[i:67bf376e44]tConn_Monitor[/i:67bf376e44] - это коллекция тегов, для которых проверяется состояние связи.
В макрос, который выполняется при запуске проекта, добавил строчку:
[code:1:67bf376e44]VbaExec ConnMonitorInit[/code:1:67bf376e44]
где ConnMonitorInit - процедура, в которой инициализируется коллекция тегов tConn_Monitor:
[code:1:67bf376e44]Sub ConnMonitorInit()
Dim Tgs As Variant
Dim Tg As Variant
Dim tTags As Tags
Set tTags = New Tags
Tgs = Array("NSMV1\PC_01\Ch_01", "NSMV2\PC_01\Ch_01","NSMV3\PC_01\Ch_01", _
"NSMV1\R_1", "NSMV2\R_1", "NSMV3\R_1")
For Each Tg In Tgs
tTags.Add gTagDb.GetTag(Tg)
Next
Set tConn_Monitor = tTags
End Sub
[/code:1:67bf376e44]
Коллекция tConn_Monitor объявлена в разделе Declarations->General так:
[code:1:67bf376e44]Private WithEvents tConn_Monitor As Tags[/code:1:67bf376e44]
Что я делаю неправильно?
[quote:6c65af5ab2="DIMIOKS"]Добрый вечер всем!
Самый простейший способ увидеть значение тега в Exel:
1. Создаем топик
2. Открываем в Linx Edit - Copy DDE/OPC Link - указываем необходимый тег в контроллере.
3. Открываем Exel. В свободную ячейку делаем: Правка - Специальная вставка - указываем "связать" - "текст".
4.С чуством глубочайшего удовлетворения наблюдаем значение тега :D
Только что проверял на Емуляторе - работает.
Как сделать обратное (занести какое - либо значение в тег) таким же простым способом - еще не знаю :D :D :D[/quote:6c65af5ab2]
Если бы всё так было просто: теперь попрубуй передать таким образом свойства карты( серийник, номер фирмвари...)
Добрый вечер всем!
Самый простейший способ увидеть значение тега в Exel:
1. Создаем топик
2. Открываем в Linx Edit - Copy DDE/OPC Link - указываем необходимый тег в контроллере.
3. Открываем Exel. В свободную ячейку делаем: Правка - Специальная вставка - указываем "связать" - "текст".
4.С чуством глубочайшего удовлетворения наблюдаем значение тега :D
Только что проверял на Емуляторе - работает.
Как сделать обратное (занести какое - либо значение в тег) таким же простым способом - еще не знаю :D :D :D
нашел вот такую информацию, только где бы взять такой CD-ROM?
RSTestStand Lite v1.00.04 is included on the RSEmulate 5000 CD-ROM
может знает кто где можно скачать в нете RSTestStand Lite ?
очень интересует его способности и возможность применения в учебном процессе..
Предыдущие результаты Ещё результаты