Протокол и тулзы — готовы и проверены (50/50 юнит-тестов по реальным байтам; окно «Проверка оборудования» запущено на Windows 11). НЕ выполнено: live-чтение веса через виртуальную пару COM на VM (драйвер com0com требует доверия издателю — решение владельца) и реальные весы с грузом в магазине (нужен человек с гирей). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
8.3 KiB
Касса ALL MARKET — реальный протокол весов Масса-К (11.10.2026)
Отчёт по задаче: заменить угаданный протокол весов на реальный (по замеру с ноутбука магазина) и сделать отдельную программу «Проверка оборудования» для sysadmin без входа в кассу.
Что сделано
Приоритет 0 — «ALL MARKET — Проверка оборудования» (без входа/сервера/БД)
Отдельная программа food-market.pos.hwcheck (новый exe), ссылается ТОЛЬКО на
pos.core ради модулей оборудования. Не умеет быть кассой: нет экрана входа,
нет подключения к серверу, нет работы с БД продаж/каталога, нет токенов и сетевых
запросов. Обычная касса с входом в zip для sysadmin НЕ входит.
Окно (Avalonia, светлая тема, русский): весы (ручной выбор порта/скорости/протокола,
«Найти весы», «Прочитать вес сейчас», «Запустить/Остановить» с live-весом ~350 мс,
сырой hex кадра), COM-порты с пометкой «занят другой программой», принтеры Windows
(только чтение — очередь не трогаем, число заданий), сканер (контрольная цифра
EAN-13/EAN-8 + отличие сканера от ручного набора по интервалу), «Сохранить/
Копировать отчёт». Тестовая печать ВЫКЛ по умолчанию, включается только
запуском с --allow-test-print (ключ даёт владелец) — в zip два ярлыка.
Запущена и проверена на реальной Windows 11 (VM 192.168.1.231) — см.
vm-hwcheck-launch.png: окно отрисовано, определены порт COM1 и принтер
«Microsoft Print to PDF», кнопка «Тестовая печать» неактивна, поле сканера активно.
Реальный протокол весов (пп. 1–6)
По фактическому замеру sysadmin (11.10, ноутбук магазина, при закрытой кассе
МойСклад): весы Масса-К (USB-COM CH340) отвечают только на 57600 8N1;
рукопожатие ENQ(0x05)→ACK(0x06); запрос веса DC1(0x11) → кадр
SOH STX «флаг вес единица» CTRL ETX EOT (например
01 02 'S 0.000kg' 'q'(0x71) 03 04).
pos.core/Hardware/SerialScale.cs—ISerialTransport(абстракция для тестов) +SystemSerialTransport(8N1, DTR/RTS),MassaK.ParseFrame/Handshake/ReadFrame/ ReadWeight. Control-байт НЕ валидируем (смысл не подтверждён) — только пишем сырой hex (чтобы по кадрам с грузом уточнить). Единицы kg; «г/g» → /1000.pos.core/Hardware/ScaleDiscovery.cs— чтение + стабильность по двум одинаковым чтениям (флаг весов не интерпретируем); автопоиск 57600 и Масса-К-кадр — первыми, общий бюджет ~12 с, занятые порты отмечаются отдельно → кассиру «порт занят (закройте кассу МойСклад)», а не «весы не найдены».pos—ComScaleстал тонким адаптером; настройки хранятscale_protoи по умолчанию MassaKFrame/57600; если сохранённые весы не отвечают — автопоиск молча + ручной выбор в настройках.ProbeRunner (--probe-hw)печатает сырой hex.- Весовой товар на кассе (п. 6): вес берётся через
ScaleMonitor(опрос по требованию, мягкая деградация); нет связи → ручной ввод веса остаётся (как сейчас), с понятным сообщением. Логика не менялась — уже была корректной.
Юнит-тесты (п. 5) — 50/50 зелёных
tests/food-market.UnitTests/MassaKScaleTests.cs на фейковом порту
(FakeScaleTransport): разбор реального нулевого кадра
01 02 53 20 20 30 2E 30 30 30 6B 67 71 03 04, вес 1.235 / 12.500 / отрицательный /
граммы, мусор до SOH, обрезанный кадр без ETX, мусор без SOH, рукопожатие с ACK и
без ACK, полный цикл, стабильность. BarcodeScanTests.cs: контрольная цифра
EAN-13/EAN-8 и классификация ввода.
Сборки (п. 7 + Приоритет 0) — в ~/pos-release/
- Проверка оборудования:
allmarket-pos-win-x64-20261011-0839-hardware-check.zipSHA256f4f5a53ffedc4c7e55452d6fad1c139848340e57232553d33f1ea7f8bc449623(внутри:foodmarket.Pos.HwCheck.exe, два ярлыка-bat,README.txt). - Диагностическая касса (с новым протоколом):
allmarket-pos-win-x64-20261011-0840-probe.zipSHA25667b9e72cdbc163ed9f93c49f2724e10740c1430d16a6c6d1f6954ef69a47c1f4.
Linux-сборку не ломали (System.IO.Ports/System.Management общие; WMI под
OperatingSystem.IsWindows()). pos.core/pos/hwcheck собираются, тесты зелёные.
Что проверено
- Протокол — по фактическим байтам (юнит-тесты, 50/50).
- Программа «Проверка оборудования» запускается на реальной Windows 11,
определяет COM-порт и принтер, отрисовывает русский интерфейс, тестовая печать
выключена (скриншот
vm-hwcheck-launch.png).
Что НЕ проверено (нужен человек / решение владельца)
- Живое чтение веса через виртуальную пару COM на VM (п. 8) — НЕ выполнено.
com0com — подписанный установщик
Setup_com0com_v3.0.0.0_W7_x64_signed.exeскачан и запущен (/S, exit 0), но виртуальная пара COM10/COM11 не зарегистрировалась: на Win11 установка драйвера требует либо интерактивного подтверждения доверия издателю (нельзя нажать по ssh), либо импорта сертификата издателя в хранилище доверенных — это ослабление доверия ОС, я не стал делать автономно. Нужно решение владельца: разрешить доверить сертификат издателя com0com и установить драйвер на тест-VM (один раз), после чего я доведу эмулятор весов + live-чтение + скриншоты. - Реальные весы с грузом (гирей) в магазине — НЕ проверялись (нет доступа к железу; касса МойСклад и ноутбук магазина не трогали). Нужен человек с гирей: положить груз, сверить вес и «стабильно», прислать сырые hex-кадры с грузом — тогда уточним смысл флага и control-байта (сейчас они логируются, но не интерпретируются).
Файлы
vm-hwcheck-launch.png— окно «Проверка оборудования» на Windows 11.index.html— та же сводка со скриншотом.