Добавить в корзинуПозвонить
Найти в Дзене
LadimKKT

Доработка драйвера сканера: от консольного инструмента к гибридному решению с графическим интерфейсом

Исходная проблема
Изначально драйвер сканера представлял собой консольное приложение на Python, работающее исключительно через командную строку. Его функционал был ограничен:
Пользователи сталкивались с рядом неудобств:
На базе библиотеки tkinter создан пользовательский интерфейс с:
Оглавление

Графический интерфейс программы
Графический интерфейс программы

Исходная проблема

Изначально драйвер сканера представлял собой консольное приложение на Python, работающее исключительно через командную строку. Его функционал был ограничен:

  • чтение данных с COM‑порта;
  • базовая обработка символа‑разделителя GS (ASCII 29);
  • отсутствие визуального контроля состояния.

Пользователи сталкивались с рядом неудобств:

  • необходимость вручную указывать параметры подключения в командной строке;
  • отсутствие обратной связи о статусе соединения;
  • сложность переключения между режимами работы.

Цели доработки

  1. Создать графический интерфейс для удобной настройки параметров.
  2. Сохранить стабильность работы через консольное ядро.
  3. Реализовать два режима обработки данных:
  • режим «клавиатуры» (GS → F8);
  • режим вставки в текстовое поле (буфер обмена + Ctrl+V).
  1. Обеспечить интуитивное управление без глубоких технических знаний.

Реализованные решения

1. Графический интерфейс (GUI)

На базе библиотеки tkinter создан пользовательский интерфейс с:

  • выпадающим списком доступных COM‑портов;
  • настройками скорости передачи (бод) и таймаута;
  • переключателем между режимами работы;
  • кнопками управления («Начать», «Остановить»);
  • статусной строкой для отображения текущего состояния.

Преимущества:

  • визуализация доступных портов;
  • мгновенная обратная связь о статусе соединения;
  • возможность менять настройки «на лету».

2. Гибридная архитектура

Сохраняется консольное ядро для критически важных операций:

  • открытие/закрытие COM‑порта;
  • чтение данных в фоновом потоке;
  • обработка ошибок на низком уровне.

GUI выступает как «надстройка», передающая параметры в консольный модуль. Это обеспечивает:

  • стабильность работы с аппаратурой;
  • совместимость с разными версиями Windows;
  • минимизацию рисков зависаний из‑за графических элементов.

3. Два режима обработки данных

Режим 1: «Клавиатуры» (GS → F8)

  • При получении байта 29 (GS) программа имитирует нажатие клавиши F8.
  • Остальные символы вводятся как обычные нажатия клавиш.
  • Применение: работа с ПО, ожидающим клавиатурного ввода (например, учётные системы).

Режим 2: «Вставка в текстовое поле»

  • Данные сохраняются в буфере обмена через pyperclip.
  • Имитируется комбинация Ctrl+V для вставки в активное окно.
  • Символ GS передаётся «как есть» (не заменяется).
  • Применение: заполнение форм, текстовых редакторов, браузеров.

Технические детали реализации

  1. Многопоточность:
  • основной поток — GUI;
  • фоновый поток (threading.Thread) — чтение данных с порта.
  1. Обработка кодировок:
  • данные декодируются как UTF‑8 с заменой ошибок (errors='replace').
  1. Управление ресурсами:
  • корректное закрытие порта при остановке;
  • обработка исключений при потере соединения.
  1. Платформо‑зависимая логика:
  • оставлена только ветка для Windows (Ctrl+V);
  • удалены проверки для macOS/Linux.

Результаты доработки

Что получилось

  1. Удобство настройки:
  • выбор порта из списка;
  • визуальные подсказки о статусе.
  1. Гибкость использования:
  • переключение между режимами одним кликом;
  • поддержка разных сценариев сканирования.
  1. Стабильность:
  • консольное ядро гарантирует надёжность;
  • GUI не влияет на критичные операции.
  1. Интуитивность:
  • понятный интерфейс для нетехнических пользователей;
  • статусная строка информирует о процессе.

Ограничения

  1. Необходимость запуска из командной строки
  • Для корректной работы с COM‑портами требуется запуск с правами администратора.
  • Некоторые антивирусы могут блокировать .exe‑файл без цифровой подписи.
  1. Зависимость от библиотек
  • Требуется предустановленный Python (для .py‑версии) или сборка в .exe.
  • Необходимы модули: pyserial, pynput, pyperclip.

Практическое применение

Сценарий 1: Сканирование штрих‑кодов в учётную систему

  1. Выбрать режим «Клавиатуры».
  2. Нажать «Начать чтение».
  3. Сканировать код — GS‑символ автоматически заменяется на F8, что запускает обработку в ПО.

Сценарий 2: Заполнение веб‑формы

  1. Выбрать режим «Вставка в текстовое поле».
  2. Нажать «Начать чтение».
  3. Сканировать код — строка вставится в активное поле ввода через Ctrl+V.

Выводы

Доработка драйвера стала удачным компромиссом между:

  • функциональностью (два режима обработки);
  • удобством (графический интерфейс);
  • надёжностью (консольное ядро).

Ключевые достижения:

  • Упрощён процесс настройки для рядовых пользователей.
  • Сохранена стабильность работы с оборудованием.
  • Расширены сценарии использования сканера.

Ссылка на инструкцию и исполняемый файл программы .exe

Инструкция по использованию программы «Сканер от Ladimkkt.ru» (в формате .exe для Windows)