Страница 1 из 2

Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Чт май 16, 2013 1:34 pm
Konstantin88
Здравствуйте!
Сразу оговорюсь, что я новичок в InTouch.
Для начала опишу задачу:

Делаем программу проверки технологических защит.
Имеется набор значений параметров. У каждого параметра есть аварийная уставка.
Значения параметров изменяются в реальном времени.
Для проверки отработки алгоритма технологической защиты пользователь должен имитировать аварийное значение каждого параметра.
Алгоритм примерно таков:

1) Перейти на страницу проверки защит и включить "Режим проверки защит".
2) Выбрать нужные для проверки в данный момент защиты.
3) Запустить автоматическую проверку защит.
4) Просмотреть/распечатать отчёт.

На первый взгляд просто. Но в процессе работы я столкнулся со множеством сложностей.

1) У меня нет контроллера. Для наглядности показаний текущих значений параметров использую генератор случайных чисел:

OLE_CreateObject(%SR,"System.Random");
DEFF = (%SR.NextDouble)*255;

Но в идеале хотелось бы сделать/скачать имитатор DDE сервера/контроллера и вытягивать тэги и их значения с него.
Я перерыл много информации по этому поводу. Но так ничего и не понял. Объясните пожалуйста по русски. Чтобы просто и ясно.

2) Для констатации выбора защит я создал ещё по 1 тегу для каждой защиты и с кнопки задаю 0 или 1.
Если можно как-нибудь по-другому, буду рад помощи.

3) До этого этапа вроде всё хорошо. А вот с автоматической проверкой проблемы.
Оставив тэги, которые привязаны к реальному текущему значению DEF, DEF1...и т.д., я создал тэги-имитаторы, т.к. мне нужно, чтобы пользователь постоянно следил за ситуацией, замена реального значения невозможна(!) DEFF, DEFF1... и т.д. В них посылаю значение аварийной уставки, в следствие чего происходит срабатывание защит, за которое отвечают тоже отдельные тэги. Если запутались подытожим:
№ Tag Описание
1 proba Вкл/Выкл режим проверки защит
2 proba1 Выбор защиты №1
3 proba2 Выбор защиты №2
4 proba3 Сработала защита №1
5 proba4 Сработала защита №2
6 DEF Аварийное значение уставки защиты №1
7 DEF1 Аварийное значение уставки защиты №2
8 DEFF Текущее значение параметра защиты №1
9 DEFF1 Текущее значение параметра защиты №2

После запуска автоматической проверки должен выполняться следующий алгоритм:

Если защита №1 выбрана
ТО отправить аварийное значение уставки, подтвердить отработку/неотработку алгоритма, внести защиту в отчёт
ЗАДЕРЖКА 20 секунд
Если защита №2 выбрана
ТО отправить аварийное значение уставки, подтвердить отработку/неотработку алгоритма, внести защиту в отчёт
ЗАДЕРЖКА 20 секунд
Если защита №3 выбрана
ТО отправить аварийное значение уставки, подтвердить отработку/неотработку алгоритма, внести защиту в отчёт
и т.д.


Здесь я столкнулся с массой проблем.
Давайте по порядку.
Не знаю как реализовать задержку. Подсмотрел на форуме, как можно сделать с помощью 3-х скриптов по условию.
Когда срабатывает первая защита flag =1; counter = 0; Пока flag == 1 counter = counter +1; Когда counter == 50 срабатывает защита №2.
Данный метод хорош для 2-х защит. Но если их 200?!
Нужно принципиально иное решение!

Следующий момент - ОТЧЁТ.
Вообще не понимаю как писать в Excel чтобы всё красиво и на свои места.

Логика такова:

ЕСЛИ защита №1 выделена ТО она попадает в ОТЧЁТ ИНАЧЕ нет
ЕСЛИ защита №2 выделена ТО она попадает в ОТЧЁТ ИНАЧЕ нет
ЕСЛИ защита №2 выделена ТО она попадает в ОТЧЁТ ИНАЧЕ нет
и т.д.

И следующий момент. Момент самой реализации.
Как сделать так, чтобы например:
В файл report.xls в ячейку A1 попадало имя тэга защиты №1, в ячейку А2 описание тэга защиты №1, в ячейку A3 просто слово ОК и т.д.
И всё это - ПРИ УСЛОВИИ, что защита №1 была выделена и проверена!
Никак не могу с этим справиться.

