Терминал сбора данных на ардуино
- Войдите на сайт для отправки комментариев
Пнд, 10/11/2014 - 14:06
В каждой торговой организации регулярно случается процедура инвентаризаций товара. Современное торгово-розничное предприятие содержит в базе до 15000 наименований номенклатуры и у каждого наименования может быть по несколько штриховых кодов на упаковке если такой товар производят на разных заводах. А бывает что на упаковке штрихкод отсутствует или не читается. Да и количество товара часто не единичное, но очень важно абсолютно точно счесть какое. Более того современная торговля тяготеет к круглосуточному режиму работы даже в праздничные дни. По-этому закрытие на переучёт это букет головной боли не только для предприятия, но и для покупателей.
Обычно для подсчёта остатков используются сканеры штрихкода в связке с ноутбуком где открыта учётная программа, или терминалы сбора данных которые накапливают в себе таблицу записей и при подключении к учётной программе формируют документ инвентаризации. Оба имеют недостатки: в первом мобильность весьма условна, во втором нет онлайн соединения при вводе. Моя идея в устройстве которое может работать по такому алгоритму:
0. при включении устанавливаем беспроводное соединение с сервером (индикатор сеть и заряд акб)
1. вводим код товара с клавиатуры или сканером при нажатии клавиши СканШК получаем штрихкод
2. если код начинаестся с 29... - этикетка стеллажа - сохраняем в переменную номер витрины и переходим к пп1
3. выводим на дисплее код стеллажа (без кода стеллажа переходим к пп1)
4. выводим на дисплее код товара
5. отправляем запрос наименования по коду товара на сервер
6. получение обратно наименования на терминал
7. выводим на дисплее наименование
8. вводим с клавиатуры количество товара
9. отправляем количество на сервер
10. принимаем и выводим подтверждение операции
Сетевые параметры ТСД получает по DHCP. По скольку терминал будет беспроводным в качестве канала передачи данных хорошо подойдёт WiFi. С одной стороны роутер решающий задачи маршрутизации и аренды адресов, с другой модули esp8266 для тсд.
Основой торговой системы в моём случае выбрана открытая СУБД Firebird. В других случаях может использоваться любая ODBC-совместимая система. При включении терминал читает параметры из таблицы config по id в БД учёта.
Ну и немного кода для общего представления системы.
Пока без алгоритма и с примитивными функциями, но что бы начать:
Запрос наим.товара из учётной БД:
К слову сказать web-сервер поднимать в каждой торговой точке я не собирался. Использовать публичный - рискованно (во время инвентаризации пропадёт интернет и что тогда?). Логично написать некого демона. Попробовал processing - не нашёл механизма работы с БД firebird. Написал udp клиент-сервер на Delphi (используя Interbase компоненту), но пока есть некоторые сложности с двусторонней диалоговой связью. Вероятно нарисую обработчик вроде http-odbc или http-FB. Режим связи в моем случае сильно похож на http клиента:
<запрос-{приём-передача-[выполнение-возврат]-передача}-приём>. []-sql, {}-демон, <>-терминал
Источник вдохновения, используемый на данный момент:
Из беспроводных интерфесов ИК. Если бы можно было заменить на wifi и перешить ?)
Ну и что есть на текущий момент в железе:
Ethernet-shield собираюсь заменить на esp8266.
Однако он юзает rx/tx. Сканер ШК читает код по rx. Потребуется как то их переключать?
Читал про программное управление сом-портом, и про мегу-core. Что сможете посоветовать?
Тут можно собрать загрузчик с програмным UART, он (програмный UART) конечно сильно ограничен, но сканеру должно хватать.
Рабочая версия обработчика php-сервера:
Формат БД Firebird:
Обращение к серверу:
Заказал экран, несколько wifi модулей и mega-core-mini для проекта. Жду в декабре.
84*48 LCD Module White backlight adapter pcb for Nokia 5110
esp8266 esp-03 дистанционный последовательный порт WiFi трансивер беспроводной модуль ap+sta C
мини 2560 mega2560-core 3.3 V, 5V BUONO usb2serial USB UART кабель для Arduino
Ардуино код снова не даёт покоя.
Решил на терминале проверить штрихкод на принадлежность товару или услуге.
Из строки EAN-13 нужно прочитать первые два символа, и если они 29 то это этикетка шкафа, иначе товар.
Результат: empty character constant!
Решено: строка String "abc", первый символ строки Char 'a'. Дело в кавычках.
Полный код с алгоритмом работы, но пока ещё с delay() и прочими подпорками:
Что можно оптимизировать по существу?
Предстоит вывод кириллицы на экран Nokia5110 всместо 1602A, сетевой обмен esp8266 вместо w5100.
Работу сканера и чтение клавиатуры стоит обрабатывать по прерываниям? delay() заменить millis()
Пришли посылки:
Экран : (Ну что же посмотрим на что он годится)
WiFi: (Совсем микроскопический. как то даже в голове не укладывается.)
mini 2560 Mega2560-CORE (чувствую основной вес и габарит составляют разъёмы. Нужно будет их аккуратно выпаять вместе с кнопкой. Вопрос как минимизировать соединения?
Добрый день. Очень интересно чем дело закончилось? Уже наверное серийное производство наладили?:)
Дело закончилось иначе. Алгоритм работы сильно превзошел возможности железа. При расширении функционала надёжность сильно регрессировала. В результате база данных на firebird и php-обработчик сохранились, а терминал сваял на Android-смартфоне за рубль и получил достаточно мощный аппарат с надёжной связью и асинхронным интерфейсом взаимодействия, большим сенсорным экраном, русским интерфейсом. Изначально упор делался на аппаратный сканер штрихкода, который должен считать и передать запрос, а остальная часть была как бы вспомогательной, однако тесты показали важность как раз стадии контроля и принятия решения о записи, а так же корректировки. Сканирующий модуль был заменен фотокамерой, которую пришлось модернизировать для макросъёмки. Но в результате второй год в нашей торговой сети инвентаризации товара проходят без остановки торговли. Выборочные инвентаризации не новость, но при раздельном учёте по отделам (закрывается и считается отдел), а инвентаризации всех остатков сразу во время торговли я не встречал.
Производство не налаживал так как в первую очередь решалась частная задача. Конечно можно построить универсальное решение, но обсуждением темы мало кто заинтересовался. Разные торговые оргаинизации используют разные учётные системы. Одних версий, редакций и конфигураций 1С великое множество, не считая собственных и малоизвестных программ. Терминалы сбора данных продаются по той причине что они как чёрный ящик с формальным входом и выходом. Есть и программные терминалы как у меня и даже 1С нарисовала такой (но они все оффлайн, т.е. выгрузили таблицу кодов/наименований в ТСД - занесли отстатки- выгрузили ведомость обратно в БД). Я же решал задачу интегрированную в схему товародвижения. Изначально хотел расширить функционал ТСД при помощи ардуино, но в итоге вышел за рамки для завершения проекта. Если кому интересно - готов показать/настроить/сопроводить.