【发布时间】: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 的通信(它有效),但之后如果我使用ReadSoftwareVersion 或ResetReader 它就不起作用。他们提供了一个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;
}
【问题讨论】:
-
您可以使用winapi函数
SetCommState()设置COM速度(见docs.microsoft.com/en-us/windows/win32/api/winbase/…)。不需要特定的功能。但我认为在打开连接之前(或之后)需要一个初始化调用。