Автор Тема: Работа с компонентой ZR1CExtension  (Прочитано 165 раз)

log01

  • Пользователь
  • *****
  • Сообщений: 2
Здравствуйте. Есть вопрос по описанному в справке к драйверу ZR1C методу:

ЧитатьMifareC (
   PWSTR,
   UI4,
   UI4,
   BLOB,
   UI4,
   UI4=0,
   PWSTR="0xFFFFFFFFFFFF",
   BOOL=false,
   BOOL=false,
   UI4=0xFFFFFFFF),
   I4=NULL

Не совсем понятно какие параметры являются обязательными/необязательными, также их тип.
Не могу прочитать данные, результат выполнения метода - Ложь. Использую Z-2 USB MF, карточки Mifare Classic 1K/ Mifare Classic 4K


Пример кода:

   Перем DevId;
    Перем BLOB;

   ОписаниеРезультатаВыполненияТеста  = "";
   ОписаниеОграниченийДемонстрационногоРежима = "";
   BLOB = "";
   
   ZR1CExtension = Новый("AddIn.Comp.ZR1CExtension");   
   ZR1CExtension.Порт = "COM3";           
   DevID = Неопределено;
   ZR1CExtension.Подключить(DevID);   
   
        //Предварительно вызываю метод ТестУстройства, который успешно выполняется и возвращает описание устройства.
   ZR1CExtension.ТестУстройства(ОписаниеРезультатаВыполненияТеста, ОписаниеОграниченийДемонстрационногоРежима);
   
        //Подбирал разные варианты, результат тот же.

   Считано = ZR1CExtension.ReadMifareC(DevId, 0, 0, BLOB, 2, 0, "0xFFFFFFFFFFFF", false, true,   -1,   0);
   Считано = ZR1CExtension.ReadMifareC(DevId, 0, 0, BLOB, 2, 0, "0xFFFFFFFFFFFF", false, true,   -1,   Null);
   Считано = ZR1CExtension.ReadMifareC(DevId, 0, 0, BLOB, 2, 0, "0xFFFFFFFFFFFF", false, true,   -1);
   Считано = ZR1CExtension.ReadMifareC(DevId, 0, 0, BLOB, 2, 0, "0xFFFFFFFFFFFF", false, true);
   Считано = ZR1CExtension.ReadMifareC(DevId, 0, 0, BLOB, 2);
   

Скажите, что делаю не так, буду очень благодарен.

gsa

  • Пользователь
  • *****
  • Сообщений: 168
Re: Работа с компонентой ZR1CExtension
« Ответ #1 : 07 Мая 2020, 09:23 »
ЧитатьMifareC (
   PWSTR,
   UI4,
   UI4,
   BLOB,
   UI4,
   UI4=0,
   PWSTR="0xFFFFFFFFFFFF",
   BOOL=false,
   BOOL=false,
   UI4=0xFFFFFFFF),
   I4=NULL

Не совсем понятно какие параметры являются обязательными/необязательными, также их тип.
Параметры, у которых указаны значения в объявлении функции, являются необязательными, т.е. у этой функции только первые 5 параметров обязательные.
PWSTR - строка, UI4 - беззнаковое 4-байтное целое число, BLOB - байты, BOOL - флаг, I4 - знаковое 4-байтное целое число.

