Страница 36 из 70 ПерваяПервая ... 26343536373846 ... ПоследняяПоследняя
Показано с 351 по 360 из 700

Тема: Функциональные блоки на языке ST

  1. #351
    Пользователь
    Регистрация
    01.11.2022
    Адрес
    <7924127@mail.ru> Минск
    Сообщений
    524

    По умолчанию

    Цитата Сообщение от RV9WFJ Посмотреть сообщение
    ST в ПЛК160 и ПР205 и сейчас несоизмеримы.
    А я их и не соизмеряю.
    Для решения задачи хватает возможностей ST ПР20x.
    Ранее это делал ПЛК110, потом ПЛК160. Там ещё визуализация есть.
    А ПРxxx имели функцию, и выход надо было разбирать и собирать из 4-х байт побитно.
    Сейчас ST выдаёт сколько угодно переменных.
    И задачи (наши) для ПЛК выполняются на ПР.

    Цитата Сообщение от RV9WFJ Посмотреть сообщение
    Я уже почти всю библиотеку Standart переписал и половину Util.
    Это интересно. Если не жалко поделитесь.
    Я считаю, что можно сложные задачи писать только на ST.
    А все "квадратики" для простых задач.
    Не спорю, есть решения и сложнейшие. Кому как.

    Цитата Сообщение от RV9WFJ Посмотреть сообщение
    А в Вашем случае я бы поставил один ПЛК210 и WEB панель (наверно даже не Овен) и спал бы спокойно.
    Всё уже больше года работает.
    Просто избавляемся от глючного ПЛК160...
    И один ПР205 связан с облаком и формирует отчёт.

    Точнее, будет формировать, но как этот "Архив" работает из доки толком не понять,
    а примеров нет для ПР205...
    А облако с ходу с карточки не смогли оплатить.

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

    По умолчанию

    Цитата Сообщение от ПавелП Посмотреть сообщение
    Это интересно. Если не жалко поделитесь.
    Я считаю, что можно сложные задачи писать только на ST.
    А все "квадратики" для простых задач.
    Не спорю, есть решения и сложнейшие. Кому как.
    В чем сложность?
    Открываете кодесисовские библиотеки как проекты и копируете тексты ФБ
    Захват-01.png

    Захват-02.png

    Только Standard.LIB нужно иметь "специфическую"
    Вложения Вложения
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #353
    Пользователь
    Регистрация
    01.11.2022
    Адрес
    <7924127@mail.ru> Минск
    Сообщений
    524

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    В чем сложность?
    Открываете кодесисовские библиотеки как проекты и копируете тексты ФБ
    Я в курсе.


    Цитата Сообщение от petera Посмотреть сообщение
    Только Standard.LIB нужно иметь "специфическую"
    Сообщение от RV9WFJ
    Я уже почти всю библиотеку Standart переписал и половину Util.

    Только вы же не только переписали, но и проверили в работе!
    Я иду тем же путём, но стандартных обычно не хватает.
    Беру исходники, и перерабатываю под свои задачи.

    Вы с архивом под ПР205 случайно не работали?

  4. #354

    По умолчанию

    Цитата Сообщение от ПавелП Посмотреть сообщение
    Точнее, будет формировать, но как этот "Архив" работает из доки толком не понять,
    а примеров нет для ПР205...
    А с чего вы взяли что в ПР есть полноценные архивы?
    Может эта функция и заложена на далекое будущее)
    Но сейчас -
    " В архиве сохраняются следующие данные:
    • состояние батареи;
    • статус прибора (служебная информация для обращения в сервисный центр и в группу
    технической поддержки)."

  5. #355
    Пользователь
    Регистрация
    01.11.2022
    Адрес
    <7924127@mail.ru> Минск
    Сообщений
    524

    По умолчанию

    Цитата Сообщение от Samel Посмотреть сообщение
    А с чего вы взяли что в ПР есть полноценные архивы?
    Может эта функция и заложена на далекое будущее)
    Но сейчас -
    " В архиве сохраняются следующие данные:
    • состояние батареи;
    • статус прибора (служебная информация для обращения в сервисный центр и в группу
    технической поддержки)."
    Т.е. - это лог батареи, ГРОМКО названный архивом...

    - Кол-во архивов 50 шт.
    - Размер архива 2048 байт.
    - Последний индекс архива - это в который будет запись.

    А индекс "побегать" по массиву?

  6. #356

    По умолчанию

    Архивация доступна для сетевых переменных. Для этого есть параметр "Архивировать значение".
    Снимок экрана 2023-11-24 114216.png
    Выгрузить архив можно, например, при помощи Owen Configurator в формате .csv.
    Снимок экрана 2023-11-24 115010.png
    Инженер по продукту | ПР и Owen Logic
    email: k.korolev@owen.ru

  7. #357
    Пользователь
    Регистрация
    01.11.2022
    Адрес
    <7924127@mail.ru> Минск
    Сообщений
    524

    По умолчанию

    Цитата Сообщение от Королев Кирилл Посмотреть сообщение
    Архивация доступна для сетевых переменных. Для этого есть параметр "Архивировать значение".
    Снимок экрана 2023-11-24 114216.png
    Выгрузить архив можно, например, при помощи Owen Configurator в формате .csv.
    Снимок экрана 2023-11-24 115010.png
    Ура! Работает! Спасибо!

    Только вот как по событию писать?
    Желательно редактировать архив как массив.

    Архив-индекс на форум 24-11-2023.png

    А индекс "побегать" по массиву?
    Выбрать массив?

    Или индекс [50*2048] - это адрес всей памяти?

    // ----------------------------------------------------------------

    Пришло время писать статистику.
    Что понятно из OL настроек "про архив":
    1. Период архивирования: от 10 до 3600 секунд. задаю 12
    Получаю 01м54c до 02м05с - при каждой перезаписи программы в ПР205 получается разная длительность.
    Т.е. через 12 сек, пишется в 2048 байт. Будет больше переменных назначено - не запишутся.

    2. Количество архивов: 10-50
    3. Размер архива: 200-2048 байт
    Т.е. записей до 50, длинной до 2048 байт.

    4. Последний индекс архива: 0-65535
    В какой из архивов от 0 до 50 последний раз записалось.

    Этот массив доступен через сетевые регистры,
    и через переменные.
    Есть перечисление и назначение в настройках.

    Как с этим всем работать, как с линейной областью памяти?
    Естественно, не так часто, чтоб не "протереть до дыр".

    ПР205 Руководство по эксплуатации 1-ru-110672-1.9.pdf
    Максимальное количество файлов архива 300 шт. стр. 11
    Последний раз редактировалось ПавелП; 06.12.2023 в 00:32.

  8. #358

    По умолчанию

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

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

    По умолчанию

    Цитата Сообщение от Gribnick Посмотреть сообщение
    Хочу спросить, в языке ST я еще новичек, а возможно ли написать фунциональный блок, который будет в определенной последовательности активировать выхода (на пневмоцилиндры), при этом контролируя все получаемыми входными сигналами (с датчиков положения). Важно написать определенную последовательность. И при этом зациклить выполнение блока, с остановкой по входному сигналу.
    можно, также как это делалось бы на известном Вам языке программирования

  10. #360
    Пользователь
    Регистрация
    01.11.2022
    Адрес
    <7924127@mail.ru> Минск
    Сообщений
    524

    По умолчанию

    Цитата Сообщение от Gribnick Посмотреть сообщение
    Хочу спросить, в языке ST я еще новичек, а возможно ли написать фунциональный блок, который будет в определенной последовательности активировать выхода (на пневмоцилиндры), при этом контролируя все получаемыми входными сигналами (с датчиков положения). Важно написать определенную последовательность. И при этом зациклить выполнение блока, с остановкой по входному сигналу.
    Да.

    Например, управление техпроцессом из шести вариантов прогонки электродвигателей.

    Код:
       IF   kSTART=1  AND  STEP=98  THEN  STEP:=40;               END_IF  (* ПЕРЕзапуск для пров на КЗ [Pк]*)
    
       IF   kSTART=1  AND  STEP=99  THEN  STEP:= 0;  OutX0;       END_IF  (* запуск очередной после полного прохода          *)
    
       IF   kSTART=1  AND  STEP=0   THEN  STEP:=10;  D00:=0; OutSVz1:=1;            (* СТАРТ общий *)
            v500:=s500a; v500:=v500*1000; vADC:=sADCa; vADC:=vADC*1000; v2000:=s2000a; v2000:=v2000*1000; (*  индексировать  *)
            v380:=s380a; v380:=v380*1000; v100:=s100a; v100:=v100*1000;     END_IF  (* и прописать в секундах *)
    (* IF   kSTART=1  AND  D01 <>0  THEN  STEP:=D01;    D01:=0;             END_IF ( * выход из паузы *)
    
    
    (* IF   kPAUSE = 1 AND STEP <>0            THEN  D01:=STEP; STEP:=10;   END_IF     вход  в  паузу *)
    (* IF   InR = 1   THEN   nw:=0; Out10:=0;  ELSE   nw:=1;    Out10:=1;   END_IF *)
    (* IF   InR = 1   THEN        при моделировании Alarm и Stop отключать             останов по Alarm и STOP - вкл AlarmSV *)
    
    
       IF   kAlarm=0 OR kSTOP=0   THEN     STEP:=0;  OutX0; D00:=0; D01:=0; END_IF  (* STOP любой *)
       IF   D00=3                 THEN     ZUMo:=100;       SVzt:=1000;     END_IF  (* звук START цикла *)
    
    
     CASE   STEP  OF           (* Out1P1 Out2P1 Out3P1 Out4P1 Красный *)
     10:    IF   D00 =  1   THEN  OutX0; Out5P1:=1; Out1P1:=0;   END_IF   (* все выходы выключить 5 ИНДИКАЦИЯ зел включить *)
    (*ADC*) IF   D00 =  10  THEN  ADC4v:=0;Out9:= 1;    END_IF   (* обмотка 1-я пара *)
            IF   D00 = vADC/2     THEN    Out10:= 1;    END_IF   (* обмотка 2-я пара *)
            IF   D00 > vADC       THEN    Out10:= 0;    END_IF   (* Отключить *)
            IF   D00 > vADC+100   THEN    Out9 := 0;    END_IF   DSS:=(vADC+2000)-D00; (* обратный счёт, откинуть три нуля *)
            IF   D00 > vADC+2000  THEN     STEP:=20;    D00:=0;  (* OutX0; *)        END_IF   D00:=D00+1; (* тик программы *)
    
    
     20:    IF   D00 =  1   THEN  OutX0; Out6P1:= 1;    END_IF   (* все выходы выключить    ИНДИКАЦИЯ включить *)
    (*500*) IF   D00 =  100       THEN    Out12:= 1;    END_IF   (* Включить  *)
            IF   D00 =  200       THEN    Out9 := 1;    END_IF   (* Включить  *)
            IF   D00 > v500       THEN    Out9 := 0;    END_IF   (* Отключить *)
            IF   D00 > v500+100   THEN    Out12:= 0;    END_IF   DSS:=(v500+1000)-D00;  D00:=D00+1;
            IF   D00 > v500+1000  THEN     STEP:=30;    D00:=0;  OutX0;              END_IF  (* Out2P1:=1; *)
    
    
     30:    IF   D00 =  1   THEN  OutX0; Out7P1:= 1;    END_IF   (* 380v измерения  все выходы выключить *)
    (*380*) IF   D00 =  100       THEN    Out12:= 1;    END_IF   (* Включить  *)
            IF   D00 =  200       THEN    Out11:= 1;    END_IF   (* Включить  *)
            IF   D00 =  300       THEN    Out9 := 1;    END_IF   (* Включить  *)
            IF   D00 > v380       THEN    Out9 := 0;    END_IF   (* Отключить *)
            IF   D00 > v380+100   THEN Out11:=Out12:=0; END_IF   DSS:=(v380+1000)-D00;  D00:=D00+1;
            IF   D00 > v380+1200  THEN     STEP:=40;    D00:=0;  OutX0;  FazA100:=FazB100:=FazC100:=0; (* обнулить перед переходом *)  END_IF  (* Out3P1:=1; *)
    
    
     40:    IF   D00 =  1   THEN  OutX0; Out8P1:= 1;  STEP:=98;  END_IF (* КЗ ротора - ждать фиксации вала   TACK1_Motor1.STEP=20 OR TACK1_Motor1.STEP=6 *)
    (*100*) IF   D00 =  100       THEN    Out11:= 1;    END_IF   (* Включить  *)
            IF   D00 =  200       THEN    Out9 := 1;    END_IF   (* Включить  *)
            IF   D00 > v100       THEN    Out9 := 0;    END_IF   (* Отключить *)
            IF   D00 > v100+100   THEN    Out11:= 0;    END_IF   DSS:=(v100+2000)-D00;  D00:=D00+1;
            IF   D00 > v100+2000  THEN     STEP:=50;    D00:=0;  OutX0;              END_IF  (* Out4P1:=1; *)
    
    
     50:    IF   D00 =  2000      THEN    Out9 := 0;    END_IF   (* 2000 вольт *)
    (*2000*)IF   D00 > v2000      THEN    Out9 := 0;    END_IF   DSS:=(v2000+1000)-D00; D00:=D00+1;
            IF   D00 > v2000+1000 THEN     STEP:=99;    D00:=0;  OutX0;              END_IF
    
    
     90:    IF   D00 =  0         THEN             ;    END_IF   (* обрыв обмотки  *)
     91:    IF   D00 =  0         THEN             ;    END_IF   (* заглушка *)
     92:    IF   D00 =  0         THEN             ;    END_IF   (* заглушка *)
    
    
     98:    IF   D00 =  0         THEN             ;    END_IF   (* Pк - зажать вал *)
     99:    IF   D00 =  0         THEN             ;    END_IF   (* СЛЕДУЮЩИЙ - проверка завершена успешно *)
    
    
     END_CASE      IF  InR=0  THEN  ZUMv:=100;          END_IF   (* звук от Reset *)
    
    
       IF  ZUMo<>0 OR ZUMo>0  THEN  ZUMo:=ZUMo-1;  ZUM0   :=1;  ELSE   ZUM0   :=0;  END_IF   (* отсчёт длительности звука утробного   *)
       IF  ZUMv<>0 OR ZUMv>0  THEN  ZUMv:=ZUMv-1;  OutZUM :=1;  ELSE   OutZUM :=0;  END_IF   (* отсчёт длительности звука внешнего    *)
       IF  SVzt<>0 OR SVzt>0  THEN  SVzt:=SVzt-1;  OutSVz1:=1;  ELSE   OutSVz1:=0;  END_IF   (* отсчёт длительности светового сигнала *)
    Это пример рабочего кода под ПЛК160, который сейчас перенесён на ПР205.

    Укажите сколько датчиков, примерный алгоритм, и под какой ПЛК или ПР.
    Это очень просто, поэтому попробую накидать вам вариант.

Страница 36 из 70 ПерваяПервая ... 26343536373846 ... ПоследняяПоследняя

Похожие темы

  1. ПЛК73 (Функциональные кнопки)
    от necro в разделе ПЛК63/73
    Ответов: 8
    Последнее сообщение: 18.05.2022, 10:03
  2. Функциональные блоки
    от ribamuka в разделе СПК2xx (архив)
    Ответов: 4
    Последнее сообщение: 08.04.2018, 15:01
  3. Функциональные блоки насосов в CoDeSys
    от Алексей Ермолаев в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 28.03.2017, 13:50
  4. Функциональные блоки- где искать?
    от Xops в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 01.03.2016, 11:07
  5. СПК функциональные клавиши
    от Lyohin в разделе Трёп (Курилка)
    Ответов: 0
    Последнее сообщение: 30.03.2015, 15:10

Ваши права

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