Протокол на обмен с кaсов aпaрaт Zeka в режим ON-LINE
Софтуер за откриване и разпознаване на устройства произведени от ТРЕМОЛ
Общо описние
Режима представлява ON-LINE комуникация с персонален компютър, при която продажбите се извършват от касовия апарат и се администрират от компютъра. Касовия апарат запазва своите функции в отчетните режими, като единствено в режим регистрация (продажби) изисква постоянна връзка с компютъра. Всяка една операция в този режим се докладва на компютъра. При продажби на артикули или подгрупи, касовия апарат получава от компютъра необходимите данни (име цена и т.н.). За да работят касовите апарати в ON-LINE режим е необходимо в режим "програмиране" да е указан режима (П10=1, П11=0). Режим ON-LINE може да бъде използван за създаване на мрежа от вида - много касови апарати един компютър.
Модели поддържащи протокола
Zeka 02, Zeka 02-E, Zeka M02, Zeka M02-E
Описание на протокола
Параметри на връзката:
Baud rate 9600 bps, 8 bits, no parity
Формат на съобщенията:
<маркер><номер на КА><команда><информация><crc><LF>
Описанието на отделните полета, обозначени между знаците < и > е показано в таблицата:
| Поле | Брой байта | Стойност |
| маркер | 1 | Старт на съобщението – винаги 0xАА |
| номер на КА | 6 | ASCII ('nnnnnn') сериен номер на касовия апарат |
| команда | 1 | 'a'..'z' команда |
| информация | ? | променлива дължина символи в обхвата 0x20 .. 0x8F |
| crc | 2 | аритметична сума, включително маркера, образувана по следния начин: сума от всички байтове на съобщението - резултата е байт от вида 0xHL, който се преобразува като 0x3H, 0x3L. |
| LF | 1 | Край на съобщението - винаги - 0x0A |
Формат на квитанциите:
<тип><номер на КА><crc><LF>
Описанието на отделните полета, обозначени между знаците < и > е показано в таблицата:
| Поле | Брой байта | Стойност |
| тип | 1 | Тип на квитанция – 0x06 = ACK (положителна), 0x15 = NACK (отрицателна), 0x0Е = RETRY (изисква повторение на последната изпратена команда) |
| номер на КА | 6 | ASCII ('nnnnnn') сериен номер на касовия апарат |
| crc | 2 | аритметична сума, включително маркера, образувана по следния начин: сума от всички байтове на съобщението - резултата е байт от вида 0xHL, който се преобразува като 0x3H, 0x3L. |
| LF | 1 | Край на съобщението - винаги - 0x0A |
Последователност на комуникацията:
| Касов апарат: | Компютър: |
| Съобщение "въпрос" -------> | |
| <-----ACK <-----Съобщение "отговор" | |
| ACK -------> |
Активна страна в комуникациите е касовия апарат. При липса на квитанция от компютъра, едно и също съобщение се изпраща отново след определено време timeout. Този процес продължава до получаване на квитанция ACK от компютъра. През това време касовия апарат е блокиран, а в ляво на дисплея се изписва "r"
Описание на команди и информация
Съобщения "уведомяващи" компютъра съобщения изпращани от касата:
Вход/изход на оператор:
<f/o><номер><име>
Полета:
| f/o | 1 байт команда - 'f' = вход на оператор, 'о' = изход на оператор |
| номер | 1 байт ASCII номер '1' до '9' на оператор |
| име | 12 байта име на оператор |
Отговор от компютъра: квитанция (тип ACK, NACK или RETRY)
Въведени/изведени суми от текущия оператор:
<k><+/-><сума><тип плащане><десетична точка><номер на бон>
Полета:
| k | 1 байт команда - 'k' |
| +/- | 1 байт тип на командата - '+' = въведена сума, '-' = изведена сума |
| сума | 8 байта сума (без десетичната точка) ASCII формат |
| тип плашане | 1 байт тип на плащане - ASCII номер '0' до '4' |
| десетична точка | 1 байт позиция на десетичната точка - ASCII номер '0' или '2' |
| номер на бон | 5 байта номер на бон в ASCII формат (примерно "12345") |
Отговор от компютъра: квитанция (тип ACK, NACK или RETRY)
Извършена отстъпка/надбавка върху последната продажба:
<m><+/-><сума><данъчна група><десетична точка><подгрупа>
Полета:
| m | 1 байт команда - 'm' |
| +/- | 1 байт тип на командата - '+' = надбавка, '-' = отстъпка |
| сума | 8 байта сума (без десетичната точка) ASCII формат |
| данъчна група | 1 байт данъчна група - ASCII номер '0' до '7' |
| десетична точка | 1 байт позиция на десетичната точка - ASCII номер '0' или '2' |
| подгрупа | 1 байт номер на подгрупа в ASCII номер '0' до '9' |
Отговор от компютъра: квитанция (тип ACK, NACK или RETRY)
Анулиране на отстъпка/надбавка:
<u><+/-><сума><данъчна група><десетична точка><подгрупа>
Полета:
| u | 1 байт команда - 'u' |
| +/- | 1 байт тип на командата - '+' = анулиране на надбавка, '-' = анулиране на отстъпка |
| сума | 8 байта сума (без десетичната точка) ASCII формат |
| данъчна група | 1 байт данъчна група - ASCII номер '0' до '7' |
| десетична точка | 1 байт позиция на десетичната точка - ASCII номер '0' или '2' |
| подгрупа | 1 байт номер на подгрупа в ASCII номер '0' до '9' |
Отговор от компютъра: квитанция (тип ACK, NACK или RETRY)
Продажба в подгрупа:
<s><подгрупа><данъчна група><количество><цена><десетична точка>
Полета:
| s | 1 байт команда - 's' |
| подгрупа | 1 байт номер на подгрупа в ASCII номер '0' до '9' |
| данъчна група | 1 байт данъчна група - ASCII номер '0' до '7' |
| количество | 9 байта номер количество ASCII формат без десетична точка (десетичната точка е фиксирана на третия знак) - примерно "123456789" => количеството е 123456.789) |
| цена | 8 байта цена (без десетичната точка) ASCII формат |
| десетична точка | 1 байт позиция на десетичната точка - ASCII номер '0' или '2' |
Отговор от компютъра: квитанция (тип ACK, NACK или RETRY)
Анулиране на продажба в подгрупа:
<n><подгрупа><данъчна група><количество><цена><десетична точка>
Полета:
| n | 1 байт команда - 'n' |
| подгрупа | 1 байт номер на подгрупа в ASCII номер '0' до '9' |
| данъчна група | 1 байт данъчна група - ASCII номер '0' до '7' |
| количество | 9 байта номер количество ASCII формат без десетична точка (десетичната точка е фиксирана на третия знак) - примерно "123456789" => количеството е 123456.789) |
| цена | 8 байта цена (без десетичната точка) ASCII формат |
| десетична точка | 1 байт позиция на десетичната точка - ASCII номер '0' или '2' |
Отговор от компютъра: квитанция (тип ACK, NACK или RETRY)
Съобщения изискващи отговор от компютъра
Заявка за продажба на артикул:
<b><баркод><номер на артикул><количество>
Полета:
| b | 1 байт команда - 'b' |
| баркод | 12 байта баркод на артикула |
| номер на артикул | 5 байта номер на артикул ASCII формат - примерно "00123" |
| количество | 9 байта номер количество ASCII формат без десетична точка (десетичната точка е фиксирана на третия знак) - примерно "123456789" => количеството е 123456.789) |
Отговор от компютъра:
<p><номер на артикул><цена><име><данъчна група><арт.група><подгрупа><десетична точка>
или при грешка
<е><номер>
Полета:
| p | 1 байт команда - 'p' |
| номер на артикул | 5 байта номер на артикул ASCII формат - примерно "00123" |
| цена | 8 байта цена (без десетичната точка) ASCII формат |
| име | 12 байта име на артикул |
| данъчна група | 1 байт данъчна група - ASCII номер '0' до '7' |
| артикулна група | 1 байт артикулна група - ASCII номер '0' до '9' |
| подгрупа | 1 байт номер на подгрупа в ASCII номер '0' до '9' |
| десетична точка | 1 байт позиция на десетичната точка - ASCII номер '0' или '2' |
или при грешка
Полета:
| e | 1 байт команда - 'e' |
| номер | 1 байт номер на грешката ASCII номер - '1' = не е намерен такъв артикул, '2' = забранен артикул, '6' = препълване |
Заявка за анулиране на артикул:
<c><баркод><номер на артикул><количество>
Полета:
| c | 1 байт команда - 'c' |
| баркод | 12 байта баркод на артикула |
| номер на артикул | 5 байта номер на артикул ASCII формат - примерно "00123" |
| количество | 9 байта номер количество ASCII формат без десетична точка (десетичната точка е фиксирана на третия знак) - примерно "123456789" => количеството е 123456.789) |
Отговор от компютъра:
<j><номер на артикул><цена><име><данъчна група><арт.група><подгрупа><десетична точка>
или при грешка
<е><номер>
Полета:
| j | 1 байт команда - 'j' |
| номер на артикул | 5 байта номер на артикул ASCII формат - примерно "00123" |
| цена | 8 байта цена (без десетичната точка) ASCII формат |
| име | 12 байта име на артикул |
| данъчна група | 1 байт данъчна група - ASCII номер '0' до '7' |
| артикулна група | 1 байт артикулна група - ASCII номер '0' до '9' |
| подгрупа | 1 байт номер на подгрупа в ASCII номер '0' до '9' |
| десетична точка | 1 байт позиция на десетичната точка - ASCII номер '0' или '2' |
или при грешка
Полета:
| e | 1 байт команда - 'e' |
| номер | 1 байт номер на грешката ASCII номер - '1' = не е намерен такъв артикул, '2' = забранен артикул, '6' = препълване |
Заявка за приключване на бон (плащане):
<d><тип плащане><сума><получена сума><номер на бон><десетична точка>
Полета:
| d | 1 байт команда - 'd' |
| тип плащане | 1 байт ASCII номер '0' до '3' |
| сума | 8 байта сума (без десетичната точка) ASCII формат |
| получена сума | 8 байта получена сума (без десетичната точка) ASCII формат |
| номер на бон | 5 байта номер на бон ASCII формат - примерно "00123" |
| десетична точка | 1 байт позиция на десетичната точка - ASCII номер '0' или '2' |
Отговор от компютъра:
<q><000001000><име>
или при грешка
<е><номер>
Полета:
| q | 1 байт команда - 'q' |
| 000001000 | 9 байта - константа ASCII формат "000001000" |
| име | 6 байта име на тип плащане. Ако плащането е 0 (В БРОЙ) името е без значение, тъй като касата ще отпечати "В БРОЙ" |
или при грешка
Полета:
| e | 1 байт команда - 'e' |
| номер | 1 байт номер на грешката ASCII номер - '3' = забранено плащане |
Съобщения изпращани от касата след потвърдена последна заявка:
'x' след 'b', препълване (цена * количество > 8 знака)
'x' след 'c', има разлика в параметрите на артикула (цена, данъчна група, и др.)
'w' след 'b', препълване в междинна сума (STL > 8 знака)
<последна редакция 29.11.2007 г.>
