Страница 471 из 471 ПерваяПервая ... 371421461469470471
Показано с 4,701 по 4,705 из 4705

Тема: разные вопросы новичка

  1. #4701

    По умолчанию

    Цитата Сообщение от Але-ндр Посмотреть сообщение
    ДА.
    Как это не парадоксально. но вся программа у меня также написана на FBD и уже давно работает (больше 2 лет).
    А тут решил ( как говорится) ради самоистязания (в свободное время) изучить ST, и переписать уже работающую программу. (на самом деле готовлю обновление).
    По этому все вопросы исключительно по ST.
    Самая большая проблема что я не смог найти данных о времени выполнения тех или иных функций (тайминги реального процессора) хотя в принципе они не критичны. Опытным путем определил что Vaur OUT := Var IN корректно работает в первых трех строках.
    И до сих пор не разобрался в приоритетах выполнения (последовательности функциональных блоков).

    Почему разбиваю выполнение на 2 блока? На самом деле это мая (в некотором смысле ) прихоть не хочу нагружать цикл тупым переписываниями 14 переменных одними и теми же данными, обычно они прописываются при инициализации. К сожалению при определении переменных им можно задавать только константы. На сколько я помню (могу ошибаться, не хочу лезть в справочник) на запись уходит 3 такта процессор (3х14=42) а на функцию IF около 10.
    Ситуация с "первыми тремя строчками" конечно странная - как я понимаю, при обработке ФБ его программа на ST обрабатывается полностью, прежде чем произойдёт запись в переменные, присоединённые к его выходам или начнётся обработка следующего ФБ. И поэтому все эти такты/тайминги влияют только на общее значение текущего времени обработки холста (времени цикла).

    Выбор порядка выполнения блоков остаётся за компилятором, и можно повлиять на него лишь используя линии задержки. Наверное можно считать, что ФБ связанные непосредственной линией связи - будут обработаны последовательно,. Я бы хотел, чтобы на блоках отображался порядок их выполнения (хотя бы по вызову, как например в CDS3.5)

  2. #4702
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    2,026

    По умолчанию

    Цитата Сообщение от Але-ндр Посмотреть сообщение
    Добрый день.
    Помогите сообразить!
    Пишу свой код типа счетчика моточасов. Готовые решения не устраивают, поэтому не плюйтесь.
    А вопрос в следующем. Необходимо сохранять счетчик при потере питания и соответственно восстанавливать данные после подачи питания. Для этого я, вне функционального блока создал энергонезависимую переменную. Вход куда я ее записываю, и выход который изменяет эту переменную. Но при старте программа не успевает перебросит данные с входа на выход и переменная обнуляется. Точнее если написать в начале кода (первой строкой Vaur OUT := Var IN) То она успевает перезаписать и все вроде нормально. Но если поместить ее строкой ниже или не дай бог засунуть в условие типа IF. то она конечно не успевает пере записаться и обнуляется.
    Возможно я изобретаю велосипед, подскажите как реализовать правильно эту функцию.

    И от сюда вытекает второй вопрос. В программе мне необходимо использовать 2 блока. 1 это инициализация (выполняется один раз при старте) и 2 в цикле. Я использовал оператор IF c защелкой. (решение мне самому не нравится). Сейчас играюсь с функциями WHILE и REPEAT UNTIL. мне кажется они более правильные.
    Есть ли какие-то более гибкие и правильные реализации этих двух вопросов?
    Не очень понятно, но, условно у вас есть счетчик А := А + time. Чтобы он был энергонезависмый, пишем Out := In + time, (In, Out - одна и та же энергонезависимая переменная на входе и на выходе).
    По инициализации:

    Код:
    if init then
       основное тело
    else
      что надо сделать в момент первого запуска
    end_if
    
    init := true;

  3. #4703

    По умолчанию

    Але-ндр 1. Ой ой! Ты путаешь ПРку и микроконтроллеры. Тут НЕ надо считать такты и время цикла.
    Потому что время цикла ПРки зависит от нагруженности её программы.

    2. Внутри FUN/FB ST-код выполняется по строкам так, как написан.

    3. Зря ты морочишься. Можно же часть программы писать на ST, а часть на FBD.

    4. Про "Vaur OUT := Var IN корректно работает в первых трех строках" - показал бы весь код FBшки-то? Интересно, что же там такого ты накрутил!
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  4. #4704

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    Не очень понятно, но, условно у вас есть счетчик А := А + time. Чтобы он был энергонезависмый, пишем Out := In + time, (In, Out - одна и та же энергонезависимая переменная на входе и на выходе).
    По инициализации:

    Код:
    if init then
       основное тело
    else
      что надо сделать в момент первого запуска
    end_if
    
    init := true;
    наверное так будет правильней
    Код:
    if init then
       основное тело
    else
      init := true;
      что надо сделать в момент первого запуска
    end_if

  5. #4705

    По умолчанию

    Цитата Сообщение от Але-ндр Посмотреть сообщение
    Возможно я изобретаю велосипед, подскажите как реализовать правильно эту функцию.

    И от сюда вытекает второй вопрос. В программе мне необходимо использовать 2 блока. 1 это инициализация (выполняется один раз при старте) и 2 в цикле. Я использовал оператор IF c защелкой. (решение мне самому не нравится). Сейчас играюсь с функциями WHILE и REPEAT UNTIL. мне кажется они более правильные.
    Есть ли какие-то более гибкие и правильные реализации этих двух вопросов?
    Даже если не устраивают готовые решения, посмотреть как сделана инициализация и как сохранять данные можно было.
    Пример Опер таймера (наработка) на ST и ФБ времени https://owen.ru/forum/showthread.php...l=1#post443096

    И вы конечно изобретаете велосипед, IF наше всё, а с WHILE очень аккуратно.
    Последний раз редактировалось kondor3000; Вчера в 07:51.

Страница 471 из 471 ПерваяПервая ... 371421461469470471

Похожие темы

  1. ПЛК 110 - Вопросы новичка?
    от di-s в разделе ПЛК1хх
    Ответов: 21
    Последнее сообщение: 15.04.2025, 16:38
  2. Вопросы новичка!!!
    от sau в разделе ПЛК1хх
    Ответов: 42
    Последнее сообщение: 02.05.2022, 19:57
  3. Вопросы новичка по MasterScada
    от MrNobody в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 04.09.2014, 14:39
  4. Вопросы полного новичка
    от Korion в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 09.02.2010, 10:08
  5. Вопросы новичка по ПЛК
    от Ollegator в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 07.07.2009, 09:29

Ваши права

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