Страница 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
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    А как подсказывать то если не выложили свой проект. Обычно это делается с помощью таймера ton и селектора sel
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  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
    Адрес
    Минск
    Сообщений
    3,842

    По умолчанию

    Может подойдут ФБ 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/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  5. #5

    По умолчанию

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

  6. #6
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

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

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  7. #7

    По умолчанию

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

  8. #8
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    таймер у меня выдает импульс на выходе, например у элемента DIV добавить EN/ENO, импульс подать на EN, вычесть из текущего значение прошлое, а с ENO подать на SEL чтоб сохранить. Главное при вставке нового элемента не забыть обновить порядок выполнения
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  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
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    Цитата Сообщение от Serhioromano Посмотреть сообщение
    Твой код не только выдает данные 2 секунды назад но и каждые 2 секунды. Не получиться так получать данные каждый момент времени. Что бы каждый цикл прогрммы получать данные с задержкой 2 секунды, нужно хранить эти данные за 2 секунды. Иначе точные данные расчета скорости или чего том будут только в том цикле прогрммы когда TON.Q будет тру. А потом все будет не точно.
    Прочитайте задачу в первом посте и ответе соответствует ли мой подход ей, спрашивали о задержке на две секунды. Во вторых
    Как я понял требуется просто получить значение на в переменной 2 секунды назад
    вот вроде как раз оно, тогда зачем Вы мне тут разъясняете про мгновенный расход в каждый момент времени
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

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

Ваши права

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