 | |
Предыдущие результаты
Задача в терминах операционных систем реального времени - это вот что:
[quote:a5acef1bef]From Wikipedia, the free encyclopedia
A task is "an execution path through address space". In other words, a set of program instructions that is loaded in memory. The address registers have been loaded with the initial address of the program. At the next clock cycle, the CPU will start execution, in accord with the program. The sense is that some part of 'a plan is being accomplished'. As long as the program remains in this part of the address space, the task can continue, in principle, indefinitely, unless the program instructions contain a halt, exit, or return.
* In the computer field, "task" has the sense of a real-time application, as distinguished from process, which takes up space (memory), and execution time. See operating system.
o Both "task" and "process" should be distinguished from event, which takes place at a specific time and place, and which can be planned for in a computer program.
+ In a computer graphical user interface (GUI), an event can be as simple as a mouse click.
+ In older text-based computer interfaces, an event might be a keystroke.[/quote:a5acef1bef]
К скану это не имеет никакого отношения.
|
Попробовал мониторить состояние связи не через 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 восстанавливает связь при ее потере.
|
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 для контроля состояния связи?
|
Я несколько раз прочёл описание проблемы, и ощущение такое, что именно что-то в системе не совсем так построено, как нужно, и нужно делать многие вещи вообще по-другому.
Начать с того, что три станции RSView32 работают в одном сегменте. Уж сколько раз твердили миру, что такие конфигурации не работают или работают медленно или плохо, однако...
Далее, мне никогда не приходило в голову передавать memory-тэги (!) из одной станции RSView в другую. (!). Даже не представляю, зачем это может понадобиться. То, что система построена именно так, говорит о том, что системная концепция выбрана не совсем оптимально.
Что Вы, скажем, будете делать, если выключится компьютер, предоставляющий memory-тэг другому? Какие значения получит в этом случае вторая и/или третья станция? И сколько времени они останутся без информации с выключенного компьютера?
Далее, Ваш самодельный ОРС-сервер: Вы уверены, что он работает корректно? Что он не конфликтует с другими компонентами? Что в системе нет конфликтов? Что сеть не перегружена?
Вы же не написали, какую операцонную систему Вы используете, с каким сервис-паком, и какие версии софта. Может причина кроется вообще в несовместимости версии СPR и версии Windows.
Судя по тому, что Вы пишете, вы уже находитесь в фазе ввода системы в действие. Не знаю, есть ли у Вас возможность и время довольно сильно переделать всё в системе, думаю, что вряд ли. Что посоветовать? Даже не знаю, что в Вашей ситуации и посоветовать. Может быть, учесть этот негативный опыт на будущее?
|
Используется 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:48dd3b71ba][b:48dd3b71ba]G153127944: What happens to the application program in a L3x CompactLogix controller when it is powered down and up[/b:48dd3b71ba]
When a CompactLogix controller is powered down, that is the power supply is powered down, the power supply sends a signal to the controller that power is going away. When the controllers gets this it will then save the program to battery back ram. When this is done the saved image is marked as valid. Then when the controller is powered back up it checks if anything is loaded in battery backed ram. If there is and it is marked as valid it is loaded in to memory. Then the battery back ram image is marked invalid. The marking of the image as invalid, after loading it, prevents the case of being able to load the wrong image into the controller, if for example, a new user program was loaded into the controller.
Events that can cause the controller image to not be saved:
1. The CompactLogix power supply seeing an overvoltage condition. The power supply at this point does not go thru a normal shut down.
2. Unlocking the locking tab on any module between the controller and power supply.
3. Dead battery.
4. Disconnecting the battery after powering down. The image will be saved but lost.
In the first 2 cases no image will be saved to battery backed ram. When the controller is powered back up the image saved in battery back ran is marked invalid and will not be loaded. So the controller will power up and appear to have lost its program. In case 3 the controller will save the image to battery back ram. Then the image will be retained for about 30 to 60 seconds. There are capacitors on the controller that will hold up the battery backed ram for 30 to 60 seconds. After the 30 to 60 seconds the controller will powerup and no program will be loaded.
Important facts to know:
1. On a power down, the controller memory is saved to battery backed ram whether or not CompactFlash is installed.
2. [b:48dd3b71ba]If CompactFlash is installed and set to load "always", CompactFlash will win over battery backed ram.[/b:48dd3b71ba]
3. [b:48dd3b71ba]If the CompactFlash is installed and set to load "on corrupt", memory will be loaded from battery backed ram unless battery backed ram is corrupt.[/b:48dd3b71ba]
4. Disconnecting the battery after power is removed for 30 to 60 seconds will clear battery backed ram.
5. On power up once the program is restored from battery backed ram , the battery backed ram is marked invalid so that the image will not be re-loaded without a new power down save.[/quote:48dd3b71ba]
Вот ещё небезинтересно почитать:
[quote:48dd3b71ba][b:48dd3b71ba]G149027134 - Using a 1784-CF64 Card with Logix Controllers to Load Applications and Firmware[/b:48dd3b71ba]
Summary of Technote Information: Starting at V12 the 1784-CF64 card would also store the firmware required for the application/project stored on the CompactFlash card. A common question is when will the firmware be updated and how should I configure the card for this to happen.
A common request from customers is that they want to use the 1784-CF card to:
1. Reload the application/project to the controller if memory is lost.
2. Update the controllers firmware and load the application/project to the controller if it must be replaced.
3. Do not restore the application/project after a power cycle.
The next question is how do I setup the Non-volatile storage feature to do all of these. Should the Load Image be selected as:
1. On Power Up
2. On Corrupt Memory
Before we discuss this we should explain the process the controller goes thru. The controller determines what the restore options are. If the controller determines that a restore of the user program is called for it checks that the FW rev is correct. If it is not the controller will update the firmware and then reset itself. The controller will then check again what the restore options are. If the controller determines a restore of the user program is called for it checks that the firmware rev is correct. (This time it is.). Then we restore the user program.
So for the above request you would want to select Load Image On Corrupt Memory.
L6X controller at V13 (this applies to all controllers that use CompactFlash). Downloaded a program to it and created 2 CF cards. One set to load on powerup (1) and one set to load on corrupt memory (2).
1. Took another controller and loaded FW 15.4. No program loaded, no battery. Took card 1 and inserted it into the controller. The controller was flashed to V13 and the program was loaded.
2. Took another controller and loaded FW 12.XX. No program loaded, no battery. Took card 2 and inserted it into the controller. The controller was flashed to V13 and the program was loaded.
3. Took another controller and loaded FW 15.4 with the V15 version program loaded, battery. Took card 1 and inserted it into the controller. The controller was flashed to V13 and the program was loaded.
4. Took another controller and loaded FW 15.4 with the V15 version program loaded, battery. Took card 2 and inserted it into the controller. The controller stayed at V15 with the V15 program loaded. Nothing was loaded because the memory of the controller was not corrupt.
5. Took another controller loaded with factory default firmware. Took card 1 and inserted it into the controller. The controller was flashed to V13 and the program was loaded.
6. Took another controller loaded with factory default firmware. Took card 2 and inserted it into the controller. The controller was flashed to V13 and the program was loaded.
[/quote:48dd3b71ba]
|
[quote:936a2d7b9e="chameleon"]Vad, а каким образом вы записываете значения мин-макс шкал в настройки тренда. У нас для визуализации используется RSView32, в которой отсутствует тренд в объектной модели. Возможно, вы используете RSTrendX или в объектной модели RSViewSE присутствует тренд.[/quote:936a2d7b9e]
В RSViewSE интергрирован RSTrendX со своей объектной моделью, старого компонента из RSView32 больше нет, и это правильно.
Вообще-то, на моем опыте, в RSView32 RSTrendX сильно "тормозил" при инициализации и от его использования пришлось отказаться... да и стандартный компонент тренда вводит станцию в ступор при первом запросе истории длительностью более суток.
RSView32 пользовательские шкалы трендов я сохранял в memory-тегах, в значениях по умолчанию, поэтому они не терялись даже после рестарта проекта, в RSViewSE с ее распределенностью этот подход уже был бы неправильным, и индивидуальные пользовательские шкалы пришлось сохранять в локальную БД на каждой операторской станции.
|
Да такая проблемка существует .Всё дело в том ,что внешние фонты используемые в
проекте не загружаются вместе с ним , а должны быть загружены в сЪёмную флеш-
память с помощью FontTool(хотя прямого указания на Это не видел,возможно где-то
и прописано).Проверить не смог, закупленные PV550 без Memory Card
|
С помощью утилиты FontTool, входящей в комплект поставки PanelBuilder32. Там в меню есть пункт "Save to memory card".
|
Добрый день, All.
RSView32 регистрируется на определенное количество тегов.
Какие именно теги считаются:
- Memory+Device,
- Memory,
- Device?
С уважением, Дмитрий
|
Предыдущие результаты
Ещё результаты |
|
| |
|