Ни для кого не секрет, что промышленное ПО для терминалов сбора данных (ТСД) пишется для автоматизации бизнес процессов, в особенности — складских. Большая часть задач, которые необходимо решить с помощью ТСД, связана со штрихкодированием, благо сканер штрихкода в девайс встроен.
В этом статье пойдет речь о том, как начать писать программы для терминалов сбора данных, и как подключить и использовать сканер штрихкода.
Немного теории по сканерам штрихкода.
Есть три типа сканеров:
- Светодиодные — считывание производится аналоговой интегральной микросхемой, состоящей из чувствительных фотодиодов. Штрихкод подносить практически вплотную.
- Лазерный — прямое линейное считывание разверткой лазерного луча. Считывают на среднем расстоянии, но очень хрупки.
- Имэйджеры — моментальный снимок, и дальнейший разбор изображение, часто сопровождаются той же лазерной полосой, но исключительно с целью прицеливаний. Очень дорогие.
Мой подопытный образец Motorola MC3190 обладает лазерным сканером штрихкода. (В ближайшее время планирую плотно заняться Datalogic c имэйджером).
Кому интересно, можете ознакомиться со спецификацией
На девайсе установлена Windows CE, соответственно и писать будет необходимо под нее. И если Вы никогда не пробовали писать под ТСД, конечно же начать стоит с Hello World. Чтобы запустить приложение, написанное на C# на сем устройстве, необходимо установить на него .NET 3.5 Compact. А так же иметь под рукой Visual Studio 2008, так как во всех последующих релизах вариант проекта Smart Device отсутствует (мелкомягкие любят навязывать свои новые технологии, которые, к сожалению, не всегда совместимы с ранними версиями их же операционной системы).
Итак, создав простенькое приложение, можно попробовать его сразу же запустить. Если устройство подключено к компьютеру, то студия сразу же предложит выполнить запуск непосредственно на нем, с возможностью отладки, разумеется. Подождав несколько минут можно увидеть запуск формочки на устройстве.
Вот теперь можно приступать к самому интересному.
Для того, чтобы использовать объектную модель, уже реализованную в C#, Motorola подготовила целый ряд библиотек. Фактически с помощью них можно творить все, что нам вздумается. Называется это чудо Symbol. В нашем случае будет использована Symbol.Barcode. К сожалению в данный момент официальный сайт библиотеки symbol.com перенаправляет нас на motorolasolutions.com, сообщая о том, что технология устарела. Но я в свое время сделал копии всех Reference с примерами:
cloud.mail.ru/public/6716403f96ac%2FSymbolReference.7z
cloud.mail.ru/public/c48120476007%2FSymbolExample.7z
В примерах, те, кому интересно, конечно могут покопаться, но я могу сразу предупредить, что есть статьи, в которых описано все гораздо проще и удобнее, на мой взгляд лучшая среди них: kbss.ru/blog/dotnetcf/178.html. Но тем не менее я считаю, что каждый раз подключать таким образом сканер штрихкода не очень удобно, особенно если приложение планируется многооконным. К тому же в некоторых случаях могут возникнуть проблемы со считыванием, при возвращении фокуса в родительское окно, от дочернего.
Из всего что можно найти в интернете, главное осознать то, что самым удобным способом обработки штрихкодов является модель, построенная на событиях:
1. Сработал сканер штрихкода.
2. Распознал штрихкод корректно.
3. Мы вызываем событие обработки этого штрихкода у себя в программе, уже разобранного и удобного для восприятия.
Компоненты формы — паттерн, позволяющий добавлять свои контролы в конструктор форм студии. Этим и воспользуемся. И не только потому, что это упростит разработку форм, а еще и потому, что в дальнейшем компоненту можно будет доработать так, чтобы она поддерживала сканеры не только от Motorol`ы.
Затем надо описать класс компоненты.
public partial class BarcodeReader : Component
{
private Symbol.Barcode.BarcodeReader barcodeReader = null;
public delegate void OnReadBarcodeReaderEventHandler(string Text);
public event OnReadBarcodeReaderEventHandler OnRead;
public BarcodeReader()
{
InitializeComponent();
InitializeBarcodeReader();
}
public BarcodeReader(IContainer container)
{
container.Add(this);
InitializeComponent();
InitializeBarcodeReader();
}
private void InitializeBarcodeReader()
{
this.barcodeReader = new Symbol.Barcode.BarcodeReader();
this.barcodeReader.ListChanged += new System.ComponentModel.ListChangedEventHandler(BarcodeReader_ListChanged);
this.barcodeReader.Start();
this.components.Add(this.barcodeReader);
}
void BarcodeReader_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e)
{
if (this.barcodeReader.ReaderData.Result == Symbol.Results.SUCCESS)
{
OnRead(this.barcodeReader.ReaderData.Text);
}
}
}
На что здесь надо обратить внимание:
1. Любое событие, которые добавляется в компоненте, становится доступно в конструкторе формы.
2. На основании IContainer container в конструкторе форм реализован механизм высвобождения памяти, в том числе и unmanage объектов. Соответственно грех этим не воспользоваться. Добавляем в контейнер объект считывателя штрихкода, и память высвободится рекурсивно, при закрытии формы, в которой содержится описываемая здесь компонента.
//
О том, как это происходит можно понять открыв designer любой из форм, созданной в конструкторе, и посмотрев на перегрузку:
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
//
3. Чуть-чуть переопределяем событие считывания, избавив себя от обработки считанных с ошибками данных.
Дальше дело за малым: перетащить компоненту на форму:
И добавить событие обработки штрихкода:
Убедиться в работе более чем достаточно следующего кода:
private void barcodeReader1_OnRead(string Text)
{
MessageBox.Show(Text);
}
Получилось несколько сумбурно, и очень много скриншотов. Повторив вышеперечисленные шаги вы освоите сразу три вещи:
1. Создавать и запускать в режиме отладки программы под терминалы сбора данных.
2. Разберетесь как работать со сканером штрихкода.
3. Научитесь создавать компоненты форм.
Я надеюсь эта статья поможет тем, кто только начал разбираться с программированием под ТСД, и несколько упростит этим людям жизнь.
Автор: ZEEGIN