 | |
Предыдущие результаты
[quote:ba0d7a9ffe="user"]а без rssql как нибудь можно[/quote:ba0d7a9ffe]
Можно через тот же VBA.
Если инициировать пересылку на стороне RSview, подключите библиотеку ADOдля обращения к MSSQL.
Если со стороны MSSQL - можно писать из VBA в теги RSview (или в теги контроллера) по OPC. Remote OPC Client есть в дистрибутивах RSlinx Classic.
|
Если речь идёт о компьютере VersaView 700R, то это обычный индустриальный компьютер:
[img:6e7fedb848]http://vdt-automation.de/img/bedientermin/700r.jpg[/img:6e7fedb848]
Просто вставьте в него плату MPI или Profibus и всё.
Если же речь идёт о панели VersaView 700H, вот такой
[img:6e7fedb848]http://vdt-automation.de/img/bedientermin/6182h.jpg[/img:6e7fedb848]
то нужен внешний конвертер интерфейса или модуль в контроллер.
Конвертер интерфейса может быть такой:
[img:6e7fedb848]http://www.anybus.com/eng/images/ABXconcept_ny.png[/img:6e7fedb848]
|
В каждом процессоре есть тэги диагностики, которые можно "достать" командой GSV в обычные тэги и "увидеть" из RSView.
Если этого недостаточно, то почитайте, например, здесь:
[u:efcd73d41e][url=http://domino.automation.rockwell.com/applications%5Ckb%5CRAKB.nsf/0/B0377F6AFF504BD585256C5D0064128F?OpenDocument]G25451187[/url][/u:efcd73d41e]
[u:efcd73d41e][url=http://domino.automation.rockwell.com/applications%5Ckb%5CRAKB.nsf/0/D4ACFE095A56874285256AFB007026C2?OpenDocument]G19906[/url][/u:efcd73d41e]
|
Слава, проблемав в том, что вся информация довольно сильно "рассыпана" по интернету.
По реентерабельности копирую Вам из "Википедии":
[quote:30eb615a5d]Реентерабельность
Компьютерная программа в целом или её отдельная процедура называется реентера́бельной, если она разработана таким образом, что [u:30eb615a5d]одна и та же копия инструкций программы в памяти может быть совместно использована несколькими пользователями или процессами.[/u:30eb615a5d] При этом второй пользователь может вызвать реентерабельный код до того, как с ним завершит работу первый пользователь и это как минимум не должно привести к ошибке, а лучшем случае не должно вызвать потери вычислений (то есть не должно появиться необходимости выполнять уже выполненные фрагменты кода).
Реентерабельность тесно связана с безопасностью функции в многопоточной среде (thread-safety), тем не менее, это разные понятия. Обеспечение реентерабельности является ключевым моментом при программировании многозадачных систем, в частности, операционных систем.
Для обеспечения реентерабельности необходимо выполнение нескольких условий:
* Никакая часть вызываемого кода не должна модифицироваться.
* Вызываемая процедура не должна сохранять информацию между вызовами.
* Если процедура изменяет какие-либо данные, то они должны быть уникальными для каждого пользователя.
* Процедура не должна возвращать указатели на объекты, общие для разных пользователей.
В общем случае, для обеспечения реентерабельности необходимо, чтобы вызывающий процесс или функция каждый раз передавал вызываемому процессу все необходимые данные. Таким образом, функция, которая зависит только от своих параметров, не использует глобальные и статические переменные и вызывает только реентерабельные функции, будет реентерабельной. Если функция использует глобальные или статические переменные, необходимо обеспечить, чтобы каждый пользователь хранил свою локальную копию этих переменных. [/quote:30eb615a5d]
Что же касается очереди задач, то я ссылки так навскидку не нашёл. Вкратце поведение ядра операционной системы выглядит следующим образом:
Ядро операционной системы реального времени, располагающее определёнными ресурсами (процессором, памятью, коммуникациями и т.п.) "ведёт" очередь задач, претендующих на ресурс, устанавливая их в очередь к каждому ресурсу в соответствии с определёнными критериями (например, с их приоритетом).
В каждый момент времени ресурс принадлежит тому процессу, который имеет самый высокий приоритет и готов к исполнению. Процесс (задача) готов к исполнению, если выполняется условие его запуска.
Предполжим, что задача "А" запускается по внешнему событию (по дискретному сигналу на входе модуля 1756-IB16. Задача "Б" запускается периодически каждые 100мс и имеет приоритет бОльший, чем задача "А". Предположим, что в данный момент нет более приоритетных задач, претендующих на процессор.
В системе есть ещё фоновая задача, выполняющаяся циклически всё время, пока не выполняются другие более приоритетные задачи.
Теперь смотрите:
1. Ядро операционной системы периодически просматривает списки задач на предмет определения самой приоритетной готовой к выполнению задачи.
2. В данный момент времени есть две более приоритетные, чем фоновая, задачи, но ни одна из них не готова, т.к. обе ждут выполнения событий (сигнала на входе контроллера и истечения интервала времени запуска). Выполняется фоновая задача. Обе приоритетные задачи стоят в очереди к процессору.
3. Приходит сигнал с клеммы входного модуля. Одна из задач. ожидающая этого события, становится готовой.
4. Ядро, просматривая списки, обнаружит, что есть одна задача, имеющая более высокий, чем фоновая, приоритет и что условие её запуска соблюдается. Ядро отберёт процессор у фоновой задачи, сохранит её контекст в стеке этой задачи и передаст управление готовой к выполнению задаче.
5. Задача, ожидающая истечения интервала времени, остаётся в очереди к процессору.
6. Во время исполнения задачи "А" поступает ещё один входной сигнал, являющийся условием запуска той же задачи "А". Ядро ставит копию кода задачи "А" в очередь к процессору, т.к. в настоящий момент одна копия кода "А" уже исполняется, а приоритет у них одинаковый (см. реентерабельность). Копия кода "А" будет исполняться сразу же после выполнения первого "экземпляра" кода "А".
7. Выполняется первый экземпляр кода "А", в очереди к процессору стоит его копия, задача "Б" стоит в списке задач, ожидающих условия выполнения. В этом списке может быть ещё несколько задач, они все стоят в очереди в соответствии с их приоритетом. Предположим, что из всех оствавльных задач "Б" имеет наивысший приоритет и поэтому стоит в очереди первой.
8. Код первого экземпляра "А" ещё не выполнился, а системный таймер уже сказал задаче "Б", что ей пора. Ядро сразу же перемещает её из очереди ожидающих условия выполнения задач в очередь на исполнение к процессору. Поскольку её приоритет больше, чем у уже стоящей в очереди копии кода "А", задача "Б" помещается в очередь к процессору первой, т.е. перед ней.
9. Первый экземпляр кода "А" отработал. Ядро отдаёт процессор первой стоящей в очереди к процессроу задаче - задаче "Б". Она отрабатывается, а затем процессор отдаётся копии задачи "А".
10. Если после окончания исполнения копии "А" интервал задачи "Б" ещё не истёк, а входных сигналов не поступило, в очереди к процессору больше нет готовых к исполнению задач, более приоритетных, чем фоновая. Поэтому ядро достаёт из стека фоновой задачи содержимое регистров в момент отключения, восстанавливает контекст задачи, предшествующий её переходу в пассивное состояние и отдаёт процессор фоновой задаче. Она продолжает работу, как ни в чём ни бывало, даже не замечая, что "потеряла сознание" на какой-то момент времени.
Выводы:
1. Ни одно событие не теряется, а только откладывается на пренебрежимо малое время до того момента, когда подойдёт его очередь обрабатываться процессором.
2. Более важные события обрабатываются сразу же, не ожидая, когда логика фоновой задачи "доползёт" до их обработки.
3. Даже если предположить, что несколько событий во внешнем мире происходит одновременно с точностью до микросекунды (практически невозможно), то они будут обслуживаться одно за другим в порядке "живой очереди".
4. Если во время обслуживания события наступит более важное событие, то процессор бросит всё и обслужит его, а потом вернётся и дообслуживает менее важное событие.
Вот так, вкратце. Это и называется мультизадачная среда реального времени. Т.е. реально реального времени :)
Если интересно, задавайте вопросы дальше.
:)
|
RSNetworx for Ethrenet/IP входит в Logix 5000 Professional, однозначно.
|
1. Входит ли RSlinx Gateway (9355-WABGWENE) в состав RSLinx Enterprise, входящий в поставку RSViewSE?
2.
[quote:b7e60d6204]Получите Вы вот что:
http://www.software.rockwell.com/rslogix/order.cfm [/quote:b7e60d6204]
Странно, в описании профессиональной версии ничего не сказано о RSNetworx for Ethernet/IP.
А как же тогда быть с публикацией [url]http://literature.rockwellautomation.com/idc/groups/literature/documents/pp/9324-pp001_-en-p.pdf[/url]
Ведь там сказано что в RSLogix 5000 Proffecional
RSNetWorx for EtherNet/IP [b:b7e60d6204]included[/b:b7e60d6204]
|
>Где бы узнать, что конкретно поставляеться по заказному номеру? >Какие диски, лицензии, документация? Интересует, что мы получим, >заказав, скажем, RSlogix 5000 Professional 9324-RLD700NXENE.
Есть документ 1756-sg0001f-en-p.pdf, типа Selection Guide для выбора всего по 56-ой серии, в том числе и по программному обеспечению. Там все написано, что входит в состав указанного каталожного номера Logix 5000. На самом деле, много всего включает, куча компактов в коробке (по-моему 10 штук).
Версия документа может есть уже и более свежая.
|
Где бы узнать, что конкретно поставляеться по заказному номеру? Какие диски, лицензии, документация? Интересует, что мы получим, заказав, скажем, RSlogix 5000 Professional 9324-RLD700NXENE.
И еще вопрос (лень начинать новую тему :) ):
Что за продукт: 9301-OPCSRVENE KEP Server Enterprise ?
Разве RSLinx Enterprise, входящий в поставку RSViewSE, не позволяет подключаться через OPC к контроллерам других фирм?
И входит ли RSlinx Gateway (9355-WABGWENE) в состав RSLinx Enterprise?
|
[quote:1d443fe39c]А была ли инсталляция действительно "девственно чистой"? Не ушла ли RSView-шная dll-ка, заменённая при инсталляции Visual Studio своей, при деинсталляции Visual Studio?[/quote:1d443fe39c]
Да, инсталляция была чистой. Я специально для этого новую систему поставил с нуля. Потом поставил SP4. Потом RSView. И все. Больше на машине ничего нет.
[quote:1d443fe39c]Всё замечательно вызывается и тикает, ничего не виснет.
И RSView-шный OPC/DDE сервер работает.
[/quote:1d443fe39c]
Классно, конечно, но непонятно почему у меня не работает :?
Я когда попробовал на этой "чистой" машине запустить проектик (с одной картинкой, на которой 2 тега берутся из OPC-сервера, а третий - внутренний деревянный, в который считается их сумма), все нормально заработало. Как только я добавил еще одну картинку с кнопкой и вызвал из нее старую - вылезла ошибка.
Кстати такой же эффект, если активировать RSView'шный OPC/DDE сервер. Тогда ошибка вылетает (даже если одна картинка в проекте)
в момент подключения другой станции к моей. (В момент отображения моего тега на другой станции). А если никакая другая станция не подключается к моей по OPC, у меня все нормально работает (даже если галочка OPC/DDE server в Startup'е включена).
[quote:1d443fe39c] Прислать проект?[/quote:1d443fe39c]
Да, если можно на ящик nipisau. Интересно посмотреть.
Скорее всего, действительно, проблема с установкой RSView.
Может потом попробую на чистую XP-шку поставить RSView и протестить. Она же новее 2000-й и может в ней стандартно идет dll-ка MSVCP60.dll, а не MSVCP50.dll, как в 2000-й плюс еще всякие обновления, SP2.
И кстати у меня ошибка точно вылетала, если режим отображения картикок "replace" - т.е. при нажатии на кнопку вместо одной каринки появляется другая (Поверх нее). А когда они обе на экране видны были, как у вас, у меня пару раз все нормально работало.
И какая у вас настройка в Derived Tags Setup: Continious или Periodic?
Попробуйте сделать Periodic. Может вылетит. :)
|
Только что попробовал.
Всё замечательно вызывается и тикает, ничего не виснет.
И RSView-шный OPC/DDE сервер работает.
Прислать проект?
[img:e753fe0b3d]http://vdt-automation.com.ua/modules/ImageUp/uploads/oldDad/der.jpg[/img:e753fe0b3d]
|
Предыдущие результаты
Ещё результаты |
|
| |
|