簡體   English   中英

通過提供的 SDK 連接到我的 UHF RFID 閱讀器

[英]Connecting to my UHF RFID reader via the provided SDK

我正在做一個項目,我需要編寫自己的軟件來使用我們的 UHF RFID 閱讀器(體育賽事跟蹤)。 提供的 SDK 記錄不充分,我遇到了一些問題。

功能:

extern "C" __declspec(dllexport) int OpenComm(HANDLE *hCom,char *com_port);
extern "C" __declspec(dllexport) void CloseComm(HANDLE comm);
extern "C" __declspec(dllexport) int InitializeTag(HANDLE comm);
extern "C" __declspec(dllexport) int TagIdentify(HANDLE comm,unsigned char *recieve);//EPC��ǩʶ��
extern "C" __declspec(dllexport) int ReadSoftwareVersion(HANDLE comm,char *receive);
extern "C" __declspec(dllexport) int StopWorkSetting(HANDLE comm);
extern "C" __declspec(dllexport) int TagRead(HANDLE comm,int length,unsigned char membank,unsigned char address,unsigned char *receive);
extern "C" __declspec(dllexport) int TagWriteSingleWord(HANDLE comm,unsigned char membank,unsigned char address,int data);
extern "C" __declspec(dllexport) int TagLock(HANDLE comm,unsigned char locktype);
extern "C" __declspec(dllexport) int TagKill(HANDLE comm,unsigned char pa1,unsigned char pa2,unsigned char pa3,unsigned char pa4);
extern "C" __declspec(dllexport) int ResetReader(HANDLE comm);
extern "C" __declspec(dllexport) int QueryReaderSingleParameter(HANDLE comm,unsigned char msb,unsigned char lsb,unsigned char *receive);
extern "C" __declspec(dllexport) int QueryReaderMultiParameter(HANDLE comm,unsigned char length,unsigned char msb,unsigned char lsb,unsigned char *receive);
extern "C" __declspec(dllexport) int SetReaderSignleParameter(HANDLE comm,unsigned char msb,unsigned char lsb,unsigned char data);
extern "C" __declspec(dllexport) int SetReaderMultiParameter(HANDLE comm,unsigned char length,unsigned char msb,unsigned char lsb,unsigned char *write_data);
extern "C" __declspec(dllexport) int ReadMultiTag(HANDLE comm,unsigned char *count,unsigned char *id_buffer);
extern "C" __declspec(dllexport) int AfreshIdentifyTag(HANDLE comm);
extern "C" __declspec(dllexport) int AfreshGetData(HANDLE comm,unsigned char *count,unsigned char *data);

根據文檔,它僅支持 Visual C++、VB、C++ Builder 和 Delphi。 我正在用 V C++ 編寫程序。 所以我的想法是我打開與OpenComm的通信(它可以工作),但之后如果我使用ReadSoftwareVersionResetReader它就不起作用。 他們提供了一個Demo軟件,我可以select端口(COM1-9)和波特率(我用9600)然后連接。

令人驚訝的是它工作得很好。 如果我斷開演示軟件並使用提供的功能連接到我自己的軟件,它們會突然工作。 我認為它與波特率有關,因為所提供的函數都沒有該選項,而且 sdk 文檔中也沒有提到它,但它存在於演示應用程序中。

我的代碼:

#include <iostream>
#include <cstring>
#include <windows.h>

// SDK header file
#include "EPCDemoDll.h"

using std::cout;
using std::endl;

int main(int argc, char* argv[]) {

    HANDLE comm;
    char port[5] = "COM3";
    OpenComm(&comm, port);

    int flag = ResetReader(comm);
    if (flag == 1)
    {
        cout << "reset OK" << endl;
    }
    else
    {
        cout << "reset ERROR" << endl;
    }

    CloseComm(comm);
    return 0;
}

謝謝,我可以通過添加以下內容來使其正常工作:

DCB comm_data;
if (GetCommState(comm, &comm_data) != 0) {
   comm_data.BaudRate = CBR_9600;
   comm_data.ByteSize = 8;
   comm_data.Parity = NOPARITY;
   comm_data.StopBits = ONESTOPBIT;
   if (SetCommState(comm, &comm_data) != 0)
      return 0;
   return 1;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM