Программируем лазерный считыватель на терминалах сбора данных 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 и сказали что бы я продемонстрировал его работу, просто поставят продукцию видов пять и остальное Вы наверное поняли. После его отъезда нужно будет все делать нормально но сейчас просто времени нет.

Ответить
Меняем ориентацию экрана в .NET CF и запускаем PUTTY

Столкнулся с большой необходимостью запускать Putty (ssh — клиент) на своём HD2. И всё замечательно, (читать далее...)

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

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

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

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

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

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

75  
Программная перезагрузка Мобильного устройства в NET CF.

Существует 2 вида перезагрузки для карманных компьютеров Жёсткая (Hard Reset — аппаратная перезагруз (читать далее...)

72