【问题标题】:Connecting to my UHF RFID reader via the provided SDK通过提供的 SDK 连接到我的 UHF RFID 阅读器
【发布时间】:2021-03-17 17:04:45
【问题描述】:

我正在做一个项目,我需要编写自己的软件来使用我们的 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软件,我可以选择端口(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;
}

【问题讨论】:

标签: c++ c sdk rfid


【解决方案1】:

谢谢,我可以通过添加这个来让它工作:

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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 2014-04-20
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多