Не могу прочитать данные, результат выполнения метода - Ложь. Использую Z-2 USB MF, карточки Mifare Classic 1K/ Mifare Classic 4K
Проверил 1С Предприятие v8.3 (в режиме толстого клиента) + ZR1C v1.7.6.4 + Z-2 USB MF v1.8 + Mifare Classic 1K - всё работает нормально.
Пример кода:
Перем Компонента;
Перем DevId;
ПодключитьВнешнююКомпоненту("c:\ZR1C.dll", "Comp", ТипВнешнейКомпоненты.Native);
Компонента = Новый("AddIn.Comp.ZR1CExtension");
Компонента.Порт = "Com3";
// Компонента.Лог = true;
DevId = Неопределено;
Компонента.Подключить(DevId);
Перем blob;
Перем s;
blob = "";
Компонента.ReadMifareC(DevId, 0, 0, blob, 2, 0, "0xFFFFFFFFFFFF", false, true, -1);
// Компонента.ReadMifareC(DevId, 0, 0, blob, 2);
Если (Компонента.GetLastError(s) <> 0) Тогда
s = "";
Сообщить(s);
КонецЕсли;
Сообщить(ЗначениеВСтрокуВнутр(blob));
В окно "Служебные сообщения" выводится это:
{"#",87126200-3e98-44e0-b931-ccb1d7edc497,
{1,
{#base64:klCT8aAIBABiY2RlZmdoadSFezUdaygO4SkCPlurLac=}
}
}
Какое сообщение об ошибке возвращает функция GetLastError?
Пришлите, пожалуйста, лог файл "%APPDATA%\IronLogic\ZR1C\ZR1C.log" (нужно включить запись лога Компонента.Лог = true).

log01

  • Пользователь
  • *****
  • Сообщений: 2
Re: Работа с компонентой ZR1CExtension
« Ответ #2 : 07 Мая 2020, 12:00 »
Параметры, у которых указаны значения в объявлении функции, являются необязательными, т.е. у этой функции только первые 5 параметров обязательные.
PWSTR - строка, UI4 - беззнаковое 4-байтное целое число, BLOB - байты, BOOL - флаг, I4 - знаковое 4-байтное целое число.

Огромное спасибо за уточнение. После нескольких новых тестов, считывание прошло успешно. Данные блоков и секторов карты в виде строки, ещё можно получить с помощью функции 1С ПолучитьHexСтрокуИзДвоичныхДанных(BLOB)

Какое сообщение об ошибке возвращает функция GetLastError?
Пришлите, пожалуйста, лог файл "%APPDATA%\IronLogic\ZR1C\ZR1C.log" (нужно включить запись лога Компонента.Лог = true).

Не разобрался как получить описание ошибки, описаных в таблице справки.
Функция GetLastError (ZR1CExtension.ПолучитьОшибку(ОписаниеОшибки)) возвращала число в десятичном виде, например "-2147220969", параметр ОписаниеОшибки после выполнения функции остаётся пустой строкой. Записи лог файла:
11:46:40.808 [I00144 COM3]
11:46:40.808 [I00145 COM3]
11:46:40.855 [I00144 COM3]
11:46:40.855 [I00144 COM3]
11:46:40.983 [I00145 COM3]


Также имею следущие вопросы:
1.По обработке внешнего события: при считывании карты, в обработку внешнего события передаётся событие "TracksData" с параметром "041,57734".
Как можно настроить устройство, чтобы в обработку попадали данны карты с блоков и секторов (BLOB) и возможно ли это.

2. Какая оптимальная скорость считывания с карты, методом "ReadMifareC" например 10ти блоков.

Благодарю за Вашу помощь.

gsa

  • Пользователь
  • *****
  • Сообщений: 168
Re: Работа с компонентой ZR1CExtension
« Ответ #3 : 07 Мая 2020, 13:23 »
Не разобрался как получить описание ошибки, описаных в таблице справки.
Функция GetLastError (ZR1CExtension.ПолучитьОшибку(ОписаниеОшибки)) возвращала число в десятичном виде, например "-2147220969", параметр ОписаниеОшибки после выполнения функции остаётся пустой строкой. Записи лог файла:
11:46:40.808 [I00144 COM3]
Похоже, что zr1c.dll почему-то не может загрузить строку из своих ресурсов.
Попробуйте эту версию пожалуйста https://yadi.sk/d/vxB6L4I13P5JXp

1.По обработке внешнего события: при считывании карты, в обработку внешнего события передаётся событие "TracksData" с параметром "041,57734".
Как можно настроить устройство, чтобы в обработку попадали данны карты с блоков и секторов (BLOB) и возможно ли это.
Можно установить формат так:
Компонента.ОчиститьФорматы();
Компонента.ВставитьФормат(0, "GuardSaaS", "%.3u,%.5u", "b2 w01", 0, 0);
или в ConfigZR1C.exe на вкладке "Форматы" настроить/выбрать формат и на вкладке "Основное" -> в группе "Настройки ZR1C" -> установить флаг "Загрузить при старте ZR1C".
Кстати подобрать параметры для формата можно и в PlaceCard https://ironlogic.ru/il.nsf/pages/PlaceCard.

2. Какая оптимальная скорость считывания с карты, методом "ReadMifareC" например 10ти блоков.
10 блоков читает за 0,296 сек (тестировал в ConfigZR1C.exe -> вкладка "Тест" -> вкладка "Методы" -> дв.клик ЛКМ по ReadMifareC, использовал старую прошивку v1.8 ).

Чтобы данные "TracksData" читались из блока Mifare нужно в ConfigZR1C.exe на вкладке "Чтение ключей" в группе "Чтение номера из блока Mifare Classic 1K/4K" установить флаг "Включено", выбрать сектор, блок, и нажать кнопку "Сохранить".
« Последнее редактирование: 08 Мая 2020, 09:11 от gsa »