Если вы пытаетесь использовать протокол VE-Direct , в соответствии с руководством :
При включении питания интерфейс VE.Direct всегда будет находиться в текстовом режиме и непрерывно передает все поля времени выполнения. Как только он получает действительное HEX-сообщение, он переключается в HEX-режим. Он будет оставаться в режиме HEX до тех пор, пока HEX-сообщения часто принимаются. После того, как продукт не получил действительный
HEX-сообщения на несколько секунд переключатся обратно в текстовый режим и начнут автоматическую передачу
Поля времени выполнения периодически снова. Некоторые продукты будут отправлять асинхронные HEX-сообщения, начиная
с «: A» и заканчивая новой строкой «\ n», самостоятельно. Эти сообщения могут прерывать обычную
Рамка в текстовом режиме.
Похоже, ваша проблема в том, что вы неправильно устанавливаете скорость передачи данных, которая по умолчанию равна 19200
.
Если вы хотите работать в режиме HEX, вы можете сделать это с помощью Python 3.x, просто декодируйте сообщение HEX:
received_hex=ser.read()
received_utf=received_hex.decode()
print(received_utf)
Вы можете найти несколько хороших указателей по этой конкретной проблеме в других вопросах. Взгляните, например, this .
Возможно, вам потребуется проверить страницу 4 руководства и версию прошивки вашего устройства, чтобы узнать, поддерживает ли вы протокол VE-Direct
Если вы не уверены в настройках (остановка битов и т. Д.), Возможно, имеет смысл начать подключать ваше устройство с помощью терминальной программы, такой как putty (которую вы, похоже, уже используете). Если вы работаете в Windows, я думаю, RealTerm проще в использовании, и вы можете легко переключаться с HEX на ASCII.
РЕДАКТИРОВАТЬ: Как оказалось, для этого конкретного протокола сделано довольно много полезных вещей. Этот скрипт выглядит очень многообещающе.
Если вы хотите запустить этот скрипт, откройте терминал DOS (убедитесь, что папка Python C:\Python3.x\bin
находится в вашем пути, перейдите в папку, где вы сохранили скрипт (C:\Example
) и введите:
C:\Example\python vedirect.py --port COM3
Глядя на комментарии ниже, кажется, что ваш скрипт уже работает, но для его использования все еще требуется некоторая работа. Прямо сейчас вы можете увидеть выходные данные вашего устройства, если просто немного изменить цикл:
message=""
while True:
message += ser.read()
print(message)
Вывод, очевидно, довольно уродливый, но немного поработав, вы можете сделать его похожим на скрипт выше. В руководстве также есть несколько хороших советов о том, как читать данные для этих устройств. Посмотрите и посмотрите, сможете ли вы собрать это вместе. Теперь, в зависимости от ваших потребностей, вы можете предпочесть работать над своим собственным сценарием или начать с другого. Если вы учитесь, попробуйте сделать это самостоятельно, прежде чем смотреть на решение, если вам нужно иметь решение как можно скорее, тогда я думаю, что скрипт github - это то, что вам нужно.