PDA

Просмотр полной версии : Время обновления графиков СП270



IIeroniux
09.09.2014, 12:39
День добрый!

Возник такой вопрос, каким образом можно уменьшить время обновления графика архивных данных (или графика реального времени)?
Конфигуратор позволяет установить время от 1 секунды и более. А наш технологический процесс предполагает скачкообразное циклическое изменение давления. Естественно график не успевает отрисовывать реальный 'путь' величины давления. Хотелось бы 100-200 мс.

14303

Спасибо!

petera
09.09.2014, 14:34
Начнем с графика реального времени.
Для каждой кривой графика на служебном экране 65532 автоматически добавляется выборка для регистра источника этой кривой.
14304
Если кривых несколько, то выборки на экране 65532 расположены друг на друге, что затрудняет их редактирование. А редактировать придется именно выборки.
Но в начале нужно полностью настроить сам график, т.к. любые изменения в нем, даже цвета линий, приведут к возврату выборок в исходное состояние.
Самый простой способ увеличения скорости обновления графика это увеличение скорости в 10 раз. Если в настройках графика время обновления 2 с, то реальное время будет 200 мс.
Т.к. выборки находятся одна над другой, то нужно аккуратно сдвинуть верхнюю, что бы было видно все выборки.
14305
Теперь в свойствах каждой выборки нужно найти элемент "READ PSB4" и заменить в нем ссылку на регистр PSB3.
14306
Теперь нужно обязательно вернуть все ранее сдвинутые выборки на их прежнее место (для справки X=110, Y=95). В противном случае, при последующем редактировании самого графика, конфигуратор может вылететь с ошибкой.
Если в дальнейшем потребуется график редактировать, то придется все операции редактирования выборок повторить снова.

По поводу исторического графика.
В принципе тоже самое, но выборка для такого графика одна, не зависимо от числа кривых и выглядит она как стандартная выборка, редактировать ее для замены PSB4 на PSB3 нужно в усовершенствовании.
Только есть сомнения, что исторический график будет сохраняться при такой скорости выборок из-за кеширования операций записи в регистры PFW.
Да и пожалейте флешку, быстро протрете до дыр.

IIeroniux
11.09.2014, 15:31
Спасибо за подробное объяснение, все получилось именно так как вы указали!
Сейчас разбираюсь с памятью PSW, PSF. Цель - скопировать видимые точки с графика реального времени на исторический по команде, тем самым сохранив видимый график после отключения питания (ну и с целью защиты ПЗУ панели от дыр).
По результатам отпишусь, надеюсь справлюсь сам.

