Страница 1 из 4 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 31

Тема: CFC last value

  1. #1

    По умолчанию CFC last value

    Доброго времени суток. Появился вопрос по реализации, к сожалению не могу проверить по факту. Сам вопрос: как можно реализовать на CFC переменную которая помнит значение на 2 секунды ранее.
    Например, у меня есть СИ8 в нем идет подсчет импульсов, но нужно еще реализовать выход на режим без расходомера. Думаю использовать значения СИ8 импульсов за промежуток в 2 сек. Зная цену импульса можно узнать текущее показание расхода. Но это все теория.
    И вот встал вопрос по реализации как записать в переменную прошлое значение? Я попробовал сделать с помощью блоков BLINK SR и MOVE (EN/ENO), но это кажется не то.
    Может кто сможет что нибудь подсказать?
    Спасибо.

  2. #2
    Banned
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    А как подсказывать то если не выложили свой проект. Обычно это делается с помощью таймера ton и селектора sel

  3. #3
    Пользователь Аватар для Serhioromano
    Регистрация
    15.09.2015
    Адрес
    Бишкек
    Сообщений
    265

    По умолчанию

    Ни думаю что ТОН тут справиться. Ведь речь идет о 2х секунадх назад. Это значит чно нужно хранить данные за последние 2 секунды. Нам нужно что то вроде базы данных для этого. Ведь речь о прошлом. Таймер туда не икак не посчитает.

    Что первое приходи в голову, это массив структурированых данных, который хранит по одному значению на каждый цикл контроллер за последние 2 секунды. И для подсчета берет последее значение массва, а потом его удаляет, и дописывает новое текущее которое через 2 секунды станет последним.

    Думаю такой блок будет проще написать в ST а потом его уже в CFC использовать.

    Вот моя идея.



    Значит тут 200 это как бы идея такая что если цикл ПЛК 10мс, то значит 2 секунды это 200 циклов. Значит мы как бы каждый раз будем добавлять по элементу, и выводить 200тый цыкл. Другими словами этот блок будет показывать данные 200 циклов назад.

    Но я не уверен что время будет тут точно 2 секунды.

    Для точного времени массив db должен быть из структуры которая хранит и время RTC в микросекундах. И уже по нему орентироваться, высчитывать сумму значений имеено в пределах 2х секунд.

    А этот код это как идея как хранить массив как базу данных.
    Изображения Изображения

  4. #4
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    4,188

    По умолчанию

    Может подойдут ФБ FT_TN8, FT_TN16 или FT_TN64 из библиотеки OSCAT?
    http://www.owen.ru/forum/showthread....l=1#post152225
    Пример задержки сигнала с использованием этих ФБ
    Захват-2.png

    Захват-1.png
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  5. #5

    По умолчанию

    2017-07-20.jpg
    У меня такая идея. Можно даже без сброса счетчика. После выхода на уставку сбросить и использовать уже как счетчик.
    Последний раз редактировалось MrR; 20.07.2017 в 10:00.

  6. #6
    Banned
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    Цитата Сообщение от Serhioromano Посмотреть сообщение
    Ни думаю что ТОН тут справиться. Ведь речь идет о 2х секунадх назад. Это значит чно нужно хранить данные за последние 2 секунды. Нам нужно что то вроде базы данных для этого. Ведь речь о прошлом. Таймер туда не икак не посчитает.
    Я предлагал таймер использовать не в качестве машины времени, а для отсчета времени, а хранение делать на SEL, без всяких массивов. Потому что, не стоит считать, что цикл длиться именно столько сколько установлено в минимальном времени цикла и гарантии, что в последнем массиве будет значение пришедшее 2 секунды назад, нет ни какой. За каждый цикл будет накапливаться некоторая ошибка, в отличии от таймера который ошибется только в последнем цикле.
    Кроме того, ТС просил код в CFC, нука накидайте цикл FOR в графическом языке, чтоб это было просто для понимания
    Изображения Изображения
    • Тип файла: png owen.png (4.1 Кб, Просмотров: 30)
    Последний раз редактировалось capzap; 20.07.2017 в 11:59.

  7. #7

    По умолчанию

    capzap, спасибо. И еще вопрос на счет переменных. Я вот получил переменную OLD теперь хочу вычесть с текущего значения значение OLD что бы получит количество импульсов за 2 секунды. Как мне лучше это сделать? Мой способ не подходит, во время нового цикла программы значения пересекаются и получается при вычитании соответственно 0.

  8. #8
    Banned
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    таймер у меня выдает импульс на выходе, например у элемента DIV добавить EN/ENO, импульс подать на EN, вычесть из текущего значение прошлое, а с ENO подать на SEL чтоб сохранить. Главное при вставке нового элемента не забыть обновить порядок выполнения

  9. #9
    Пользователь Аватар для Serhioromano
    Регистрация
    15.09.2015
    Адрес
    Бишкек
    Сообщений
    265

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    таймер у меня выдает импульс на выходе, например у элемента DIV добавить EN/ENO, импульс подать на EN, вычесть из текущего значение прошлое, а с ENO подать на SEL чтоб сохранить. Главное при вставке нового элемента не забыть обновить порядок выполнения
    Твой код не только выдает данные 2 секунды назад но и каждые 2 секунды. Не получиться так получать данные каждый момент времени. Что бы каждый цикл прогрммы получать данные с задержкой 2 секунды, нужно хранить эти данные за 2 секунды. Иначе точные данные расчета скорости или чего том будут только в том цикле прогрммы когда TON.Q будет тру. А потом все будет не точно.

    Может подойдут ФБ FT_TN8, FT_TN16 или FT_TN64 из библиотеки OSCAT?
    Это вроде и то и не то. Эти блоки задерживают сигнал на время. А задержать сигнал не требуется. Как я понял требуется просто получить значение на в переменной 2 секунды назад. Потом по времени расчитать расход за 2 секунды. Например на счетчике 2 секунды назад было 100 а теперь 150, значит мы за 2 секунды прошли 50 чегото там, а значит что мы двигаемся со скоростью ХХХ в час.
    Последний раз редактировалось Serhioromano; 21.07.2017 в 09:44.

  10. #10
    Banned
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    Цитата Сообщение от Serhioromano Посмотреть сообщение
    Твой код не только выдает данные 2 секунды назад но и каждые 2 секунды. Не получиться так получать данные каждый момент времени. Что бы каждый цикл прогрммы получать данные с задержкой 2 секунды, нужно хранить эти данные за 2 секунды. Иначе точные данные расчета скорости или чего том будут только в том цикле прогрммы когда TON.Q будет тру. А потом все будет не точно.
    Прочитайте задачу в первом посте и ответе соответствует ли мой подход ей, спрашивали о задержке на две секунды. Во вторых
    Как я понял требуется просто получить значение на в переменной 2 секунды назад
    вот вроде как раз оно, тогда зачем Вы мне тут разъясняете про мгновенный расход в каждый момент времени

Страница 1 из 4 123 ... ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •