Автор Тема: Вопрос по SDK  (Прочитано 22347 раз)

kill9fan

  • Пользователь
  • *****
  • Сообщений: 18
Re: Вопрос по SDK
« Ответ #15 : 07 Августа 2019, 12:13 »
выше я поправил свой ответ в момент когда вы уже отвечали на вопросы, sorry.
Итак да , установка и указание 8ой лицензии похоже помогла. Теперь ответ по пакетному запросу на детали о контроллере очень осмысленный и по документации

Цитировать
[0x0->0x2D]   Контрольная сумма
[0x1->0x14]   Длина пакета
[0x2->0x8]    Номер лицензии
[0x3->0x1]     Идентификатор пакета
[0x4->0x0]    Код операции (0 - среди найденных
[0x5->0x2]   Сетевой адрес контроллера
[0x6->0x5]             по смещению 0x06 будет возвращен двухбайтовый заводской номер контроллера 
[0x7->0x49]          по смещению 0x06 будет возвращен двухбайтовый заводской номер контроллера 
[0x8->0x25]  0x25 - Z5R-Net
[0x9->0x6]      флаги контроллера
[0xA->0x2]     версия прошивки 2.
[0xB->0x9]        версия прошивки .9
[0xC->0x0]         зарезервировано
[0xD->0x7]      Адрес последнего записанного события
[0xE->0x8]     Адрес последнего записанного события
[0xF->0x19]      Адрес последнего считанного события
[0x10->0x1]       Адрес последнего считанного события
[0x11->0x0]
[0x12->0x4]
[0x13->0x2]
единственный вопрос по последним трём смещениям - что это? сначала решил что это глюк  у меня в коде добавляет лишние 3 байта мусора, но судя по полю "длина пакета" = 0x14 все сходится, это часть ответа от конвертера


upd.:
и по флагам контроллера (смещение 0x09) - у меня там 0x6 = 110 (b) . В описании - биты 0..1 - размер памяти. ок, тут сходится 8к.
но что насчет бита №2 ? нечто о чем знать не обязательно (ведь зарезервировано..) или тоже какая-то полезная инфа?
« Последнее редактирование: 07 Августа 2019, 12:22 от kill9fan »

gsa

  • Пользователь
  • *****
  • Сообщений: 265
Re: Вопрос по SDK
« Ответ #16 : 07 Августа 2019, 12:26 »
Цитировать
...
[0x11->0x0]
[0x12->0x4]
[0x13->0x2]
единственный вопрос по последним трём смещениям - что это?
Спрошу у разработчика и сообщу ответ.

и по флагам контроллера (смещение 0x09) - у меня там 0x6 = 110 (b) . В описании - биты 0..1 - размер памяти. ок, тут сходится 8к.
но что насчет бита №2 ? нечто о чем знать не обязательно (ведь зарезервировано..) или тоже какая-то полезная инфа?
0,1    Размер памяти (0x00 - 2Kb, 0x01 - 4Kb, 0x02 - 8Kb
2    Не активен режим x2 (0 -> активен)
3    Карты кодируются по стандарту Wiegand
4    Активен режим Join
5    Резерв
6    Устройство имеет два банка ключей
7    Есть новые события

gsa

  • Пользователь
  • *****
  • Сообщений: 265
Re: Вопрос по SDK
« Ответ #17 : 07 Августа 2019, 12:42 »
Цитировать
[0x9->0x6]      флаги контроллера
[0xA->0x2]     версия прошивки 2.
[0xB->0x9]        версия прошивки .9
[0xC->0x0]         зарезервировано
[0xD->0x7]      Адрес последнего записанного события
[0xE->0x8]     Адрес последнего записанного события
[0xF->0x19]      Адрес последнего считанного события
[0x10->0x1]       Адрес последнего считанного события
[0x11->0x0]
[0x12->0x4]
[0x13->0x2]
единственный вопрос по последним трём смещениям - что это? сначала решил что это глюк  у меня в коде добавляет лишние 3 байта мусора, но судя по полю "длина пакета" = 0x14 все сходится, это часть ответа от конвертера
0x0C    1    Резерв
0x0D    2    Адрес последнего записанного события
0x0F    2    Адрес последнего считанного события
0x11    1    Резерв
0x12    1    Флаги
Бит    Описание
0    Активен режим Join
1    Активен режим x2
2    Поддержка режимов блокировки
3    Две временные зоны при одном банке DualZone
4    Поддержка сдвоенных карт
5    Поддержка нового запроса (команда 0x01 Универсальный запрос состояния Ext Ask)
6    Антипассбак
7    bigTime - длинное время. Для задания времён более 25.5 сек, тем контроллерам, которые это поддерживают
0x13   1    Резерв
0x14    1    Подтип контроллера:
Подтип    Описание
0    Неизвестно
1    Дверь
2    Турникет
3    Шлюз
4    Шлакбаум
« Последнее редактирование: 07 Августа 2019, 13:15 от gsa »

kill9fan

  • Пользователь
  • *****
  • Сообщений: 18
Re: Вопрос по SDK
« Ответ #18 : 07 Августа 2019, 15:16 »
0x14   Подтип контроллера:  -  оно обязательное или только в некоторых моделях/случаях? Может оно таки по 0x13-ому смещению?

Просто у меня в декодированном пакете в ответе от конвертера оно отсутствует.
Опять же, навряд ли мой глюк. Пруф: поле "длина пакета" мне конвертер возвращает 0x14 байт, при счете от нуля последнее смещение 0x13 и столько же принято по факту.

декодированный дамп ответа инфо о контроллере 0x2
[0x0->0x2D]
[0x1->0x14]
[0x2->0x8]
[0x3->0x1]
[0x4->0x0]
[0x5->0x2]
[0x6->0x5]
[0x7->0x49]
[0x8->0x25]
[0x9->0x6]
[0xA->0x2]
[0xB->0x9]
[0xC->0x0]
[0xD->0x7]
[0xE->0x8]
[0xF->0x19]
[0x10->0x1]
[0x11->0x0]
[0x12->0x4]
[0x13->0x2]
контрольная сумма 0x2D Длина пакета 0x14
Номер лицензии 0x8 id пакета 0x1
Код операции 0x0 Адрес на шине 0x2
Заводской номер 18693 Модель 0x25
Флаги 0x6: Размер памяти: 0x2 / Режим X2 неактивен 1 / Карты декодируются по стандарту Wiegand 0 / Активен режим Join 0 / Устройство имеет 2 банка ключей 0 / Есть новые события 0
Прошивка v.2.9
Адрес последнего записанного события 0x807
Адрес последнего считанного события 0x119
Флаги-2 0x4: Активен режим join 0 / активен режим x2 0 / поддержка режимов блокировки 1 / Две временные зоны при одном банке DualZone 0 / Поддержка сдвоенных карт 0 / Поддержка нового запроса(команда 0x01 Универсальный запрос состояния Ext Ask) 0 / Антипассбэк 0 / bigTime длинное время. Для задания времён более 25.5 сек, тем контроллерам, которые это поддерживают 0

gsa

  • Пользователь
  • *****
  • Сообщений: 265
Re: Вопрос по SDK
« Ответ #19 : 07 Августа 2019, 15:49 »
0x14   Подтип контроллера:  -  оно обязательное или только в некоторых моделях/случаях? Может оно таки по 0x13-ому смещению?
С 0x11 необязательные параметры. Проверил: 0x14  - подтип контроллера (1 байт), 0x0F - указатель чтения событий (2 байта).

kill9fan

  • Пользователь
  • *****
  • Сообщений: 18
Re: Вопрос по SDK
« Ответ #20 : 08 Августа 2019, 19:27 »
добрался до считывания памяти контроллера.
задался вопросом как девайс с 8Кб памяти (а у меня пишет будто бы 8Кб) может хранить 8192 события, с учетом что одно событие это 8 байтов?
в документации , для случаев с 2Кб девайсами, пишут "

Цитировать
Блок событий (тип 0xA0, номер 2)   
Смещение    Размер    Описание
0x0000    N * 8 байт    N записей о событиях по 8 байт. Максимальное число записей зависит от количества памяти, для 2Kb N не может превышать 2048

не могу понять эту формулировку. По идее для 2048 событий каждое по 8 байт необходимо 16Кб памяти, а не 2Кб.

Цитировать
Параметры контроллера
    биты 0-1 - размер памяти (0x00 - 2Kb, 0x01 - 4Kb, 0x02 - 8Kb)
 

может показатель "размер памяти" в "параметрах контроллера" имеет размерность не килобайты, а неких "КиБи-событий"?  типа 2 КиБи-события. 4 КиБи-события, 8 КиБи-событий?
или всё таки действительно общий объем перезаписываемой памяти (хранение) в килобайтах? Но тогда как же 2048*8 байт влезает в 2 Кб..
 :(

gsa

  • Пользователь
  • *****
  • Сообщений: 265
Re: Вопрос по SDK
« Ответ #21 : 08 Августа 2019, 20:07 »
задался вопросом как девайс с 8Кб памяти (а у меня пишет будто бы 8Кб) может хранить 8192 события, с учетом что одно событие это 8 байтов?
в документации , для случаев с 2Кб девайсами, пишут "

Мне кажется в документации опечатка, имелось ввиду 8K = ~8000 ключей. У Z-5R Net 8000 - размер всех банков (кроме RTC, тип 0xD0) = 8192 * 8 * 2 = 131072 б = 128 Кб.
« Последнее редактирование: 08 Августа 2019, 20:08 от gsa »

vesago

  • Гость
Re: Вопрос по SDK
« Ответ #22 : 08 Августа 2019, 20:08 »
Применительно к продукции IL, 8к - это не абсолютный объем памяти микросхем. Это 8к событий или ключей.

kill9fan

  • Пользователь
  • *****
  • Сообщений: 18
Re: Вопрос по SDK
« Ответ #23 : 09 Августа 2019, 01:08 »
Спасибо, понятно.

Еще есть вопросы по событиям.
1) как понимать описание двух указателей событий с блока управления, а именно:
Цитировать
0x0008   2 байта   Адрес, указывающий на ячейку в Блоке событий в которую будет произведена запись нового события. Старший байт первый.
0x000A   2 байта   Адрес, указывающий на ячейку в Блоке событий из которой нужно будет читать новое событие. Старший байт первый.
вот допустим событию контроллер велит записаться по адресу 0x0B40. Вот состоялось событие, вот оно записалось по адресу 0x0B40. Но указатель "читай новое событие из" содержит 0x0B20. Почему? Разве не из 0x0B38 должно быть? Но даже если почему-то 0x0B20 - то там уже есть какое-то событие, неизвестное, и судя по метке времени это не мусор.

2) попадаются коды событий 0x55 и 0x15 - что это?
Цитировать
...
0x0AF0|#350     15 00 00 08 06 20 10 27  |код 0x15 вых|(null)|адрес карты 0x00 0x00| 06/08 20:10:27
0x0AF8|#351     15 01 00 08 07 10 19 51  |код 0x15 вых|(null)|адрес карты 0x01 0x00| 07/08 10:19:51
0x0B00|#352     04 00 D0 08 07 15 42 11  |код 0x04 вх|Ключ найден, дверь разблокирована|адрес карты 0x00 0xD0| 07/08 15:42:11
0x0B08|#353     10 00 D0 08 07 15 42 11  |код 0x10 вх|Проход состоялся|адрес карты 0x00 0xD0| 07/08 15:42:11
0x0B10|#354     55 00 9D 5C 62 00 3B 00  |код 0x55 вых|(null)|адрес карты 0x00 0x9D| 62/5C 00:3B:00
0x0B18|#355     02 00 00 08 08 13 07 59  |код 0x02 вх|Ключ не найден в банке ключей|адрес карты 0x00 0x00| 08/08 13:07:59
0x0B20|#356     15 00 00 08 08 18 48 18  |код 0x15 вых|(null)|адрес карты 0x00 0x00| 08/08 18:48:18
0x0B28|#357     15 01 00 08 08 18 48 29  |код 0x15 вых|(null)|адрес карты 0x01 0x00| 08/08 18:48:29
0x0B30|#358     04 00 C8 08 08 18 53 22  |код 0x04 вх|Ключ найден, дверь разблокирована|адрес карты 0x00 0xC8| 08/08 18:53:22
0x0B38|#359     10 00 C8 08 08 18 53 22  |код 0x10 вх|Проход состоялся|адрес карты 0x00 0xC8| 08/08 18:53:22
0x0B40|#360     FF FF FF FF FF FF FF FF  |код 0xFF вых|(null)|адрес карты 0xFF 0xFF| FF/FF FF:FF:FF
0x0B48|#361     FF FF FF FF FF FF FF FF  |код 0xFF вых|(null)|адрес карты 0xFF 0xFF| FF/FF FF:FF:FF
...
« Последнее редактирование: 09 Августа 2019, 01:16 от kill9fan »

gsa

  • Пользователь
  • *****
  • Сообщений: 265
Re: Вопрос по SDK
« Ответ #24 : 09 Августа 2019, 07:56 »
Спасибо, понятно.

Еще есть вопросы по событиям.
1) как понимать описание двух указателей событий с блока управления, а именно:
вот допустим событию контроллер велит записаться по адресу 0x0B40. Вот состоялось событие, вот оно записалось по адресу 0x0B40. Но указатель "читай новое событие из" содержит 0x0B20. Почему? Разве не из 0x0B38 должно быть?
Память банка событий циклически перезаписывается новыми событиями после её заполнения, новое событие запишется на место самого старого.
Указатель чтения указывает на начало инициализированных данных, указатель записи - на конец.
При инициализации контроллера оба указателя устанавливаются в 0. При очередном событии информация о событии заносится в ячейку по указателю записи, затем указатель увеличивается на 1 ячейку (на 8 байт), а указатель чтения не изменяется до тех пор, пока буфер не заполняется до конца и указатель записи перемещается в 0 - в этом случае указатель чтения также увеличивается на 1 ячейку. Далее при записи нового события будут увеличиваться на 1 ячейку оба указателя одновременно. Таким образом в буфере всегда останутся MaxEvents-1 событий.

