Программируем лазерный считыватель на терминалах сбора данных Motorola (Symbol)

Программируем лазерный считыватель на SymbolДавно хотел написать такое руководство к действию, но как-то всё руки не доходили, и вот наконец написал, всего делов то было…
Любители впихнуть везде и всюду 1С-ку (даже на терминал) с использованием DataWedge (это такая утилита для отправки того что считал сканер в буфер клавиатуры только специализированная для ТСД Symbol) могут дальше не читать, а заниматься и дальше тем что больше нравится. Обращать в свою веру никого не буду :).
Итак, что же я здесь продемонстрирую?.. Я приведу маленький пример того, как задействовать считывающее устройство на терминале сбора данных (Symbol Motorola) из вашего приложения, расскажу что для этого необходимо и приведу пример кода.

Приступаем к делу.

Первое что вам понадобится это Visual Studio 2008 (не ниже Prof) — в ней есть поддержка Smart Devices (проще говоря разработки для мобильных устройств).

Второе что понадобится это SDK от Motorolla (оно у них называется EMDK — Enterprise Mobility Developer Kit, старая версия называлась SMDK — Symbol Mobility Developer Kit), находим последнюю версию на их сайте сейчас это EMDK for .NET v2.4, скачиваем, устанавливаем. После установки сможем выбрать в References — Symbol и Symbol.Barcode, они то и нужны. Можно просто добавить через поиск эти библиотеки в проект и этого будет достаточно.

Последняя версия EMDK — необходима если вы хотите чтобы ваше приложение работало на новых устройствах (таких как MC3190), однако следует учесть, что последние версии библиотек не будут работать на старых устройствах с Win CE 4.2, для их программирования придется выбрать более старую SDK.

EMDK — позволяет делать много разных вещей, в том числе и настраивать сканер, читать или не читать различные типы ШК и каким образом это делать, однако не вижу особого смысла в этом разбираться для большинства нужд достаточны настройки по умолчанию. А если и необходимы какие либо специфичные настройки, то с каждым ТСД Motorola (Symbol) идет утилита для настройки считывателя, проще воспользоваться ею чем писать свою и тратить драгоценное время.

Третье — создаем свое приложение считывающее штриховой код.

В студии создаем «Smart Device Project», добавляем как ранее сказано в ено библиотеки Symbol и Symbol.Barcode.
Кидаем текстовое поле на форму и кнопку (по ней будем выключать сканер и выходить из приложения), включать сканер будем при загрузке приложения.

Исходный код:
//Читает ШК SYMBOL.
private Symbol.Barcode.BarcodeReader barcode_reader = new Symbol.Barcode.BarcodeReader();
//Процедура работает при получении новых данных со считывателя.
void reader_ListChanged(object sender, ListChangedEventArgs e)
        {
            Symbol.Barcode.ReaderData nextReaderData = barcode_reader.ReaderData;
            if (nextReaderData.Result == Symbol.Results.SUCCESS)
            {
                //Помещаем полученное значение в текстовое поле
                textBox1.Text = nextReaderData.Text;
            }
            else
            {
                textBox1.Text = "Формат считанного Штрихового Кода - не распознан!";
                //Проигрываем звук - ненайденного ШК
                    System.Media.SystemSounds.Exclamation.Play();
                    System.Media.SystemSounds.Asterisk.Play();
                    System.Media.SystemSounds.Exclamation.Play();
                    System.Media.SystemSounds.Asterisk.Play();
            }
        }

//При загрузке формы.
private void Form1_Load(object sender, EventArgs e)
        {
            //Создаем событие на чтение ШК сканером...
            barcode_reader.ListChanged += new ListChangedEventHandler(reader_ListChanged);
            barcode_reader.Start();
        }

//Закрываем приложение.
private void button1_Click(object sender, EventArgs e)
        {
            //При закрытии не забыть остановить и очистить, иначе повиснет.
            barcode_reader.Stop();
            barcode_reader.Dispose();

            this.Dispose();
            Application.Exit();
        }


!!! Очень важно при закрытии приложения останавливать считыватель и очищать память.
На новых устройствах, под управлением Windows CE 6.0 особенно, даже простой выход из приложения Application.Exit() без this.Dispoce() может привести к зависанию устройства.

Вот и все.

Скачать исходник примера: MotorolaSDKTest.rar

