Update README with detailed installation, usage, and testing instructions for virtual COM port testing application
This commit is contained in:
55
README.md
55
README.md
@@ -2,3 +2,58 @@
|
|||||||
|
|
||||||
Программа для тестирование работоспособности другой программы - ComConfigCopy.
|
Программа для тестирование работоспособности другой программы - ComConfigCopy.
|
||||||
Эмуляция COM-порта
|
Эмуляция COM-порта
|
||||||
|
|
||||||
|
## Требования
|
||||||
|
- Python 3.6 или выше
|
||||||
|
- Библиотека pyserial
|
||||||
|
- Для Windows: com0com
|
||||||
|
- Для Linux: socat
|
||||||
|
|
||||||
|
## Установка
|
||||||
|
|
||||||
|
1. Установите Python-зависимости:
|
||||||
|
bash
|
||||||
|
pip install pyserial
|
||||||
|
|
||||||
|
2. Установка драйвера виртуального COM-порта:
|
||||||
|
|
||||||
|
### Windows:
|
||||||
|
- Скачайте и установите com0com: https://sourceforge.net/projects/com0com/
|
||||||
|
- Запустите установщик от имени администратора
|
||||||
|
|
||||||
|
### Linux:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get install socat
|
||||||
|
```
|
||||||
|
|
||||||
|
## Использование
|
||||||
|
|
||||||
|
1. Сначала создайте виртуальные COM-порты:
|
||||||
|
```bash
|
||||||
|
# Windows: запустите от имени администратора
|
||||||
|
python virtual_com.py
|
||||||
|
|
||||||
|
# Linux: запустите с sudo
|
||||||
|
sudo python virtual_com.py
|
||||||
|
```
|
||||||
|
|
||||||
|
2. После создания виртуальных портов запустите основную программу:
|
||||||
|
```bash
|
||||||
|
python main.py
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Выберите один из созданных виртуальных COM-портов
|
||||||
|
4. В другом терминале запустите еще одну копию программы и выберите второй виртуальный порт
|
||||||
|
5. Теперь вы можете обмениваться сообщениями между двумя экземплярами программы
|
||||||
|
|
||||||
|
## Примечания
|
||||||
|
- В Windows виртуальные порты создаются как CNCA0 и CNCB0
|
||||||
|
- В Linux виртуальные порты создаются как /dev/ttyV0 и /dev/ttyV1
|
||||||
|
- Для работы требуются права администратора/root
|
||||||
|
|
||||||
|
Теперь у вас есть полный набор инструментов для тестирования:
|
||||||
|
1. Программа для создания виртуальных COM-портов
|
||||||
|
2. Программа для обмена данными через эти порты
|
||||||
|
|
||||||
|
Вы можете запустить два экземпляра основной программы, каждый на своем виртуальном порту, и тестировать обмен данными между ними.
|
||||||
|
|||||||
70
main.py
Normal file
70
main.py
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
import serial
|
||||||
|
import serial.tools.list_ports
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
|
||||||
|
def list_com_ports():
|
||||||
|
"""Вывод списка доступных COM-портов"""
|
||||||
|
ports = serial.tools.list_ports.comports()
|
||||||
|
if not ports:
|
||||||
|
print("COM-порты не обнаружены")
|
||||||
|
return []
|
||||||
|
|
||||||
|
print("\nДоступные COM-порты:")
|
||||||
|
for index, port in enumerate(ports):
|
||||||
|
print(f"{index + 1}. {port.device}")
|
||||||
|
return ports
|
||||||
|
|
||||||
|
def read_com_port(ser):
|
||||||
|
"""Функция для чтения данных из COM-порта"""
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
if ser.in_waiting > 0:
|
||||||
|
data = ser.readline().decode('utf-8').strip()
|
||||||
|
print(f"\nПолучено: {data}")
|
||||||
|
print("Введите ответ (или 'exit' для выхода): ", end='')
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка при чтении: {e}")
|
||||||
|
break
|
||||||
|
time.sleep(0.1)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# Установка COM-порта
|
||||||
|
COM_PORT = 'COM19' # Укажите нужный COM-порт здесь
|
||||||
|
|
||||||
|
try:
|
||||||
|
ser = serial.Serial(
|
||||||
|
port=COM_PORT,
|
||||||
|
baudrate=9600,
|
||||||
|
bytesize=serial.EIGHTBITS,
|
||||||
|
parity=serial.PARITY_NONE,
|
||||||
|
stopbits=serial.STOPBITS_ONE,
|
||||||
|
timeout=1
|
||||||
|
)
|
||||||
|
print(f"\nПодключено к {COM_PORT}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка при открытии порта: {e}")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Запуск потока для чтения данных
|
||||||
|
read_thread = threading.Thread(target=read_com_port, args=(ser,), daemon=True)
|
||||||
|
read_thread.start()
|
||||||
|
|
||||||
|
# Основной цикл для отправки данных
|
||||||
|
print("\nВведите 'exit' для выхода")
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
user_input = input("Введите ответ: ")
|
||||||
|
if user_input.lower() == 'exit':
|
||||||
|
break
|
||||||
|
ser.write(f"{user_input}\n".encode('utf-8'))
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка при отправке: {e}")
|
||||||
|
break
|
||||||
|
|
||||||
|
# Закрытие соединения
|
||||||
|
ser.close()
|
||||||
|
print("\nСоединение закрыто")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user