petera
11.09.2014, 16:18
Спасибо за подробное объяснение, все получилось именно так как вы указали!
Сейчас разбираюсь с памятью PSW, PSF. Цель - скопировать видимые точки с графика реального времени на исторический по команде, тем самым сохранив видимый график после отключения питания (ну и с целью защиты ПЗУ панели от дыр).
По результатам отпишусь, надеюсь справлюсь сам.
Число регистров для одной выборки (для одной точки) у этих графиков разное. Так что скопировать график реального времени в исторический не получится.:(
http://www.owen.ru/forum/showthread.php?t=9992&p=139595&viewfull=1#post139595
Ищите другой путь.

IIeroniux
11.09.2014, 16:52
Число регистров разное из-за возможности сохранения числа и времени в историческом графике? Только в этом отличие?

petera
11.09.2014, 17:18
Число регистров разное из-за возможности сохранения числа и времени в историческом графике? Только в этом отличие?
Именно в этом. И из-за этого структура одной записи и общее количество регистров для этих графиков разные.
Может попробовать в историческом графике источнике использовать регистры PSW? А затем по команде копировать в регистры PFW графика архива.

IIeroniux
13.09.2014, 13:22
Petera, добрый день!

Привожу своеобразный мини-отчет, все получилось практически так, как мне требовалось. Воспользовался вашей подсказкой.

Выкладываю проект с моими объяснениями, и хотелось бы услышать ваши комментарии, если я что-то понимаю не так. Ну и для столкнувшихся с такой задачей будет полезно!

Итак, задача: Уменьшить время отрисовки исторического графика. Как выяснилось, график по умолчанию настроен на сохранение данных в энергонезависимые регистры, поэтому ускорять его таким образом - в десятки раз уменьшить время жизни встроенной флеш-памяти. Как это обойти.
Итак, создаем исторический график и во вкладке управление изменяем регистр PFW (ПЗУ) на PSW (ОЗУ). Почему-то после изменения конфигуратор глючит и чек-бокс 'Автоопределение" (в последнем конфигураторе ошибочно назван 'Реверс бита') становится неактивным. Поэтому нажимаем ОК, выходим из настроек графика и снова заходим. Чек-бокс становится активным, кликаем по нему. Таким образом мы сделали наш исторический график графиком реального времени. Как ускорить его Petera подробно расписал выше.
Источником данных у меня выступает регистр PSW 2000, чуть ниже расположено окно ввода значений в него. Как я понимаю на реальной панели источником данных выступит 4x0 или что-то подобное (согласно адресации в ПЛК).
Чек-бокс 'текущие данные" в настройках графика, как я понимаю, можно отключить - потому как они нужны лишь для отображения данных под курсором.

Все, первый график настроен.

Теперь создаем второй исторический график, который в процессе работы ни будет ничего отображать до тех пор, пока не наступит событие. В моем примере событие наступает по нажатию функциональной кнопки "Сохранить".
Источником данных должен (?) выступать любой незадействованный регистр. В свойствах графика включаем чек-бокс управление (вкладка вид). Область сохранения PFW оставляем неизменной. Всё, тут настройки закончены.

Теперь создаем функциональную кнопку и добавляем функцию 'Передать блок данных'. Указываем регистры и области памяти получателя и отправителя. Внизу, в поле 'Данные-номер' (тут кривой перевод) имеется в виду не конкретный номер регистра, а количество регистров памяти, в которых содержится искомые данные (для нас они находятся на первом графике). Вводите здесь количество регистров.
Petera хорошо все расписал (http://www.owen.ru/forum/showthread.php?t=9992&page=3).

В моем случае получается:

Кол-во регистров=4+(100+1)*(1+6), где:

4 - регистры кольцевого буфера;
(100 - число ячеек на графике;
1) - резервный регистр, выделяемый панелью;
(1 - количество регистров word, тут хранится наше значение в данный момент времени;
6) - количество регистров word, тут хранится данные времени/даты для нашего значения).

Всё. У меня получилось 781 регистр, минус один резервный=780. Это число подставляем в поле 'Данные-номер'.

Всё, проект отлично запускается в эмуляции и работает, по нажатию кнопки текущий экран графика реального времени копируется на второй график и застывает.
Сейчас подправлю свой рабочий проект и в понедельник залью программу в СП270.

p.S. Petera, для того, что бы значения сохранились в области PFW необходимо не отключать питание панели в течении 10 минут после нажатия кнопки? Или я с чем-то путаю?
p.S.S. Ещё вопрос не по теме. У меня в усовершенствовании крякозябры отображаются, где можно изменить шрифт по умолчанию?

Спасибо!

petera
14.09.2014, 01:45
Ещё вопрос не по теме. У меня в усовершенствовании крякозябры отображаются, где можно изменить шрифт по умолчанию?
если у Вас такой случай http://www.owen.ru/forum/showthread.php?t=8604&p=125759&viewfull=1#post125759, то
для XP посмотрите здесь http://www.owen.ru/forum/showthread.php?t=8604&p=125926&viewfull=1#post125926
для Win7 посмотрите здесь http://www.owen.ru/forum/showthread.php?t=8604&p=125858&viewfull=1#post125858
А если вопрос о том Как переводиться "Convert 0_(1)µДДї±кКэѕЭЙППЮ", то Вам сюда http://www.owen.ru/forum/showthread.php?t=14132&p=101900&viewfull=1#post101900


Petera, для того, что бы значения сохранились в области PFW необходимо не отключать питание панели в течении 10 минут после нажатия кнопки? Или я с чем-то путаю?
10 минут ждать не надо, нужно подождать около 30 сек. Уточните на реальной панели.


чек-бокс 'Автоопределение" (в последнем конфигураторе ошибочно назван 'Реверс бита')
Воспользуйтесь этим исправлением http://www.owen.ru/forum/showthread.php?t=14132&p=101890&viewfull=1#post101890
Теперь по существу задачи.
В основном все сделано верно. Но есть одна ошибка

В моем случае получается:
Кол-во регистров=4+(100+1)*(1+6), где:
4 - регистры кольцевого буфера;
(100 - число ячеек на графике;
1) - резервный регистр, выделяемый панелью;
(1 - количество регистров word, тут хранится наше значение в данный момент времени;
6) - количество регистров word, тут хранится данные времени/даты для нашего значения).

