Вимоги до розробки драйверів для зчитувачів RFID-міток
Загальний принцип роботи будь-якої системи RFID полягає в наступному. У системі завжди є два основні компоненти: це зчитувач та ідентифікатор (RFID-мітка). Зчитувач випромінює в навколишній простір електромагнітну енергію. Ідентифікатор приймає сигнал від зчитувача та формує сигнал-відповідь, який приймається антеною зчитувача й обробляється його електронним блоком.Вступ. Опис роботи з драйвером. Початок роботи з драйвером. Читання даних із міток. Запис даних у мітки. Завершення роботи. Опис властивостей. Опис методів. Зовнішні події від драйвера. Опис аргументів події в активному режимі. Опис аргументів загальних подій
Опис аргументів події в активному режимі
Опис аргументів загальних подій
Вступ
Загальний принцип роботи будь-якої системи RFID полягає в наступному. У системі завжди є два основні компоненти: це зчитувач та ідентифікатор (RFID-мітка). Зчитувач випромінює в навколишній простір електромагнітну енергію. Ідентифікатор приймає сигнал від зчитувача та формує сигнал-відповідь, який приймається антеною зчитувача й обробляється його електронним блоком.
За принципом дії системи RFID можна розділити на пасивні та активні. У простішій пасивній системі випромінювання зчитувача є постійним у часі (не модульованим) і слугує лише джерелом живлення для ідентифікатора. Отримавши потрібний рівень енергії, ідентифікатор вмикається та модулює випромінювання зчитувача своїм кодом, який приймається зчитувачем.
В інтерактивному режимі зчитувач випромінює модульовані коливання, тобто формує запит. Ідентифікатор дешифрує запит і за потреби формує відповідь.
Система програм 1С:Підприємство підтримує обмін даними з різним обладнанням RFID за узгодженою технологією (рис.1).

