Страница 169 из 1042 ПерваяПервая ... 69119159167168169170171179219269669 ... ПоследняяПоследняя
Показано с 1,681 по 1,690 из 10414

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #1681
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,646

    По умолчанию

    надо будет на железе проверить, а то может опять прелести эмулятора....

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

    По умолчанию

    Вот в эмуляторе с ретайном точно проблема.
    А так: FB - структура. Объявили ее в ретайне. Вся структура там.
    PS
    Про SHL подтверждаю Егора - на железе как положено (110-60L)
    В эмуляторе бывают и другие отличия. Опять же - к немцам.

  3. #1683
    Пользователь Аватар для svanekst
    Регистрация
    21.11.2012
    Адрес
    г. Советский, ХМАО-Югра
    Сообщений
    0

    По умолчанию

    Помогите кто нибудь с кодом. Хотя бы подскажите куда думать.
    Мне надо чтобы таймер работал внутри цикла. Что-то типа такого
    Код:
    FOR i:=1 TO 12 DO
    	t:=T#7s;
    	TP1(IN:=TRUE,PT:=t,Q=>Prst1);
    		IF TP1.Q=0 THEN
    			TP1(IN:=FALSE,PT:=T#0s);
    		END_IF
    	END_IF
    END_IF
    END_FOR
    Я знаю что этот код кривой, но ровный никак не могу придумать. Поставленную задачу сделал через инструкцию CASE, в общем-то всё работает. Но когда я на код смотрю плакать хочется, 12 раз повторяется одно и то-же. Вижу что напрашивается Цикл использовать но в цикле таймер и я никак не могу добиться чтобы таймер ждал итерацию. Может это и не возможно но тогда прошу это подтвердить. В таком случае придется смириться.

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

    По умолчанию

    Цитата Сообщение от svanekst Посмотреть сообщение
    Помогите кто нибудь с кодом. Хотя бы подскажите куда думать.
    Мне надо чтобы таймер работал внутри цикла. Что-то типа такого
    Код:
    FOR i:=1 TO 12 DO
    	t:=T#7s;
    	TP1(IN:=TRUE,PT:=t,Q=>Prst1);
    		IF TP1.Q=0 THEN
    			TP1(IN:=FALSE,PT:=T#0s);
    		END_IF
    	END_IF
    END_IF
    END_FOR
    Я знаю что этот код кривой, но ровный никак не могу придумать. Поставленную задачу сделал через инструкцию CASE, в общем-то всё работает. Но когда я на код смотрю плакать хочется, 12 раз повторяется одно и то-же. Вижу что напрашивается Цикл использовать но в цикле таймер и я никак не могу добиться чтобы таймер ждал итерацию. Может это и не возможно но тогда прошу это подтвердить. В таком случае придется смириться.
    Вы бы хоть написали, что желаете получить

  5. #1685
    Пользователь Аватар для svanekst
    Регистрация
    21.11.2012
    Адрес
    г. Советский, ХМАО-Югра
    Сообщений
    0

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Вы бы хоть написали, что желаете получить
    Спасибо вам.
    Мне надо чтобы прошла интерация цикла 1, потом отработал таймер, потом следующая интерация цикла 2, снова отработал таймер, потом 3 и так далее пока цикл не закончится.
    А у меня таймер включился а цикл не обращая внимания но то что таймер еще не остановился побежал дальше. Я хочу понять как можно заставить цикл ожидать таймер который находится внутри цикла.

  6. #1686

    По умолчанию

    Тогда в течении 12*7=84с будет выполняться только этот код. Поэтому или все остальное подвиснет или отработает ограничение по времени программного цикла.
    Поэтому в вашем случае цикл while. А правильно - полное переписывание программного кода.

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

    По умолчанию

    Цитата Сообщение от svanekst Посмотреть сообщение
    Спасибо вам.
    Мне надо чтобы прошла интерация цикла 1, потом отработал таймер, потом следующая интерация цикла 2, снова отработал таймер, потом 3 и так далее пока цикл не закончится.
    А у меня таймер включился а цикл не обращая внимания но то что таймер еще не остановился побежал дальше. Я хочу понять как можно заставить цикл ожидать таймер который находится внутри цикла.
    Цикл FOR будет выполняться весь в текущем цикле программы и не подходит для данной задачи.
    Решение очевидно. Нужно разложить FOR на составляющие
    Есть некая переменная цикла i, которая в каждом цикле увеличивается на величину шага, и есть проверка условия достижения переменной i конечного значения.
    Например так
    Код:
    PROGRAM PLC_PRG
    VAR
    	TP1: TP:=(PT:=T#7s);
    	i: INT;
    	Prst1: BOOL;
    END_VAR
    
    IF i<12 THEN
    TP1(IN:=NOT TP1.Q, Q=>Prst1);
    IF NOT TP1.Q THEN
    i:=i+1;
    END_IF
    END_IF
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  8. #1688
    Пользователь Аватар для svanekst
    Регистрация
    21.11.2012
    Адрес
    г. Советский, ХМАО-Югра
    Сообщений
    0

    По умолчанию

    Цитата Сообщение от ASo Посмотреть сообщение
    Тогда в течении 12*7=84с будет выполняться только этот код. Поэтому или все остальное подвиснет или отработает ограничение по времени программного цикла.
    Поэтому в вашем случае цикл while. А правильно - полное переписывание программного кода.
    Это понятно что 84 секунды должен выполняться код, но только именно это у меня и не получается написать таймер внутри цикла И код я уже полностью переписал но только он страшный, 12 раз инструкцией CASE выполняется одно и то-же. Хочется сделать его компактным. А почему цикл while надо использовать, ведь заранее известно что в цикле всегда 12 интераций?

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

    По умолчанию

    Цитата Сообщение от svanekst Посмотреть сообщение
    Это понятно что 84 секунды должен выполняться код, но только именно это у меня и не получается написать таймер внутри цикла И код я уже полностью переписал но только он страшный, 12 раз инструкцией CASE выполняется одно и то-же. Хочется сделать его компактным. А почему цикл while надо использовать, ведь заранее известно что в цикле всегда 12 интераций?
    А меня Вы, что проигнорировали? Вот работающий код Вашей задачи
    Например так
    Код:
    PROGRAM PLC_PRG
    VAR
    	TP1: TP:=(PT:=T#7s);
    	i: INT;
    	Prst1: BOOL;
    END_VAR
    
    IF i<12 THEN
    TP1(IN:=NOT TP1.Q, Q=>Prst1);
    IF NOT TP1.Q THEN
    i:=i+1;
    END_IF
    END_IF
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

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

    По умолчанию

    Цитата Сообщение от svanekst Посмотреть сообщение
    Я хочу понять как можно заставить цикл ожидать таймер который находится внутри цикла.
    Ни как, это не возможно. Это программирование контроллеров, а не компьютеров, тут другой подход.
    До сих пор хотелось бы узнать, какую цель Вы преследуете такой конструкцией. Опишите задачу всего проекта, тогда Вам помогут найти правильное решение, красивое и т.д.

Страница 169 из 1042 ПерваяПервая ... 69119159167168169170171179219269669 ... ПоследняяПоследняя

Метки этой темы

Ваши права

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