Страница 11 из 20 ПерваяПервая ... 910111213 ... ПоследняяПоследняя
Показано с 101 по 110 из 194

Тема: СП310+пр200

  1. #101

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Не. С 1.5мес я погорячился. Не в этом случае.

    Потенциальный крантец (в старом варианте) остается из-за практически всегда отсутствия задержки шага 0 после подъема OnOff.
    При шаблонном использовании такой конструкции в шаге 0 могут быть какие-то подготовительные действия которые пойдут лесом. Смысл в таймере шага 0?
    TON тут не причем, простое t := get_time(); (а не := 0) в else эту проблему решает.
    Да, но даже в этом случае, когда t станет = Tmax, и на следующем цикле OnOff станет true, а get_time() обнулится - 0-й State будет просто пропущен!!!

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

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    Да, но даже в этом случае, когда t станет = Tmax, и на следующем цикле OnOff станет true, а get_time() обнулится - 0-й State будет просто пропущен!!!
    Нет
    "я бы с Вами согласился, если бы арифметика была бы со знаком!!!" (C)
    ))
    Последний раз редактировалось Валенок; 16.10.2024 в 13:34.

  3. #103

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Нет
    ........
    Хорошо один цикл в нем, а надо 1 сек!!!

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

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    Хорошо один цикл в нем, а надо 1 сек!!!
    Так и будет 1 сек если
    Код:
    else
      ...  t := get_time();

    а если
    Код:
    else
      ...  t := t#0s;
    то будет 1 цикл, не смотря на
    Код:
     0:  // Пауза 1 сек перед пуском вперед
                    if get_time() - t >= T#1s then
                        State := 1; FW := true; t := get_time();    // Пуск вперед
                    end_if
    точнее - практически никогда не будет шага 0

  5. #105

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Так и будет 1 сек если
    Код:
    else
      ...  t := get_time();

    а если
    Код:
    else
      ...  t := t#0s;
    то будет 1 цикл, не смотря на
    Код:
     0:  // Пауза 1 сек перед пуском вперед
                    if get_time() - t >= T#1s then
                        State := 1; FW := true; t := get_time();    // Пуск вперед
                    end_if
    точнее - практически никогда не будет шага 0
    Допустим:
    Код:
    else
      t := get_time();  // и это значение равно Tmax(1.5мес)
    тогда на следующем цикле get_time() := 0 и:
    Код:
       0 - Tmax > T#1s  // Истина в этом же цилк и State := 1 тоже в этом же цикле

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

    По умолчанию

    Код:
    else
      t := get_time();  // и это значение равно Tmax(1.5мес)
    Ok. Давайте точнее.
    t := udint_to_time(FFFFFFFFh), на калькуляторе можно десятичный вид посмотреть


    тогда на следующем цикле get_time() := 0 и:
    Код:
       0 - Tmax > T#1s  // Истина в этом же цилк и State := 1 тоже в этом же цикле
    Неа
    0 - FFFFFFFFh = 1, мс => false
    1 - FFFFFFFFh = 2, мс => false
    ....
    1000 - FFFFFFFFh = 1001, мс => true

  7. #107

    По умолчанию

    Всё! Сдаюсь!!

  8. #108

    По умолчанию

    А можно теперь простыми словами разъяснить суть дискуссии?

    И каков правильный вариант.

  9. #109

    По умолчанию

    Цитата Сообщение от Viktor D Посмотреть сообщение
    А можно теперь простыми словами разъяснить суть дискуссии?

    И каков правильный вариант.
    Правильный вариант, когда в ветке else стоит:
    Код:
    else
        t := get_time();
    Т.е. на каждом цикле когда OnOff = false ФБ будет t := get_time() для того, чтобы в тот момент, когда OnOff станет true, нормально отработала первая пауза.
    Дискуссия возникла из-за недопонимания того, что в беззнаковой арифметике Xmax = 0 - 1,
    а значит пауза отработает правильно даже при обнулении get_time() через 4294967296 мс (или примерно через 50 суток).

    Если оставить t := T#0s, то в момент когда переполнится get_time() и будет выполняться State = 3 - произойдет реверс без паузы.
    Попробуйте быстро выключить и включить OnOff во время вращения назад - произойдет реверс без паузы, а это опасно в большинстве случаев.
    Последний раз редактировалось EFrol; 17.10.2024 в 18:41.

  10. #110

    По умолчанию

    Спасибо, оба варианта интересные.

Страница 11 из 20 ПерваяПервая ... 910111213 ... ПоследняяПоследняя

Похожие темы

  1. Не получается опросить пр200 панелью сп310
    от дск в разделе Панели оператора (HMI)
    Ответов: 20
    Последнее сообщение: 24.01.2023, 10:13
  2. Подключение СП310 к пр200
    от Jakan в разделе Панели оператора (HMI)
    Ответов: 3
    Последнее сообщение: 22.08.2019, 23:23
  3. ПР200+СП310 в качестве МПР51
    от mouc1k в разделе Среда программирования OWEN Logic
    Ответов: 3
    Последнее сообщение: 25.12.2018, 11:30
  4. СП310 Сервер по Модбас ТСР + СП310 Слейв по Модбас RTU
    от Global в разделе Панели оператора (HMI)
    Ответов: 7
    Последнее сообщение: 19.04.2018, 11:16
  5. пр200+сп310
    от zamnarzanom в разделе Программируемые реле
    Ответов: 5
    Последнее сообщение: 10.10.2016, 09:13

Ваши права

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