Количество новых событий NewCount можно вычислить по формуле: если EventReadIdx <= EventWriteIdx, то NewCount = (EventWriteIdx - EventReadIdx), иначе NewCount = (MaxEvents - EventReadIdx + EventWriteIdx).
где MaxEvents - ёмкость банка событий = 8192 у Z-5R Net 8K, EventReadIdx = (адрес указателя чтения/8), EventWriteIdx = (адрес указателя записи/8)

p.s. Мне кажется лучше не изменять указатель чтения контроллера, а хранить свой указатель чтения (в своём ПО) чтобы отслеживать изменения.

0x14 Перезагрузка контроллера
0x15 Питание, параметр (смещение 0x01) =0 пропало, =1 появилось
0x55 Содержит номер карты, последние 6 байт содержат копию буфера кода последнего поднесенного ключа (блок управления 0xD0). Не является событием, это дополнение к следующему событию, обычно это события 0x02 0x03 "Ключ не найден в банке ключей".
« Последнее редактирование: 09 Августа 2019, 14:25 от gsa »

kill9fan

  • Пользователь
  • *****
  • Сообщений: 18
Re: Вопрос по SDK
« Ответ #25 : 09 Августа 2019, 16:01 »
почти понял.   :-\ А как (для общего развития) провести инициализацию контроллера? сейчас по формуле я имею 8 событий,  видимо счетчик чтения обновился после пропадания питания 08/08 18:48:18
Цитировать
0x0B20|#0356  15 00 00 08 08 18 48 18    Питание пропало   08/08 18:48:18
Но сейчас простое обесточивание контроллера или всего стенда с конвертором не скидывает указатель чтения, как был 0x0B20 так и остался.

