СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
В приемном буфере последовательность байт. Данные могут быть трех типов - включено/выключено, число, закодированное как два байта, или символьные строки переменной длины. В совокупности, это, так сказать телеграмма. Порядок этих трех типов данных в общем случае может быть разным в телеграмме, какой-то тип может и осутсвовать, что-то повторяется как тип (но у каждого типа сигнала есть индивидуальный индекс, ). Т.е. длина всей телеграммы очень вариабельна, как и число и тип данных внутри. Стараюсь ее побыстрее распарсить, пока не пришла следующая телеграмма. Как-то так.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
В общем, пожалуй, да. Длина сообщения конечно известна. Правда, двигаться внутри приходится, то по по два байта, то по четыре, то вообще на заранее неизвестное число байт, это если в телеграмме символьная строка или несколько строк. Эти шаги выясняются при разборе. Контрольной суммы как ни странно, железка не дает. Т.е. я сразу не могу отбросить всю телеграмму. Окончание строки может быть как "FB" так и отсутсвовать, если данные пришли сами, без запроса. В этом случае будет просто четное число бвйт, но это чисто так, примечание.
Условие выхода из цикла в общем понятны, и их можно задать. Но если данные будут искажены, то выход может и не состоятся. Это в реальных условиях. А просто обрабатывать в главном цикле побайтно мне кажется рискованно. У меня время цикла среднее менее 200 мкс. Т.е. как я понимаю, он выполняется примерно 5000 раз в секунду, грубо. В нем обрабатывать конечно можно было бы, но ведь потом программа может усложнится и цикл увеличится. Возвращаясь к циклу, условия выхода там в общем то заданы... но если в данных будет ошибка, то парсер собьется и последствия - зацикливание. Вот пока думаю.
Последний раз редактировалось Петр Петрович; 19.07.2021 в 20:50.
Мне эта фраза непонятна - если данные искажены, то парсер (основанный на заранее известных правилах) должен определить пакет как невалидный и на этом прекратить работу.Но если данные будут искажены, то выход может и не состоятся.
P.S. - если для вас критично быстродействие и с учетом того, что у вас Raspberry Pi - вы можете парсер (или вообще всю эту часть, включая обмен) переписать на С и передавать данные в CODESYS через разделяемую память.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Системное время в веб-конфигураторе и время в таргет-переменной st.Rtc.dtDateAndTime это разное время? Почему при ручной синхронизации времени dtDateAndTime равна времени Ntp сервера, а системное время в конфигураторе дополнительно смещено по utc?
Screenshot_3.png
Screenshot_4.png
Причем если предположить, что это разные переменные, и веб-конфигураторе выставить время GMT 0, с применением настройки, после синхронизации опять произойдет смещение согласно siSetUtcOffset
Screenshot_5.png
Ntp сервером выступает мой ПК с utc +3