 | |
Предыдущие результаты
[quote:7d9645d930="JekaM"]
В RSLogix начиная с v16 есть Add-On'ы. [/quote:7d9645d930]
версия 16.03.00
[quote:7d9645d930="JekaM"]
В них на любом интересующем Вас языке можно написать и функции в том числе и передавать и возвращать все что угодно - теги, массивы, структуры UDT. [/quote:7d9645d930]
в структуре Controller Organizer в папке:
1. Data Types есть Add-On-Defined
2. Motion Groups есть Add-On Instruction
когда на одном из этих пунков жмахаешь правой мышкой --> New, появляется окошко New Add-On Instruction. В окошке есть поле Type, в котором на выбор 3 типа: Ladder Diagram, Function Block Diagram, Structured Text. Но ни о каких языках типа С++ там речи не ведеццо :cry: ))
или как то по-другому это делается???
если есть пример кода, дайти плиз)))
|
Доброе время суток!
У нас возникла не понятная проблема, уже не первый месяц пытаемся выяснить в чем причина и все ни как не можем ее победить! Одновременно перезагружаются 3 контроллера PLC5, которые управляют одним цехом (два из них дублированы). Время перезагрузки мы пишем по FirstScan'у. Ни какие Fault'ы не взводятся. Проанализировав ни какой очевидной закономерности не заметили.
Изначально было предположение что виной всему питание, поменяли БП и поставили отдельный, только для PLC5, UPS (2кВт) - не помогло. Заземление везде честное. Кроме питания их объединяет ControlNet.
Вообще, что может заставить одновременно перегрузить контроллеры (т.е. взвести бит FirstScan)?
|
Есть такой бэйсикообразный язык программирования [url=http://literature.rockwellautomation.com/idc/groups/literature/documents/pm/1756-pm007_-en-p.pdf]Structured Text[/url].
Кроме того, в RSLogix5000 начиная с версии v16 есть возможность пополнять систему команд своими собственноручно написанными.
|
[quote:72de6982eb="drost"]Publication 1747-RM001E-EN-P January 2006
Максимальная размерность CV также как и PV от 0 до 16383.
Страница 9-4
Если на входе имеешь от 0 до 32565 то необходимо применить скалинг.
Аналогично и на выходе.
Пример инструкции SCL применительно к PID посмотреть можно в вышеуказанной публикации
на странице 4-15[/quote:72de6982eb]
У меня в примере значение на входе 0 - 100 в документации написано что так можно.
|
[quote:d1b450d708="scout"]Уважаемые знатоки RSView32, прошу Вас снова вернуться к ФАКТАМ, поскольку полагаю, что все Вы закончили школу, где нас всех учили читать умные книжки :) [/quote:d1b450d708]
Ох, грозился я не отвечать в этой ветке, однако придется, и пусть меня обвиняют в некорректном цитировании:
[quote:d1b450d708="scout"]… а в журнал тревог (который можно просмотреть с помощью др. спец.инструмента RSView32 Alarm Summary), пишутся совершенно другие данные ТОГОЖЕ САМОГО ТЕГА, в нашем случае Description = “TEST”. ЭТО ведь АБСУРТ какой-то![/quote:d1b450d708]
Смотрим выше, что было:
[quote:d1b450d708="DIMIOKS"] Информацию о Description AlarmSummary берет в момент первого события Alarm конкретного тега, либо при запуске, когда в памяти висят неквитированные сигналы. В дальнейшей работе AlarmSummary оперирует именно этим значением, вплоть до [b:d1b450d708]перезагрузки объекта[/b:d1b450d708]. Разработчикам, как видно, в страшном сне не могло приснится, что Description необходимо менять в динамике! [/quote:d1b450d708]
Так, кто не умеет читать?
Продолжаем:
[quote:d1b450d708="scout"]…Итак, ГДЕ “Спрятался” ДИНАМИЧЕСКИЙ ОБМЕН В RSView32???
У объекта RSView32.Tag динамически меняются свойства тега, НО некоторые из них, к примеру такие, как MinimumValue, MaximumValue, Description “живут своей жизнью”, т.е. полностью не адекватны в родных визуальных компонентах RSView32.[/quote:d1b450d708]
Учите матчасть. Где обещан динамический обмен к открытым экранам?
[quote:d1b450d708="scout"]Мои простенькие примеры наглядно это демонстрируют … [/quote:d1b450d708]
Да, демонстрируют – незнание механизмов работы RSView32.
Могу привести еще пример из этой области – измени какой-либо открытый экран (лучше на другом) компьютере, а затем запиши этот файл на целевой компьютер.
Ай, какой плохой RSView32 – продолжает показывать старый экран (почему не отследил факт подмены файла)
До сих пор не могу понять, зачем это надо?
И, я в школе учился – вспомнилась история:
Торчит гвоздь, молотка нет, но есть бутылка. Одноклассник попробовал забить гвоздь бутылкой – получилось, далее он начал искать торчащие гвозди и забивать… После третьего или четвертого бутылка разбилась.
|
Уважаемые знатоки RSView32, прошу Вас снова вернуться к ФАКТАМ, поскольку полагаю, что все Вы закончили школу, где нас всех учили читать умные книжки :)
Итак, откроем букварь №1: “Получение результатов с помощью RSView32 Scripting”, где черным по белому сказано, что Tag – это объект, который имеет свойства & методы, например: Value, MinimumValue, MaximumValue, Description и т.п.
Для тех, кто не владеет технологиями, букварь №2: “Использование COM/DCOM в Delphi” (http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1108), где объяснено популярно, что: …
В Windows 3.1 и более ранних версиях основным средством обмена данных между программами была технология DDE - Dynamic Data Exchange (ДИНАМИЧЕСКИЙ обмен данными). На этой технологии основывалась технология OLE - Object Linking and Embedding (связывание и внедрение объектов). …
Начиная с 1993-его года в Windows NT 3.51 появилась технология OLE 2 - дальнейшее развитие OLE. OLE 2 дополнительно содержит в себе технологии ActiveX, Automation (первоначально называвшаяся OLE Automation) и другие расширения, далеко выходящие за рамки связывания и внедрения объектов, поэтому фирма Microsoft с выходом OLE 2 объявила, что слово "OLE" больше не является аббревиатурой, это просто термин, не имеющий расшифровки. Технология DDE была недостаточной для поддержки OLE 2, поэтому специально под неё была создана новая технология взаимодействия между программами - COM (Component Object Model, модель компонентных объектов). COM оказалась очень удачной технологией, поэтому, начиная с Windows 95, DDE была объявлена устаревшей, а основной технологией обмена данными в системе стала технология COM.
Итак, ГДЕ “Спрятался” ДИНАМИЧЕСКИЙ ОБМЕН В RSView32???
У объекта RSView32.Tag динамически меняются свойства тега, НО некоторые из них, к примеру такие, как MinimumValue, MaximumValue, Description “живут своей жизнью”, т.е. полностью не адекватны в родных визуальных компонентах RSView32. Мои простенькие примеры наглядно это демонстрируют …
Так, где здесь здравый смысл? ... когда RSView32 Tag Monitor (как заявлено самим производителем, спец.инструмент для оперативного наблюдением за тегом), показывает нам одно значение Description = "??? NEW TEST ???", а в журнал тревог (который можно просмотреть с помощью др. спец.инструмента RSView32 Alarm Summary), пишутся совершенно другие данные ТОГОЖЕ САМОГО ТЕГА, в нашем случае Description = “TEST”. ЭТО ведь АБСУРТ какой-то!
|
[quote:5dd034f95a="Trident"]
Есть 2 АРМа, InTouch 8.0 (на 1-м лицензия Development, на 2 –Runtime), MSSQL. [/quote:5dd034f95a]
Добрый день. Вопрос: Ваш InTouch работает с каким железом? AllenBradley?
|
Я не понимаю вот этого переливания из пустого в порожнее. AlarmSummary работает, так-же, как работает и AlarmLogViewer.
Проблема в [b:d1ad18de36]понимании[/b:d1ad18de36] механизмов реализации методов, например возьмем AlarmSummary.
Я не гарантирую полное понимание всей "кухни", но на основе своего опыта могу сказать следующее:
Информацию о Description AlarmSummary берет в момент первого события Alarm конкретного тега, либо при запуске, когда в памяти висят неквитированные сигналы. В дальнейшей работе AlarmSummary оперирует именно этим значением, вплоть до [b:d1ad18de36]перезагрузки объекта[/b:d1ad18de36]. Разработчикам, как видно, в страшном сне не могло приснится, что Description необходимо менять в динамике!
Проверка простая:
1. Создаем тэг с Description "Description1". (Alarmed в Startup установлен, дисплей один - стартовый). Как вариант тэг с Description "Description1" уже существует.
2. Меняем Description на "ААА".
3. Меняем Value тэга: получаем событие InAlarm.
4. Смотрим на объект AlarmSummary на стартовой странице. Description как "ААА". При дальнейших изменениях Description на AlarmSummary изменений Description [b:d1ad18de36]не будет[/b:d1ad18de36]!
Если Вы используете AlarmSummary в виде объекта, да еще на стартовой странице, то запуск AlarmSummary произойдет сразу после инициализации окна и поведение AlarmSummary будет так, как описано выше, вплоть до момента закрытия окна.
Но!!! Если Вы запускаете AlarmSummary не как объект дисплея, а как [b:d1ad18de36]отдельный редактор[/b:d1ad18de36], то при каждом вызове у Вас будет именно т[b:d1ad18de36]екущее значение[/b:d1ad18de36] Description тэга. Абсолютно так-же все будет происходить, если AlarmSummary сделать в виде объекта, но на [b:d1ad18de36]другом окне[/b:d1ad18de36] (закрытие окна как Abort Me).
И если в Вашей задаче необходимо [b:d1ad18de36]динамически[/b:d1ad18de36] изменять Description тэга, при этом AlarmSummary должен быть обязательно в виде объекта на главном окне, то не задумываясь я бы тупо закрывал окно и тут - же запускал его вновь (вот здесь, скорее всего, без VBA не обойтись). Рассматривать варианты перезапуска AlarmSummary как визуального компонента без закрытия окна не хочу, если такие варианты и существуют.
И я не вижу, чтобы здесь "что-то не работало". Как я понимаю, вся проблема в том, что разработчики не посоветовались с Вами и не учли Ваши желания. Поэтому компонент AlarmSummary работает так, как это задумали разработчики.
[quote:d1ad18de36]Это обстоятельство вынудило меня написать свой ActiveX компонент[/quote:d1ad18de36]
Вот с этого и надо было начинать, а не валить все на непредусмотрительных разработчиков. Когда мне нужна была связка с БД Access я, просмотрев документацию по RSView32, накатал свой пакет программ. И причина, почему я не делал это на VBA - это моё [b:d1ad18de36]незнание[/b:d1ad18de36] этого языка, а не "[b:d1ad18de36]кривой VBA[/b:d1ad18de36]".
|
[quote:42c9104deb="ALEX_NK"]Добрый всем день!
У моего клиента появилось желание сформировать настраиваемый отчёт по авариям (те фильтр аварийных сообщений и всё такое).
[/quote:42c9104deb]
Просто на заметку.
Как я понимаю необходимо сделать фильтрацию по алармам. Не знаю есть или нет в Rsview32,но в intouch есть. Если в поле action по нажатию кнопки, вставить специальную функцию:
almQuery( "objectName", AlarmGroup, FromPri, ToPri, State, DispType ), где FromPri....ToPri диапазон приоритетов тегов,то можно таким образом создавать фильтрацию, назначая каждой кнопке опеределенный диапазон приоритетов тегов.
|
Уважаемый Scaut, если Вы мои выражения сочли за дерзость, то я просто завидую Вам, т.к. Вы, как видно, еще не встречались напрямую с подобными вещами.
Насчет балагана: балаган - это заявления о недееспособности инструментов RSView32. Все остальное - следствие Ваших безосновательных утверждений.
Насчет конструктива: Вам уже достаточно многое объяснили, я в том числе дал последовательность действий (команд), которые приводят к решению задачи. Как видно, не по зубам орешек. Рискну еще более упростить пример:
[code:1:d7162eaef2]Sub CreatTagDig()
Dim NewTag As Tag
Dim sName As String
sName = "aaa"
Set NewTag = gTagDb.CreateTag(sName, roTagTypeDigital)
NewTag.SourceType = roSourceMemory
NewTag.Description = "Descript1"
NewTag.Alarmed = True
NewTag.DigitalTagAlarmCfg.AlarmType = roAlarmTypeOn
NewTag.DigitalTagAlarmCfg.InAlarmMessageSource = roMessageSourceCustom
NewTag.DigitalTagAlarmCfg.OutOfAlarmMessageSource = roMessageSourceCustom
NewTag.DigitalTagAlarmCfg.InAlarmFileMessage = "\11d \8t InAlm Tag_I___ \5n \15s"
NewTag.DigitalTagAlarmCfg.OutOfAlarmFileMessage = "\11d \8t OutAlm Tag_O___ \5n \15s"
NewTag.WriteConfiguration
End Sub
Sub ChTagTrue()
gTagDb.GetTag("aaa").Value = 1
End Sub
Sub ChTagFalse()
gTagDb.GetTag("aaa").Value = 0
End Sub
Sub ChDescriptAAA()
gTagDb.GetTag("aaa").Description = "AAA"
gTagDb.GetTag("aaa").WriteConfiguration
End Sub
Sub ChDescriptBBB()
gTagDb.GetTag("aaa").Description = "BBB"
gTagDb.GetTag("aaa").WriteConfiguration
End Sub[/code:1:d7162eaef2]
Все операции с тегом написаны на VBA. Перегрузка проекта не требуется. Все динамически изменяемые дескрипторы также будут отображены в AlarmLogViewer.
Думаю, все уже сказано, пора завершать эту тему.
|
Предыдущие результаты
Ещё результаты |
|
| |
|