Всё. У меня получилось 781 регистр, минус один резервный=780. Это число подставляем в поле 'Данные-номер'.
а) в формуле подсчета числа регистров для графика N=4+(n+1)*(Kw+2*Kdw+6) в множителе (n+1) учитывается не один дополнительный регистр, а одна дополнительная запись, в Вашем случае 1+6=7 регистров. Эта запись не резервная, все эти регистры используются для графика.
б) 4+(100+1)*(1+6)=711, а не 781:).
Именно это число регистров (711) нужно подставлять в поле 'Данные-номер', ни чего отнимать не нужно!

Теперь мои рекомендации.
а) График "Моментальный снимок"

Источником данных должен (?) выступать любой незадействованный регистр.
Все верно, но нужно использовать не регистр 4х.., а какой-либо регистр панели, любой, например PSW0. Дело в том, что хотя сам график все время будет остановлен, все равно панель будет опрашивать регистр-источник, с заданной периодичностью. Если задать 4х.., то будут лишние, не нужные, запросы к ПЛК.
Для того, что бы этот график был неподвижным Вы используете бит PSB400, которым управляете кнопкой "Сохранить"
14384
Я предлагаю использовать в качестве бита управления графиком константу лог."0". Такой константой является системный бит PSB1(для справки PSB0 константа лог."1").
б) График-источник.
А вот бит PSB400 можно использовать для управления графиком-источником.
14385
При этом и содержимое ф.кнопки тоже изменится. Этим мы "заморозим" график источник на время копирования всех 711 регистров источников, что бы некоторые из них случайно не изменились очередной выборкой. Хотя такая заморозка, скорей всего является и не нужной, этакий элемент "паранойи".
Чтобы заморозка работала придется добавить глобальную ф.область установки бита PSB400 при включении питания.
14386

График "моментальный снимок лучше поместить на отдельный экран, при этом можно будет включить для него Чек-бокс 'текущие данные", добавить две кнопки событий "Prev Item" и "Next Item", цифровой дисплей и можно будет просматривать данные под курсором.

petera
15.09.2014, 12:05
В панели графики не хотят дружить на одном экране, нужно разносить на разные.

IIeroniux
15.09.2014, 13:25
У меня в реальном проекте они и разнесены на разные. Программу подправил, залил на панель - но технической возможности проверить не было.
Интересно, у меня в проекте 150 точек графика и две параметра (выборки как я понимаю, давление и аварийная уставка). Получается 1212 регистров. Панель при загрузке стала ругаться, пришлось увеличить PriPSW до 2048. После этого загрузка прошла нормально.

p.s. Крякозябры так и не победил, по первому способу (импорт файла реестра) ничего не вышло, а по второму (замена файла кодировок 1251 на 1252) при перезагрузке полностью исчезла возможность вводить кириллицу в любом окне windows.
Делал не лично я (на работе у всех гостевой доступ, и все изменения производит администратор), но факт остается фактом.
Вообщем нужно ещё погуглить и заниматься.

IIeroniux
17.09.2014, 07:18
Petera, снова на поклон:)

Задача. Цифровой ввод, есть возможность проверки вводимых значений. Задается только в процессе разработки проекта, в ходе выполнения программы на живой панели документированной возможности их изменений нет. А хотелось бы.

