?

Log in

No account? Create an account

Штрих PriceChecker в Delphi

Снова нам привезли новое оборудование. На этот раз это информационный терминал Штрих PriceChecker. Как обычно, вопрос: что это и с чем едят. Терминал содержал модуль Wi-Fi, и было заявлено, что работать он может как по Wi-Fi, так и по Ethernet. Как это делается: на задней стенке терминала есть RJ-45 разъем, в него подключается RJ-45 же хвостик, торчащий рядом. Гнездо - это Wi-Fi модуль, хвостик - это сам терминал. Вафельный модуль оказался, собственно, простым Асусным роутером ASUS WL-330N, кажется. Разъем - это его LAN-порт. WAN-порт отсутствует напрочь. Дефолтный IP у него 192.168.220.1, пароль admin/admin, кажется. Там можно выставить режимы работы модуля - повторитель, адаптер, точка доступа, еще чего-то. Не разбирался, т.к. вафля особо-то нам и не нужна. Заметил только, что модуль регулярно терял сеть, хотя точка доступа стояла в 20 сантиметрах от него. Нехорошо... В общем, для нормального кошерного Ethernet пришлось обратить внимание на хвостик. Дефолтный IP терминала находиться не хотел, нашелся только с помощью сниффера, и как ни странно, был 192.168.1.166, кажется, как и заявлено в документации. Дальше через драйвер прайс-чекеров (с прилагавшегося CD) терминалу был выдан православный IP, настройка оказалась интуитивно понятной (Описывать не буду - для этого есть документация). Тогда можно стало переходить к основной задаче - написать для него собственный сервер прайс-чекеров. "Описание протокола" принесло больше ужаса, чем ответов, их я нашел в "Руководстве программиста". Долго втыкал в примеры использования, ни один из которых не компилировался, прошу заметить! потому что ну нет у меня такого класса "SizeableForm", откуда "Штрих" его выкопал?. Все оказалось просто как палка. Добавляем в список interface/uses PriceDrv, и копируем в папку со своим проектом файлы PriceDrv.pas (создание объекта драйвера) и PriceDrv_TLB.pas (собственно, его описание). После этого смело используем объект Driver и его методы, описанные в "Руководстве программиста". Например, я сделал так:

//При создании формы:
Driver.OnDataEvent := DataEvent;
Driver.OpenServer;

//В процедуре DataEvent описываем весь запрос к базе данных, или откуда у Вас берутся данные в ответ на штрих-код
//Штрих-код содержится в переменной Data в виде хексовой последовательности.
//Не забываем описывать процедуру в type!!! А то не полетит.
procedure TfrmMain.DataEvent(Sender: TObject; const Data: WideString; SenderID: Integer);
begin
Driver.Line2 := Data;
Driver.Line1 := Data;
Driver.ShowMessage;
end;

//На закрытие формы:
Driver.CloseServer;
Driver.OnDataEvent := nil;

ЗЫ. Саппорт "Штрихов" промолчал в ответ на вопрос "может ли таким образом используемый объект Driver работать с несколькими прайс-чекерами, если у них указан параметр "отключаться от сервера после выполнения запроса?"".

Comments