Рис.1
Драйвер для зчитувачів RFID-міток повинен бути реалізований відповідно до загальної концепції використання зовнішніх компонентів для взаємодії з торговельним обладнанням, що підключається до системи програм 1С:Підприємство. Використання цього підходу дає змогу спростити процес підключення нового торговельного обладнання до 1С:Підприємства.
Загальні вимоги до драйвера:
- розроблений у вигляді зовнішньої компоненти (опис механізму створення зовнішніх компонент наведено в документі «Документація з технології створення зовнішніх компонент» на диску ІТС у розділі «Технологія створення зовнішніх компонент» Методичної підтримки 1С:Підприємства 8.1.);
- реалізує описану нижче функціональність у повному обсязі;
- надає певний набір властивостей і методів для можливості налаштування та керування драйвером.
Назви властивостей і методів повинні бути російськомовними та англомовними (наприклад, Порт - Port, Швидкість - Speed, Сигнал() – Signal()).
Також драйвер повинен підтримувати множинні підключення (відповідно до ідеології технології COM) і підтримувати роботу з кількома пристроями.
У разі виникнення помилки в роботі драйвер повинен повідомити про це та передавати опис помилки, що сталася.
Опис роботи з драйвером
Початок роботи з драйвером
Система 1С:Підприємство (надалі "система") ініціалізує з'єднання з драйвером і завантажує його. Далі встановлюються конфігураційні параметри, необхідні для роботи, та відбувається підключення до пристрою.
Система активізує драйвер. Після цього від драйвера можуть надходити повідомлення про настання зовнішньої події при появі міток у полі зчитувача. При цьому передавання даних про мітки не здійснюється.
Робота з драйвером передбачається в активному та пасивному режимах. Пасивний режим передбачає, що драйвер виконує будь-які дії у відповідь на команди від системи. В активному режимі роботи драйвер повинен сам надіслати повідомлення про зовнішню подію за зміною свого внутрішнього стану.
Додатково до активного режиму для читання даних із міток введено поняття сесії.
Сесія – це процес читання та накопичення даних із виявлених міток і передавання їх системі. Початок і закінчення сесії визначається системою, викликом функцій драйвера.
В активному режимі та за відкритої сесії виконання команд пасивного режиму, а також спроби відкрити ще одну сесію для того самого логічного пристрою мають блокуватися, а драйвер повинен повертати повідомлення про помилку.
Примітка. Команди загального призначення виконуються незалежно від режиму та стану сесії.
Робота з мітками може здійснюватися на читання та на запис даних.
Читання даних із міток
У пасивному режимі:
1. Надається команда на виявлення міток у полі зчитувача. У відповідь повертається кількість виявлених RFID-міток.
2. Послідовно викликається функція для отримання даних із кожної виявленої мітки*. Драйвер повертає дані з міток. Команда надсилається N разів, де N – кількість виявлених міток.
* На радіочастотній мітці може зберігатися код EPC (Electrinic Product Code, електронний код продукту). Це унікальний номер, що визначає конкретний товар (предмет).
За відкритої сесії:
- Система надає команду на початок сесії читання.
- При появі міток або якщо мітки вже перебувають у полі зчитувача, драйвер повинен зчитати дані з них і передати системі. Визначено такі ситуації, коли слід передавати отримані дані з міток:
a. Досягнуто максимальну кількість міток, встановлену у властивостях компоненти;
Усі перелічені ситуації породжують одну й ту саму зовнішню подію "ЧтениеМеток". Протягом сесії драйвер повинен передати дані щодо кожної мітки лише один раз, тобто драйвер повинен "пам'ятати", які мітки він уже передав. Після надсилання події драйвер повинен призупинити надсилання наступної та очікувати команди згори про можливість продовження надсилання подій. Якщо результат обробки події позитивний, то драйвер ініціює надсилання наступної події, в іншому разі потрібне повторне надсилання останньої події, тієї, після якої драйвер призупинився. Тобто зі старих подій необхідно зберігати лише останній сформований рядок для надсилання (при цьому в драйвері нові дані, що надходять, повинні буферизуватися й надсилатися в міру вивільнення системи). Приклад такої послідовності:
b. У полі зчитувача більше немає міток;
c. У полі зчитувача є ненульова кількість міток і їхня кількість не змінюється протягом проміжку часу, встановленого у властивостях компоненти;
d. Команда від системи на закінчення сесії – у штатному режимі всі мітки на момент закінчення заповнення документа залишать поле зчитувача, і передавання даних із міток не знадобиться.
• Надсилання Події 1;
• Отримано відповідь СобытиеОбработано(Истина);
• Надсилання Події 2;
• Отримано відповідь СобытиеОбработано(Истина);
• Надсилання Події 3;
• Отримано відповідь СобытиеОбработано(Ложь);
• Надсилання Події 3;
• Отримано відповідь СобытиеОбработано(Ложь);
• Надсилання Події 3;
• Отримано відповідь СобытиеОбработано(Истина);
• Надсилання Події 4;
• Отримано відповідь СобытиеОбработано(Истина); - Після закінчення процесу приймання міток система надає команду на закінчення сесії читання. При цьому драйвер не повинен більше передавати дані про мітки нагору та не запам'ятовувати їх. Також драйвер повинен очистити інформацію про виявлені мітки, накопичені протягом сесії.
Запис даних у мітки
Запис міток відбувається в пасивному режимі:
- Надсилається команда на вимкнення активного режиму (якщо був увімкнений).
- Надається команда на виявлення міток у полі зчитувача. У відповідь повертається кількість виявлених RFID-міток.
- Викликається функція для запису даних у мітки. Драйвер записує передані дані в усі виявлені мітки. При цьому виконує перевірку, що всі мітки було успішно записано. В іншому разі повертає помилку запису та передає кількість успішно записаних міток.
- Відновлюється попередній режим.
Стани переходів між режимами
Стани можуть змінюватися лише послідовно:
"Пасивний" <=> "Активний" <=> "Сесія".
Усі інші спроби некоректної зміни стану повинні призводити до помилки.
Наприклад, не можна з пасивного режиму відкрити сесію або переключити в пасивний режим, поки відкрита сесія.
Завершення роботи
Після закінчення роботи з драйвером система закриває з'єднання з пристроєм.
З'єднання з драйвером закривається лише при завершенні роботи системи або при повторному створенні об'єкта, пов'язаного з драйвером.
Опис властивостей
|
Опис властивостей | ||||
|---|---|---|---|---|
|
Назва (alias) |
Тип |
Доступність |
Опис | |
| Читання | Запис | |||
Опис методів
|
Опис методів | |||||
|---|---|---|---|---|---|
|
Назва (alias) – режим роботи * |
Параметри |
Значення, що повертається |
Опис | ||
|
Ім'я |
Тип |
Опис | |||
| ПолучитьОшибку (GetLastError) – ОК | ОписаниеОшибки (ErrorDescription) |
BSTR [OUT] |
Опис помилки |
LONG |
Повертає код і опис останньої помилки, що сталася |
| Подключить (Open) – ОК | МассивЗначений (Valuesarray) |
IDispatch* |
Масив значень для налаштування підключення |
BOOL |
Підключає пристрій для використання |
| ИДУстройства (DeviceID) |
BSTR |
Ідентифікатор пристрою | |||
| Отключить (Close) – ОК | ИДУстройства (DeviceID) |
BSTR |
Ідентифікатор пристрою |
BOOL |
Відключає пристрій |
| ВключитьАктивныйРежим (EnableactiveMode) - КПР | ИДУстройства (DeviceID) |
LONG |
Ідентифікатор пристрою |
BOOL |
Вмикає активний режим |
| ВыключитьАктивныйРежим (DisableactiveMode) - КАР | ИДУстройства (DeviceID) |
BSTR |
Ідентифікатор пристрою |
BOOL |
Вимикає активний режим |
| ОткрытьСессию (OpenSession) – КАР | ИДУстройства (DeviceID) |
BSTR |
Ідентифікатор пристрою |
BOOL |
Починає сесію отримання міток (з усіх виявлених міток прочитані дані передаються системі). Якщо сесія вже відкрита, повернути помилку |
| ЗакрытьСессию (CloseSession) – КС | ИДУстройства (DeviceID) |
BSTR |
Ідентифікатор пристрою |
BOOL |
Завершує сесію роботи з мітками. Сесія, за наявності міток у полі зчитувача, закривається, лише якщо параметр ИгнорироватьМеткиВПоле (IgnoreCardsInField) має значення Истина. Якщо сесію не було закрито, то повертається помилка |
| ИгнорироватьМеткиВПоле (IgnoreCardsInField) |
BOOL [IN] |
Якщо Ложь, то за наявності в полі міток сесія не закривається, в іншому разі сесія залишається відкритою | |||
| КоличествоМеток (CardsCount) |
LONG |
Кількість міток у полі при закритті сесії | |||
| СессияОткрыта (SessionIsOpened) – ОК | ИДУстройства (DeviceID) |
BSTR |
Ідентифікатор пристрою |
BOOL |
Перевіряє, чи була відкрита сесія на читання/запис |
| НайтиМетки (FindCards) – КПР | ИДУстройства (DeviceID) |
BSTR |
Ідентифікатор пристрою |
BOOL |
Здійснює пошук міток у полі зчитувача та повертає кількість виявлених міток |
| КоличествоМеток (CardsCount) |
LONG |
Кількість виявлених міток | |||
| СчитатьСледДанные (GetNextData) – КПР | ИДУстройства (DeviceID) |
BSTR |
Ідентифікатор пристрою |
BOOL |
Зчитати по черзі дані з кожної мітки |
| ИДМетки (CardID) |
BSTR |
Ідентифікатор мітки | |||
| ДанныеМетки (CardData) |
BSTR |
Дані, записані в мітці | |||
| ЗаписатьДанные (WriteData) – КПР | ИДУстройства (DeviceID) |
BSTR |
Ідентифікатор пристрою |
BOOL |
Записує передані дані в мітки, що перебувають у полі зчитувача |
| Данные (Data) |
BSTR [IN] |
Дані для запису в мітки | |||
| Количество |
LONG |
Кількість успішно записаних міток | |||
| СобытиеОбработано (EventProcessed) - ОК |
ИДУстройства (DeviceID) |
BSTR |
Ідентифікатор пристрою |
BOOL |
Повідомляє драйверу про те, що подію було отримано системою. Параметр "ФлагСостояния" вказує на успішність обробки. |
| ФлагСостояния (StateFlag) |
BOOL |
Прапор обробки події | |||
| ПодатьСигнал (Signal) – ОК | ИДУстройства (DeviceID) |
BSTR |
Ідентифікатор пристрою |
BOOL |
Подає сигнал на пристрої тривалістю, зазначеною в параметрі (якщо пристрій підтримує цю можливість) |
| Тривалість (Duration) |
LONG |
Тривалість сигналу в мс. | |||
| ПоддерживаетПБ (antistealBitSupported) - ОК | ИДУстройства (DeviceID) |
BSTR |
Ідентифікатор пристрою |
BOOL |
Ця функція перевіряє, чи підтримує обладнання роботу з протикрадіжним бітом |
| УстановитьПБ (SetantistealBit) - КПР | ИДУстройства (DeviceID) |
BSTR |
Ідентифікатор пристрою |
BOOL |
Функція встановлює стан протикрадіжного біта в положення встановлено/знято залежно від переданого значення. Якщо АдресМетки передається порожнім рядком, то встановлення біта відбувається для всіх міток у полі зчитувача |
| АдресМетки (Cardaddress) |
BSTR |
Ідентифікатор мітки | |||
| Состояние (State) |
BOOL |
Режим встановлення/зняття протикрадіжного біта | |||
| УстановитьПБ (SetantistealBit) - КПР | ИДУстройства (DeviceID) |
BSTR |
Ідентифікатор пристрою |
BOOL |
Функція отримує стан протикрадіжного біта |
| АдресМетки (Cardaddress) |
BSTR |
Ідентифікатор мітки | |||
| Состояние (State) |
BOOL |
Режим отримання протикрадіжного біта | |||
| ТестУстройства (DeviceTest) | МассивЗначений (Valuesarray) |
IDispatch* |
Масив значень для налаштування підключення |
BOOL |
Виконує пробне підключення та опитування пристрою. При успішному виконанні підключення в описі повертається опис пристрою. При негативному результаті повертається опис проблеми, що виникла при підключенні. |
| ДополнительноеОписание (additionalDescription) |
BSTR |
Опис результату виконання тесту | |||
* КАР – команди активного режиму; КПР – команди пасивного режиму; КС - команди сесії; ОК – загальні команди
Додатковий опис :
«МассивЗначений» (приклад значень для пристрою, що підключається до послідовного порту)
Тип даних "1С:Підприємства 8" - Масив.
| Найменування параметра | Наявність у структурі | Типи даних | Опис параметра |
| Порт (Port) | Необов'язково | LONG | Номер послідовного порту |
| Швидкість (Speed) | Необов'язково | LONG | Швидкість, на якій відбувається підключення |
| ТипУстройства (DeviceType) | Необов'язково | LONG | Тип пристрою (за способом підключення) |
| РазделительМетки(CardDelimiter) | Обов'язково | BSTR | Символ для розділення ідентифікатора мітки й даних при передаванні рядка в події «ЧтениеМеток» |
| ПредельноеКолвоМеток(CardsLimit) | Обов'язково | LONG | Гранична кількість міток, після якої генерується подія «ЧтениеМеток» (відповідно до гл. 3.2 п. 2а) |
| Таймаут(Timeout) | Обов'язково | LONG | Тайм-аут, після якого за відсутності зміни кількості міток надсилається подія (у мілісекундах) |
| МаксКоличМетокСобытия(EventMaxCardsCount) | Обов'язково | LONG | Максимальна кількість міток, що передається в події |
Зовнішні події від драйвера
Під час підключення драйвер повертає параметр "Ідентифікатор пристрою". Цей параметр використовується надалі драйвером для зазначення джерела події (пристрою) при надсиланні події, а також конфігураціями для визначення обробки обслуговування, пов'язаної з подією. Ідентифікатор пристрою повинен бути унікальним для кожного підключення, для цього пропонується вести зіставлення «Підключений пристрій – Ідентифікатор пристрою», додаючи нові рядки при підключенні до пристрою та видаляючи при відключенні від нього. Тобто драйвер при виклику методу Подключить() повинен сформувати новий ідентифікатор пристрою (пропонується як ім'я використовувати GUID з огляду на простоту його отримання програмним шляхом) і передати у вихідному параметрі.
При настанні подій у драйвері до системи можна надсилати повідомлення про виникнення зовнішньої події. При надсиланні повідомлення про зовнішню подію необхідно вказати: джерело зовнішньої події (Ідентифікатор пристрою), найменування (тип) події та дані.
Опис аргументів події читання з міток
Ім'я події – "ЧтениеМеток" ("CardsReading")
Подія настає лише за відкритої сесії.
При отриманні даних від драйвера у вигляді рядка необхідно їх розібрати, перевірити та завантажити в структуру (для зручності роботи прикладного рівня). Найбільш придатною для цих цілей буде структура даних "Соответствие", де Ключу зіставляється унікальний ідентифікатор мітки, а в полі "Значение" записуються дані, зчитані з мітки.
Для передавання даних використовується тип даних "Строка", тому нижче буде визначено структуру передаваного рядка з метою спрощення подальшого розбору.
Для драйвера визначено таку структуру рядка для передавання даних із міток:
<ИДМетки><РазделительМетки><Данные>#13<ИДМетки><РазделительМетки><Данные>#13<ИДМетки><РазделительМетки><Данные>#13 і т.д.
(<CardID><CardDelimiter><Data>#13<CardID><CardDelimiter><Data>#13<CardID><CardDelimiter><Data>#13 тощо),
де ‘<CardDelimiter>’ (налаштовуваний параметр) і ‘#13’ (символ переведення рядка) – спеціальні символи-роздільники.
Максимальна кількість міток у рядку – кількість, що передається в параметрі при відкритті сесії. Визначає ту кількість міток, яку прикладне рішення готове обробити в одній події.
Опис аргументів події в активному режимі
Ім'я події – "МеткаВПоле" ("CardDetected")
Дані – опис події.
Подія настає, якщо сесія не відкрита, а в полі зчитувача з'явилася одна або кілька міток. Повторне настання події можливе лише після зникнення всіх міток із поля зчитувача.
Опис аргументів загальних подій
Ім'я події – "ОшибкаВДрайвере" ("Error")
Дані – опис помилки.
Подія настає, якщо в процесі роботи драйвера виникли помилки.