Понятно, что минимальное значение хранится в регистрах PSW120...127, а максимальное PSW112...119.

Естественно, если просто записать число в psw112/120 ничего работать не будет.

Запись через элемент WRITE записывает корректно во все восемь регистров в кодах символа в ASCII. Но как объединить WRITE с элементов ввод в панели не могу дойти своим умом.

Но почему та же запись с теми же настройками через символьный ввод (nregister, 8 регистров) не проходит и число записывается только в первый регистр PSW112/PSW120.

Пробовал подменять в цифровом вводе, через усовершенствование, write на read, а записывать в нужную область через цифровой ввод. Но идея так же не прошла.

Сейчас ещё возникла мысль, вот допустим создам я три цифровых ввода, каждый со своими параметрами (ограничивающими). И сможем корректно записывать в регистры PSW112...PSW127. Но как дать понять панели, что при клике на конкретный элемент подставлялись именно нужные значения?
Отсюда вытекает вопрос, в каких регистрах панель хранит заранее прописанные значения max и min, если элементов больше одного? Ведь при вызове нужного элемента ввода она просто подставляет заранее заданные значения в PSW112...PSW127. Очень хочется разобраться.

Или проще идти через блок lin_TRAFO и подставлять туда 400... 20000?

petera
17.09.2014, 09:07
Petera, снова на поклон:)

Задача. Цифровой ввод, есть возможность проверки вводимых значений. Задается только в процессе разработки проекта, в ходе выполнения программы на живой панели документированной возможности их изменений нет. А хотелось бы.

Понятно, что минимальное значение хранится в регистрах PSW120...127, а максимальное PSW112...119.

Естественно, если просто записать число в psw112/120 ничего работать не будет.

Запись через элемент WRITE записывает корректно во все восемь регистров в кодах символа в ASCII. Но как объединить WRITE с элементов ввод в панели не могу дойти своим умом.

Но почему та же запись с теми же настройками через символьный ввод (nregister, 8 регистров) не проходит и число записывается только в первый регистр PSW112/PSW120.

Пробовал подменять в цифровом вводе, через усовершенствование, write на read, а записывать в нужную область через цифровой ввод. Но идея так же не прошла.

Сейчас ещё возникла мысль, вот допустим создам я три цифровых ввода, каждый со своими параметрами (ограничивающими). И сможем корректно записывать в регистры PSW112...PSW127. Но как дать понять панели, что при клике на конкретный элемент подставлялись именно нужные значения?
Отсюда вытекает вопрос, в каких регистрах панель хранит заранее прописанные значения max и min, если элементов больше одного? Ведь при вызове нужного элемента ввода она просто подставляет заранее заданные значения в PSW112...PSW127. Очень хочется разобраться.

Или проще идти через блок lin_TRAFO и подставлять туда 400... 20000?
Максимальное и минимальное значение для ввода не хранится в регистрах PSW112...119 и PSW120...127, а хранится в самом цифровом вводе.
Регистры PSW112...119 и PSW120...127 служат для передачи заданных пределов в текстовые строки Max и Min клавиатуры_1 (KeyBoard_II).
14426

Это только индикация заданных пределов. Информация в этих регистрах ни как не влияет на ограничения вводимых значений. Новые значения (для каждого цифрового ввода) записываются туда при клике на каком-либо цифровом вводе, информация всякий раз будет новая, прописанная в настройках Проверка максимум и Проверка минимум конкретного цифрового ввода.

