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