Вот такие вот дела. Хочу во всем постепенно разобраться.
Кто-то скажет: "Да нужно написать программу в C++. Запустить её на сервере. Сервер соединить с InTouch. И оттуда таскать тэги. Одним InTouch тут не обойтись!".
И возможно вы и правы. Вот только объясните конкретно что и самое главное ГДЕ писать.
Очень надеюсь на вашу помощь новичку.

Ключевые моменты:
1) Проверка защит с задержкой.
2) Формирование отчёта в excel при условии выделения + чтобы в нужные ячейки писал.


* поступило предложение имитировать работу контроллера через WINCC. Есть инструкции?!

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Чт май 16, 2013 3:30 pm
Генератор зла
Слишком много букв (это не Ваша вина, но всё же...), поэтому читал по-диагонали.

Konstantin88 писал(а):Но в идеале хотелось бы сделать/скачать имитатор DDE сервера/контроллера и вытягивать тэги и их значения с него.

На любом компе с InTouch делаете: Пуск-Выполнить-Testprot-Enter. Вуа-ля. Читаем хелп и радуемся.
Konstantin88 писал(а):Не знаю как реализовать задержку.

Как и описано на форуме.
Konstantin88 писал(а):Данный метод хорош для 2-х защит. Но если их 200?!

Вы не поверите, но есть проекты с почти 1000 окнами. Представьте, сколько там скриптов :)
Konstantin88 писал(а):Нужно принципиально иное решение!

Если найдёте, сообщите пожалуйста. Сами мучаемся :)

Связь с Excel через DDE-адресацию CxRy (x = номер строки, y = номер колонки)
К тому же, можно формировать CSV-файл. Он проще по структуре, а откроется тем же Excel

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Чт май 16, 2013 4:14 pm
Konstantin88
На любом компе с InTouch делаете: Пуск-Выполнить-Testprot-Enter. Вуа-ля. Читаем хелп и радуемся.


