Есть ли в WinnCC flexible что то типа индиректов как в Intouch.
Просто без них проект превращается в набор экранов с одинаковым видом но разными тегами
Пример: есть 20 задвижек надо нарисовать одно окно и управлять именно вызвавшей это окно задвижкой и в то же время получать информацию о ней в режиме реального времени, а не один раз при присвоении значения.
Еще может есть у кого руководство по скриптам в win flex любой версии.
kaspiysk@bk.ru
[?]: Есть ли в WinnCC flexible индиректы как в Intouch.
-
- Posts: 5
- Joined: Tue Jun 15, 2010 9:10 am
-
- Posts: 62
- Joined: Tue Dec 22, 2009 12:45 am
- Location: Москва
Re: [?]: Есть ли в WinnCC flexible индиректы как в Intouch.
Есть, но через пятую точку - при создании тега указывается, что он адрес получает из другого тега, который можно создать как интернал, так и в плс. Если правильно помню, то не на всех панелях работает - самые простые так не умеют.
В нормальной версии WinCC (не Flexible) такого провернуть не смог. Может полхо искал
В нормальной версии WinCC (не Flexible) такого провернуть не смог. Может полхо искал
-
- Posts: 149
- Joined: Sun Dec 20, 2009 1:30 pm
- Location: Russia
Re: [?]: Есть ли в WinnCC flexible индиректы как в Intouch.
Адресацию тегов можно обозначить как косвенную - правильно сказали: адрес тег может получать из другого тега, который может быть внутренним и вычисляться динамически (каким нибудь скриптом)
-
- Posts: 149
- Joined: Sun Dec 20, 2009 1:30 pm
- Location: Russia
Re: [?]: Есть ли в WinnCC flexible индиректы как в Intouch.
Пример: есть несколько объектов, состояние каждого из которых описывается 1 байтом.
Каждому объекту присваиваете номер.
Передаваться этот номер может в виде внутреннего тега. изменяя этот номер можно обратиться к любому байту (объекту)
Пример: 3 бит каждого байта, содержит информацию о состоянии переключателя управления Ручной/Автоматический.
В данном примере нет вычислений скриптами.
Просто задаете номер объекта, и получаете о нем байт информации.
Каждому объекту присваиваете номер.
Передаваться этот номер может в виде внутреннего тега. изменяя этот номер можно обратиться к любому байту (объекту)
Пример: 3 бит каждого байта, содержит информацию о состоянии переключателя управления Ручной/Автоматический.
В данном примере нет вычислений скриптами.
Просто задаете номер объекта, и получаете о нем байт информации.
-
- Posts: 5
- Joined: Tue Jun 15, 2010 9:10 am
Re: [?]: Есть ли в WinnCC flexible индиректы как в Intouch.
Это понятный пример но опять таки все ручками. Вот что мне надо сделать. Допустим Имеется задача выбора датчика и изменение его типоразмера. Для этого заводим PLC теги с пустым адрессом если такое возможно(если не с пустым то с левым каким то). Теперь надо написать скрипт в зависимости от номера датчика эти самые теги пустышки получали адрес того датчика который нужен. И дальше работаю с тегами пустышками но уже по конкретному адресу. Что это мне даст экономия окон. Не надо лишних тегов заводить. Просто у меня проект только 300 аналогов и делать под каждый окно с рунтайм содержимым дико. Пока обошелся методом беру значения с каждого аналога при вызове окна с уставками этого тега.
-
- Posts: 149
- Joined: Sun Dec 20, 2009 1:30 pm
- Location: Russia
Re: [?]: Есть ли в WinnCC flexible индиректы как в Intouch.
Не совсем понятно что вы имеете ввиду под понятием "... изменение типоразмера датчика...", но принцип от этого не изменится. Надо правильно организовать расположение данных о датчике в PLC. Данные должны распологатся таким образом, что-бы можно было описать закономерность математически.
Проще говоря, что-бы был определенный порядок расположения этих данных:
Например датчик имеет 4 байт информации, в которых задается его типоразмер (или что там у Вас) и они (4 байт) должны идти попорядку в одном DB. Всем датчикам условно присвоить номера. (скажем с 0 по 300), Далее создаем в WinCC внутренний тег, который будет соответствовать номеру датчика. При вызове окна с параметрами датчика, задаем значение этому внутреннему тегу (т.е определяем номер датчика, параметры которого хотим редактировать). Далее скриптом умножаем его на 4, что будет соответствовать начальному номеру байта вот тех самых 4 байт описания типоразмера.
Например необходимо редактировать 30 датчик. Внутреннему датчику присваиваем номер 30. Скриптом умножаем 30 на 4 и получаем , что информация об этом датчике содержиться в байтах с 120 по 123.
Все это хозяйство займет 1 внутренний тег (нелицензируется) и 1 внешний размером в 4 байт. Последний будет имет коссвенную адресацию.
Проще говоря, что-бы был определенный порядок расположения этих данных:
Например датчик имеет 4 байт информации, в которых задается его типоразмер (или что там у Вас) и они (4 байт) должны идти попорядку в одном DB. Всем датчикам условно присвоить номера. (скажем с 0 по 300), Далее создаем в WinCC внутренний тег, который будет соответствовать номеру датчика. При вызове окна с параметрами датчика, задаем значение этому внутреннему тегу (т.е определяем номер датчика, параметры которого хотим редактировать). Далее скриптом умножаем его на 4, что будет соответствовать начальному номеру байта вот тех самых 4 байт описания типоразмера.
Например необходимо редактировать 30 датчик. Внутреннему датчику присваиваем номер 30. Скриптом умножаем 30 на 4 и получаем , что информация об этом датчике содержиться в байтах с 120 по 123.
Все это хозяйство займет 1 внутренний тег (нелицензируется) и 1 внешний размером в 4 байт. Последний будет имет коссвенную адресацию.
-
- Posts: 5
- Joined: Tue Jun 15, 2010 9:10 am
Закономерность есть. Извесно смещение и по нему вычисляется адресс сразу для всего(типоразмер,шкала,значение,уставкb, флаг качества ).
Пример смещение 15
16
Мне вот теперь и надо создать тег и динамически заносить туда адреса.
У меня единственный вопрос как изменять адрес тега в рантайм.
Вот и все.!!!
Пример смещение 15
Code: Select all
DB 1 DBX 414.2
DB 2 DBD 312
DB 1 DBD 396
DB 2 DBD 304
DB 1 DBD 404
DB 1 DBD 392
DB 2 DBD 300
DB 2 DBD 308
DB 1 DBD 400
DB 1 DBD 408
Code: Select all
DB 1 DBX 440.2
DB 2 DBD 332
DB 1 DBD 422
DB 2 DBD 324
DB 1 DBD 430
DB 1 DBD 418
DB 2 DBD 320
DB 2 DBD 328
DB 1 DBD 426
DB 1 DBD 434
Мне вот теперь и надо создать тег и динамически заносить туда адреса.
У меня единственный вопрос как изменять адрес тега в рантайм.
Вот и все.!!!
-
- Posts: 149
- Joined: Sun Dec 20, 2009 1:30 pm
- Location: Russia
Re:
Дык в чем проблема, то? Не пойму я Вас: задавайте внтуреннему тегу значение [начальное_значение]+15 или [начальное_значение]+16. Если смещение обозначить как внутренний тег с именем num, то адрес первого в вашем примере тега запишется так: DB 1.dbx[num].2kaspiysk wrote:...
У меня единственный вопрос как изменять адрес тега в рантайм.
...
Изменяете num - изменяется адрес тега, вот и все.
-
- Site Admin
- Posts: 1387
- Joined: Sat Aug 13, 2005 6:15 am
-
- Posts: 10
- Joined: Thu Oct 11, 2007 5:35 am
- Location: Russia
Re: [?]: Есть ли в WinnCC flexible индиректы как в Intouch.
Есть кусок данных 500 раз по 5 слов, начинаются от DB200.DBW8
DB200.DBW[pointer_w1]
..............
DB200.DBW[pointer_w5]
указатель на него хранится как слово в DB200.DBW0
при изменении DB200.DBW0 запускается:
1.скрипт
в нем рассчитываются значения: pointer_w1=DB200.DBW0*10+8
pointer_w2=DB200.DBW0*10+10
....................
pointer_w2=DB200.DBW0*10+16
2.скрипт
в нем данные выводятся в файл
Проблема: после выполнения скрипта1 данные в DB200.DBW[pointer_w1..5] не обновляются и остаются прежними. А обновляются только после завершения всех скриптов, вызванных изменением DB200.DBW0.
DB200.DBW[pointer_w1]
..............
DB200.DBW[pointer_w5]
указатель на него хранится как слово в DB200.DBW0
при изменении DB200.DBW0 запускается:
1.скрипт
в нем рассчитываются значения: pointer_w1=DB200.DBW0*10+8
pointer_w2=DB200.DBW0*10+10
....................
pointer_w2=DB200.DBW0*10+16
2.скрипт
в нем данные выводятся в файл
Проблема: после выполнения скрипта1 данные в DB200.DBW[pointer_w1..5] не обновляются и остаются прежними. А обновляются только после завершения всех скриптов, вызванных изменением DB200.DBW0.