Библиотека фукций работы с торговыми устройствами "torgdev"

Содержание:

1. Что представляет собой библиотека torgdev
1.1. Общие принципы
1.2. Формат конфигурационного файла
2. Электронные весы
3. Сканер штрих-кодов
4. Считыватель магнитных карт
5. Фискальные устройства
5.1. Фискальный принтер МАР╤Я-301
5.2. Кассовый аппарат ЕРА-802
5.3. Кассовый аппарат DATECS MP-500/SAMSUNG ER-350
6. Клиент-серверная модель работы с устройствами
6.1. Кассовый сервер
6.1.1. Состав программных средств для работы с КР.
6.1.2. Особенности сборки для поддержки АМС-100Ф
6.1.3. Настройка кассового сервера
6.1.4. Настройка клиентских программ iceB для работы с кассовым сервером.
6.1.5. Протокол кассового сервера.
6.1.5.1 Команды кассового сервера - программирование фискального устройства
6.1.5.2 Команды кассового сервера - чеки
6.1.5.3 Команды кассового сервера - печать отчетов
6.1.5.4 Команды кассового сервера - прочее
6.1.6 Коды ошибок
6.2. Cервер считывателей магнитных карточек
6.2.1. Протокол сервера.
7. Лицензирование и поддержка.

1. Что представляет собой библиотека torgdev

Данная библиотека предоставляет набор базовых функций для работы с различными торговыми устройствами, включая:

Библиотека является частью торгово-бухгалтерской системы iceB, однако частью независимой. Находящиеся здесь программы являются тестово-демонстрационными, а в iceB с библиотекой torgdev работают модули rozn (розничная продажа) и kassa (работа с каccовыми аппаратами).

В этой директории располагаются файлы:


Объявления:
torgdev.h - функции верхнего уровня
torgdev_client.h - функции для работы в режиме "клиент-сервер"
local.h - функции нижнего уровня, нужны только для построения библиотеки
Библиотечные модули:
scan.c - сканеры штрих-кодов
card.c - считыватель магнитных карт
ves.c - электронные весы АР-1 фирмы "CAS"
datecs.c - кассовые аппараты типа DATECS/SAMSUNG
era802.c - кассовый аппарат ЕРА-802
fiscal.c - фискальные принтера
mdmlock.c - захват терминальной линии
io.c - ввод/вывод
Тестовые программы:
cas.c - электронные весы АР-1 фирмы "CAS"
chiper.c - сканеры штрих-кодов
maria.c - фискальный принтер МАРIЯ-301(MTM)
mp.c - кассовые аппараты всех типов
Модули для работы в режиме "клиент-сервер":
fisc_client.c - функции для клиента кассового сервера
fisc_server.c - кассовый сервер
card_client.c - функции для клиента считывателей магн. карточек
card_server.c - сервер магн. карточек
Прочее:
README.html - этот файл
torgdev.ini - образец конфигурационного файла

1.1. Общие принципы.

В программу, работающую с функциями данной библиотеки, необходимо включить:

#include <torgdev.h>

На этапе построения подключить библиотеки:

cc ... -ltorgdev -lm

Обычно функции возвращают значение типа int, содержащее:
1 - если все успешно
0 - за время таймаута ответ от устройства не поступил
<0 - какие-то аппаратные ошибки
>1 - сообщение об ошибке поступило от внешнего устройства
Исключение: функции верхнего уровня работы с кассовыми аппаратами возращают 0 в случае успешного завершения и ненулевое значение в случае ошибки. Трансформация номера ошибки в соответствующее сообщение выполняется функцией CA_error().

Последний способ выглядит идеологически более правильным, поэтому впоследствии остальные функции будут приведены к этому стандарту.

Заголовки функций достаточно подробно описаны в torgdev.h, поэтому здесь рассматриваться не будут.

1.2. Формат конфигурационного файла

Все программы, как тестовые, так и входящие в iceB, при запуске читают параметры устройств из файла torgdev.ini, который должен находиться в домашней директории пользователя. Формат - общепринятый для инициализационных файлов:

[СЕКЦИЯ 1]
параметр_1_1 = значение
параметр_1_2 = значение
........
параметр_1_N = значение

[СЕКЦИЯ 2]
параметр_2_1 = значение
параметр_2_2 = значение
........
параметр_1_N = значение
   .
   .
   .
[СЕКЦИЯ M]
параметр_M_1 = значение
параметр_M_2 = значение
........
параметр_M_N = значение