P.S. Ещё один нюанс, может кому-то пригодится. Создавая приложения для ТСД (Motorola точно, за другие не ручаюсь) лучше делать белый шрифт на черном фоне, опытным путем установлена экономия аккумуляторов примерно процентов на 25-30.
  • 4 марта 2011, 15:18
  •      
  • Roman


Комментарии (10)

RSS свернуть / развернуть
+
+1
Очень помог! Спасибо!
Научиться бы еще эмулировать терминал сбора данных на компьютере, а то при попытке запустить ругается на сроку
private Symbol.Barcode.BarcodeReader barcode_reader = new Symbol.Barcode.BarcodeReader();
пишет NullReferenceException
неверно сканера штрих кода не видит
avatar

didim

  • 9 мая 2011, 20:16
+
+1
Можно просто использовать условную компиляцию http://kbss.ru/blog/lang_c_sharp/67.html.
И блок кода работающий со считывателем включать только в сборку для ТСД. Для эмулятора просто делать без этого куска кода.
avatar

Roman

  • 9 мая 2011, 21:15
+
+1
Роман, добрый день.

Решил попробовать запустить MotorolaSDKTest на КПК Motorola Symbol MC70.
Появилась форма с кнопкой «закрыть форму» внизу и textboxом наверху.

Нашел штрихкод на бутылочке с гелем для рук :), пытаюсь его просканировать, но на форме ничего не происходит.

Я просто скопировал проект MotorolaSDKTest (со всеми библиотеками) в КПК и установил Compact Framework 3.5. Запускаю exe фаил из папки bin\release
avatar

djnik

  • 23 мая 2011, 20:28
+
+1
1. Считыватель загорается вообще, пикает?
2. Версия операционки на устройстве какая?

Для той библиотеки, что использована в примере, использован EMDK с поддержкой MC70 — c Windows Mobile 5.0/6.0/6.1
avatar

Roman

  • 23 мая 2011, 20:50
+
+1
1. да, сам сканер светится
2. Windows Mobile 5.0

попробовал запустить exe из папки Debug:
— Не найдено имя файла или сборки «Symbol.Barcode, Version = 1.6.1.3, Culture = neutral,
PublicKeyToken =… или одна из их зависимостей.
avatar

djnik

  • 23 мая 2011, 21:11
+
+1
Лучше Release — всю папку с содержимым копируешь на терминал и из папки запускаешь экзешник. (Рядом с экзешником должны быть dll-ки две)

Ещё один вопрос, а без программы — сканер светится если на кнопку считывателя жать, до запуска программы?
Может просто сканер занят — подключиться не может? (Хотя тогда бы скорее всего ошибку выдал)

И ещё Пикает сканер? Если не пикает то ШК — сам возможно не читается.
Попробуй другой — какой нибудь продуктовый обычный (с ёгурта например).

Если с выключенной программой сканер не активен, а при включенной программе не читает никакие ШК, то я бы посмотрел настройки сканера, ато может просто чтение определённых типов ШК отключено.
avatar

Roman

  • 23 мая 2011, 21:26
+
-1
спасибо большое за простой и полезный пример кода со сканирование штрихкодов…
все получилось с коробкой от принтерного картриджа, на которой этих кодов целая уйма, причем разных типов…
с гелем не срабатывало, наверное, из-за формы или прозрачности бутылки…

еще раз спасибо
avatar

djnik

  • 26 мая 2011, 00:13
+
0
огромное спасибо все работает, но у меня в данный момент стоит задача чтобы ТСД вывел не только штрих код но и название, хотя бы наименований пять, т.е. брал с файла. Роман не могли бы вы мне помочь в решении данной проблемы?
avatar

volodya82

  • 30 апреля 2012, 13:22
+
+1
В среду напишу подробно с примерами варианты как это сделать, сейчас сильно занят. Там в зависимости от выбранной стратегии либо будет быстрее работать, либо код значительно проще. Я правильно понимаю — файл со справочником в вашем случае лежать будет на ТСД?..
Потому что если на сервере — то лучше работать с какой либо из баз данных.
avatar

Roman

  • 30 апреля 2012, 14:07
+
0
Да Роман Вы правильно поняли, дело в том что 2 числа приезжает начальник (большой:-)) мне дали в руки MC3190 и сказали что бы я продемонстрировал его работу, просто поставят продукцию видов пять и остальное Вы наверное поняли. После его отъезда нужно будет все делать нормально но сейчас просто времени нет.
avatar

volodya82

  • 30 апреля 2012, 19:37

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.