воскресенье, 2 декабря 2012 г.

Установка sql 2012 для SP 2012R2 - "сходу"

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

Если отчеты и WIS использовать не планируете, то Репортинги можно не ставить.

P.S.: для более ранних версий System Platform нужен sql 2008 x86

установка windows 2008R2 eval


Не думаю что это видео полезно ... но с этого все начиналось :)

System Platform 2012R2

Совсем недавно вышла Wonderware System Platform 2012R2 !

В связи с этим событием мне нужны новые виртуальные машины для тестирования этого программного продукта  , и я решил записать весь процесс создания виртуалок и инсталляции System Platform 2012R2 .... и я буду выкладывать видео с краткими комментариями !

пятница, 16 марта 2012 г.

вольный перевод текноута 825

Давно я ничего не писал сюда .. буду исправляться :)

И Так …  
         В очередной раз столкнулся по работе с настройкой связи между платформами Wonderware Application Server и в частности с резервированием движков на онных платформах …. да и новый текноут по данной теме вышел Tech Note 825 Industrial Application Server Redundancy: Troubleshooting Guidelines. Попробую компактно и по русски  все что там описано законспектировать, без картинок и скоментариями …. картинки в оригинале смотреть  :)
(авторы оригинального текноута P. Karthikeyan and N. Khadikar)


  1. Отключаем UAC (Tech Note 772 ,Tech Note 733)
  2. Убеждаемся что Фаервол везде выключен
  3. Убеждаемся что версия .NET Framework на всех машинах одинаковая
  4. Проверяем пингами связь между резервируемыми машинами и между этими машинами и Галактикой.
    Пинговать по как по
    именам, так  и по IP адресам.
    IP
    адреса сверять с теми что в пингах по именам показывает и по ipconfig /all !
    Имена и IP в hosts файле (если мы  его вместо/вместе DNS используем C:\Windows\System32\drivers\etc\hosts) должны совпадать с именами и адресами на машинах (
    были случаи однако....)
  5. Отключить IPv6 для используемых подключений (пишут что иногда помогает :) )
  6. Проверить порядок привязки сетевых карт в настройках Windows.
    Основная сеть по которой платформы общаются обязательно первой, линк между резервными после основной или дальше.
    Tech Note 773 и Tech Note 368
  7. Проверяем настройки DCOM чтобы убедится что он включен :)
    как это делать в Windows 2000 и 2003 читаем в
    Tech Note 461
    В 7ке и 2008 порядок действий такой
    • открываем  Component Services. (Control Panel\All Control Panel Items\Administrative Tools)
    • Выбираем в дереве компьютор для которого собираемся настраивать DCOM (обычно он там 1 и называется My Computer) и правой кнопкой мышки по нему щелкаем :)
    • в выпвшей меню выбераем Properties
    • далее вкладку  Default Properties
    • если не установлена то ставим галочку Enable Distributed COM on the computer. Authentication Level = Connect. Impersonation Level = Identify. Остальные галочки “uncheck”....
    • OK
  8. Проверяем разрешения для папок
    C:\Program Files\ArchestrA\Framework\Bin\CheckPointer
    C:\Program Files\ArchestrA\Framework\Bin\GalaxyData
    C:\Program Files\ArchestrA\Framework\Bin\GlobalDataCache
    Подробнее в
    Tech Note 461 (постараюсь описать развернуто позже)
  9. Убеждаемся что simple file sharing выключен.
    Проверить можно в любой папке через меню
    Folder OptionsView tab → Advanced settings. В ХР убрать галочку Use simple file sharing (Recommended), в Vista|7 убрать Use Sharing Wizard (Recommended).
  10. Версия Application Server должна быть одинаковая на обоих машинах используемых для резервирования.Тест: Первый деплой резервируемого движка не каскадом и с отмеченной галочкой Include Redundant Partner. Проверить резервирование и только после этого деплоить объекты.
  11. Проверяем конфигурацию платформы
    • configuration → General → Network address используем имя ноды а не IP адрес
    • configuration → General → Redundancy Message Channel IP address вписан собственный IP адрес RMC сети а не адрес второй машины (было и сам путал :) )
  12. Проверяем конфигурацию движка
    • галочка Restart the engine when it fails должна быть убрана
    • время скана - Scan Period выставляем болше стандартного и делаем его разным на разных движках для того чтобы они не падали одновременно
    • Если платформы друг друга видят но есть проблеммы с резервированием рекомендуется увеличить значение configuration → Redundancy → Maximum time to discover partners до 30000
    • После сохранения изменений проверьте разрешилась ли проблема … передеплойте :)
    • При большом количестве объектов на движке (несколько сотен штук или сложных просто очень.... ) необходимо распределять нагрузку. Создайте новые движки и перенесите некоторые объекты на них для равномерного распределения нагрузки
  13. Используйте Object Viewer чтобы проверить работу резервирования. Проверяйте следующие атрибуты:
    • Redundancy.Status
    • Redundancy.PartnerStatus
    • Redundancy.Identity
    • Platform Engine.Objects (опционально но полезно)

вторник, 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