Проблема синхронизации при записи через последовательный порт

Этот вопрос будет немного расплывчатым, и я прошу прощения за это.

У меня есть система, подключенная к последовательному порту, и скрипт Python, который с ней взаимодействует. Сценарий запускает систему, считывает выведенные данные, записывает файл с данными, останавливает систему и повторяет предыдущую серию функций в течение определенного количества итераций. Помимо записи данных из системы в файл, скрипты также регистрируют системное время. В идеале каждый «запуск» системы должен генерировать равномерно распределенные (по времени) данные. Я посмотрел на метки времени и нанес на график разницу между каждой из точек данных и получил это (ось Y — время в мм:сс) Оцените изменение с итерацией Я хочу как-то профилировать раздел код для каждой итерации, чтобы выяснить, почему эти всплески существуют. Возможно ли, что какой-то фоновый процесс вызывает эти аномалии? Если да, то как мне отточить то, что происходит в этих точках?


person Mathews_M_J    schedule 21.04.2016    source источник


Ответы (1)


Я постараюсь дать несколько советов о том, как это сделать. Не знаю, помогут ли они, но хоть что-то для работы. Во-первых, я бы попытался разобраться, что происходит из-за скрипта Python или подключенной системы, которая время от времени зависает. Здесь может помочь Portmon от sysinternals. Если вы находитесь на Windows, что есть. При этом вы можете точно видеть, что отправляется и принимается через последовательный порт. Либо у вас есть протокол типа ответа на запрос, и скрипт запрашивает фрагменты из системы. Если вы видите, что запрос уходит, а затем нет ответа в течение 2 секунд, значит, проблема в устройстве, а не в скрипте или ОС. Если что-то не так с кабелем или последовательным портом, вы также можете увидеть это здесь.

Если сценарий - ваша проблема, это действительно может быть что угодно. Икоты швов регулярные. Вы можете использовать это в своих интересах. Если запустить на половинной частоте. Сбои случаются в два раза реже? Если да, то это связано с тем, сколько пробежек вы делаете. Возможно, утечка какая-то. Вы все закрываете, когда начинаете сначала? Как вы планируете это? Насколько точен планировщик? 2 секунды не так уж и много. Я не знаю о профилировании python, но вы всегда можете просто записать в файл журнала отметку времени для каждого шага, который вы делаете, чтобы найти, где код останавливается. Всего несколько указателей. Надеюсь, поможет

person fhogberg    schedule 27.04.2016