Подключение RFID считывателя Z-2 USB - C#
Формулировка задачи:
Доброго времени суток! В sdk к данному считывателю есть Demo.exe и Example на C#. В Demo к считывателю коннектится без проблем, а вот в example не получается приконнектится.
Выдает отрицательное число.
Настройки порта верные, может кто-нибудь может помочь?
hr = ZRIntf.ZR_Rd_Open(ref m_hRd, ref rOpen, rRdInf);
public const ZP_PORT_TYPE RdPortType = ZP_PORT_TYPE.ZP_PORT_COM; public const string RdPortName = "IL01JXE8"; ZR_RD_INFO rRdInf = new ZR_RD_INFO(); ZR_RD_OPEN_PARAMS rOpen = new ZR_RD_OPEN_PARAMS(RdPortType, RdPortName);
Ошибку нашел, тему можно удалять
Решение задачи: «Подключение RFID считывателя Z-2 USB»
textual
Листинг программы
class Program { static string[] PortTypeStrs = { "Неизвестно", "COM", "FT", "IP", "IPS" }; static string[] ReaderTypeStrs = { "Неизвестно", "Z-2 USB", "Matrix III Rd-All", "Z-2 USB MF", "Matrix III Net", "CP-Z-2MF", "Z-2 EHR", "Z-2 Base", "Matrix V" }; static string[] CardTypeStrs = { "Неизвестно", "EM", "HID", "IC", "UL", "1K", "4K", "DF", "PX", "Cod433 Fix", "Cod433", "Dallas", "CAME", "Plus", "Plus 1K", "Plus 2K", "Plus 4K", "Mini" }; public static IntPtr m_hRd; static void Main(string[] args) { int hr; hr = ZRIntf.ZR_Initialize(ZPIntf.ZP_IF_NO_MSG_LOOP); if (hr < 0) { Console.WriteLine("Ошибка ZR_Initialize ({0}).", hr); Console.ReadLine(); return; } try { UInt32 nVersion = ZRIntf.ZR_GetVersion(); UInt32 nVerMajor = (nVersion & 0xFF); UInt32 nVerMinor = ((nVersion >> 8) & 0xFF); UInt32 nVerBuild = ((nVersion >> 16) & 0xFF); Console.WriteLine("SDK Reader v{0}.{1}.{2}", nVerMajor, nVerMinor, nVerBuild); if ((nVerMajor != ZRIntf.ZR_SDK_VER_MAJOR) || (nVerMinor != ZRIntf.ZR_SDK_VER_MINOR)) { Console.WriteLine("Неправильная версия SDK Reader."); Console.ReadLine(); return; } Console.WriteLine("Перечисление последовательных портов..."); int nPortCount = 0; IntPtr hList = new IntPtr(); hr = ZRIntf.ZR_GetPortInfoList(ref hList, ref nPortCount); if (hr < 0) { Console.WriteLine("Ошибка ZG_EnumSerialPorts ({0}).", hr); Console.ReadLine(); return; } List<ZP_PORT_INFO> list_rPi = new List<ZP_PORT_INFO>(); try { ZP_PORT_INFO rPI = new ZP_PORT_INFO(); for (int i = 0; i < nPortCount; i++) { ZPIntf.ZP_GetPortInfo(hList, i, ref rPI); Console.WriteLine("{0}. {1} ({2}); {3}", (i + 1), rPI.szName, rPI.szFriendly, ((rPI.nFlags & ZPIntf.ZP_PIF_BUSY) != 0) ? "Занят" : ""); list_rPi.Add(rPI); } } finally { ZRIntf.ZR_CloseHandle(hList); } Console.WriteLine("--------------"); if (nPortCount > 0) { Console.WriteLine("Найдено {0} портов.", nPortCount); try { foreach (var rPi in list_rPi) { if (rPi.szFriendly != string.Empty) { Console.WriteLine("Подключение к считывателю ({0})...", rPi.szName); ZR_RD_OPEN_PARAMS rOpen = new ZR_RD_OPEN_PARAMS(rPi.nType, rPi.szName); ZR_RD_INFO rRdInf = new ZR_RD_INFO(); hr = ZRIntf.ZR_Rd_Open(ref m_hRd, ref rOpen, rRdInf); if (hr < 0) { Console.WriteLine("Ошибка ZR_Rd_Open ({0}).", hr); Console.ReadLine(); return; } Console.WriteLine("{0}, с/н: {1}, v{2}.{3}", ReaderTypeStrs[(int)rRdInf.nType], rRdInf.rBase.nSn, rRdInf.rBase.nVersion & 0xff, (rRdInf.rBase.nVersion >> 8) & 0xff); Console.WriteLine("Поиск карт..."); int nCardCount = 0; hr = ZRIntf.ZR_Rd_SearchCards(m_hRd); if (hr < 0) { Console.WriteLine("Ошибка ZR_Rd_SearchCards ({0}).", hr); Console.ReadLine(); return; } ZR_CARD_INFO rInfo = new ZR_CARD_INFO(); while ((hr = ZRIntf.ZR_Rd_FindNextCard(m_hRd, rInfo)) == ZRIntf.S_OK) { Console.WriteLine("{0}. {1} {2}", ++nCardCount, CardTypeStrs[(int)rInfo.nType], ZRIntf.CardNumToStr(rInfo.nNum, rInfo.nType)); } if (hr < 0) { Console.WriteLine("Ошибка ZR_Rd_FindNextCard ({0}).", hr); Console.ReadLine(); return; } ZRIntf.ZR_Rd_FindNextCard(m_hRd, null); Console.WriteLine("--------------"); if (nCardCount > 0) Console.WriteLine("Найдено {0} карт.", nCardCount); else Console.WriteLine("Карты не найдены."); m_oEvent = new ManualResetEvent(false); ZR_RD_NOTIFY_SETTINGS rNS = new ZR_RD_NOTIFY_SETTINGS(ZRIntf.ZR_RNF_EXIST_CARD, m_oEvent.SafeWaitHandle); hr = ZRIntf.ZR_Rd_SetNotification(m_hRd, rNS); if (hr < 0) { Console.WriteLine("Ошибка ZR_Rd_SetNotification ({0}).", hr); Console.ReadLine(); return; } StartNotifyThread(); Console.WriteLine(); Console.WriteLine("Ожидание поднесения карт..."); Console.WriteLine(); Console.ReadLine(); } } } finally { StopNotifyThread(); if (m_hRd != IntPtr.Zero) ZRIntf.ZR_CloseHandle(m_hRd); ZRIntf.ZR_Finalyze(); } } else Console.WriteLine("Порты не найдены."); } finally { ZRIntf.ZR_Finalyze(); } Console.ReadLine(); } static int CheckNotifyMsgs() { int hr; UInt32 nMsg = 0; IntPtr nMsgParam = IntPtr.Zero; while ((hr = ZRIntf.ZR_Rd_GetNextMessage(m_hRd, ref nMsg, ref nMsgParam)) == ZRIntf.S_OK) { switch (nMsg) { case ZRIntf.ZR_RN_CARD_INSERT: { ZR_CARD_INFO pInfo = (ZR_CARD_INFO)Marshal.PtrToStructure(nMsgParam, typeof(ZR_CARD_INFO)); Console.WriteLine("Карта поднесена {0} {1}", CardTypeStrs[(int)pInfo.nType], ZRIntf.CardNumToStr(pInfo.nNum, pInfo.nType)); } break; case ZRIntf.ZR_RN_CARD_REMOVE: { ZR_CARD_INFO pInfo = (ZR_CARD_INFO)Marshal.PtrToStructure(nMsgParam, typeof(ZR_CARD_INFO)); Console.WriteLine("Удалена карта {0} {1}", CardTypeStrs[(int)pInfo.nType], ZRIntf.CardNumToStr(pInfo.nNum, pInfo.nType)); } break; } } if (hr == ZPIntf.ZP_S_NOTFOUND) hr = ZRIntf.S_OK; return hr; } static ManualResetEvent m_oEvent = null; static bool m_fThreadActive; static Thread m_oThread = null; static void DoNotifyWork() { while (m_fThreadActive) { if (m_oEvent.WaitOne()) { m_oEvent.Reset(); if (m_hRd != IntPtr.Zero) CheckNotifyMsgs(); } } } static void StartNotifyThread() { if (m_oThread != null) return; m_fThreadActive = true; m_oThread = new Thread(DoNotifyWork); m_oThread.Start(); } static void StopNotifyThread() { if (m_oThread == null) return; m_fThreadActive = false; m_oEvent.Set(); m_oThread.Join(); m_oThread = null; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д