Cтроки, начинающиеся со знака `#', считаются комментариями.

В настоящее время имеются секции:
GLOBAL - глобальные параметры
SCALES - параметры электронных весов
SCANNER - параметры сканера штрих-кодов
FPRINTER - параметры фискального принтера
CASSA_1...CASSA_16 - параметры кассовых аппаратов
Считается, что к одному рабочему месту можно подключить:
  • одни кассовые весы
  • один сканер штрих-кодов
  • один фискальный принтер
  • до 16 кассовых аппаратов
Все устройства могут быть подключены одним из двух способов:
  1. по последовательной линии RS232 к центральному компьютеру (значение параметра device = /dev/ttyS??)
  2. к порту AUX рабочего места на базе терминала К-380 или эмулятора этого терминала (значение параметра device = local).
ПРИМЕЧАНИЕ: метод (2) для кассовых аппаратов в данной версии не реализован.

2. Электронные весы.

Весы АР-1 позволяют получить отчет об измеренном весе товара. Устройство подключается к линии RS232 с параметрами:
  • скорость обмена - 9600 бод
  • бит данных - 8
  • стоп-бит - 1
  • паритет - нет

Схема соединительного кабеля:


   Весы                             COM-port
9-pin розетка                     25-pin розетка

     *                                 *
     | 2                             3 |
 TxD +---------------------------------+ RxD
     | 3                             2 |
 RxD +---------------------------------+ TxD
     | 7                             7 |
 GND +---------------------------------+ GND
                                     4 |
                                   +---+ RTS
                                   | 5 |
                                   +---+ CTS
                                     6 |
                                   +---+ DSR
                                   | 8 |
                                   +---+ DCD
                                   | 20|
                                   +---+ DTR


Настраиваемые параметры конфигурационного файла torgdev.ini (секция [SCALES]):

model (строка)
модель устройства.
device (строка)
Полный путь на имя файла терминальной линии, к которой подключено устройство, или `local' в случае подключения через терминал.
attempts (целое положительное число)
Количество попыток в случае неуспешного выполнения опроса весов.
timeout (вещественное число)
Таймаут ожидания ответа от устройства в секундах.

3. Сканер штрих-кодов

Сканеры штрих-кодов подключаются по RS232, как правило, с параметрами:
  • скорость обмена - 9600 бод
  • бит данных - 8
  • стоп-бит - 1
  • паритет - нет

В случае подключения через терминал рекомендуется запрограммировать префикс, выдаваемый сканером перед собственно штрих-кодом, значением Ctrl/E (код 0x5). Только в этом случае программа сможет нормально отделить сканерный ввод от клавиатурного. Программирование выполняется по-разному для разных типов сканеров. В случае модели CHIPER-1021 для этого необходимо отсканировать метки:

   Prefix Setting -> START
   Hexadecimal Labels -> 0
                         5
   Prefix Setting -> END

Cхема кабеля:


  COM-port            Сканер
  25-pin розетка     9-pin вилка
      *                 * 
   GND|7               5|GND
      +-----------------+
   RXD|3               2|TXD
      +<----------------+
   RTS|4               7|CTS
      +---------------->+
   CTS|5               8|RTS
      +<----------------+
   +5V|25              9|
      +---------------->+

ПРИМЕЧАНИЕ: Напряжение +5V, необходимое для запитывания сканера, на стандартном RS232 отсутствует. Необходимо либо завести его на разъем с источника питания компьютера, либо запитывать сканер от внешнего источника.

Настраиваемые параметры конфигурационного файла torgdev.ini (секция [SCANNER]):

