Страница 471 из 472 ПерваяПервая ... 371421461469470471472 ПоследняяПоследняя
Показано с 4,701 по 4,710 из 4718

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

  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,034

    По умолчанию

    Цитата Сообщение от Але-ндр Посмотреть сообщение
    Добрый день.
    Помогите сообразить!
    Пишу свой код типа счетчика моточасов. Готовые решения не устраивают, поэтому не плюйтесь.
    А вопрос в следующем. Необходимо сохранять счетчик при потере питания и соответственно восстанавливать данные после подачи питания. Для этого я, вне функционального блока создал энергонезависимую переменную. Вход куда я ее записываю, и выход который изменяет эту переменную. Но при старте программа не успевает перебросит данные с входа на выход и переменная обнуляется. Точнее если написать в начале кода (первой строкой 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; 27.03.2026 в 07:51.

  6. #4706

    По умолчанию

    owen_questions.png
    Сделал программу, в режиме симуляции пытаюсь посмотреть, что происходит в той её части, что снизу справа, и есть ощущение, что эта часть даже не запускается. Для сравнения, в симуляции всей остальной программе на каждом входе и выходе показаны текущие значения, а тут их просто нет. В чём может быть дело?

  7. #4707

    По умолчанию

    Скорее всего переменная level нигде не используется. Она должна направляться на выход или выводиться на экран или быть энергонезависимой. Иначе вся ветка не обсчитывается

  8. #4708
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    9,613

    По умолчанию

    Цитата Сообщение от ligachad Посмотреть сообщение
    owen_questions.png
    Сделал программу, в режиме симуляции пытаюсь посмотреть, что происходит в той её части, что снизу справа, и есть ощущение, что эта часть даже не запускается. Для сравнения, в симуляции всей остальной программе на каждом входе и выходе показаны текущие значения, а тут их просто нет. В чём может быть дело?
    Для симуляции надо чтобы ваша логика имела минимальный смысл, в смысле, результат подавался на выход ПР или на экран или в энергонезависимую переменную!
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  9. #4709

    По умолчанию

    Цитата Сообщение от RockTeal Посмотреть сообщение
    Скорее всего переменная level нигде не используется. Она должна направляться на выход или выводиться на экран или быть энергонезависимой. Иначе вся ветка не обсчитывается
    Спасибо, проблема оказалось в этом!

  10. #4710

    По умолчанию

    Здравствуйте !!!
    Подскажите есть какой то механизм внутри среды.
    Который позволяет выполнить запись или чтение 485 один раз после старта ?

Страница 471 из 472 ПерваяПервая ... 371421461469470471472 ПоследняяПоследняя

Похожие темы

  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

Ваши права

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