программа сканер на производство

Oper_200

Новорег
Статус
Offline
Регистрация
1 Апр 2025
Сообщения
9
Лайки
7
Мне выдали задачу на работе, создать программу для rasberry pi 4b на 4 гб озу, которая должна иметь файл конфигурации, грубо говоря настройки доступные в текстовом формате только админам, простой графический интерфейс, начать, тест и выход, учётки, бд, тут как бы ничего сложного, с этим разберусь, меня интересует больше всего сам сканер, это mertech c20du, подскажите, есть ли какой то вариант его эмулировать не имея доступ напрямую, так же, меня интересует вопрос скорости, первоначально писал на питоне, но жопа поджалась, поскольку всё же, это для производственной линии и ошибки она может не простить, перешёл на раст, на сколько это оправданное решение с моей стороны, учитывая арм процессор, сенсорный экран и то, что язык, можно считать, относительно молодой?

Если кто-то ещё может подсказать, какие библиотеки есть для такой задачи, может что-нибудь легковесное или сверхскоростное, что не знают иишки.
 
Эмулировать можно, но сначала нужно выяснить, в каком режиме сканер будет подключён. Без документации или доступа к устройству не стану утверждать, какие интерфейсы поддерживает именно C20DU:
  • Если он работает как USB-клавиатура — для разработки достаточно имитировать ввод строки штрихкода с завершающим Enter, если такой суффикс настроен. Только не завязывай приём исключительно на фокус текстового поля: на сенсорном экране его легко потерять.
  • Если выдаёт данные через последовательный порт — можно сделать эмулятор на паре виртуальных портов. В Linux для этого подходят PTY, в том числе через socat. Но формат данных и параметры соединения нужно брать из документации.

Лучше выделить получение кода в отдельный модуль: настоящий сканер и тестовый источник должны отдавать программе одинаковые события. Тогда можно заранее проверить дубли, быстрые серии, обрыв соединения и неполные сообщения. Распознавание этикеток, реальные задержки и поведение USB такой эмулятор не проверит — испытания с железом всё равно нужны.

Переходить на Rust только из-за скорости здесь, скорее всего, незачем. Если сканер сам декодирует штрихкод, Python на Pi 4 обычно достаточно для приёма строк, интерфейса и небольшой БД. Конкретную пропускную способность без нагрузки и требований по задержкам не определить. Rust нормально поддерживает ARM/Linux и даёт гарантии безопасности памяти, но не защищает от ошибочной бизнес-логики, потери питания или зависшего запроса. Если Python знаешь заметно лучше, смена языка перед производственным запуском может добавить рисков.

Из библиотек без экзотики: Python — tkinter, pyserial для последовательного порта, sqlite3; Rust — Slint или egui для интерфейса, serialport, rusqlite. Совместимость графического бэкенда с выбранной ОС на Pi проверь заранее. Операции со сканером и БД не должны блокировать GUI; надёжная фиксация результатов и обработка повторного сканирования здесь важнее «сверхскоростной» библиотеки. Если программа ещё и управляет остановкой линии, критические блокировки не стоит возлагать на обычное GUI-приложение под Linux.
 
Oper_200
Oper_200
в планах через COM интерфейс, но в случае чего, не отбрасываю и переход на HID
 
ChatGPT
ChatGPT
Oper_200, Тогда для разработки под Linux подойдёт пара виртуальных последовательных портов через socat:

Код:
socat -d -d pty,raw,echo=0,link=/tmp/scanner-app pty,raw,echo=0,link=/tmp/scanner-test

Программа открывает /tmp/scanner-app как обычный последовательный порт, а тестовый скрипт пишет в /tmp/scanner-test коды с нужным окончанием строки. Какие именно нужны разделители — CR, LF или что-то другое — проверь по документации и настройкам сканера. Такая пара проверяет обмен байтами, но не реальные задержки и аппаратные параметры COM.

Главная ловушка: один read() не обязательно возвращает один штрихкод. Код может прийти частями, а несколько кодов — одним чтением. Нужны буфер и выделение сообщений по протоколу. В эмуляторе специально проверь оба случая.

На случай перехода на HID оставь общий обработчик готового кода, а COM/HID сделай отдельными источниками ввода. Для такого обмена производительности Python вполне достаточно; переход на Rust сам по себе надёжность протокола не обеспечит.
 

Вопроссоздание тг бота

Назад
Сверху