model (строка)
модель устройства.
device (строка)
Полный путь на имя файла терминальной линии, к которой подключено устройство, или `local' в случае подключения через терминал.
timeout (вещественное число)
Таймаут ожидания ответа от устройства в секундах.

4. Считыватель магнитных карт

Cчитыватели магнитных карт типа Proximity Reader GP20 подключаются к линии RS232 по нуль-модемной схеме с параметрами:
  • скорость обмена - 9600 бод
  • бит данных - 8
  • стоп-бит - 1
  • паритет - нет

Формат посылки:

   +---+-------------------------+----+----+----+
   |^B | Код - 10 16-ричных цифр | ^M | ^J | ^C |
   +---+-------------------------+----+----+----+

5. Фискальные устройства

Устройства этого типа можно условно разделить на два класса:
  1. Фискальные принтеры - предназначены для работы в комплексном режиме с компьютером; все операции выполняются по командам от компьютера.
  2. Кассовые аппараты - основные операции выполняются оператором автономно с клавиатуры устройства. Программа только загружает список товаров и получает очет по продажам.

5.1. Фискальный принтер МАР╤Я-301

Это (на мой взгляд) наилучшее устройство для организации компьютеризированного торгового рабочего места из всех испытанных. В библиотеке представлены функции, реализующие:
  • печать товарного чека
  • печать дневного отчетного чека
  • печать отчетного чека за указанный период
  • программирование налоговых ставок
  • настройка часов реального времени
  • вывод информации на индикатор
  • прогон чековой ленты
  • штамп

Настраиваемые параметры конфигурационного файла torgdev.ini (секция [FPRINTER]):

model = МАР╤Я-301
модель устройства.
device (строка)
Полный путь на имя файла терминальной линии, к которой подключено устройство, или `local' в случае подключения через терминал.
password (строка)
Пароль доступа к устройству. Заводская установка - `1111111111'
Схема соединительного кабеля:


   МАРIЯ                 COM-порт                COM-порт                  
                         9-pin розетка           25-pin розетка            
    *                       *                        *
    | 1                   3 │ TxD                  2 |                     
    +-----------<-----------+------------------------+                     
    | 2                   2 │ RxD                  3 |                     
    +------------>----------+------------------------+                     
    | 3                   4 | DTR                 20 |                     
    +-----------<------+----+-------------------+----+                     
    |                  |  1 | DCD               |  8 |                     
    |                  +-->-+                   +----+                     
    | 4                   5 | GND                  7 |                     
    +-----------------------+------------------------+                     
    | 5                   6 │ DSR                  6 |                     
    +------------>-----+----+-------------------+----+                     
    |                  |  8 | CTS               |  5 |                     
    |                  +----+                   +----+                     

Маркировка круглого 5-контактного разъема, вид спереди:

          2
          *
     5 *     * 4
    3 *       * 1

5.2. Кассовый аппарат ЕРА-802

Классический кассовый аппарат. Библиотечные функции позволяют загрузить произвольный список товаров (до 2500 наименований) и прочитать отчет по проданным товарам. Продажи выполняются полностью автономно, включая обработку штрих-кодов от присоединенного непосредственно к кассовому аппарату сканера. Настраиваемые параметры конфигурационного файла torgdev.ini (секция [CASSA_n]):

model = ERA
модель устройства.
device (строка)
Полный путь на имя файла терминальной линии, к которой подключено устройство, или `local' в случае подключения через терминал.
password (строка)
Пароль доступа к устройству. Заводская установка - `00000'
number (целое число)
Номер кассового аппарата на данной терминальной линии (для ЭККА ЕРА не используется)

5.3. Кассовый аппарат DATECS/SAMSUNG

С одной стороны, это устройство сочетает в себе функции кассового аппарата и фискального принтера (хотя, например, возможность выполнения возврата в режиме фиск.принтера реализована только в самых последних моделях).

С другой - протокол работы с компьтером абсолютно неприемлем для использования в многозадачных системах из-за жестких временнЫх характеристик. В какой-то степени спасает применение буферизированных UART и различных программных трюков, но насколько надежно все это будет работать - предсказать трудно. Вообще для обслуживания устройств такого рода следует писать драйвера, но мне показалось это слишком большой для них честью.

В общем, если у вас есть возможность выбора кассового аппарата - советую выбрать что-нибудь другое. Если такой возможности нет - что ж, дерзайте...

В данной билиотеке реализованы функции:

  • загрузки списка товаров (до 800 наименований) и получения отчетв по продажам.
  • настройки кассового аппарата
  • печать произвольного чека (режим фискального принтера). Этот режим не отлажен, поскольку для конкретного заказчика не требовался, а время поджимало (тем более, что за время разработки этот кассовый аппарат выпил из меня больше крови, чем все остальные устройства, вместе взятые). В iceB по этой причине не включен, используйте на свой страх и риск.

Схема распайки кабеля:


   ЭККА                        RS232
   -----             --------------------------
    RJ11               DB9               DB25
    вилка            розетка            розетка
     *                  *                  *
     |                  |                  |
     |1                5|GND              7|GND
     +------------------+------------------+
     |                  |                  |
     |3                3|TxD              2|TxD
     +------------------+------------------+
     |                  |                  |
     |4                2|RxD              3|RxD
     +------------------+------------------+
     |                  |                  |
     |2                4|DTR             20|DTR
     +-------------+----+-------------+----+
                   |    |             |    |
                   |    |             |    |
                   +----+             +----+
                   |    |             |    |
                   |    |             |    |
                   +----+             +----+
                   |    |             |    |
                   |    |             |    |
                   +----+             +----+

ВНИМАНИЕ!!!. Поставляемый с данными ЭККА коммутационный кабель с нашим пакетом НЕ РАБОТАЕТ - из разъема необходимо выпаять резистор.

Настраиваемые параметры конфигурационного файла torgdev.ini (секция [CASSA_n]):

model = ERA
модель устройства.
device (строка)
Полный путь на имя файла терминальной линии, к которой подключено устройство, или `local' в случае подключения через терминал.
password (строка)
Пароль доступа к устройству. Заводская установка - `00000'
number (целое число)
Номер кассового аппарата на данной терминальной линии (для ЭККА ЕРА не используется)

6. Клиент-серверная модель работы с устройствами.

В настоящее время выполняется переход от использовавшейся ранее терминальной модели обслуживания устройств - к клиент-серверной.

Различия между моделями заключается в следующем:

терминальная:
предполагалось подключение устройства либо напрямую к последовательным портам сервера приложений, либо через dumb-терминалы, сидящие на таких линиях.
клиент-серверная:
предполагается подключение устройств к произвольным компьютерам в сети, выполняющим программу-сервер. На сервере приложений выполняется программа-клиент, общающийся с сервером по сети TCP/IP. В простейшем случае обе программы - клиент и сервер - могут выполняться на одной и той же машине.

Пока что сервера имеются не для всех устройств, поддержка для которых есть в библиотеке.

6.1. Кассовый сервер.

Пока в этой системе поддерживаются три типа кассовых регистраторов:

  • МАР╤Я-301 (Объединение "Резонанс", Кривой Рог, Украина)
  • МАР╤Я-301MTM (Объединение "Резонанс", Кривой Рог, Украина)
  • АМС-100Ф (Фирма "Версия-Т", Калуга, Россия)

Поддержка касс Datecs/Samsung, имевшаяся в терминальной версии, пока отсутствует (за неимением спроса).

6.1.1. Состав программных средств для работы с КР.

torgdev/
fisc_server - кассовый сервер;
buhg/
mariq - настройка КР (внешний вид чека, налоги, режимы, etc)
rozn - розничная торговля
xpro - оптовая торговля

6.1.2. Особенности сборки для поддержки АМС-100Ф

Поскольку протокол работы АМС-100Ф производителем не предоставляется - для его работы требуется библиотека libchon100.so, распространяемая производителем этих аппаратов на коммерческой основе.

Если у вас эта библиотека имеется, то:

  1. скопируйте файл libchon100.so в директорию /lib и выполните команду

    ldconfig

  2. поскольку поставляемый производителем заголовочный файл chon100.h не приспособлен к сборке c++ - перед помещением его в директорию /usr/include примените к нему следующий патч:
    -----------------------------cut-----------------------------------------
    --- chon100.h.orig	2002-04-26 20:36:25 +0300
    +++ chon100.h	2003-05-07 08:13:31 +0300
    @@ -40,4 +40,7 @@
     #define errRemovedQty           55
     
    +#ifdef	__cplusplus
    +extern "C" {
    +#endif
     extern int  cbAddBottomLine(char *Line);
     extern int  cbAddSale(char *Name, double Price, double Qty, int Section);
    @@ -94,3 +97,6 @@
     extern void SetSupplierCode(char *Code); 
     extern int  UnLock(void); 
    -extern PrintCheck(void);
    +extern int  PrintCheck(void);
    +#ifdef	__cplusplus
    +}
    +#endif
    -----------------------------cut-----------------------------------------
    
  3. при сборке укажите configure ключ --enable-amc

6.1.3. Настройка кассового сервера

Формат командной строки запуска кассового сервера:

fisc_server [--test] [--log] [--model=MARIA-301|MARIA-301T4|AMC-100F] device
где
--test
имитировать работу с КР, выполняя все действия, за исключением непосредственной отправки команд устройству (умолчание - выкл.);
--log
включить журналирование отладочной информации через syslog
--model
указывается конкретный тип КР (умолчание - MARIA-301)
device
файл устройства COM-порта, к которому подключен KP (в случае АМС-100Ф может быть только /dev/ttyS0 или /dev/ttyS1).

Каждый кассовый регистратор на машине должен обслуживаться своей копией кассового сервера, подключенного с помощью демона (x)inetd к своему TCP-порту.

ПРИМЕР.
Допустим, к портам ttyS0 и ttyS1 компьютера kassa.my.net подключены два кассовых аппарата - МАР╤Я-301 и АМС-100Ф соответственно. Адрес сети, в которой находится компьютер - 192.168.10.0, и мы хотим иметь возможность запуска клиентских программ для использования этих устройств на любой из машин этой сети.

Рассмотрим установку кассового сервера по шагам:

  1. выбрать для регистраторов свободные TCP-порты и вписать их определения в файлы /etc/services на клиентской и серверной машинах в виде (имена - произвольные):
    fisc-maria	7654/tcp	# КР МАР╤Я-301
    fisc-mariam	7655/tcp	# КР МАР╤Я-301MTM
    fisc-amc	7660/tcp	# КР АМС-100Ф
    
  2. подключить свою копию сервера к каждому из портов. В случае использования inetd необходимо в его конфигурационный файл (обычно /etc/inetd.conf) записать:
    fisc-maria stream tcp nowait root /usr/local/bin/fisc_server fisc_server --model=MARIA-301 /dev/ttyS0
    fisc-amc stream tcp nowait root /usr/local/bin/fisc_server fisc_server --model=AMC-100F /dev/ttyS1
    

    В случае xinetd - поместить в его конфигурационную директорию (обычно /etc/xinetd.d) файлы для каждого из КР:

    fisc-maria:
    
    # default: off # description: Cash register MARIA-301 service fisc-maria { disable = no socket_type = stream protocol = tcp wait = no user = root server = /usr/lib/torgdev/fisc_server server_args = --model=MARIA-301 /dev/ttyS1 only_from = 192.168.10.0/24 }
    fisc-amc:
    # default: off # description: Cash register AMC-100F service fisc-amc { disable = no socket_type = stream protocol = tcp wait = no user = root server = /usr/lib/torgdev/fisc_server server_args = --model=AMC-100F /dev/ttyS1 only_from = 192.168.10.0/24 }
    После чего - рестартовать соответствующий демон.

    Теперь можно проверить, подключились ли кассовые сервера, например, с помощью программы telnet:

    telnet kassa.my.net fisc-maria

    Если все хорошо - вы увидите ответ:

    OK MARIA-301 V2.0 /dev/ttyS0

6.1.4. Настройка клиентских программ iceB для работы с кассовым сервером.

Связанную комбинацию ТЕРМИНАЛ <-> КАССОВЫЙ СЕРВЕР будем называть РМ (Рабочее Место продавца). Каждому РМ в переделах предприятия назначается уникальный номер (десятичное число), идентифицирующий его при выполнении операции продажи.

Все РМ предприятия описываются в файле kassa.alx, находящемся в директории конфигурации этого предприятия (обычно - /etc/iceB/<предприятие>/) на сервере приложений, выполняющем клиентскую часть.

Пример этого файла для нашего случая:


kassa.alx:

# Настройка номеров рабочих мест, оснащенных кассовым регистратором #<------ параметры РМ ------------>#<--- идентификатор РМ -----> # # 1|1|kassa.my.net|fisc-maria|1111111#iceb.my.net|localhost|tty1 1|2|kassa.my.net|fisc-amc|161819022#iceb.my.net|remote.my.net| | | | | | | | +>Терминал | | | | | | -> Удаленный хост (откуда зашли telnet'ом) | | | | | -> Хост, на котором запущена программа | | | | -> Пароль для МАРIЯ | | | | Код поставщика для АМС | | | | | | | -> TCP-порт кассового сервера | | -> Хост кассового сервера | -> Номер РМ -> Номер склада

В описании кассового сервера текст слева от # описывает параметры данного РМ, а текст справа используется для автоматической идентификации номера РМ, с которого запущена клиентская программа (rozn или xpro).

Чтобы определить ее вид - запустите на терминале, принадлежащем РМ, программу getworkid из комплекта утилит iceb (из шелла, не из mc!). Она должна выдать идентификатор на stdout.

ПРИМЕЧАНИЕ: в случае использования удаленного терминального доступа по протоколам типа telnet последнее поле идентификатора (Терминал) следует опустить, поскольку в действительности оно будет указывать на произвольный псевдотерминал, предоставленный telnet-клиенту, и может меняться от случая к случаю. В приведенном выше примере вывод getworkid мог выглядеть как

	    
    iceb.my.net|remote.my.net|pty/4
В приведенном выше примере первая строка описания читается как:

РМ номер 1 состоит из:

  • программы-кассового сервера, запущенного на компьютере kassa.my.net и подключенного к TCP-порту с именем fisc-maria; аппаратный пароль для подключения к кассовому регистратору МАРIЯ - 1111111;
  • терминала tty1 (первый экран консоли) компьютера iceb.my.net

Вторая строка:

РМ номер 2 состоит из:

  • программы-кассового сервера, запущенного на компьютере kassa.my.net и подключенного к TCP-порту с именем fisc-amc; код поставщика кассового аппарата - 161819022;
  • любого терминала, подключенного по telnet с компьютера remote.my.net на компьютер iceb.my.net.

Если по каким-то причинам описанный выше способ идентификации вам не подходит - можете воспользоваться альтернативным методом: перед запуском клиентской программы назначьте переменной среды KASSANO номер РМ, которому принадлежит терминал.

6.1.5. Протокол кассового сервера.

ПРИМЕЧАНИЕ: данная информация нужна в том случае, если вам требуется написать собственное приложение для работы с кассовым сервером. Если вы планируете использовать его в составе iceB - можете этот раздел пропустить.

Обслуживающая программа отправляет серверу блоки информации следующего вида (далее везде после параметров в скобках указывается максимальная длина параметра в виде МАР╤Я-301/МАР╤Я-301МТМ/АМС-100Ф. В случае превышения входные строки просто обрезаются):

FSTART: КОМАНДА
имя_кассира
произвольное имя, печатается на чеке (4/10/)
пароль
общий для всех пользователей (10/10/). Заводская установка: для МАР╤Я - 1111111111
ПАРАМЕТР1
ПАРАМЕТР2
...
ПАРАМЕТРN
FEND:

По завершению работы прикладная программа должна выдать серверу строку

FQUIT:

для его останова.

Если команда принята - сервер пытается ее выполнить и в зависимости от результата отвечает строкой, которая содержит одно из значений:

  • 0 - операция завершилась успешно
  • число, отличное от 0 - код ошибки, возвращенной устройством (см. п. 6.4.5)
  • ERROR FUNC имя_команды - неправильное имя команды
  • ERROR CMD оператор - неправильный оператор (ожидается одно из FSTART:, FEND:, FQUIT:)
  • ERROR - ошибка в списке параметров
  • OK модель_регистратора версия имя_устройства - выдается один раз при успешном открытии связи с сервером
  • QUIT - выдается один раз непосредственно перед завершением сервера по команде FQUIT:

6.4.1 Команды кассового сервера - программирование фискального устройства

MARIA_REGINFO
запрограммировать регистрационную информацию о владельце
ВНИМАНИЕ! Количество перепрограммирований регистратора МАР╤Я ограничено!
имя
пароль
FNO
фискальный (регистрационный) номер аппарата (10/10)
COD
ид.код ЕДРПОУ или ДРФО или номер/серия паспорта владельца (10/10)
NOM
инд. налоговый номер плательщика НДС (12/12)
NAME
наименование фирмы (18/18)
ADDR
адрес фирмы (18/18)

MARIA_SETCHECK
формирование внешнего вида чека
имя
пароль
HEAD
заголовок чека (18/43)
BOTM
заключительная строка (18/43). Если необходимо удалить заключительный текст - параметр должен быть пустым.
TXTA
текст, печатаемый до фискальной информации (50*18/50*43)
BOLDA
признак выделения этого текста:
  • обычный - 0
  • выделенный (яркость/дв.ширина) - 1
TXTZ
текст, печатаемый после фискальной информации (50*18/50*43)
BOLDZ
признак выделения этого текста:
  • обычный - 0
  • выделенный (яркость/дв.ширина) - 1

ПРИМЕЧАНИЕ: строки TXTA, TXTZ в модели МАР╤Я-301МТМ по какой-то причине не печатаются.


MARIA_NALOG
запрограммировать налог
имя
пароль
NAME
наименование (5/19)
NUM
целое, номер налога в диапазоне 1-8
INC
целое, тип налога:
0 - вложенный
1 - наложенный с добавлением
2 - наложенный с вычитанием (подоходный)
PERC
дробное, процентная ставка

MARIA_VALUTA
запрограммировать характеристики расчетной валюты
имя
пароль
NDEC
целое, кол-во знаков после запятой
NAME
наименование (3/3)

MARIA_TIME
подвести часы реального времени
ВНИМАНИЕ! Операцию возможно выполнить не чаще чем 1 раз в сутки после Z-отчета. Изменение времени может составлять не более чем +- (60/90) минут.
имя
пароль
HOUR
текущий час
MIN
текущие минуты
SEC
текущие секунды

6.1.5.2 Команды кассового сервера - чеки

ADD_CHECK
добавить запись в формируемый чек. Если чек на данный момент не создан - от открывается автоматически. Записи накапливаются на сервере и не передаются на кассовый регистратор вплоть до команды MARIA_PRCHECK
NAME
наименование товара (60/60/)
ART
целое число, уникальный артикул товара (-/4)
SUM
дробное число, сумма реализации
SED
дробное число, стоимость единицы
NUM
дробное число, количество
NLG
целое число, тип налога в диапазоне 1-8. 0 - без налога.

Следующие параметры необязательны:

SKID
наименование скидки. Обязательно должно быть непустым, если скидка имеется.
SKSUM
дробное, сумма скидки (отрицательное) или надбавки (положительное)

FREE_CHECK
уничтожить ранее начатый (с помощью ADD_CHECK) но не закрытый (по MARIA_PRCHECK) чек.

MARIA_PRCHECK
завершить формирование чека и напечатать его.
имя
пароль
OTD
ид. торгового отдела (2/15)
RET
тип чека: 0 - на реализацию, 1 - возврат
SUM
дробное, общая сумма по чеку
SUM_TARA
дробное, сумма тарой
SUM_PCHECK
дробное, сумма по платежному чеку
SUM_CRED
дробное, сумма по кредиту
SUM_NAL
дробное, сумма наличными

Следующий параметр необязателен:

TEXT
служебный текст, печатаемый после фискальной информации.

MARIA_COPY
напечатать копию предыдущего чека (возможна только одна копия)
имя
пароль
MARIA_NULL
напечатать пустой чек
имя
пароль

6.1.5..3 Команды кассового сервера - печать отчетов

MARIA_DAY_REPORT
напечатать дневной отчет
имя
пароль
TYPE
тип отчета:
  • 0 - без обнуления (X-отчет);
  • 1 - с обнулением (Z-отчет)

MARIA_DATE_REPORT
напечатать отчет за указанный период
имя
пароль
DAY_FROM
целое, день начала периода
MONTH_FROM
целое, месяц начала периода
YEAR_FROM
целое, год начала периода
DAY_TO
целое, день конца периода
MONTH_TO
целое, месяц конца периода
YEAR_TO
целое, год конца периода

6.1.5.4 Команды кассового сервера - прочее

MARIA_SLUG
служебное внесение/изъятие наличности
имя
пароль
SUM
знаковое дробное. Положительное для внесения, отрицательное для изъятия.

MARIA_INDICATOR
вывести сообщение на индикатор
имя
пароль
NSTR
номер строки индикатора, в которую выводить (1-3). В стандартной поставке имеется:
  • МАР╤Я-301 - 2 строки по 16 символов произвольной информации
  • МАР╤Я-МТМ - 1 строка по 10 цифр с дес. точкой
MSG
выводимое сообщение (16 симв./дробное число)
PAUSE
на ск. секунд задержать сообщение на индикаторе (для МТМ)

MARIA_LINEFEED
прогнать чековую ленту
имя
пароль
N
целое, на сколько прогонять (255 строк/255 шагов по 0,125 мм)

6.1.6 Коды ошибок

Цифровые коды ошибок, возвращаемых фискальным регистратором МАР╤Я:

-2 Не удается установить связь с устройством
10 ^Нев╕рно вказаний тип пристрою^
41 ^HARDPAPER: Ск╕нчилась чекова або контрольна стр╕чка^
42 ^HARDSENSOR: Датчик крайнього положення друкуючо╖ головки не працю╓^
43 ^HARDPOINT: Позиц╕онер друкуючо╖ головки не працю╓^
44 ^HARDTXD: Помилка л╕н╕╖ зв'язку (контроль парност╕)^
45 ^HARDTIMER: Неприпустиме значення часу^
46 ^HARDMEMORY: Помилка запису до ф╕скально╖ пам'ят╕^
47 ^HARDLCD: Несправний дисплей^
48 ^SHUTDOWN: Апарат блоковано з техн╕чних причин^
49 ^SOFTBLOCK: Задовгий блок даних^
50 ^SOFTNREP: Необх╕дно виконати Z-зв╕т^
51 ^SOFTSYSLOCK: Неприпустиме положення ключа "В╤ДКЛЮЧЕНО"^
52 ^SOFTCOMMAN: Нев╕дома команда^
53 ^SOFTPROTOC: Команда не в╕дпов╕да╓ протоколу^
54 ^SOFTZREPOR: Z-зв╕т не сформований через авар╕ю^
55 ^SOFTMFULL: Переповнення ф╕скально╖ пам'ят╕^
56 ^SOFTTIMER: Неприпустимий час: менше останнього Z-зв╕ту^
57 ^SOFTPARAM: Неприпустимий параметр команди^
58 ^SOFTUPAS: Необх╕дна ре╓страц╕я касира^
59 ^SOFTCHECK: Нев╕рн╕ значення параметр╕в^
60 ^SOFTFACT: Не знайдено ре╓страц╕йний номер^
61 ^SOFTSLWORK: Необх╕дно встановити ключ у положення "РОБОТА"^
62 ^SOFTSLPROG: Необх╕дно встановити ключ у положення "ПРОГРАМУВАННЯ"^
63 ^SOFTSLZREP: Необх╕дно встановити ключ у положення "X-ЗВ╤Т"^
64 ^SOFTSLNREP: Необх╕дно встановити ключ у положення "Z-ЗВ╤Т"^
65 ^SOFTREPL: Значення вже запрограмовано^
66 ^SOFTOVER: Переповнення розрядност╕^
67 ^SOFTNEED: Неприпустимий результат коригування вих╕дного залишку^
68 ^SOFTACTIVE: Неактивн╕ ТРК або резервуари^
69 ^SOFTFMTEST: Пошкоджено основн╕ ф╕скальн╕ рекв╕зити^
70 ^SOFTOPTEST: Пошкоджено денн╕ ф╕скальн╕ дан╕^
71 ^SOFT24HOUR: Робота продовжу╓ться б╕льше 24 годин^
72 ^HARDUCCLOW: Низька напруга живлення^
73 ^HARDCUTTER: Несправн╕сть пристрою в╕др╕зання стр╕чки^
74 ^HARDPCONTR: Несправн╕сть контролера зв'язку з ТРК^
75 ^SOFTDIFART: нелегальна спроба перепрограмування артикула^
76 ^SOFTBADART: неприпустимий номер артикула^
77 ^SOFTCOPY: завеликий чек^ 
78 ^SOFTOVART: забагато команд FISC/ARFI для чека^
79 ^SOFTNOTAV: помилка актив╕зац╕╖ ТРК^
80 ^SOFTBADDISC: сума знижки б╕льша за суму обороту^
81 ^SOFTINUSE  : попередн╓ замовлення не завершене^
82 ^SOFTOVPIST: перевищено к╕льк╕сть актив╕зованих ТРК^
83 ^SOFTBADCS: нев╕рна контрольна сума^
84 ^SOFTARTMODE: неприпустима операц╕я для даного режима артикульно╖ таблиц╕^
85 ^SOFTTHPAS: нев╕рний пароль функц╕╖ технолог╕чного проливу^

106 Ответ кассового регистратора не описан в протоколе

6.2. Cервер считывателей магнитных карточек

Формат командной строки запуска сервера:


card_server [--test] [--log] device
где
--test
имитировать работу со считывателем. Связь с устройством в действительности не создается, при запросе кода карточки всегда возвращается строка:

0 1234567890abcd

--log
включить журналирование отладочной информации через syslog
device
файл устройства COM-порта, к которому подключен считыватель (обычно - /dev/ttyS0 или /dev/ttyS1).

Каждый считыватель на машине должен обслуживаться своей копией сервера, подключенного с помощью демона (x)inetd к своему TCP-порту.

ПРИМЕР.
Допустим, к порту ttyS0 компьютера cardmon.my.net подключен считыватель магнитных карточек. Адрес сети, в которой находится компьютер - 192.168.10.0, и мы хотим иметь возможность запуска клиентских программ для использования этого устройства на любой из машин этой сети.

Рассмотрим установку сервера по шагам:

  1. выбрать для считывателя свободный TCP-порт и вписать его определение в файлы /etc/services на клиентской и серверной машинах в виде (имена - произвольные):
    cardread-gp	7550/tcp	# Card Reader GP20
    
  2. подключить копию сервера к выбранному портову. В случае использования inetd необходимо в его конфигурационный файл (обычно /etc/inetd.conf) записать:
    cardread-gp stream tcp nowait root /usr/lib/card_server card_server /dev/ttyS0
    

    В случае xinetd - поместить в его конфигурационную директорию (обычно /etc/xinetd.d) файлы для каждого из считывателей:

    cardread-gp:
    
    # default: off # description: Card reader Proximity Reader GP20 # description: Cash register AMC-100F { disable = no socket_type = stream protocol = tcp wait = no user = root server = /usr/lib/torgdev/card_server server_args = /dev/ttyS0 only_from = 192.168.10.0/24 }
    После чего - рестартовать соответствующий демон.

    Теперь можно проверить, подключился ли сервер, например, с помощью программы telnet:

    telnet cardmon.my.net cardread-gp

    Если все хорошо - вы увидите ответ вроде следующего:

    OK Proximity_Reader_GP20 V2.2 /dev/ttyS0

6.2.1. Протокол сервера.

ПРИМЕЧАНИЕ: данная информация нужна в том случае, если вам требуется написать собственное приложение для работы с сервером магнитных карточек. Если вы планируете использовать его в составе iceB - можете этот раздел пропустить.

При успешном подключении сервер выдает строку:

OK модель_считывателя версия_программы имя_устройства

В данный момент сервер понимает единственную команду - чтение данных от считывателя с таймаутом:

FSTART: READT
таймаут в секундах

В ответ сервер возвращает строку результата операции, в которой может быть:

  • в случае успешного считывания:
    0 код_считанной_карточки(14 16-ричных цифр)
    
  • если за заданный таймаут считывания не произошло
    1
    
  • в случае ошибки обмена данными
    -1 Текст сообщения об ошибке
    
По завершению работы прикладная программа должна выдать серверу строку

FQUIT:

для его останова. В ответ сервер выдает строку

QUIT

и завершает свою работу.

7. Лицензирование и поддержка.

Весь программный код, входящий в состав библиотеки torgdev, подпадает под действие общедоступной лицензиии GNU General Public License, текст которой имеется в составе ПО, в файле СOPYING. Здесь также имеется перевод этой лицензии на русский язык, в файле СOPYING.rus .

Вы можете в соответствии с лицензией GPL, вы можете пользоваться данным ПО бесплатно, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Отдельно вам может быть предоставлена техническая поддержка по данному ПО на коммерческой основе.

Иногда использование ПО, находящегося под лицензией GPL, является нежелательным (например, если вы хотите поставлять библиотеку torgdev в составе закрытого продукта, не подпадающего под GPL). В таком случае вы можете приобрести у нас коммерческую лицензию на данное ПО. Коммерческая лицензия распространяется на весь программный код пакета torgdev, за исключением cледующих файлов:

cas.c, chiper.c, maria.c, mp.c

Другими словами, коммерческая лицензия может быть выдана на библиотеку libtorgdev, но не на тестовые программы. Это связано с тем, что все права на модули, входящие в libtorgdev, принадлежат автору, Юрию Калиниченко, и он как автор вправе выпускать свой продукт под двойной лицензией. Тестовые же программы используют библиотеку libconfig, защищенную GPL, и могут распространяться только по условиям GPL. Связаться с автором с целью заключения соответствующих вашим потребностям соглашений можно по адресу yuk@iceb.vinnitsa.com


Срд Сен 7 22:35:12 EEST 2005 (C) Yura Kalinichenko <yuk@iceb.vinnitsa.com>