вопрос, в каких регистрах панель хранит заранее прописанные значения max и min, если элементов больше одного? Ведь при вызове нужного элемента ввода она просто подставляет заранее заданные значения в PSW112...PSW127. Очень хочется разобраться
Проверка введенного числа производится непосредственно в элементом Input Value с помощью Range Check
14427
Вот именно в Range Check каждого цифрового ввода и хранятся заданные мин и макс значения.
А что бы хранить эти значения в регистрах панели для для последующего изменения нужно с помощью действия Property Contain задать нужные регистры для свойств элемента Range Check "максимальное значение" и "минимальное значение", например PFW256 и PFW257
Пределы для ввода можно будет менять, только строки Max и Min на клавиатуре будут оставаться всегда старыми:(.
14428----->14430


Или проще идти через блок lin_TRAFO и подставлять туда 400... 20000?
А это Вы о чем?

IIeroniux
17.09.2014, 13:05
Petera, сегодня удалось позаниматься на объекте. Все получилось так, как и задумывалось. Время сохранения данных в панели на самом деле около 40 - 60 секунд. Если отключаешь сразу, то могут не сохранится.
Выяснил одну не очевидную для меня вещь.

Мы имеем два исторических данных, один из них считаем реальным (он пишет в PSW), а второй историческим (в него копируются по событию данные из области PSW первого графика в область PFW второго графика).
Так вот, сколько мы имеем выборок (т.е. кривых) на графике реального времени, столько же должно быть 'обманок' в графике-получателе, т.е. историческом графике. На этом я застопорился, ибо на графике реального времени я меня было две выборки, а на графике историческом изначально я поставил одну. И ничего не копировалось. После добавления второй обманной выборки на второй графике все заработало так, как и должно было быть!

Ещё раз спасибо!

p.s.
Пределы для ввода можно будет менять, только строки Max и Min на клавиатуре будут оставаться всегда старыми:(.

У меня получалось менять строки Min и Max. В ближайшее время займусь этим и выложу результат, если будет конечно же:)

petera
17.09.2014, 13:21
У меня получалось менять строки Min и Max. В ближайшее время займусь этим и выложу результат, если будет конечно же:)
У меня тоже есть решение, сейчас делаю описание.

petera
17.09.2014, 14:16
И так в предыдущем посте я показал самое простое решение динамического изменения пределов для цифрового ввода.
Недостаток этого решения в том, что значения Макс и Мин на клавиатуре будут "левые". Можно ли это исправить?
Сами значения Мин и Макс у нас теперь хранятся в двух выделенных регистрах, но они в цифровом виде, а для клавиатуры нужны строки.
Т.е. придется перевести цифровые значения в коды ASCII. Возможно ли это сделать средствами панели? Да и очень просто, причем без всякой математики.
Сделаем ГМ с таким хитрым цифровым вводом. Зададим некоторые исходные данные для него.
Пусть требуется цифровой ввод в регистр PSW256.
-формат -десятичный;
-длина всего 5 знаков, 2 из них после запятой;
-верхний предел будет храниться в энергонезависимом регистре PFW256;
-нижний предел будет храниться в энергонезависимом регистре PFW257;
В дальнейшем заданные параметры можно будет менять уже в готовом ГМ.
Нам потребуются
14432
-три стандартных цифровых ввода в регистр PSW256 для ввода в заданный регистр, PFW256 для ввода Макс предела, PFW257 для ввода Мин предела. У всех одинаковый формат, десятичное число, всего 5 знаков, 2 знака после запятой. Для перврого цифрового ввода в настройках разрешена проверка Макс и Мин значений;
-два элемента READ для чтения регистров PWF256(макс) и PFW257(мин);
-два элемента "Базовый текст". Для текста настройки совпадают с настройками дисплеев -десятичное число, всего 5 знаков, 2 знака после запятой. Размер шрифта как можно меньший.
14433

Создание ГМ начнем с того, что сделаем у цифрового ввода внешними(Property Float) свойства:
-Input Value элементов WRITE(PSW112) и WRITE(PSW120).
-Максимальное значение и Минимальное значение элемента Range Check.
14435
http://www.owen.ru/forum/attachment.php?attachmentid=14431&d=1410947334
Для удобства последующего редактирования часть получившихся Float Property я переименовал.
Назовем данный этап Шаг 1.

IIeroniux
17.09.2014, 14:22
Может быть лучше выложить в маленькие хитрости?

petera
17.09.2014, 14:32
Может быть лучше выложить в маленькие хитрости?
Поздно:)
Уже часть выложил тут, но позже ссылку на создание этого ГМ дам в теме "Как делать графические макросы" http://www.owen.ru/forum/showthread.php?t=14406

