Разработка системы авторизации по ключу iButton для станка под управлением Windows CE для British American Tobacco
Заказчик: British American Tobacco
Сайт: http://www.bat.com/
Отрасль: Пищевое производство
По созданной технологии изготовлена партия из 20 считывателей, которыми оснащён цех заказчика. Специалистами АстроСофт была выявлена особенность работы Windows CE разных версий с портом LPT.
Ситуация
Управление станками на производстве заказчика организовано по принципу одного сервера, к которому подключены «тонкие клиенты» - специализированные терминалы, на которых установлена ОС Windows CE 5.0. К терминалам подключено оборудование цеха. В начале смены рабочий должен авторизоваться, введя имя пользователя и пароль. Заказчику требуется изменить метод авторизации на какой-либо аппаратно зависимый. С учётом имеющихся портов наилучшим является «таблетка» iButton.
По условиям гарантии никакие дополнительные драйверы в ПО терминала устанавливать нельзя.
Решение
Терминал имеет три вида портов: COM, LPT и USB. Порты USB уже заняты в производственном процессе, порт COM использовать допускается, но не рекомендуется, порт LPT – свободен.
Было решено подключить к этому терминалу устройство считывания ключей iButton, чтобы с их помощью осуществлять авторизацию пользователя.
Работа терминала с портами осуществляется по довольно сложной схеме. Программы физически выполняются не на самом терминале, а на сервере. Таким образом, скорость прохождения запроса на обращение к порту – величина непостоянная. Она зависит от загруженности сервера, на котором исполняются и другие программы, а также от загруженности сети, через которую терминал связан с сервером. Протокол 1WIRE, используемый в iButton, очень критичен к временным диаграммам, поэтому все стандартные решения оказались неприемлемы: стандартные адаптеры, подключаемые к COM-порту, либо LPT-порту формируют каждый бит при помощи центрального процессора, что допустимо на PC, но приводит к искажениям общей посылки по описанным выше причинам на "тонком клиенте".
В результате было принято решение отказаться от попыток использования покупных считывателей и начать делать собственный на базе микроконтроллера. На тот момент документ со стандартом IEE1294 найти было практически невозможно (особенно в условиях ограниченных сроков), поэтому пришлось искать описания режимов EPP и ECP в Интернете. Разные сайты содержали разные толкования одного и того же стандарта. Методом сравнения был составлен документ, из которого выкинуты все разночтения, найденные в толкованиях.
Протокол EPP выглядел намного проще в реализации, чем протокол ECP, поэтому в первую очередь, была разработана «прошивка» для микроконтроллера, которая реализовывала его. Полученное устройство корректно работало с IBM PC, но по-прежнему не работало с терминалами, где были установлены разные версии Windows CE. Та же участь постигла версию устройства, для которого была разработана «прошивка», поддерживающая протокол ECP. Однако известно, что порт LPT может работать в стандартном режиме (Centronix), а также в режимах EPP и ECP.
Дальнейшие исследования показали, что последняя разновидность терминала не работает с матричными принтерами точно так же, как и с разработанными устройствами. Следовательно, решение крылось в процессе инициализации. При помощи логического анализатора был снят процесс согласования порта с принтером. Анализ выявил, что при начале работы принтер посылает в ЭВМ своё название, но делает это не байтами, а ниблами. Если имя не получено, Windows CE считает, что принтера нет и отвергает функцию CreateFile.
Соответствующий функционал был добавлен к «прошивке», исполняемой в микроконтроллере. Кроме того, этот механизм решил такую важную проблему, как организация ввода через порт LPT (Windows CE трактует порт принтера как однонаправленный интерфейс от сервера к клиенту). В качестве имени принтера, микроконтроллер передаёт в ЭВМ идентификатор «таблетки» iButton.
Результат
По созданной технологии изготовлена партия из 20 считывателей, которыми оснащён цех заказчика. Специалистами АстроСофт была выявлена особенность работы Windows CE разных версий с портом LPT.
Используемые технологии
Система авторизации разработана на языке С++. Считыватель реализован на микроконтроллере AtMega8 фирмы Atmel, «прошивка» разработана на языке ассемблера в среде AVR Studio 4.
Скачать