 | |
Предыдущие результаты
oldDad,
Спасибо за советы и внимание.
[quote:73cd452d6f]Начать с того, что три станции RSView32 работают в одном сегменте. Уж сколько раз твердили миру, что такие конфигурации не работают или работают медленно или плохо, однако...[/quote:73cd452d6f]
Можно поподробнее, или ссылочку, а то первый раз о таком слышу :oops:
Станции эти работают в одном домене, а насчет сегмента, - и не скажу точно, может и в разных. Я сейчас не на объекте, а на память не помню.
[quote:73cd452d6f]Вы же не написали, какую операцонную систему Вы используете, с каким сервис-паком, и какие версии софта. Может причина кроется вообще в несовместимости версии СPR и версии Windows.[/quote:73cd452d6f]
Система стоит на всех станциях Windows XP Pro RUS SP2
Что такое CPR?
RSView как я писал выше - RSView32 7.20 на 5 тыс тегов
[quote:73cd452d6f]Далее, мне никогда не приходило в голову передавать memory-тэги (!) из одной станции RSView в другую. (!).
[/quote:73cd452d6f]
В memory-тэги на каждой станции записывается режим работы насосов (строковая переменная) методом ручного ввода. Этти значения периодически скриптом сохраняются во временные переменные в качестве их значения по умолчанию. И в случае презагрузки проекта или компьютера восстанавливаются при старте проекта из этих значений по умолчанию.
На объекте нет нормальных контроллеров как класса вообще. В целях экономии завод приобрел преобразователи 12-канальные цифровые (ПЦ-12р), каждый из которых собирает данные по 12 каналам, преобразует их и индицирует на своем экранчике. Еще предоставляет доступ к этим данным по RS-485 по протоколу MTM-MODBUS (урезанный MODBUS RTU). Возможно только считывание данных, записывать ничего нельзя.
А вопрос я задавал в основном для того чтобы узнать, работал ли кто реально с событиями для тегов, в частности с _StatusCommErr? Работают ли (отлавливаются нормально) эти события и можно ли их использовать в скрипте VBA для контроля состояния связи?
|
Подскажите плиз, как сделать парольный вход в проект.
в system\user accounts логин и пароль завёл.
есть две формы:
1)formLogin
2)formMain
Можно повесить комманду logins на какое либо события. тогда откроется диалоговое окно где предлагается забить логин и пароль(данные эти сверяются с system\user accounts. но не знаю как обработать кнопку cansel и не правильно заведённый пароль в этом окне:(
Пробовал второй вариант:
открываем форму formLogin, кидаем туда два инпутбокса(для логина и пароля) и кидаем кнопку. опять не могу придумать как значения инпутбоксов связать с tag-ами и уже потом их сравнить со значениями system\user account.
Подскажите, как можно решить столь простую задачу.
|
Используется 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:abad81789c="Dvoeglazov"]Не сочтите за рекламу.
http://www.natahaus.ru/2005/11/01/cifrovye_sistemy_upravleniya_.html
Сам скачал почитать, а вдруг чго-нибудь новенькое узнаю.[/quote:abad81789c]
Спасибо за ссылочку - посмотрю, может что либо и придумаю.. =)
|
[quote:d7c3343a7a="terminator2204"]мне нужно ActiveX объекту передать дату типа string YYYY/MM/DD[/quote:d7c3343a7a]
Если ActiveX делается на VB, тогда все достаточно просто:
- в ActiveX передаем "system\DateAndTimeInteger"
- запрашиваем у Windows информацию о времени
("GetTimeZoneInformation")
- используем в VB функцию "DateAdd", помня
что "system\DateAndTimeInteger" количество секунд от
1 января 1970 года по Гринвичу.
Все!
ActiveX имеет дату в формате VB, т.е. "Date",
применимо и к тегам времени в управлении нативными трендами.
|
мне нужно ActiveX объекту передать дату типа string YYYY/MM/DD
|
[quote:4bba8c349f]Вообще мне нужно взять текущую дату в формате строки YYYY/MM/DD.[/quote:4bba8c349f]
Покажите на экране аналоговые тэги system\Year, system\Month, system\Day через слэш.
|
Не сочтите за рекламу.
http://www.natahaus.ru/2005/11/01/cifrovye_sistemy_upravleniya_.html
Сам скачал почитать, а вдруг чго-нибудь новенькое узнаю.
|
[quote:c724eaf736]какие функции для сложения строк существуют[/quote:c724eaf736]
Просто сложите в поле Expression оба string-тэга знаком [size=24:c724eaf736]+[/size:c724eaf736]
|
[quote:dd8e7ad7e5]На RSView32 V6.30.16 под NT 4.0 записывать в "system\Hour" и "system\Minute не позволялось, а через слайдеры прошибало...
Обнаружилось случайно, вместо горизонтальной позиции поставил слайдер... [/quote:dd8e7ad7e5]
Сейчас спокойно в твоём проекте HiHi изменил системное время простым вводом в numeric input.
Прислать? :)
|
Предыдущие результаты
Ещё результаты |
|
| |
|