2016-08-30 3 views
2

Я не ожидаю здесь кода, а скорее узнаю о людях.Pyserial - Embedded Systems

У меня есть код python, который использует pyserial для последовательной связи с микроконтроллером (MCU). Мой MCU имеет оперативную память 128 байт и имеет внутреннюю память. Я использую команду ser.write для записи в MCU, а MCU отвечает данными - я прочитал его с помощью команды ser.read.

Вопрос здесь - он работает превосходно до прошлой недели. Со вчерашнего дня - я могу сделать серийное сообщение только утром дня. Через некоторое время, когда я прочитаю данные, MCU отвечает сообщением «NONE». Я прочитал данные на следующий день, он отлично работает. Странная вещь: у меня установлен Hyperterminal, и он правильно общается с MCU и считывает данные. Поэтому я надеялся, что раньше кто-то столкнулся с этой проблемой.

Я использую потоки в моей программе python - просто чтобы проверить, вызывает ли запуск программы mulitple times с помощью потоков. Насколько мне известно, потоки должны влиять только на память моего ПК, а не на MCU.

Я перезагрузил свой компьютер, а также MCU, и у меня все еще есть эта проблема.

Примечание: Pycharm дает мне ответы, которые я упомянул в вопросе. Если я делаю то же самое в IDLE - это дает мне совершенно разные ответы

+0

'Переполнение буфера (pc)', 'No handshake (pc)', 'Нет сброса устройства (pc + mcu (при ошибке))', что является вашей проблемой? Напишите некоторый код в MCU 'check computer is alive (What is ACK)', serial_write не проверка работоспособности, если он не может прочитать anythings. – dsgdfg

ответ

3

Итак, в конечном итоге вы ищете советы о том, как отлаживать такую ​​проблему, зависящую от времени. Как-то состояние создается где-то на вашем компьютере, на вашем процессе python или на микроконтроллере, который влияет на вещи. (Также теоретически возможно, что внешний фактор окружающей среды влияет на вещи. Например, если ваш микроконтроллер имеет часы реального времени, у вас может быть ошибка, зависящая от времени суток. Это кажется менее вероятным, чем другие возможности).

Сначала попробуйте перезапустить программу python. Если это исправляет ситуацию, то вы знаете, что какое-то состояние создается внутри python или вашей программы, что вызывает проблему. Обновите свой вопрос с помощью этой информации.

Если это не исправить, попробуйте перезагрузить компьютер. Если это исправляет ситуацию, то вы сильно подозреваете, что какое-то состояние вашего компьютера влияет на вещи.

Если ничего не происходит, попробуйте перезагрузить микроконтроллер. Если перезагрузка ПК и микроконтроллера не исправить, включите это в свой вопрос, поскольку это очень интересные данные.

Примеры состояния, которые могут получить созданные:

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

  • Управление потоком в другом направлении: ваш компьютер может отправлять xoff, очищать запрос на отправку или иным образом указывать что он не хочет данных

  • Ваша программа получает pyserial в запутанное состояние - либо из-за ошибки в вашем коде, либо в pyserial.

  • Конфигурация последовательного порта - настройки последовательного порта могут быть испорчены.

Hyper terminal может выполнять различные функции, чтобы очистить состояние управления потоком или перенастроить последовательный порт.

Если перезапуск python не устраняет проблему, потоковая передача вряд ли будет вашей проблемой. Если перезапуск python устраняет проблему, проблема может быть проблемой.

+0

Я отредактировал вопрос. Считаете ли вы, что состояние будет очищено после того, как какое-то время не будет использоваться последовательная связь? Может ли это быть конкретным компьютером? Поскольку микроконтроллер работает хорошо - на компьютере моих коллег, используя написанный им графический интерфейс –