Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 23

Тема: звeно зaпaздывания на SТ

  1. #11

    По умолчанию

    посмотрел страничку что предложили, там он работает с задержкой сигнала типa bool, а мне нужно с real(
    так никто не поможет в данном случае?

    за 2004 год последнее издание петрова?

  2. #12
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,268

    По умолчанию

    Цитата Сообщение от longalier Посмотреть сообщение
    так никто не поможет в данном случае?
    смотри п#9

  3. #13
    Пользователь
    Регистрация
    19.11.2011
    Адрес
    г. Белгород
    Сообщений
    357

    По умолчанию

    Надо бы описать задачу подробнее. Что дано и что должны получить в итоге. А то не совсем понятно что Вам нужно.

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

    По умолчанию

    Цитата Сообщение от longalier Посмотреть сообщение
    посмотрел страничку что предложили, там он работает с задержкой сигнала типa bool, а мне нужно с real(
    так никто не поможет в данном случае?

    за 2004 год последнее издание петрова?
    Нужно смотреть библиотеку OSCAT
    Захват-1.png
    Захват-2.png
    Захват-3.png
    Три ФБ, различаются разрешением(дискретизацией) сигнала на выходе
    FT_TN8:
    Код:
    FUNCTION_BLOCK FT_TN8
    VAR_INPUT
        in : REAL;
        T : TIME;
    END_VAR
    VAR_OUTPUT
        out : REAL;
        trig: BOOL;
    END_VAR
    VAR
        length : INT := 8;
        X : ARRAY[0..7] OF REAL;
        cnt : INT;
        last : TIME;
        tx: TIME;
        init: BOOL;
    END_VAR
    tx := DWORD_TO_TIME(T_PLC_MS());
    trig := FALSE;
    IF NOT init THEN
        x[cnt] := in;
        init := TRUE;
        last := tx;
    ELSIF tx - last >= T / length THEN
        IF cnt = length - 1 THEN cnt := 0; ELSE cnt := cnt + 1; END_IF;
        Out := X[cnt];
        x[cnt] := in;
        last := tx;
        trig := TRUE;
    END_IF;

    FT_TN16:
    Код:
    FUNCTION_BLOCK FT_TN16
    VAR_INPUT
        in : REAL;
        T : TIME;
    END_VAR
    VAR_OUTPUT
        out : REAL;
        trig : BOOL;
    END_VAR
    VAR
        length : INT := 16;
        X : ARRAY[0..15] OF REAL;
        cnt : INT;
        last : TIME;
        tx: TIME;
        init: BOOL;
    END_VAR
    
    (* read system time *)
    tx := DWORD_TO_TIME(T_PLC_MS());
    trig := FALSE;
    IF NOT init THEN
        x[cnt] := in;
        init := TRUE;
        last := tx;
    ELSIF tx - last >= T / length THEN
        IF cnt = length - 1 THEN cnt := 0; ELSE cnt := cnt + 1; END_IF;
        Out := X[cnt];
        x[cnt] := in;
        last := tx;
        Trig := TRUE;
    END_IF;

    FT_TN64:
    Код:
    FUNCTION_BLOCK FT_TN64
    VAR_INPUT
        in : REAL;
        T : TIME;
    END_VAR
    VAR_OUTPUT
        out : REAL;
        trig: BOOL;
    END_VAR
    VAR
        length : INT := 64;
        X : ARRAY[0..63] OF REAL;
        cnt : INT;
        last : TIME;
        tx: TIME;
        init: BOOL;
    END_VAR
    (* read system time *)
    tx := DWORD_TO_TIME(T_PLC_MS());
    
    trig := FALSE;
    IF NOT init THEN
        x[cnt] := in;
        init := TRUE;
        last := tx;
    ELSIF tx - last >= T / length THEN
        IF cnt = length - 1 THEN cnt := 0; ELSE cnt := cnt + 1; END_IF;
        Out := X[cnt];
        x[cnt] := in;
        last := tx;
        trig := TRUE;
    END_IF;

    Используется функция T_PLC_MS из той же библиотеки
    Код:
    FUNCTION T_PLC_MS : DWORD
    VAR CONSTANT
        debug : BOOL := 0;
        N : INT := 0;
        offset : DWORD := 0;
    END_VAR
    VAR
        tx : TIME;
    END_VAR
    tx := TIME();
    T_PLC_MS := TIME_TO_DWORD(Tx);
    
    
    IF debug THEN
        T_PLC_MS := (SHL(T_PLC_MS,N) OR SHL(DWORD#1,N)-1) + OFFSET;
    END_IF;
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

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

    По умолчанию

    Пример работы ФБ FT_TN. Для наглядности на языке CFC
    Захват-2.png Захват-1.png
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  6. #16

    По умолчанию

    спасибо большое! разобрался поверхностно с элементами- как надо действует, завтра посмотрю КАК это работает)
    у меня несколько вопросов...
    0-а что это за "библиотеку OSCAT"?
    1- как сделать чтобы на выход подавался именно вещественный синус, а не "целый"?
    2- мы же вроде задали 4 секунды, а "отпаузил" он лишь 2,2? и даже если считать с начала работы то тоже порядка 3,2 с, почему так? и с какого момента отсчет этого времени, с момента нажатия "Старт"?
    3- как ДОБАВИТЬ элемент в библиотеку(как создавать новые библиотеки - понял, а как добавить элемент, не пойму)?
    Изображения Изображения
    • Тип файла: png 6456.png (96.5 Кб, Просмотров: 15)

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

    По умолчанию

    Цитата Сообщение от longalier Посмотреть сообщение
    спасибо большое! разобрался поверхностно с элементами- как надо действует, завтра посмотрю КАК это работает)
    у меня несколько вопросов...
    0-а что это за "библиотеку OSCAT"?
    1- как сделать чтобы на выход подавался именно вещественный синус, а не "целый"?
    2- мы же вроде задали 4 секунды, а "отпаузил" он лишь 2,2? и даже если считать с начала работы то тоже порядка 3,2 с, почему так? и с какого момента отсчет этого времени, с момента нажатия "Старт"?
    3- как ДОБАВИТЬ элемент в библиотеку(как создавать новые библиотеки - понял, а как добавить элемент, не пойму)?
    0.OSCAT - это сообщество разработчиков библиотек в стандарте IEC 61131-3 с открытым исходным кодом, существующее с 2006 года. Скачать библиотеки и документацию к ним можно по ссылкам из этой темы http://www.owen.ru/forum/showthread.php?t=14007. Для CDS v2.xx нужно качать "OSCAT Basic Codesys / Twincat 2.x"
    1. Например взять генератор синуса из той же библиотеки OSCAT
    1.png
    2. Где Вы увидели 2,2 с? Я увидел 220 мс
    А Вас не смущает, что половина периода исходного сигнала на трассировке равна примерно 460 мс, а должна быть 7500 мс?
    Скорей всего Вы пытаетесь запускать трассировку в эмуляции. Тогда покажите настройки сэмплирования. Скорей всего Вы задали интервалы выборок несколько мс, а для эмулятора нужно задавать сотни мс, что бы получить более менее правильные результаты.
    Дело в том, что в эмуляции используется системный таймер компьютера и сама Windows не является оп.системой реального времени.
    Запускать трассировку нужно в режиме онлайн соединения с живым ПЛК, в крайнем случае можно использовать PLC WinNT. И не нужно устанавливать интервалы в трассировке меньше чем время цикла ПЛК. Например
    Выполнение программы и трассировки в эмуляторе
    2.png
    Результат
    3.png 4.png
    Хорошо видно, что в эмуляции трассировка с выборкой 20 мс отображается не верно.
    Теперь эта же программа выполняется в PLC WinNT с теми же параметрами выборки
    5.png
    Здесь видно, что задержка сигнала действительно равна 4 сек.
    3. Библиотека такой же проект кодесис. Добавить элемент можно так, же как и в проекте "Добавить объект.."

    ЗЫ. Эта простейшая программа в эмуляторе имеет время цикла 63 мс, а в PLC WinNT примерно 16 мс.
    Последний раз редактировалось petera; 17.11.2014 в 04:57.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  8. #18

    По умолчанию

    а всё таки с GEN можно такое совершить?
    добавил "OSCAT Basic Codesys / Twincat 2.x" вылезло вот - ошибка 3612 превышено максимальное кол-во POU.
    вычленил из библиотеки, но там еще полно вложенных функций было, мне надо каждую из них искать вручную? нельзя так вытащить функцию из библиотеки, чтобы всё вложенное так же утащилось?)
    такие как MATH - это элементы всё той же библиотеки? не могу его найти помогите найти сего динозавра, нашёл всё остальное что нужно, а это не нашел
    хочу нормальный sin(, если с GEN нельзя так сделать
    и ещё подскажите как в цифровой трассировке сделать адекватный масштаб по оси Х - хотябы секунд 40 реальных чтоб помещалось...
    Последний раз редактировалось longalier; 18.11.2014 в 23:06.

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

    По умолчанию

    Цитата Сообщение от longalier Посмотреть сообщение
    а всё таки с GEN можно такое совершить?
    добавил "OSCAT Basic Codesys / Twincat 2.x" вылезло вот - ошибка 3612 превышено максимальное кол-во POU.
    вычленил из библиотеки, но там еще полно вложенных функций было, мне надо каждую из них искать вручную? нельзя так вытащить функцию из библиотеки, чтобы всё вложенное так же утащилось?)
    такие как MATH - это элементы всё той же библиотеки? не могу его найти помогите найти сего динозавра, нашёл всё остальное что нужно, а это не нашел
    хочу нормальный sin(, если с GEN нельзя так сделать
    и ещё подскажите как в цифровой трассировке сделать адекватный масштаб по оси Х - хотябы секунд 40 реальных чтоб помещалось...
    1. Для GEN из Util.lib для синуса или косинуса можно так
    1.png
    2.ошибка 3612 превышено максимальное кол-во POU.
    Для PLCWinNT увеличить число POU в настройках целевой платформы
    Захват-3.png
    Для ПЛК63/73 такой способ не доступен. В этом случае либо экспорт из библиотеки и импорт в проект нужных ФБ(можно несколько за одну операцию), либо в опциях проекта для генератора кода исключить неиспользуемые POU.
    Только, чтобы исключить неиспользуемые POU необходимо хотя бы один раз выполнить компиляцию проекта, но при этом получается "ошибка 3612 превышено максимальное кол-во POU".
    По этому вначале нужно выбрать другой ПЛК, даже тот же PLCWinNT или None, выполнить компиляцию проекта. Затем исключить неиспользуемые POU
    Захват-4.png
    Затем в настройках целевой платформы выбрать ПЛК63/73, в конфигурации ПЛК в меню "Дополнение" выполнить "Стандартная конфигурация".
    3."такие как MATH - это элементы всё той же библиотеки? не могу его найти помогите найти сего динозавра"
    Нужно также не забывать про другие ресурсы библиотек, глобальные переменные и пользовательские типы данных
    Захват-5.png

    Захват-7.png
    Последний раз редактировалось petera; 19.11.2014 в 03:49.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

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

    По умолчанию

    Цитата Сообщение от longalier Посмотреть сообщение
    и ещё подскажите как в цифровой трассировке сделать адекватный масштаб по оси Х - хотябы секунд 40 реальных чтоб помещалось...
    Если шаг выборки 100мс, то поместится 49 сек.
    Анимация:

    можно вместо трассировки использовать визуализацию с трендом
    Захват-1.png
    Вложения Вложения
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Похожие темы

  1. Ответов: 4
    Последнее сообщение: 03.03.2017, 08:25
  2. Файловый менеджер на Delphi на основе утилиты plc_io
    от kandiral в разделе Помощь Разработчикам
    Ответов: 18
    Последнее сообщение: 09.12.2016, 14:52
  3. Ответов: 8
    Последнее сообщение: 15.03.2011, 12:04
  4. Ответов: 7
    Последнее сообщение: 26.01.2011, 07:58

Ваши права

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