 | |
Предыдущие результаты
Старая система, Windows NT 4 SP6, RSView32 6.30.
Новая, Windows 2000 SP3, RSView32 6.30.
Проблема: При переносе проекта с НТ на 2000 перестал работать нижеприведенный кусок кода VBA (а именно строка" Set m_Database = m_Workspace.OpenDatabase(m_DBFileName)"). Все предложения инженеров Rockwell Automftion Moscow по настройке ODBC выполнены, результат нулевой, т.е. по НТ все работает на ура, под 2000 - нет.
Sub InitializeDB()
On Error Resume Next
' specify path and name of Access database
m_DBFileName = gProject.Path & "\Language.MDB"
On Error GoTo DBErrorHandler ' Enable error trapping.
'Create workspace
Set m_Workspace = Workspaces(0)
'Open database
Set m_Database = m_Workspace.OpenDatabase(m_DBFileName)
On Error GoTo DBTableErrorHandler
'Open table, and query for all records in Language table
Set m_Language_Table = m_Database.OpenRecordset("LANGUAGE", dbOpenDynaset)
Exit Sub
'Error handler for database open
DBErrorHandler:
MsgBox "Can't open database " & m_DBFileName, vbExclamation
Exit Sub
'Error handler for table query
DBTableErrorHandler:
MsgBox "Can't open LANGUAGE table", vbExclamation
Exit Sub
End Sub
|
Попробовал мониторить состояние связи не через VBA и события тегов, а через встроенную функцию RSView [b:fe6cd228b2]comm_err(tagname).[/b:fe6cd228b2]
При нарушении связи (тупо выдергиванием шнурка Ethernet или остановкой проекта на удаленной станции) значение [b:fe6cd228b2]comm_err(memory_тег)[/b:fe6cd228b2] переходит из 0 в 1.
А когда связь появляется, состояние тега так и остается [i:fe6cd228b2]Error[/i:fe6cd228b2] и [b:fe6cd228b2]comm_err(memory_тег)[/b:fe6cd228b2] тоже как было равно 1, так и остается 1.
То есть тут проблема не в событии _StatusCommErr, а вообще в механизме, которым RSView восстанавливает связь при ее потере.
|
Используется 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:99c51288ed]А в RSView если связи нету то вид объектов не изменяется...[/quote:99c51288ed]
Верно только для случая, когда к этому объекту не привязан тег устройства.
[quote:99c51288ed]Для диагностики можно, например, назначить какие-нибудь действия (Event), основываясь на бите коммуникаций
system\ComErrorValue1 или system\ComErrorValueOPC [/quote:99c51288ed]
Не удачный совет, контроллеров может быть более одного...
В RSView32 есть замечательная функция - "comm_err(TagName)".
Еще RSLinx имеет "DDE/OPC predefined items", некоторые из них:
[list:99c51288ed] - @Mode returns the current mode of the processor as a string (Run, Program, Remote Run, or Remote Program).
- @Status returns the current status of the processor as a string (Ok or Faulted).
- @StatusNumber returns the current status of the processor as a number.
- @IsPresent allows you to check if your ControlLogix processor is available prior to performing reads or writes.
[/list:u:99c51288ed]
|
[color=blue:b38a344b21]system\ComErrorValue1 или system\ComErrorValueOPC
где можно найти описание значений принимаемых тегами.
Мне важно узнать когда отвалился контроллер, какое значение принимают теги?[/color:b38a344b21]
Пробовал методом тыка, получается, что эти теги хранят последнее значение ошибки, произошедшей со связью. При пропадании связи в проекте, состоящем из одного экрана и одного тега, вываливается код ошибки 120 для system\ComErrorValueOPC, а сообщение system\ComErrorStringOPC '(RSLinx OPC Server) Server: Bad quality'. Восстанавливаю связь, эти значения так и висят.
Если остановить RSLinx, то после его автостарта будет код 22 с сообщением '(RSLinx OPC Server) Client: OPC Server has unexpectedly disconnected'.
Для канала не пробовал, но думаю мой метод сработает :)
Может, конечно, я ничего нового не открыл, но просто сам я уже с этим махался, в итоге забил на эти коды.
Нигде не встречал подробное описание этих тегов, хотелось бы его почитать. Пока тока помогает работа с полигоном.
С уважением,
Vitaliy D. Burtsev
|
system\ComErrorValue1 или system\ComErrorValueOPC
где можно найти описание значений принимаемых тегами.
Мне важно узнать когда отвалился контроллер, какое значение принимают теги?
|
Для контроля связи можно использовать следующие штатные средства RSView:
[quote:8971ebbe40][b:8971ebbe40]Monitoring communications[/b:8971ebbe40]
Use any of the following methods to monitor communications:
- Activities—In the Activity Log Setup editor, ensure
communication errors, warnings, and remarks are enabled and are
set up to log to the log file and activity bar. At runtime,
information appears in the log file and activity bar, indicating any
problems.
- Communication status—Ensure communication status is turned
on, otherwise communication errors will not be logged to the
activity log file or activity bar (even if they have been configured to
do so in the Activity Log Setup editor). By default, communication
status is turned off until you run the project. To turn
communication status on, use the [b:8971ebbe40]ComStatusOn[/b:8971ebbe40] command.
- Tag monitor—Use the tag monitor to check the communication
status for a device tag.
The states are:
- Disabled if the node has been disabled in the Node editor or
disabled using the NodeDisable command
- Error if RSView32 has tried to acquire a value but could not
because of some kind of communication error, such as a node
not being available or a DDE server not running
- Stale if the tag value has been acquired before but does not
have an updated value
- Uninitialized if the value has never been acquired
- Valid if RSView32 has a valid value for the tag
- None if there is a problem with the tag definition such as it is
not a valid tag type or if the tag database has been accessed with
a third–party tool such as Microsoft® Access. If the underlying
tag type is valid, editing and saving the tag and then redisplaying
the tag monitor will fix the problem.
System\com tags—Use the system\com tags to receive a more
detailed error message. If the tag monitor reports an error, move
to an empty cell in the tag monitor, type system\com* and, when
the dialog box appears, click Select All. For a complete list of
system\com tags, see Appendix B, System tags.
[/quote:8971ebbe40]
Для диагностики можно, например, назначить какие-нибудь действия (Event), основываясь на бите коммуникаций
system\ComErrorValue1 или system\ComErrorValueOPC и т.п.
.
[quote:8971ebbe40]
Вот в WinCC при отсутствие связи все анимированые объкты заштриховываются (нет связи). А в RSView если связи нету то вид объектов не изменяется, как решить такую проблему?[/quote:8971ebbe40]
В RSView Вам предоставляется возможность не просто заштриховать объект, а решить самостоятельно, что с ним делать, и вообще делать ли что-нибудь. Вы можете "надеть" на объект анимацию мигания или изменения цвета, или изменения штриховки на осовании выражения, которое Вы описываете в поле Expression. Хотите заштриховать - штрихуйте по тому или иному биту, нет проблем.
А в WinCC Вы имеете такую же свободу действий?
|
Здравствуйте!
Да, это так.
[quote:fa2d76d651]
[b:fa2d76d651]E74966796 - Failed to load Data Server 'RSLinxEnterprise.OPCServer.1' on machine <PCName> (result = 0xc8650021)[/b:fa2d76d651]
Problem
Attempt to configure RSLinx Enterprise generates the following error :
[b:fa2d76d651]Failed to load Data Server 'RSLinxEnterprise.OPCServer.1' on machine <PCName> (result = 0xc8650021)[/b:fa2d76d651]
In Factory Talk Diagnostics, another error appears:
[b:fa2d76d651]RSLinx Enterprise FactoryTalk server RNA://$Global/Test/RSLinx Enterprise was not created on <PCNAME> because no runtime license was found.[/b:fa2d76d651]
Cause
No RSLinx Enterprise activation is installed.
Solution
Purchase a RSLinx Enterprise activation or use an OPC server (possibly RSLinx) instead of RSLinx Enterprise. [/quote:fa2d76d651]
Вот здесь таблица того, какие продукты поставлятся с какой активацией:
[url=http://domino.automation.rockwell.com/applications%5Ckb%5CRAKB.nsf/0/C288C3F53EC0AE4F85256BA7005BBA65?OpenDocument]
G7245725: List of activations that ship with RSViewSE[/url]
|
Всего самого наилучшего бывшим гражданам бывшего СССР!
Помогите осознать причины глюка инсталляции RSLogix5000 после переустановки виндов(XP SP1) на машинке.В ходе setup имеем сообщение Unable to access RSLogix5000 Module Profiles,завершение процесса установки и логфайл следующего содержания(привожу только последние строки):
RSLogix 5000 Setup: Begin MSXML3 analysis
RSLogix 5000 Setup: MSXML3 analysis ended successfully
RSLogix 5000 Setup: Begin MSXML4 analysis
RSLogix 5000 Setup: MSXML4 analysis ended successfully
RSLogix 5000 Setup: Begin Module Directory analysis
RSLogix 5000 Setup: ERROR: Module Directory instantiation failed:
Reason: 80040154: Класс не зарегистрирован
Может у кого есть мысли по этому поводу?
Заранее благодарен.
|
Работал контроллер и перестал видеть "заднюю шину". Перепрошил с 13 версии на 11 и обратно на 13, все заработало. Через некоторое вермя ситуация повторилась, но теперь перепрошить не могу, ругается на отсутствие связи после инициализации процедуры перепрошивки.
Лог файл перепрошивки, связь через rs232 -
08/29/06 10:32:41 [SUCCESS] Load Driver: C:\PROGRA~1\CONTRO~1\AB_ASA.DLL
08/29/06 10:32:41 [SUCCESS] Initialize Driver: C:\PROGRA~1\CONTRO~1\AB_ASA.DLL
08/29/06 10:32:50 [SUCCESS] Device Identity: Path = RSLinx API!AB_DF1-1, Instance = 1,
VID = 0x0001, PT = 0x000E, PC = 0x002C, Maj Rev = 13, Min Rev = 17, SN = 0x00234FAF
08/29/06 10:32:59 [SUCCESS] Load Script: C:\PROGRA~1\CONTRO~1\0001\000E\002C\99461502.nvs
08/29/06 10:32:59 [FAILURE] Validate: ERROR #1022: Catalog directory major revision downgrade validation error.
VID=0x0001, PT=0x000E, PC=0x002C
Maj Rev=13, Min Rev=17
08/29/06 10:33:00 [SUCCESS] Authorization: Bypass cookie used.
Key: 99461502
08/29/06 10:33:03 [SUCCESS] Program: Catalog Number = 1769-L30, Serial Number = 00234FAF,
Num Updates = 3, Size = 1391784 byte(s)
08/29/06 10:33:33 [FAILURE] Update: Error #11003: Unconnected Send timed out waiting for a response.
GS=0x01, ES=0x0204
Выключаю питание, включаю, все как и было.
В результате, у меня есть контроллер исправный, но не рабочий и ничего сделать с ним не могу.
Может быть есть у кого-ть идеи по этому поводу?
|
Предыдущие результаты
Ещё результаты |
|
| |
|