gsa

  • Пользователь
  • *****
  • Сообщений: 265
Re: Вопрос по SDK
« Ответ #26 : 09 Августа 2019, 16:22 »
почти понял.   :-\ А как (для общего развития) провести инициализацию контроллера? сейчас по формуле я имею 8 событий,  видимо счетчик чтения обновился после пропадания питания 08/08 18:48:18
Цитировать
0x0B20|#0356  15 00 00 08 08 18 48 18    Питание пропало   08/08 18:48:18
Но сейчас простое обесточивание контроллера или всего стенда с конвертором не скидывает указатель чтения, как был 0x0B20 так и остался.
Можете записать значения указателей чтения/записи событий =0 (Блок управления (тип 0xD0, номер 0, смещение 0x0008).
Обесточивание не должно сбрасывать указатели, т.к. они хранятся в ПЗУ.

Вот отрывок из описания протокола (для контроллера с 4096 событиями):
Цитировать
Считывание буфера событий из контроллера
Буфер событий размещен в FLASH (адрес на шине 02h, тип устройства A0h) и занимает 32К байт (4096 события max), адреса 0-7FFFh. Он организован циклически, верхняя граница  и нижняя граница буфера (указатели записи и считывания) хранятся в RAM RTC (адрес на шине 00h, тип устройства D0h).
При инициализации контроллера оба указателя устанавливаются в 0. При очередном событии верхняя граница увеличивается на 8 (по модулю 8К) и блок информации о событии заносится в буфер, а нижняя не изменяется до тех пор, пока буфер не заполняется до конца и верхняя граница перемещается в 0 - в этом случае нижняя граница также увеличивается на 8; далее при записи нового события будут увеличиваться на 8 и верхняя, и нижняя границы (по модулю 8К); таким образом в буфере всегда останутся 4095 последних события.
При считывании из контроллера в PC рекомендуется начинать с нижней границы и сдвигать ее после каждого считанного события или блока событий командой «записать в контроллер» (03h) новое положение нижней границы; таким образом, первыми считываются наиболее ранние события. Считывание завершается, когда значения верхней и нижней границы становятся равны (буфер пуст).

kill9fan

  • Пользователь
  • *****
  • Сообщений: 18
Re: Вопрос по SDK
« Ответ #27 : 09 Августа 2019, 19:01 »
Благодарю за столь подробный ответ.

тут, подключил на шину matrix-II net (контроллеросчитыватель) . Прицепился своей прогой к нему и принялся считывать события.
Что заметил
1) не фиксирует события пропадания питания
2) при считывании событий, иногда (кажется только после включения питания и переставления перемычек на горячую), так вот, иногда показывает мусор
Цитировать
0x0000|#0000  55 55 55 55 55 55 55 55    Неизвестный ключ [55 55 55 55 55 55]|(без даты)
вплоть до смещения 0x50  (далее идут нормальные 0xFFFFFF-ы
стоит только перечитать 1-2 раза, и тут, в событиях появляется нечто осмысленное и далее уже запись событий работает нормально.

Не подскажите, такое поведение для этого "контроллеросчитывателя" норма? Или всё-таки стоит копать в сторону глюков в моей тестовой проге?


gsa

  • Пользователь
  • *****
  • Сообщений: 265
Re: Вопрос по SDK
« Ответ #28 : 09 Августа 2019, 19:40 »
1) не фиксирует события пропадания питания
Возможно в установленной прошивке контроллера не реализовано это событие.

