Я использую «Motorola EMDK для .NET» для личного проекта и вижу, что TagData.TagID
и TagData.MemoryBankData
различаются (когда выбран MEMORY_BANK.TID
).
Документация .NET неинформативна, в ней просто указано:
Свойство TagData.TagID
Получает идентификатор тега
Я изучил API «Motorola EMDK for C», представляющий собой низкоуровневый интерфейс, который охватывает .NET SDK, и предоставил дополнительные сведения:
UNIT8* pTagID
Идентификатор тега, для C1G2 это поле относится к данным EPC.
...это проясняет ситуацию, за исключением того, что значение для MEMORY_BANK.EPC
также не соответствует TagData.TagID
!
Я просмотрел спецификацию Class 1 Gen 2 ( .gs1.org/sites/default/files/docs/uhfc1g2/uhfc1g2TagData.MemoryBankData
0_0_standard_20131101.pdf ), и ни одно из полей, описанных в структурах данных тега, похоже, не соответствует этому TagID
свойству.
Я действительно задавался вопросом, является ли TagData.TagID
каким-то произвольным, непрозрачным значением, сгенерированным SDK как средством уникальной идентификации каждого тега, но я заметил, что одни и те же значения используются в разных сеансах, так что это определенно детерминировано, но что это значит ?
Я написал программу, которая выгружает все банки памяти тегов и свойства TagID
, вот что у меня получилось:
TagData.TagID: "0000000000000000000C7D16" Bank: MEMORY_BANK_EPC , BankData: "743E30000000000000000000000C7D16"
TagData.TagID: "0000000000000000000C7D16" Bank: MEMORY_BANK_RESERVED, BankData: "0000000000000000"
TagData.TagID: "0000000000000000000C7D16" Bank: MEMORY_BANK_TID , BankData: "E20060031A8A034E"
TagData.TagID: "0000000000000000000C7D16" Bank: MEMORY_BANK_USER , BankData: "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
TagData.TagID: "3330323135385F303031" Bank: MEMORY_BANK_EPC , BankData: "EB1728003330323135385F303031"
TagData.TagID: "3330323135385F303031" Bank: MEMORY_BANK_RESERVED, BankData: "0000000000000000030004180CFA"
TagData.TagID: "3330323135385F303031" Bank: MEMORY_BANK_TID , BankData: "E2801130200029431C9701C2"
TagData.TagID: "3330323135385F303031" Bank: MEMORY_BANK_USER , BankData: "00000000"
TagData.TagID: "54573630354C5F303037" Bank: MEMORY_BANK_EPC , BankData: "B63E280054573630354C5F303037"
TagData.TagID: "54573630354C5F303037" Bank: MEMORY_BANK_RESERVED, BankData: "0000000000000000030004190CFA"
TagData.TagID: "54573630354C5F303037" Bank: MEMORY_BANK_TID , BankData: "E2801130200021A11D4501C2"
TagData.TagID: "54573630354C5F303037" Bank: MEMORY_BANK_USER , BankData: "00000000"
TagData.TagID: "54573630354C5F303132" Bank: MEMORY_BANK_EPC , BankData: "D5AA280054573630354C5F303132"
TagData.TagID: "54573630354C5F303132" Bank: MEMORY_BANK_RESERVED, BankData: "0000000000000000030004190CFA"
TagData.TagID: "54573630354C5F303132" Bank: MEMORY_BANK_TID , BankData: "E2801130200021F11D4501C2"
TagData.TagID: "54573630354C5F303132" Bank: MEMORY_BANK_USER , BankData: "00000000"
Обновлять
Похоже, я недостаточно внимательно смотрел!
TagData.TagID
содержится внутри EPC
, например:
TagData.TagID: "3330323135385F303031" Bank: MEMORY_BANK_EPC , BankData: "EB1728003330323135385F303031"
EPC: "EB1728003330323135385F303031"
TagID: "3330323135385F303031"
Согласно спецификации C1G2 начало EPC зарезервировано как таковое:
0x0000 to 0x000F - StoredCRC - 0xEB17
0x0010 to 0x001F - StoredPC - 0x2800
0x0020 to 0x020F - Actual EPC value - 0x3330323135385F303031
0x0210 to 0x021F - XPC_W1 (Optional) - null
0x0220 to 0x022F - XPC_W2 (Optional) - null
Тогда это проясняет!
Но теперь мой вопрос: можно ли доверять TagID
глобально уникальному, как TID
? Насколько я понимаю, EPC
не обязательно должно быть уникальным, это просто произвольная строка, а не серийный номер. Если это так, то что происходит в случае коллизии EPC?