При запуске обработка открывает последовательные порты с подключенными к ним устройствами и управляет ими с помощью команд в 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С дистрибутив "библиотека подключаемого оборудования" - там все расписано подробно, а я лучше это не сделаю.