вторник, 14 декабря 2010 г.

Динамическое изменение входов объектов а AS

       Динамическая  перепривязка входов очень удобная штука но если ее очень много то возможны проблемы при работе движка.Сейчас я реализовал в одном проекте перепривязку  в соответствии с рекомендациями WW для решения этой проблемы.

    Выглядит это примерно так :
скрипт перепривязки повешен на "WhileTrue"
условие выполнения " MyContainer.ScanState"
Запускается привязка на 1-2 скане при условии что объект контейнер уже задеплоен и работает , тк с него берется путь для привязки.

в конце скрипта я добавил строку
me.SetInput.Disabled=true;
тк менять приязку в моем случае надо только после деплоймента , а при перезапуске привязка сохраняется и это лишняя трата ресурсов.

среда, 8 декабря 2010 г.

XmlDocument и Wonderware Application Server Scripting

            В скриптах AS сейчас нет структуры  case, приходится заменять  ее кучей if. В некоторых задачах приходится в зависимости от значения одной величины менять значение другой или нескольких, и пока вариантов не много это еще выглядит нормально .... но вот если больше 10 то это уже 2 экрана if then elseif ..... некрасиво ... и менять это неудобно :) возникла идея заменить это все какой нибудь структурой но ничего подходящего скрипты в AS не могу :( . 
             
      Это была предыстория :)

      Решил эту проблему сейчас с помощью .NET  System.Xml.XmlDocument. Все получилось очень просто, но пока адаптировал к языку скриптов AS пришлось немного повозится.

Вот результат.

создание объекта и загрузка xml в объект

dim EngUnitDoc as System.Xml.XmlDocument;
EngUnitDoc = new System.Xml.XmlDocument;
EngUnitDoc.load(me.xmlPath);

выгрузка объекта в общее пространство приложения .... правильно называется оно не так но вроде понятно :)


System.AppDomain.CurrentDomain.SetData(Me.Tagname+"XMLDoc",EngUnitDoc);

Все файл прочитали и он доступен для всех объектов... вероятно на том же самом движке , но не уверен еще не проверял. 

Теперь получаем доступ к данным которые мы загрузили из скрипта 

dim EngUnitDoc as System.Xml.XmlDocument;
EngUnitDoc = System.AppDomain.CurrentDomain.GetData(MyContainer.Tagname+"XMLDoc");
if EngUnitDoc <> null then
dim collection as System.Xml.XmlAttributeCollection;
collection = EngUnitDoc.SelectSingleNode("EngUnits/unit[@id='"+Me.Measurment+"']").Attributes;
Me.EngUnits =collection.GetNamedItem("text").Value;
me.accuracy =StringToReal(collection.GetNamedItem("accuracy").Value);
me.ValueOutDesc =collection.GetNamedItem("Description").Value;
'setGood(me.accuracy);
else
Me.EngUnits ="error";
me.accuracy =0.0001;
me.ValueOutDesc = "ERROR: XMLDoc  ";
endif;


вот собственно и все :) 
xml файл использовал примерно такой (не знаю как сюда его вставить в связи с чем заменил < на *  )



*?xml version="1.0" encoding="utf-8"?*
*EngUnits*
  *unit id="1234567" Description="xxxxxxxx" text="emu" accuracy="0.0001"**/unit*
  *unit id="1137" Description="xxxxx" text="xxxx" accuracy="0.001"**/unit*
*/EngUnits*





P.S.: текст этот писал скорее для себя на будущее, в связи с чем все очень кратко. Подробности смотреть в msdn :)
EngUnits/unit[@id='"+Me.Measurment+"']" - XSLT в Гугле или msdn

понедельник, 21 июня 2010 г.

Wonderware TrendClient 3.1sp2patch1

Wonderware AS31_SP2P01 ! TrendClient начал работать почти нормально !
Теперь с вот такой скрипт добавляет перо на тренд и настраивает его ... раньше это все тоже было но не работало или работало не так как хотелось бы :)




'Добавление нового пера
TrendClient1.AddPen(PenName,Expression,HistorySource,HistoryTagName,HistoryTagType);
TrendClient1.Pen.TrendType = 1;
TrendClient1.Pen.TrendHi = Max;
TrendClient1.Pen.TrendLo = Min;
TrendClient1.Pen.Units = Unit;
TrendClient1.Pen.Description = PenDescription;

TrendClient1.Pen.Width = PenWidth;


'если захочется больше перьев на графике то надо бы более красивую конструкцию ....


if TrendClient1.Pen.Index == 0 then TrendClient1.Pen.Color = System.Drawing.Color.FromName("Blue"); endif;

if TrendClient1.Pen.Index == 1 then TrendClient1.Pen.Color = System.Drawing.Color.FromName("Green"); endif;
if TrendClient1.Pen.Index == 2 then TrendClient1.Pen.Color = System.Drawing.Color.FromName("Red"); endif;



Теперь получилось сделать графический символ  шаблон со всеми нужными кнопочками масштабирования и т.д. и т.п. и использовать его везде где нужно ! и даже добавлять нужное количество перьев динамически :)

P.S.: Цвет второго и последующих перьев лучше задавать вручную т.к. первое перо по умолчанию синее , а вот последующие цвета выбираются случайно и они всегда разные ..... могут визуально совпадать с первым (я понимаю что теоретически  цвет не совпадает но на практике глаз не различает их)

понедельник, 7 декабря 2009 г.

настройка OPC windows 2003 ... еще раз и очень кратко :)

1. Установить OPC сервер :)
2. Добавить 135 порт в исключения фаервола для тех компьютеров (дипазон адресов подсеть или все подряд) которые будут клиентами ... обычно уже добавлен для всех , запись DCOM
3. Добавить OPCEnum.exe в исключения фаервола для тех же самых адресов
4. Добавить exe-шник OPC сервера в исключения фаервола с аналогичными предыдущим пунктам настройками
5. Аналогично открыть 139 порт (File and Printer Shar... шары должно быть видно) и можно пинг разрешить :)

6. Создать на сервере и клиентах одинакового пользователя (не гостя) с одинаковым паролем или использовать доменного пользователя
7. Запустить конфигурацию DCOM (dcomcnfg) , найти там наш свежеустановленный сервер и добавить нашего нового пользователя в разрешения на запуск и выполнение (2 верхних)

.... вот вроде и все
на клиенте фаервол ругнется сам и мы разрешим клиенту лезть в сеть , а если не ругнется то провести настройки ему вручную на доступ в сеть для клиента ... ну и 2-3й пункт ... хотя не пробовал ... может и без них работает ?

P.S.:  извините но скриншоты снимать лениво , их в разных других руководствах навалом :-p

можно смотреть здесь http://www.opcactivex.com/Support/Tutorials/DCOM_Tutorial_-_Configuring_th/dcom_tutorial_-_configuring_th.html

четверг, 22 октября 2009 г.

.Net Control-ы для Intouch 10 +

Графические символы дбавленые в 10ом интаче вещь красивая но с ними добавили возможность использования .Net Control! На официальном форуме даже есть рекомендации по их использованию :)
Цитата с оф. форума:
Rickard Norin
I am not aware of any official guidelies. The best thing for you to do is probably to familiarize with the QuickScript.NET scripting language and the ArchestrA datatypes.
These impose a few limitations. The most obvious that come to mind are:


Scripting is not capable of catching exceptions. Catch exceptions internally and expose possible exception messages as a string property of the class.


Scripting does not fare well with some data relationships. For instance, it is not possible to do recusive script calls to traverse a hiearchical structure as the nodes collection of a TreeView. The parsing of such data has to be built into the control.


Scripting is, as far as I know, incapable of generics. This means that you have to use explicit datatypes as avoid properties of types like ObservableCollection or List.

As far as I know, only controls inheriting from System.Windows.Forms.Control namespace are valid. Using Windows Presentation Foundation (System.Windows.Controls namespace) is probably out of the picture.

Other than that, I think that most things are ok. As a scripting language as opposed to programming language (if there is such a distinction =), I find QuickScript.NET very capable. There is a very nice data binding and event subscription implementation for controls.

You can also import %WinDir%\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll and see what you can do with the standard controls out of the box. This will give you some ideas of how controls behave in the ArchestrA symbols.


Но ... ипортировать все контролы сразу я считаю не самая хорошая идя, всетаки их больше 50 , да и работать будут не все :) лучше уж взять и написать потомка от нужного заодно дописав немного функционала Smile например нужные вещи вывести в свойства ... события например данные не все возвращают нормально ...

Например недавно писал потомка TreeView для меню в Интаче... очень красиво получилось ... опишу в следующий раз наверное

пятница, 11 сентября 2009 г.

Забавные старые грабли установки приложений в Windows 2003 с включенным Terminal Services

Есть некоторые приложения которые при установке на Windows  с включенными Terminal Services в самом начале установки выдают странную ошибку. Например KepDirect и KepServerEX 4 выдают ошибку с кодом -5006:0x80004005 , и все , дальше процесс не идет. а происходит это из за того что инсталятор не получает правильный путь к шрифтам... я знаю два способа решения данной проблемы:

1й способ - логичный , но не очевидный
идем в Панель Управления -> Установка удаление программ и нажимаем кнопочку "Добавить новую программу"... выбираем свой инсталятор и вперед !

2й способ - не логичный и не очевидный
ПЕРЕИМЕНОВАТЬ ФАЙЛ инсталятора в "setup.exe" и Windows сама догадается (по названию файла ! ...) что это мы установить что то хотим и все будет в порядке :D

Первое сообщение в этом блоге !

Создал я сегодня этот блог и буду я тут писать .... собираюсь я тут писать :)

А писать я тут буду о том с чем сталкиваюсь в процессе работы ... ну чтобы самому не сразу забыть способы разрешения некоторых проблем  , а вдруг еще пригодится кому .. так я не против.