Подключение 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;
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5