Универсальный протокол обмена данными предложен СКБ ВТ "Искра" (г. Санкт-Петербург) в 1999 году. Действующая версия протокола - 1.72. Данная версия протокола реализована в контроллерах управления ТРК серии ПИЛОТ.
Полное официальное наименование документа: "Универсальный протокол обмена данными по интерфейсу RS232
контрольно-кассовых машин моделей "Samsung ER-250RF" и "Samsung ER-4615RF" с установленным
комплексом программно-технических средств ПТС-250 и ПТС-4615 и контроллера топливно-раздаточных колонок.
Техническое описание. Версия 1.72".
Этот протокол реализован и в большинстве других ККМ, разрешенных к применению на АЗС. По этой причине и для большей краткости данный документ в контексте обычно называют
"Универсальный протокол..."
Приводимый текст протокола следует рассматривать только как справочную информацию. В нем исправлены некоторые явные ошибки и даны примечания. Подробно особенности использования "Универсального протокола..." рассмотрены на других страницах сайта.
Оригинальный текст в формате Microsoft Word (DOC) есть в файле: trk172.zip.
Копия данного текста формате Adobe Acrobat 4.0 (PDF) - в файле: trk172.pdf.
В контроллерах управления ТРК серии ПИЛОТ реализованы некоторые
дополнительные команды, предназначенные для автоматизированных систем управления АЗС и не влияющие на работу в соответствии с данным протоколом.
1. Введение
В настоящем документе описан универсальный протокол обмена данными по интерфейсу RS232
управляющих контрольно-кассовых машин моделей "Samsung ER-250RF" и "Samsung ER-4615RF" с установленным
комплексом программно-технических средств ПТС - 250 и ПТС - 4615 (в дальнейшем - ККМ) и контроллера
топливно-раздаточных колонок (в дальнейшем - контроллер ТРК).
2. Основные физические параметры протокола обмена данными
Протокол используется для организации полудуплексной двунаправленной асинхронной связи
по интерфейсу RS232 с физическими параметрами:
- скорость передачи - 2400, 4800, 9600 бит/с;
- 1 стартовый бит;
- 8 битов данных;
- 1 стоповый бит;
- без контроля четности;
- 3 линии (TxD, RxD, GND).
3. Формат сообщений протокола обмена данными
3.1. Формат сообщений, передаваемых от ККМ в контроллер ТРК
Формат сообщений, передаваемых от ККМ в контроллер ТРК:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
где:
Поле данных |
Размер, байт |
Тип |
Значение |
Содержание |
SOH |
1 |
HEX |
01 |
Маркер начала сообщения |
TRK_No |
2 |
ASCII |
'00'*, '01'...'7Fh' |
Номер ТРК. *Только для команды "Общий останов" |
Command |
1 |
ASCII |
'0'...'F' |
Код команды управления |
STX |
1 |
HEX |
02 |
Маркер начала поля данных |
Price |
6 |
ASCII |
'000000'...'999999' |
Цена топлива, коп. |
Volume |
6 |
ASCII |
'000000'...'999999' |
Доза налива, мл. |
Status |
4 |
ASCII |
'0000'...'FFFF' |
Код состояния/ошибки и параметры ТРК |
Error |
2 |
ASCII |
'00'...'FF' |
Код ошибки протокола |
Code |
2 |
ASCII |
'00'...'FF' |
Код состояния ТРК |
ETX |
1 |
HEX |
03 |
Маркер окончания поля данных |
CRC |
1 |
HEX |
00...FF |
Контрольная сумма |
3.1.1. Перечень команд управления
Название команды |
Код команды |
Описание команды |
HEX |
ASCII |
"Доза" |
31 |
'1' |
Задание дозы налива для ТРК и установка готовности ТРК к пуску |
"Установка" |
33 |
'3' |
Установка параметров ТРК |
"Тест" |
34 |
'4' |
Опрос состояния ТРК |
"Пуск" |
35 |
'5' |
Запуск ТРК |
"Останов" |
36 |
'6' |
Останов ТРК |
"Сброс" |
37 |
'7' |
Сброс состояния ТРК |
"До полного бака" |
39 |
'9' |
Заправка до полного бака |
3.2. Формат сообщений, передаваемых от контроллера ТРК в ККМ
Формат сообщений, передаваемых от контроллера ТРК в ККМ:
SOH |
TRK_No |
ReplyOn |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
где:
Поле данных |
Размер, байт |
Тип |
Значение |
Содержание |
SOH |
1 |
HEX |
01 |
Маркер начала сообщения |
TRK_No |
2 |
ASCII |
'01'...'7Fh' |
Номер ТРК |
ReplyOn |
1 |
ASCII |
'0'...'F' |
Код команды управления, на которую следует ответ (Примечание: Далее при описании команд вместо
данного поля используется "Command") |
STX |
1 |
HEX |
02 |
Маркер начала поля данных |
Price |
6 |
ASCII |
'000000'...'999999' |
Цена топлива, коп. |
Volume |
6 |
ASCII |
'000000'...'999999' |
Доза налива, мл. |
Status |
4 |
ASCII |
'0000'...'FFFF' |
Код состояния/ошибки и параметры ТРК |
Error |
2 |
ASCII |
'00'...'FF' |
Код ошибки протокола |
Code |
2 |
ASCII |
'00'...'FF' |
Код состояния ТРК |
ETX |
1 |
HEX |
03 |
Маркер окончания поля данных |
CRC |
1 |
HEX |
00...FF |
Контрольная сумма |
3.2.1. Перечень кодов ошибок протокола (поле Error)
Код состояния (ASCII) |
Описание состояния |
'00' |
Нет ошибок |
'01' |
Недопустимый номер ТРК (Примечание: Реально в версии 1.72 данный код не используется) |
'02' |
Недопустимая команда ТРК при данном состоянии ТРК |
'03' |
Неправильная контрольная сумма |
3.2.2. Перечень кодов состояния ТРК (поле Code)
Код состояния (ASCII) |
Описание состояния |
'01' |
Готовность к пуску |
'02' |
Остаток дозы |
'03' |
Пуск |
'04' |
Останов |
'05' |
Сброс (Дозы нет) |
'06' |
Авария |
'07' |
До полного бака останов |
3.3. Подсчет байта контрольной суммы сообщения
Подсчет байта контрольной суммы сообщения (поле CRC) производится путем выполнения операции
XOR (исключающее или) всех байтов сообщения, включая ETX, не включая SOH.
4. Основные операции в системе "ККМ - контроллер ТРК" и соответствующие им последовательности обмена сообщениями
Основные операции в системе "ККМ - контроллер ТРК" связаны с возможными состояниями контроллера ТРК и предназначены для организации переходов между этими состояниями.
Схема состояний контроллера ТРК и операции переходов между ними представлены на рис. 1:
Примечание: Состояние "Остаток дозы" является вышедшим из употребления и поддерживается для совместимости
с предыдущими версиями контроллера "Доза - У". В новых версиях ПО рекомендуется использовать аналогичное по смыслу состояние "Останов".
4.1. Опрос состояния ТРК
1. ККМ передает команду "Тест" c номером опрашиваемой ТРК в поле TRK_No:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
01H |
nn |
34H |
02H |
xxxxxx |
vvvvvv |
'00' |
'00' |
03H |
z |
2. Контроллер ТРК возвращает ответ "Тест" с номером ТРК в поле TRK_No,
остатком дозы в поле Volume и кодами ошибки/состояния ТРК в поле Status:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
01H |
nn |
34H |
02H |
xxxxxx |
vvvvvv |
'yy' |
'yy' |
03H |
z |
3. Обработка ошибок протокола (поле Error не равно '00') на всех стадиях обмена информацией осуществляется в соответствии
с разделом 6 "Обработка ошибок протокола".
Примечание: Здесь и далее полужирным шрифтом с подчеркиванием выделены ключевые параметры команд и ответов.
4.2. Загрузка дозы в ТРК
1. ККМ выполняет операцию "Опрос состояния ТРК" (п.4.1.).
2. В случае, если код состояния ТРК (поле Code) не равен '05' ("Сброс (Дозы нет)"), ККМ генерирует ошибку "Недопустимый статус ТРК".
Для возможности выполнения загрузки дозы в этом случае необходимо выполнить операцию "Возврат дозы из ТРК" или "Сброс ТРК"
(см. п. 4.3., 4.6.).
3. В случае, если код состояния ТРК (поле Code) равен '05' ("Сброс (Дозы нет)"),
ККМ оформляет чек на продажу установленной дозы нефтепродуктов.
4. По окончании оформления чека ККМ выдает команду "Доза" с номером загружаемой ТРК в поле TRK_No,
ценой в поле Price и загружаемой дозой в поле Volume:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
01H |
nn |
31H |
02H |
xxxxxx |
vvvvvv |
'00' |
'00' |
03H |
z |
5. Контроллер ТРК переводит ТРК в состояние "Готовность к пуску" ('01')
с заданной дозой и возвращает ответ "Доза" с номером загруженной ТРК в поле TRK_No,
загруженной ценой в поле Price, кодами ошибки/состояния в поле Status и загруженной дозой в поле Volume:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
01H |
nn |
31H |
02H |
xxxxxx |
vvvvvv |
'yy' |
'yy' |
03H |
z |
6. Обработка ошибок протокола (поле Error не равно '00') на всех стадиях обмена информацией осуществляется в соответствии
с разделом 6 "Обработка ошибок протокола".
4.3. Возврат дозы из ТРК
1. ККМ выполняет операцию "Опрос состояния ТРК" (п.4.1.).
2. В случае, если остаток дозы в ТРК нулевой или код состояния ТРК (поле Code) не равен "Готовность к пуску" ('01'),
"Остаток дозы" ('02'), "До полного бака останов" ('07') или "Останов" ('04'), ККМ генерирует ошибку "Ошибка возврата 0 литров" или "Недопустимый статус ТРК".
3. В случае если код состояния равен "До полного бака останов" ('07'), печатается чек оплаты для дозы загруженной в результате операции "До полного бака", в противном случае печатается чек возврата.
4. ККМ передает команду "Сброс".
5. Обработка ошибок протокола (поле Error не равно '00') на всех стадиях обмена информацией осуществляется в соответствии
с разделом 6 "Обработка ошибок протокола".
4.4. Пуск ТРК
1. ККМ выполняет операцию "Опрос состояния ТРК" (п.4.1.).
2. В случае, если код состояния ТРК (поле Code) не равен "Готовность к пуску" ('01') или "Останов" ('04'),
ККМ генерирует ошибку "Недопустимый статус ТРК".
3. В случае, если код состояния ТРК (поле Code) равен "Готовность к пуску" ('01') или "Останов" ('04'),
ККМ передает команду "Пуск" с номером ТРК в поле TRK_No:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
01H |
nn |
35H |
02H |
xxxxxx |
vvvvvv |
'00' |
'00' |
03H |
z |
4. Если ТРК находилась в состоянии "Готовность к пуску" ('01') или "Останов" ('04'),
контроллер ТРК переводит ТРК в состояние "Пуск" ('03') и возвращает ответ "Пуск" с номером ТРК в поле TRK_No,
кодами ошибки/состояния ТРК в поле Status и остатком дозы в поле Volume:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
01H |
nn |
35H |
02H |
xxxxxx |
vvvvvv |
'yy' |
'yy' |
03H |
z |
5. Обработка ошибок протокола (поле Error не равно '00') на всех стадиях обмена информацией осуществляется в соответствии
с разделом 6 "Обработка ошибок протокола".
4.5. Останов ТРК
1. ККМ выполняет операцию "Опрос состояния ТРК" (п.4.1.).
2. В случае, если код состояния ТРК (поле Code) не равен "Пуск" ('03'),
ККМ генерирует ошибку "Недопустимый статус ТРК".
3. В случае, если код состояния ТРК (поле Code) равен "Пуск" ('03'),
ККМ передает команду "Останов" с номером ТРК в поле TRK_No:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
01H |
nn |
36H |
02H |
xxxxxx |
vvvvvv |
'00' |
'00' |
03H |
z |
4. Если ТРК находилась в состоянии "Пуск", контроллер ТРК переводит ТРК в состояние "Останов" ('04')
или "До полного бака останов" ('07') (в случае проведения операции "До полного бака") и возвращает ответ "Останов"
c номером ТРК в поле TRK_No, кодами ошибки/состояния ТРК в поле Status и остатком дозы в поле Volume:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
01H |
nn |
36H |
02H |
xxxxxx |
vvvvvv |
'yy' |
'yy' |
03H |
z |
5. Обработка ошибок протокола (поле Error не равно '00') на всех стадиях обмена информацией осуществляется в соответствии
с разделом 6 "Обработка ошибок протокола".
4.6. Сброс ТРК
1. ККМ передает команду "Сброс" с номером ТРК в поле TRK_No:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
01H |
nn |
37H |
02H |
xxxxxx |
vvvvvv |
'00' |
'00' |
03H |
z |
2. Контроллер ТРК переводит ТРК в состояние "Сброс (Дозы нет)" ('05'), и возвращает ответ "Сброс" с номером ТРК в поле TRK_No,
кодом состояния ТРК в поле Status и остатком дозы в поле Volume:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
01H |
nn |
37H |
02H |
xxxxxx |
vvvvvv |
'yy' |
'yy' |
03H |
z |
3. Обработка ошибок протокола (поле Error не равно '00') на всех стадиях обмена информацией осуществляется в соответствии
с разделом 6 "Обработка ошибок протокола".
4.7. Общий останов
Общий останов - останов всех ТРК управляемых контроллером и находящихся в состоянии "Пуск".
Команда полностью аналогична команде "Сброс", (включая и поле Command ) только в поле TRK_No всегда передаются нули ('00').
Контроллер ТРК переводит все ТРК с состоянием "Пуск", находящиеся под его управлением,
в состояние "Останов" ('04') или "До полного бака останов" ('07') (в случае проведения операции "До полного бака"),
и ничего не возвращает в ответ.
5. Дополнительные операции в системе "ККМ - контроллер ТРК" и соответствующие им последовательности обмена сообщениями
5.1. Загрузка параметров в ТРК
1. ККМ выполняет операцию "Опрос состояния ТРК" (п.4.1.).
2. В случае, если код состояния ТРК (поле Code) не равен "Сброс (Дозы нет)" ('05'),
ККМ генерирует ошибку "Недопустимый статус ТРК".
3. В случае, если код состояния ТРК равен "Сброс (Дозы нет)" ('05'), ККМ передает команду "Установка" с
номером ТРК в поле TRK_No и параметрами ТРК в поле Status:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
01H |
nn |
33H |
02H |
xxxxxx |
vvvvvv |
yyyy |
'00' |
03H |
z |
4. Если ТРК находилась в состоянии "Сброс (Дозы нет)" ('05'),
контроллер ТРК проводит загрузку параметров в ТРК и возвращает ответ "Установка" с номером ТРК в поле TRK_No,
и кодами ошибки/состояния ТРК в поле Status:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
01H |
nn |
33H |
02H |
xxxxxx |
vvvvvv |
'yy' |
'yy' |
03H |
z |
5. Обработка ошибок протокола (поле Error не равно '00') на всех стадиях обмена информацией осуществляется в соответствии
с разделом 6 "Обработка ошибок протокола".
5.2. До полного бака
1. ККМ выполняет операцию "Опрос состояния ТРК" (п.4.1.).
2. В случае, если код состояния ТРК (поле Code) не равен '05' ("Сброс (Дозы нет)"),
ККМ генерирует ошибку "Недопустимый статус ТРК". Для возможности выполнения команды в этом случае необходимо выполнить операцию
"Возврат дозы из ТРК" или "Сброс ТРК" (см. п. 4.3., 4.6.).
3. В случае, если код состояния ТРК (поле Code) равен '05' ("Сброс (Дозы нет)"),
ККМ выдает команду "До полного бака" с номером загружаемой ТРК в поле TRK_No,
ценой в поле Price и загружаемой дозой '000000' в поле Volume:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
01H |
nn |
39H |
02H |
xxxxxx |
'000000' |
'00' |
'00' |
03H |
z |
4. Контроллер ТРК переводит ТРК в состояние "Готовность к пуску" ('01') и возвращает ответ
"До полного бака" с номером загруженной ТРК в поле TRK_No, загруженной ценой в поле Price, кодами
ошибки/состояния в поле Status и загруженной дозой в поле Volume:
SOH |
TRK_No |
Command |
STX |
Price |
Volume |
Status |
ETX |
CRC |
Error |
Code |
01H |
nn |
39H |
02H |
xxxxxx |
vvvvvv |
'yy' |
'yy' |
03H |
z |
5. Производится заправка до полного бака. При этом в качестве значения остатка дозы в
контроллере ТРК должно быть установлено значение отпущенной дозы..
6. По окончании заправки ККМ выполняет действия 1. - 4. операции "Возврат дозы из ТРК"
(см. п. 4.3.)
и использует полученное значение поля Volume для оформления чека на продажу нефтепродуктов..
7. Обработка ошибок протокола (поле Error не равно '00') на всех стадиях обмена информацией осуществляется в соответствии
с разделом 6 "Обработка ошибок протокола".
6. Обработка ошибок протокола
1. Обработка ошибок протокола (поле Error не равно '00') со стороны ККМ осуществляется путем вывода
на индикатор ККМ кодов ошибок для сигнализации оператору:
а) Error = '01' ("Недопустимый номер ТРК") - генерация ошибки 'E225' на ККМ;
б) Error = '02' ("Недопустимая команда ТРК при данном состоянии ТРК") - генерация ошибки 'E226' на ККМ;
в) Error = '03' ("Неправильная контрольная сумма") - генерация ошибки 'E227' на ККМ.
Примечание: Коды E225, E226, E227 используются только ККМ SAMSUNG
2. Решение о дальнейших действиях должно приниматься оператором исходя из конкретных условий появления ошибок.
Приложение 1.
Перечень кодов ошибок, индицируемых на индикаторе ККМ при обмене информацией с контроллером ТРК
Ошибка, индицируемая на индикаторе ККМ |
Описание ошибки |
E217 |
Недопустимый статус ТРК |
E218 |
Недопустимая команда ТРК в ККМ |
E219 |
Ошибка возврата 0 литров |
E220 |
При ручном возврате из ТРК не совпал остаток |
E221 |
Авария |
E225 |
Недопустимый номер ТРК |
E226 |
Недопустимая команда ТРК при данном состоянии ТРК |
E227 |
Ошибка при обмене с ТРК |
Примечание: Перечисленные коды ошибок используются только ККМ SAMSUNG
|