2) при считывании событий, иногда (кажется только после включения питания и переставления перемычек на горячую), так вот, иногда показывает мусор
Цитировать
0x0000|#0000  55 55 55 55 55 55 55 55    Неизвестный ключ [55 55 55 55 55 55]|(без даты)
Значениями "55 55 55 55 55 55 55 55" заполняется память контроллера на производстве, означает, что запись пустая. Это не событие неизвестный ключ. Кстати, я исправлял предыдущее сообщение #24: событие с кодом 0x55 это не самостоятельное событие, оно дополняет некоторые другие события.

стоит только перечитать 1-2 раза, и тут, в событиях появляется нечто осмысленное и далее уже запись событий работает нормально.
Не подскажите, такое поведение для этого "контроллеросчитывателя" норма? Или всё-таки стоит копать в сторону глюков в моей тестовой проге?
Не встречался с такой проблемой.
Можете проверить, что записано в памяти контроллера с помощью GuardCommander или Demo из Sdk Guard.
« Последнее редактирование: 09 Августа 2019, 19:42 от gsa »

kill9fan

  • Пользователь
  • *****
  • Сообщений: 18
Re: Вопрос по SDK
« Ответ #29 : 12 Августа 2019, 19:38 »
Не встречался с такой проблемой.
Можете проверить, что записано в памяти контроллера с помощью GuardCommander или Demo из Sdk Guard.
Отдебажил таки. Да,  это был мой косяк, который приводил к дальнейшей дестабилизации. Когда адрес первого свободного слота в сегменте "записанных карт" == 0x00C0, т.е. нету записанных карт на борту контроллера, я не делал проверку и запрашивал у контроллера 0 байт данных начиная с 0x00C0. После чего контроллер упорно отдавал холдтайм,клозопер,вайтопэн равными 0x55, и на попытку первого чтение блока событий выдавал   0x55 "в периоде"..
   len=((mem_cards[a]->freecard_addr[0]<<8)+mem_cards[a]->freecard_addr[1]) - 0x00C0;
   if (len<=0) {puts("~~ справочник карт пуст"); continue; }         // <--- достаточно было это
   // теперь загрузим данные до адреса первого свободного слота карт