0
잠시 동안, 나는 RFID 리더가 자동으로 카드를 읽도록 (스캔)하려고 노력 해왔다. 이전 코드가 있었지만 버튼을 누르면 리더가 카드를 스캔합니다. 그러나 카드가 현장에 배치되면 카드를 자동으로 지속적으로 스캔 할 수 있기를 원합니다. 여기 내가 시도한 것이있다. 하지만 텍스트 상자에 스캔 한 UID를 표시 할 수 없었습니다. 제발, 당신의 도움을 주시면 감사하겠습니다.RFID 리더가 연속적으로 카드를 찾는 방법
class CardReader : IDisposable
{
IntPtr _pSnr = Marshal.AllocHGlobal(1024);
private Thread _t;
private Action<string> _callback;
private volatile bool _stop;
public void ReadCard()
{
short icdev = 0x0000;
int status;
byte type = (byte)'A';//mifare one type is A
byte mode = 0x26; // Request the card which is not halted.
ushort TagType = 0;
byte bcnt = 0x04;//mifare hold on 4
IntPtr pSnr;
byte len = 255;
sbyte size = 0;
pSnr = Marshal.AllocHGlobal(1024);
for (int i = 0; i < 2; i++)
{
status = rf_request(icdev, mode, ref TagType);//request card
if (status != 0)
continue;
status = rf_anticoll(icdev, bcnt, pSnr, ref len);//i did anticol--get the card sn
if (status != 0)
continue;
status = rf_select(icdev, pSnr, len, ref size);//select one card
if (status != 0)
continue;
byte[] szBytes = new byte[len];
for (int j = 0; j < len; j++)
{
szBytes[j] = Marshal.ReadByte(pSnr, j);
}
String m_cardNo = String.Empty;
for (int q = 0; q < len; q++)
{
m_cardNo += byteHEX(szBytes[q]);
}
_callback(m_cardNo);
// txtSearchPurse.Text = m_cardNo;
break;
}
}
public void Work()
{
while (!_stop)
{
ReadCard();
Thread.Sleep(1000);
}
}
public void Start(Action<string> cardRead)
{
if (_t != null)
return;
_stop = false;
_callback = cardRead;
_t = new Thread(Work);
_t.Start();
}
public void Stop()
{
if (_t != null)
{
_stop = true;
_t.Join();
_t = null;
}
}
public void Dispose()
{
Marshal.FreeHGlobal(_pSnr);
}
}
그리고 난이처럼 사용하려고 :
private void btnRequest_Click(object sender, EventArgs e)
{
var reader = new CardReader();
reader.Start(CardReaded);
}
private void CardReaded(string cardnr){
//txtSearchPurse.Text = _callback;
}
다음
고맙습니다. –
@ Idle_Mind. 리더가 연속 스캔을 원하지만 어떻게 카드를 한 번만 스캔 할 수 있습니까? 따라서 카드가 리더에 얼마나 오래 머무르더라도 카드는 한 번만 스캔됩니다. 감사. –
나는 독자를 실제로 사용한 적이 결코 없다. 문서가 있습니까? 카드가 필드를 떠난 때를 감지하는 방법은 어떨까요? 그렇지 않은 경우, 일정 기간 동안 동일한 "카드사"의 알림을 무시하는 것 이외의 ** 신뢰할 수있는 ** 방법을 생각할 수 없습니다. –