Программируем лазерный считыватель на терминалах сбора данных Motorola (Symbol)
Разработка на .NET CFДавно хотел написать такое руководство к действию, но как-то всё руки не доходили, и вот наконец написал, всего делов то было…
Любители впихнуть везде и всюду 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
Комментарии:
Роман, добрый день.
Решил попробовать запустить MotorolaSDKTest на КПК Motorola Symbol MC70.
Появилась форма с кнопкой «закрыть форму» внизу и textboxом наверху.
Нашел штрихкод на бутылочке с гелем для рук :), пытаюсь его просканировать, но на форме ничего не происходит.
Я просто скопировал проект MotorolaSDKTest (со всеми библиотеками) в КПК и установил Compact Framework 3.5. Запускаю exe фаил из папки bin\release
1. Считыватель загорается вообще, пикает?
2. Версия операционки на устройстве какая?
Для той библиотеки, что использована в примере, использован EMDK с поддержкой MC70 — c Windows Mobile 5.0/6.0/6.1
1. да, сам сканер светится
2. Windows Mobile 5.0
попробовал запустить exe из папки Debug:
— Не найдено имя файла или сборки «Symbol.Barcode, Version = 1.6.1.3, Culture = neutral,
PublicKeyToken =… или одна из их зависимостей.
Лучше Release — всю папку с содержимым копируешь на терминал и из папки запускаешь экзешник. (Рядом с экзешником должны быть dll-ки две)
Ещё один вопрос, а без программы — сканер светится если на кнопку считывателя жать, до запуска программы?
Может просто сканер занят — подключиться не может? (Хотя тогда бы скорее всего ошибку выдал)
И ещё Пикает сканер? Если не пикает то ШК — сам возможно не читается.
Попробуй другой — какой нибудь продуктовый обычный (с ёгурта например).
Если с выключенной программой сканер не активен, а при включенной программе не читает никакие ШК, то я бы посмотрел настройки сканера, ато может просто чтение определённых типов ШК отключено.
спасибо большое за простой и полезный пример кода со сканирование штрихкодов…
все получилось с коробкой от принтерного картриджа, на которой этих кодов целая уйма, причем разных типов…
с гелем не срабатывало, наверное, из-за формы или прозрачности бутылки…
еще раз спасибо
огромное спасибо все работает, но у меня в данный момент стоит задача чтобы ТСД вывел не только штрих код но и название, хотя бы наименований пять, т.е. брал с файла. Роман не могли бы вы мне помочь в решении данной проблемы?
ОтветитьВ среду напишу подробно с примерами варианты как это сделать, сейчас сильно занят. Там в зависимости от выбранной стратегии либо будет быстрее работать, либо код значительно проще. Я правильно понимаю — файл со справочником в вашем случае лежать будет на ТСД?..
Потому что если на сервере — то лучше работать с какой либо из баз данных.
Да Роман Вы правильно поняли, дело в том что 2 числа приезжает начальник (большой:-)) мне дали в руки MC3190 и сказали что бы я продемонстрировал его работу, просто поставят продукцию видов пять и остальное Вы наверное поняли. После его отъезда нужно будет все делать нормально но сейчас просто времени нет.
ОтветитьПрограммируем лазерный считыватель на терминалах сбора данных Cipher (9300)
Пришло время написать вторую публикацию по программированию считывающих устройств терминалов сбора д (читать далее...)
73Программно отменяем выключение КПК и подсветки в Win Mobile на C#
Наверное многие сталкивались с этой проблемой, когда написанное приложение хорошо и замечательно раб (читать далее...)
69Рисование Красивых линий в Windows Mobile на C#
Здесь я приведу пример кода для рисования при помощи GDI+ для Windows Mobile. Хороший человек Алекс (читать далее...)
58Программируем лазерный считыватель на терминалах сбора данных Datalogic
В этой публикации, в дополнение к уже имеющимся публикациям о программировании терминалов сбора данн (читать далее...)
52Пишем свой компас для HTC
Однажды я обзавёлся чудесным девайсом HTC HD2, и обнаружил на нём приложение «Компас». После недолго (читать далее...)
51
Очень помог! Спасибо!
ОтветитьНаучиться бы еще эмулировать терминал сбора данных на компьютере, а то при попытке запустить ругается на сроку
private Symbol.Barcode.BarcodeReader barcode_reader = new Symbol.Barcode.BarcodeReader();
пишет NullReferenceException
неверно сканера штрих кода не видит
Можно просто использовать условную компиляцию http://kbss.ru/blog/lang_c_sharp/67.html.
ОтветитьИ блок кода работающий со считывателем включать только в сборку для ТСД. Для эмулятора просто делать без этого куска кода.