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

Разработка на .NET CF

Программируем лазерный считыватель на 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.

Symbol Motorola Сканер ШК программирование программирование терминала Symbol

Комментарии:

didim 09 May 2011, 08:16 1 0

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

Ответить
Roman 09 May 2011, 09:15 1 0

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

Ответить
djnik 23 May 2011, 08:28 1 0

Роман, добрый день.

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

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

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

Ответить
Roman 23 May 2011, 08:50 1 0

1. Считыватель загорается вообще, пикает?
2. Версия операционки на устройстве какая?

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

Ответить
djnik 23 May 2011, 09:11 1 0

1. да, сам сканер светится
2. Windows Mobile 5.0

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

Ответить
Roman 23 May 2011, 09:26 1 0

Лучше Release — всю папку с содержимым копируешь на терминал и из папки запускаешь экзешник. (Рядом с экзешником должны быть dll-ки две)

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

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

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

Ответить
djnik 26 May 2011, 12:13 1 0

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

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

Ответить
volodya82 30 April 2012, 01:22 0 0

огромное спасибо все работает, но у меня в данный момент стоит задача чтобы ТСД вывел не только штрих код но и название, хотя бы наименований пять, т.е. брал с файла. Роман не могли бы вы мне помочь в решении данной проблемы?

Ответить
Roman 30 April 2012, 02:07 1 0

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

Ответить
volodya82 30 April 2012, 07:37 0 0

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

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

Пришло время написать вторую публикацию по программированию считывающих устройств терминалов сбора д (читать далее...)

73  
Программно отменяем выключение КПК и подсветки в Win Mobile на C#

Наверное многие сталкивались с этой проблемой, когда написанное приложение хорошо и замечательно раб (читать далее...)

69  
Рисование Красивых линий в Windows Mobile на C#

Здесь я приведу пример кода для рисования при помощи GDI+ для Windows Mobile. Хороший человек Алекс (читать далее...)

58  
Программируем лазерный считыватель на терминалах сбора данных Datalogic

В этой публикации, в дополнение к уже имеющимся публикациям о программировании терминалов сбора данн (читать далее...)

52  
Пишем свой компас для HTC

Однажды я обзавёлся чудесным девайсом HTC HD2, и обнаружил на нём приложение «Компас». После недолго (читать далее...)

51