Если честно вообще ничего не понял из Help. Что это такое? В интернете инфы нет =(

Сейчас думаю сделать так:

WINCC ---- OPCserver ---- InTouch

WINCC будет выполнять роль симулятора работы контроллера. Там вроде и задержки можно организовать.



** Вроде разобрался как подключиться к testprot...
но не могу понять по какому принципу он генерирует...И какие галки нужно поставить, что бы к примеру значение I/O Integer менялось с 0 до 150?

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Чт май 16, 2013 4:40 pm
Генератор зла
Это есть программный имитатор сигналов по DDE/SuiteLink-протоколам
Его достаточно запустить. И всё.
А в InTouch надо прописать его переменные.
AccessName = TP
NodeName =
Application = Testprot
TopicName = Topic1

Целочисленные переменные i00-i09
Реальные переменные r00-r09
Другие переменные - см. хелп
Меняются от -99 до +99 и обратно.

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Чт май 16, 2013 4:41 pm
Konstantin88
** Вроде разобрался как подключиться к testprot...
но не могу понять по какому принципу он генерирует...И какие галки нужно поставить, что бы к примеру значение I/O Integer менялось с 0 до 150?

И ещё. Не могу найти инструкцию подробную как связать WINCC и InTouch?

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Чт май 16, 2013 7:04 pm
Генератор зла
Konstantin88 писал(а):Не могу найти инструкцию подробную как связать WINCC и InTouch?

WinCC сам является OPC-сервером.
Всё что Вам нужно, это FSGateway

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Чт май 16, 2013 7:23 pm
Konstantin88
А будьте любезны, выложите FSGateway и DASS7. А то ссылки все устарели на форуме =(

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пт май 17, 2013 11:42 am
Генератор зла
Какой версией InTouch пользуетесь?

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пт май 17, 2013 11:50 am
Генератор зла
http://files.mail.ru/D75251EAA58E4E6CA46FA31C2D44462E

Если пользуеттесь комплектом SP2012 или SP2012R2, то InTouch устанавливается автоматически. Ищите его в Пуск-Программы-Wonderware-System Managed Console (SMC)

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пт май 17, 2013 12:29 pm
Konstantin88
Спасибо огромное! Сейчас буду пробовать разбираться как связать WINCC и InTouch, чтобы обратная связь была. Т.е. беру значения тэгов из WINCC. Но запуск скрипта проверки защит в WINCC начинает выполняться по нажатию кнопки в InTouch.

Сразу вопрос: для этого мне понадобиться 2 машины? Или на 1 компе можно просмотреть и реализовать такую связь?

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пт май 17, 2013 12:42 pm
Генератор зла
Можно попробовать и на одном, сам не пробовал.
Можно на одном компьютере поднять 2 виртуальные машины (обычно так и поступаю).
Можно использовать 2 компьютера.

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пт май 17, 2013 12:52 pm
Konstantin88
FSGateway видит список тэгов WINCC.
Вот только что в самом InTouch прописывать, чтобы значение тэга передавалось из WINCC --- > InTouch? И там и там я создал 2 тэга с одинаковым именем - DEF99 (тэг в WINCC является Internal tag'ом)

Application name - ???
Topic Name - ???
Item - ???

Протоков DDE или SuitLink -?

На данный момент

Application name - FSGateway
Topic Name - Group_1 - НЕ РАБОТАЕТ =(
Item - DEF99

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пт май 17, 2013 1:56 pm
Konstantin88
Вот ещё скрины. Помогите настроить.

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пт май 17, 2013 2:00 pm
LexSL
Konstantin88 писал(а):Topic Name - Group_1 - НЕ РАБОТАЕТ =(


судя по скринам - надо топик сделать равным OPC_1_Group_1

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пт май 17, 2013 2:08 pm
Konstantin88
Эврика! Вроде работает! первый шаг сделан! Спасибо огромное! Буду дальше теперь разбираться =)

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пт май 17, 2013 4:53 pm
Konstantin88
Не до конца понятно как сделать так, чтобы теперь InTouch являлся сервером, а WINCC - клиентом.

В FSGateway я добавил InTouch.Object, в который экспортировал нужные мне тэги из InTouch. Затем в WINCC я создал OPC соединение, где Servername Archestra.FSGateway.2. Он прекрасно его видит. Выбрал тэги из объекта InTouch.Object, и они прекрасно добавились в WINCC. Одно НО! Я перехожу в режим runtime InTouch и начинаю изменять значения нужных мне тэгов, НО в WINCC их значения остаются нулевыми...как быть?!

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пн май 20, 2013 12:11 pm
Konstantin88
Блин. Неужели никто не сталкивался с настройкой вытаскиванием тэгов из InTouch в WINCC через gateway?! Я уже всё перепробовал...Из WINCC в InTouch без проблем по OPC через gateway передаю, а вот обратно никак не получается. Меняю значение тэга(естественно другого) в InTouch, а в WINCC Value = 0 висит. Зашёл в тупик =(

Установил matrikon и подключился через него к Archestra. Он прекрасно видит значение тэга, передаваемого из InTouch в Archestra. Значит на участке InTouch ---> Archestra.FSGateway всё ОК!
Хромает участок Archestra.FSGateway ---- > WINCC. И я искренне не понимаю почему.

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пн май 20, 2013 1:26 pm
Генератор зла
1. Попробуйте в FSGateway вместо localhost прописывать IP компьютера.
2. В InTouch DEFF1 имеет тип Real, а в WinCC - Signed 32-bit value. Уже подзабыл WinCC, но проверьте совпадение типов.

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пн май 20, 2013 1:28 pm
LexSL
Konstantin88 писал(а):Хромает участок Archestra.FSGateway ---- > WINCC. И я искренне не понимаю почему.

Мои предположения:
Так как FSGateway имеет интерфейс OPC, а это означает автоматический старт FSGateway при обращении к нему клиентов, но !!! важно!!! , если при этом fsGateway запущен из консоли SMC как
DAServer (интерфейс DASEngine), то обмен по OPC не запуститься, следовательно: надо из SMC сделать стоп FSGateway и пусть WinCC сам запускает его как OPC сервер.
RTFM. В help это вроде написано

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пн май 20, 2013 1:52 pm
Konstantin88
Проделал данную процедуру. Эффекта 0. На передачу из WINCC всё работает, а вот в обратную сторону не хочет.

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пн май 20, 2013 2:23 pm
Генератор зла
Копайте логи WinCC. Думаю, там что то должно быть.

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пн май 20, 2013 3:33 pm
LexSL
попробуйте вывести значение на экран WinCC в IOField, и еще в StaticText в свойство Text вывести TagStatus и QualityStatus тега (функция GetTagFloatStateQC),
просто зачем это нужно - WinCC не производит опрос тегов если они не на текущем экране и если они не задействованы в TagLogging или AlarmLogging, может быть именно поэтому

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пн май 20, 2013 7:39 pm
Konstantin88
Совершенно верно. Сам к этому пришёл. Но всё равно спасибо огромное. Всё летает туда и обратно. Сейчас буду осваивать язык WINCC. Если у кого есть ссылки на учебники для чайников, то буду рад.

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Чт май 23, 2013 7:27 pm
Konstantin88
Доброго времени суток, коллеги.
Я в итоге реализовал последовательную проверку выделенных пользователем защит с задержкой в 10сек. Задержку прописал в скрипте WINCC.
Сейчас прекрасно общаюсь в обе стороны по схеме WINCC <---> FSGateway <---> InTouch.

Теперь встал вопрос кнопочки "Формирование отчёта".

Если ли у вас пример написания скриптов формирования отчётов. Подойдет CSV файл.

Суть задачи формирования отчёта:

После того как пользователь выполнил проверку, ВЫДЕЛЕННЫХ им ранее защит, по нажатию кнопки "Сформировать отчет", должен формироваться файл Report примерно со следующим содержанием:

Trent <номер юнита>
Time: <Время формирования>
Date: <Текущая дата>

1. <Устройство к которому привязана выделенная защита> <Текущее значение параметра> <Аварийная уставка параметра> <Alarmcomment> <"Удачно/Неудачно">

Нужно, чтобы всё это красивенько выровнено было по столбикам.
Есть у кого-нибудь "рыба" вывода?! Как привязать то, что мне нужно конкретно вывести я разберусь. Нужен шаблон!
Буду очень признателен!!!

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пт май 24, 2013 11:54 am
Steelman63
Konstantin88 писал(а):Подойдет CSV файл.
Нужно, чтобы всё это красивенько выровнено было по столбикам.


врядли получиться совместить две эти опции в силу особенностей csv формата
если нужно форматирование в отчете - нужен Excel

ну а с csv все просто:
FileWriteFields (filename, offset, starttag, numberoffields);
FileWriteFields("c:\set.csv",0,"RecipeTag1",4);

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пт май 24, 2013 12:04 pm
Konstantin88
А можно подробнее.
Можно и в excel. Только вот насколько я знаю, то он не будет автоматически обновлять данные, если excel не запущен.
Я могу сделать шаблон в exel и прописать там через =!VIEW ссылки на тэги и т.д. Но только мне не нужно, что бы пользователь смотрел отчет. Меня интересует просто печать. Да и отчёт мне нужен только по защитам, которые выделили, а не по всем. Сложно всё...Не могу пока придумать решение...

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пн май 27, 2013 12:33 pm
Konstantin88
Всем доброго времени суток.
Прикрепил скрин из Excel с примерной формой требуемого отчета.
Но давайте по порядку.

1) Первое, с чего нужно начать - это ВЫБОРОЧНЫЙ вывод в Excel. Т.е. В таблицу должны попадать только те тэги, которые пользователь ВЫДЕЛИЛ в InTouch. КАК ЭТО СДЕЛАТЬ?!
У меня есть тэги, отвечающие за факт выбора.
Т.е. ЕСЛИ тэг выбора == 1 ТО отправить данную защиту в отчёт;

2) Как вывести имя тэга мне понятно. Как вывести поле его описания/значение и т.д.?

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пн май 27, 2013 12:46 pm
b4900113
Как вывести поле его описания/значение и т.д.?


Смотрите хелп, получить доступ к значению тега можно через поля Tag1.Value, к тому же есть поля Tag1.Name, Tag1.Reference и тд, сейчас нет под рукой хелпа.

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пн май 27, 2013 1:01 pm
Konstantin88
ОК. С этим понятно. Но пункт №1 остаётся открытым!

Re: Есть интересная задача! Но нужна помощь!

СообщениеДобавлено: Пн май 27, 2013 7:47 pm
Konstantin88
Подскажите пож-та хоть как просто сурово и грубо вывести мне в excel данные, но чтобы при этом excel не открывался или же работал в фоновом режиме!
Есть ТЭГ proba101. Есть файл test.xls
Tagname нужно записать в ячейку А1;
Comment записать в ячейку А2;
Value записать в ячейку А3.


Excel при этом открываться не должен до тех пор пока пользователь сам не захочет его открыть.
Не могу! Если можно со скринами или текст скрипта полностью!