petera
17.09.2014, 15:41
Теперь выровняем по вертикали и по горизонтали два элемента текст и цифровой дисплей, затем сгруппируем их.
http://www.owen.ru/forum/attachment.php?attachmentid=14436&d=1410949626
Теперь у получившейся группы
-сделаем внешним свойство "Дисплей содержимого" (Нужно было бы перевести его как Контент дисплея" для обоих элементов Text.
-для удобства последующего редактирования я переименуем получившиеся Float Property в Макс и Мин.
-свяжем с помощью действия Property Float новое свойство Float Property "Range Check0_(16)ofМаксимальное значение" цифрового дисплея со свойством Макс, а новое свойство Float Property "Range Check0_(16)ofМинимальное значение" цифрового дисплея со свойством Мин.
http://www.owen.ru/forum/attachment.php?attachmentid=14437&d=1410952078
Этими действиями мы добавили к группе новые входы Макс и Мин, причем поданная на вход Макс информация будет попадать и в первый Текст и в Максимальное значение Range Check. Аналогично поданная на вход Мин информация будет попадать и во второй Текст и в Минимальное значение Range Check.
Теперь зададим источники информации для входов Макс и Мин. Этими источниками будут оставшиеся элементы READ
http://www.owen.ru/forum/attachment.php?attachmentid=14439&d=1410953701
Здесь для связи входов Макс и Мин использовалось действие Property Contain.
Назовем это состояние Шаг 2.
Остался последний шаг.

petera
17.09.2014, 16:43
Теперь осталось показать обещанное преобразование цифровых значений в коды ASCII. Это в данном примере, как ни странно, самое простое.:rolleyes:
Не зря же я использовал элементы "Базовый текст". Хотя благодаря переводу трудно догадаться.
14441

И так свойство Текста "Дисплей содержимого" нужно читать как "Контент дисплея" сюда, например с помощью READ подается цифровое значение, а вот свойство "Характеристики экрана" совсем ни какие не характеристики, а "Display Character", т. е "Отображаемые символы".
Теперь понятно от куда я возьму значения верхнего и нижнего предела в символьном представлении (коды ASCII). Просто цифровое значение нужно пропустить через элемент "Базовый текст" на выходе получится строка символов. И все ни какой математики не потребуется.:rolleyes:
В нашем случае нужно для Float Property цифрового ввода "Строка Макс" и "Строка Мин" подать значения "Характеристики экрана" соответствующих элементов Текст.
Для этого все эти свойства делаем внешними свойствами (Float Property) главной группы, а затем действием Property Link приравниваем "Строка Макс" и "Строка Мин" свойствам "Характеристики экрана" соответствующих элементов Текст.
http://www.owen.ru/forum/attachment.php?attachmentid=14444&d=1410956850

Назовем это состояние Шаг 3. Хотя это уже полноценный макрос, но можно немного облагородить его содержимое.
http://www.owen.ru/forum/attachment.php?attachmentid=14446&d=1410957724

IIeroniux
21.09.2014, 13:05
А на картинке тоже артефакт? В реальной панели его не будет?
14478

P.s. Petera, не могу найти на форуме упоминание о том, как сделать выпадающий список выбора значений. Делать его с помощью скрытия элементов (через if и усовершенствование) кажется мне громоздким, а так было какое-то изящное решение. Не могли бы дать ссылку, если помните сами?

petera
21.09.2014, 23:23
А на картинке тоже артефакт? В реальной панели его не будет?
14478

P.s. Petera, не могу найти на форуме упоминание о том, как сделать выпадающий список выбора значений. Делать его с помощью скрытия элементов (через if и усовершенствование) кажется мне громоздким, а так было какое-то изящное решение. Не могли бы дать ссылку, если помните сами?
1.В панели все работает верно, это так эмулятор работает

2.Про выпадающий список здесь http://www.owen.ru/forum/showthread.php?t=17566&p=139727&viewfull=1#post139727,

http://www.youtube.com/watch?v=8ca7Z8EjMMY
В той теме, ниже есть видео по созданию такого списка, но их лучше на ютубе посмотреть, встроенное в сообщение почему-то хуже по качеству.