diff --git a/README.md b/README.md index 4bdcbfd..f19742f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,59 @@ # Testing_APP_for_ComConfigCopy -Программа для тестирование работоспособности другой программы - ComConfigCopy. -Эмуляция COM-порта \ No newline at end of file +Программа для тестирование работоспособности другой программы - 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. Программа для обмена данными через эти порты + +Вы можете запустить два экземпляра основной программы, каждый на своем виртуальном порту, и тестировать обмен данными между ними. diff --git a/main.py b/main.py new file mode 100644 index 0000000..cd1a88e --- /dev/null +++ b/main.py @@ -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() \ No newline at end of file