Производитель оборудования для систем контроля доступа Eng Прайс-лист
Интеграция SDK Guard

Наименование: SDK Guard

Мы имеем контроллер Z5R Web и обращаемся к нему из своего ПО по сети с помощью SDK Guard.
Можем ли мы реализовать задержку повторного прохода для определенного ключа?
Наша задача запретить повторный проход в течении 5 минут или 24 часов.

Время AntiPassBack (APB) устанавливается функцией ZG_Ctr_WriteData(hCtr, 0, 0xB0, 8, aData),
где aData - данные:
BYTE aData[8] = {0};
*(PWORD)aData = время APB в мин;
aData[7] = контрольная сумма предыдущих 7 байт аналогично CRC далласа (aData[0..6])
Карточки у которых в параметрах доступа стоит 0xFF (ZG_CTR_KEY.nAccess) не блокируются по APB.
Если карта вошла(вышла), то повторный вход(выход) блокируется на заданное время.
Блокированная карта сбрасывается просто перезаписью её обратно в память.
После сброса или истечении времени движение разрешено в любом направлении.
Блокирована карта или нет узнать никак нельзя, только по событиям или самостоятельно запустить таймер в момент прохода и вычислить.
// Возвращает контрольную сумму Dallas
BYTE GetDallasCS(LPCBYTE Num, INT nCount)
{
BYTE nRes = 0;
INT i, j;
LPCBYTE p = Num;
BYTE b;
for (i = 0; i < nCount; i++)
{
b = *p++;
for (j = 0; j < 8; j++)
{
if (((nRes ^ b) & 1) == 1)
nRes = (((nRes ^ 0x18) > > 1) | 0x80);
else
nRes > > = 1;
b > > = 1;
}
}
return nRes;
}

Периодически на конвертерах Z-397 Web получаем ошибку:
Ошибка ZG_Cvt_Open (80040303)
Помогает лишь физическая перезагрузка конвертера.
Но при этом GuardLight видит контроллеры.
В чем может быть проблема?

Ошибка 80040303 означает, что конвертер не отвечает на запросы. Возможно поможет обновление прошивки.

Подскажите, а как в C# вызвать эту функцию: ZPIntf.ZP_SetLog ?

Добавьте #define ZP_LOG или уберите #if ZP_LOG, а дальше как обычно.

Как правильнее организовать непрерывную работу с контроллерами Z5R Net 8000? Можно ли открыть (ZG_Ctr_Open) и не закрывать сразу несколько контроллеров на одном конверторе?

Можно открыть (ZG_Ctr_Open) и не закрывать сразу несколько контроллеров. Ещё можно ловить уведомление об ошибке и переподключаться к конвертеру. Речь об ZG_Ctr_SetNotification .

Никак не могу решить проблему:
ZG_FIND_CTR_INFO ControllerInfo = new ZG_FIND_CTR_INFO();
// (ZG_FIND_CTR_INFO)Marshal.PtrToStructure(IntPtr.Zero, typeof(ZG_FIND_CTR_INFO));
while (ZGIntf.ZG_Cvt_FindNextController(hConverter, ref ControllerInfo) == ZGIntf.S_OK) { ...
Ошибка: ref ControllerInfo не может быть ref. А если писать без ref, то тоже ошибка.
Cannot marshal 'parameter #2': Invalid managed/unmanaged type combination (this value type must be paired with Struct).

В последней версии Sdk с нашего сайта код
ZG_FIND_CTR_INFO r = new ZG_FIND_CTR_INFO();
hr = ZGIntf.ZG_Cvt_FindNextController(m_hCvt, r);
компилируется в MSVS2010 без ошибок..
Функция объявлена так:: public static extern int ZG_Cvt_FindNextController(IntPtr hHandle, [In, Out] [MarshalAs(UnmanagedType.LPStruct)] ZG_FIND_CTR_INFO pInfo);
Можно изменить объявление функции на: public static extern int ZG_Cvt_FindNextController(IntPtr hHandle, ref ZG_FIND_CTR_INFO pInfo);
тогда можно будет использовать ref.

Передавая в ZG_Ctr_WriteKeys массив ключей на запись, можно ли полагаться, что они будут записаны в том же порядке, как и были помещены в массив?
Дело в том, что для ускорения удаления ключей из контроллера (а поиск ключа для удаления - довольно таки долгая операция), хочу заносить в БД индекс ключа в контроллере.
Если по одному ключу заносить - то всё понятно, а вот как массивом?
TopIdx + N (из массива)

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

При чтении ключей через SDK с контроллеров Guard Net вылетает ошибка с кодом - 2147220733. В Документации информации по такой ошибке нет. С чем она может быть связана? В контроллере включено объединение банков ключей. Записано > 10 000 ключей на данный момент.

Ошибка -2147220733 = 0x80040303L = ZG_E_NOANSWER означает, что конвертер не ответил на запрос. Возможно, конвертер не успел ответить. Попробуйте увеличить тайм-аут ответа, передав в функцию ZG_Cvt_Open параметр pWait в структуре ZG_CVT_OPEN_PARAMS, установите в pWait параметр nReplyTimeout =5000, остальные параметры =0..
Возможно, была потеряна связь с конвертером, попробуйте переподключиться к конвертеру (ZG_CloseHandle, ZG_Cvt_Open).
Попробуйте обновить прошивки конвертера и контроллера до последних версий.
P.S. Есть альтернативный вариант: вместо Sdk Guard использовать протокол обмена http://posix.ironlogic.ru/ (Sdk Guard - это надстройка над этим протоколом).

Используем контроллеры Guard Net на турникетах и шлагбаумах, соответственно, используем прошивки турникет и шлагбаум для этого контроллера. Через SDK получаем события с этого контроллера о поднесениях карт, подключении/отключении контроллера и т.п. Но события с тампера почему-то не приходят. Можно ли как-то включить сигнал об открытии крышки контроллера, то есть срабатывания этого самого тампера в прошивках турникет и шлагбаум?

Состояние тампера передаётся если включена охрана и стоит в маске охраны соответствующий бит.
В Sdk Guard состояние тампера можно получить функцией ZG_Ctr_GetSecurInfo из флагов ZG_SR_F_TAMPERE (Тревога по тамперу) и ZG_SR_SRCF_TAMPERE (Разрешена тревога по тамперу).
Еще есть событие ZG_EV_SECUR_STATE (Изменение состояния Охраны) с указанием причины: ZG_FR_EV_ON_TAMPERE (Включено по тамперу) и (ZG_FR_EV_OFF_TAMPERE (Выключено по тамперу) и т.п.

Скачали с сайта и установили SDK для Delphi .
Программа Demo.exe отлично работает и управляет контроллером.
Однако при попытке скомпилировать проект Demo.dpr (SDK Guard/ Delphi/Demo/ Demo.dpr) появляется ошибка "Запуск программы невозможен, т.к. на компьютере отсутствует ZGuard.dll. Попробуйте переустановить программу" хотя библиотека на ПК установлена и Demo.exe отлично работает.
Просим Вас помочь в решении проблемы

Библиотеку "ZGuard.dll" нужно скопировать в папку с программой (Demo.exe) (если выбрана конфигурация Release и платформа Win32, то в папку "SDK Guard/Delphi/Demo/Release/Win32/").