Update README with detailed installation, usage, and testing instructions for virtual COM port testing application
This commit is contained in:
59
README.md
59
README.md
@@ -1,4 +1,59 @@
|
||||
# Testing_APP_for_ComConfigCopy
|
||||
|
||||
Программа для тестирование работоспособности другой программы - ComConfigCopy.
|
||||
Эмуляция COM-порта
|
||||
Программа для тестирование работоспособности другой программы - ComConfigCopy.
|
||||
Эмуляция 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