Страница 326 из 711 ПерваяПервая ... 226276316324325326327328336376426 ... ПоследняяПоследняя
Показано с 3,251 по 3,260 из 7101

Тема: CODESYS V3.5. Вопросы и ответы

  1. #3251

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Задача прояснилась, но я все равно пока не понимаю, зачем вам там цикл WHILE.
    Выложите пример кода, чтобы стало яснее, для чего вы его используете.
    Спасибо, оправил в личку двумя частями. Приношу извинения, не пойму, можно ли вставлять сообщения как код, форматирование пропадает. Вчера вечером заменил WHILE на REPEAT и забыл про это. Ну суть, конечно, не меняется. Этот обработчик внутри главного цикла.

  2. #3252
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,171

    По умолчанию

    Цитата Сообщение от Петр Петрович Посмотреть сообщение
    Спасибо, оправил в личку двумя частями. Приношу извинения, не пойму, можно ли вставлять сообщения как код, форматирование пропадает. Вчера вечером заменил WHILE на REPEAT и забыл про это. Ну суть, конечно, не меняется. Этот обработчик внутри главного цикла.
    Я посмотрел код - и, честно говоря, понятнее не стало.
    Попробуйте алгоритм на словах описать (чем подробнее - тем лучше).
    В чем смысл каждой последующей итерации?

  3. #3253

    По умолчанию

    В приемном буфере последовательность байт. Данные могут быть трех типов - включено/выключено, число, закодированное как два байта, или символьные строки переменной длины. В совокупности, это, так сказать телеграмма. Порядок этих трех типов данных в общем случае может быть разным в телеграмме, какой-то тип может и осутсвовать, что-то повторяется как тип (но у каждого типа сигнала есть индивидуальный индекс, ). Т.е. длина всей телеграммы очень вариабельна, как и число и тип данных внутри. Стараюсь ее побыстрее распарсить, пока не пришла следующая телеграмма. Как-то так.

  4. #3254
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,171

    По умолчанию

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

  5. #3255

    По умолчанию

    В общем, пожалуй, да. Длина сообщения конечно известна. Правда, двигаться внутри приходится, то по по два байта, то по четыре, то вообще на заранее неизвестное число байт, это если в телеграмме символьная строка или несколько строк. Эти шаги выясняются при разборе. Контрольной суммы как ни странно, железка не дает. Т.е. я сразу не могу отбросить всю телеграмму. Окончание строки может быть как "FB" так и отсутсвовать, если данные пришли сами, без запроса. В этом случае будет просто четное число бвйт, но это чисто так, примечание.

    Условие выхода из цикла в общем понятны, и их можно задать. Но если данные будут искажены, то выход может и не состоятся. Это в реальных условиях. А просто обрабатывать в главном цикле побайтно мне кажется рискованно. У меня время цикла среднее менее 200 мкс. Т.е. как я понимаю, он выполняется примерно 5000 раз в секунду, грубо. В нем обрабатывать конечно можно было бы, но ведь потом программа может усложнится и цикл увеличится. Возвращаясь к циклу, условия выхода там в общем то заданы... но если в данных будет ошибка, то парсер собьется и последствия - зацикливание. Вот пока думаю.
    Последний раз редактировалось Петр Петрович; 19.07.2021 в 20:50.

  6. #3256
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,171

    По умолчанию

    Но если данные будут искажены, то выход может и не состоятся.
    Мне эта фраза непонятна - если данные искажены, то парсер (основанный на заранее известных правилах) должен определить пакет как невалидный и на этом прекратить работу.

    P.S. - если для вас критично быстродействие и с учетом того, что у вас Raspberry Pi - вы можете парсер (или вообще всю эту часть, включая обмен) переписать на С и передавать данные в CODESYS через разделяемую память.

  7. #3257

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Мне эта фраза непонятна - если данные искажены, то парсер (основанный на заранее известных правилах) должен определить пакет как невалидный и на этом прекратить работу.
    Согласен! Надо будет еще раз проанализировать код, может, я что-то усложняю. Скорость, кстати, пока отличная (ттт). А вообще, обработка в главном цикле, без дополнительных циклов, практикуется?

  8. #3258
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,171

    По умолчанию

    Цитата Сообщение от Петр Петрович Посмотреть сообщение
    Согласен! Надо будет еще раз проанализировать код, может, я что-то усложняю. Скорость, кстати, пока отличная (ттт). А вообще, обработка в главном цикле, без дополнительных циклов, практикуется?
    Обработка в главном цикле без дополнительных WHILE/REPEAT - это типовой подход.
    FOR используется гораздо чаще, так как обычно число итераций заранее известно.

  9. #3259

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Обработка в главном цикле без дополнительных WHILE/REPEAT - это типовой подход.
    FOR используется гораздо чаще, так как обычно число итераций заранее известно.
    Ясно, спасибо. А про FOR я читал Ваш документ про отладку, да.

  10. #3260
    Пользователь Аватар для DenisV
    Регистрация
    20.11.2020
    Адрес
    Санкт-Петербург
    Сообщений
    96

    По умолчанию

    Системное время в веб-конфигураторе и время в таргет-переменной st.Rtc.dtDateAndTime это разное время? Почему при ручной синхронизации времени dtDateAndTime равна времени Ntp сервера, а системное время в конфигураторе дополнительно смещено по utc?
    Screenshot_3.png
    Screenshot_4.png


    Причем если предположить, что это разные переменные, и веб-конфигураторе выставить время GMT 0, с применением настройки, после синхронизации опять произойдет смещение согласно siSetUtcOffset
    Screenshot_5.png

    Ntp сервером выступает мой ПК с utc +3

Страница 326 из 711 ПерваяПервая ... 226276316324325326327328336376426 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 3197
    Последнее сообщение: 23.04.2024, 13:45
  2. Панели оператора ИП320. Вопросы и ответы
    от automat в разделе Панели оператора (HMI)
    Ответов: 822
    Последнее сообщение: 20.11.2023, 17:48
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 245
    Последнее сообщение: 02.10.2022, 11:34
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе Панели оператора (HMI)
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

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