Работа в 1С с купюроприемником CashCode SM-2073RU, диспенсерами ND-300KM, хоппером serial compact hopper MKII через последовательный COM порт.

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

При запуске обработка открывает последовательные порты с подключенными к ним устройствами и управляет ими с помощью команд в 16-ричном виде. Работа с последовательным портом происходит с помощью известной внешней компоненты Romix`а vk-rs232_hex, которая избавила меня от мучения над вопросом — как посылать на устройство 16-ричные команды, когда все символы в кодировке Unicode. В общем, если вам известны другие способы работы с последовательным портом — проблем не должно быть.

   Каждое из этих устройств имеет свою особенность, из-за чего мне пришлось много повозиться. Вот то, с чем я столкнулся:

1. Купюроприемник. Разбираться в документации по управлению этим устройством было достаточно сложно. Выход нашел такой — купил программный сканер последовательного порта. Конечно, можно было попробовать найти бесплатный, или попробовать уложиться в срок, отведенный демо-версией программы, но мне так показалось проще. После этого запустил тестовую утилиту купюроприемника TestCCNET_v15 (скачать можно, к примеру, здесь) и просто переписал то, как настраивает устройство на прием купюр тестовая утилита — дальнейшее управление настроил легко. Пришлось также писать процедуру вычисления CRC16-CCITT для создания контрольной суммы (в документации для купюроприемника, приведенной по ссылке ниже, есть примеры этой процедуры на языках С и Pascal, причем в процедуре на С допущена небольшая ошибка). Другие встреченные проблемы — не принимал купюры, выдавая сообщение «Rejecting due to Insertion» (как я понял при поиске решения проблемы, сообщение могло быть и другим) — решилось вскрытием верхней части и протиркой линз.

2. Диспенсеры. Для этих устройств особенный режим открытия порта — контроль четности нужно поставить в «четный» — если этого не сделать, прибор виснет, и даже если потом порт будет открыт правильно, реагировать на команды не будет — понадобится нажатие кнопки «ресет» позади устройства. В управлении — самое простое устройство, контрольная сумма тоже просто вычисляется — простым суммированием чисел в команде.

3. Хоппер. Имеет двунаправленную последовательную линию данных. Для подключения необходимо купить конвертер cctalk-rs232 или cctalk-USB. Я остановился на втором варианте, так как у компьютера аппаратного последовательного порта нет, a при подключении конвертера cctalk-USB и установки драйвера виртуальный последовательный порт появляется, что и нужно было для меня. Это устройство — самое чувствительное к температуре — в очень холодном помещении отказывался работать, пока не был включен обогрев. Кроме того, при подключении конвертера надо обратить внимание на напряжение питания — хоппер имеет напряжение питания 24В, конвертер может иметь 12В, как и было в моем случае. Мне пришлось запитывать хоппер и конвертер отдельными блоками питания, при этом соединить провода земли и данных вручную. Далее, из-за особенности двунаправленной линии данных, при посылке команды на устройство в ответ дублируется посланная команда, и только потом приходит ответ от хоппера. То есть, если в ответ на команду приходит только сама команда — хоппер по каким-либо причинам не работает, работает только сам конвертер. Управление немного замороченное, но разобраться можно, тем более, что в документации оно достаточно ясно описано. Контрольная сумма в команде — «дополнение до 256 остатка от деления на 256 суммы чисел команды» 🙂 — в обработке процедура вычисления контрольной суммы, конечно, есть.

Также в процессе настройки бывало так, что устройства отказывались работать, пока не перезагружался компьютер.

Кроме того, устройства отказывались работать, когда номер порта был двухзначный, поэтому я назначал номера портов устройствам начиная с первого номера через панель управления Windows.

В процессе разработки пользовался документацией к устройствам: к диспенсерам, к купюроприемнику (cashcode net interface), к хопперу (описание протокола cctalk, serial compact hopper protocol manual, compact hopper tecnical manual), также пришлось написать процедуры перевода из/в 16-ричный вид.

Обработка, запускаясь, получает через параметр сумму, которую она должна принять купюрами, запускает на прием купюроприемник и выдает сдачу, если принято денег больше. Сдача выдается купюрами 100 руб, 50 руб и монетами 10 руб, купюры в 5000 руб не принимаются. Также не было возможности настроить на прием купюры 10 руб, но похоже, это просто не понадобится.

Обработка прошла тестирование на уровне «запустили, деньги приняла, сдачу выдала». Наверняка в ней есть недостатки и недоработки — к примеру, не описаны все возможные сообщения хоппера при отказе, нет полного контроля за наличием монет (мне это было не нужно). НО! Обработка работает, при этом показана возможность работы с устройствами без необходимости покупать сторонние внешние компоненты и устанавливать какие-либо драйвера (кроме разве что драйверов виртуального последовательного порта), что я не смог найти в интернете, когда начинал разработку сам.

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

По сути, в моей разработке есть также печать чека на фискальном регистраторе, но эту часть я не стал приводить здесь, так как информацию по работе с фискальным регистратором найти не сложно — достаточно скачать со страницы поддержки пользователей 1С дистрибутив «библиотека подключаемого оборудования» — там все расписано подробно, а я лучше это не сделаю.

10 Comments

  1. dndw

    При попытке запустить ругается на {Обработка._РаботаСКупюроприемником.Форма.Форма.Форма(49,21)}: Тип не определен (ТаблицаЗначений)

    СписокКоманд=Новый <<?>>ТаблицаЗначений; (Проверка: Тонкий клиент).

    Подскажите что делаю не правильно?

    Reply
  2. Serg3141

    (1) dndw, обработка работает под толстым клиентом.

    Reply
  3. dearwhynot

    бодрого здоровья! Сергей, хотел попросить взглянуть на одно ТЗ, как раз по теме той что выше, напишите мне плиз dearwhynot@me.com , пообщаемся.

    Reply
  4. Serg3141

    (3) dearwhynot, мне проще через личку инфостарта (пока, по крайней мере). Сам лично я ни какую работу не беру — со своей завал.

    Reply
  5. anco27

    Добрый день!

    Функция ПодключитьВнешнююКомпоненту(«AddIn.vk_rs232») выдает Ложь. В чем может быть проблема?

    После этого обработка перестает работать (((

    Reply
  6. Горыня

    (5) Все работает, только что попробовал. 1. Регистрируем компоненту, для этого запустить cmd с правами администратора

    2. Первый раз надо запустить 1С тоже с правами администратора. Это все в описани компоненты есть.

    Незнаю, что сподвигло автора выложить обработку, эта обработина стоит мнооого денег. Бааальшой респект и уважуха, так держать:)

    Reply
  7. anco27

    Да, все заработало

    Reply
  8. dablack

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

    1. Инициализируем купюроприемник rs232.ЗаписатьСтроку(«02 03 06 30 41 b3″);

    Во внешнем событии проверяем инициализация успешна или нет.

    2. Через обработчик ожидания каждые 1 сек отправляем rs232.ЗаписатьСтроку(«02 03 06 33 da 81″);

    Во внешнем событии читаем данные о внесенных купюрах, например rs232.ЗаписатьСтроку(«02 03 07 81 05 f9 7d»);

    Примерно так ? Если правильно понял документацию, то в бесконечном цикле надо отправлять команду 33H ?

    Reply
  9. Serg3141

    (8)Немного не так. Вообще, я ожидал, что разработчики скачают обработку и посмотрят — дам все достаточно прозрачно.

    Первый пункт правильный. Далее, ни каких отправок самих по себе каждую секунду нет — просто во внешнем событии есть процедура, которая обрабатывает приходящие данные, а в ответ как раз и отсылает нужные команды, в том числе и указанную во втором пункте. Там получается, насколько я вижу в коде сейчас и помню (пять лет прошло однако) приходит от купюрника команда, в ответ ей должен в течение небольшого интервала прийти от нас отклик:

    К примеру (без срс):

    «02 03 06 00» // — приходит от купюрника, АСК

    «02 03 06 33» // — посылаем мы

    То есть там не просто бесконечный цикл, а отклик на купюрник идет. Иначе ни чего не получится.

    А вообще, код процедуры не большой.

    Reply
  10. dablack

    Понимаю, что много времени прошло, но еще момент один подскажите.

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

    Залогировал все что проходит через внешние событие, получается так:

    <— вх. 02 03 07 81 05 F9 7D // пришло от кп событие распознавания банкноты (500р.)

    исх. —> 02 03 06 00 C2 82 // в ответ отправляю ASK

    исх. —> 02 03 06 33 DA 81 // и POLL


    ……….. и все, больше он не отвечает

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

    Вдруг сталкивались, а то уже варианты решения проблемы кончились…

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *