读卡器带的光盘上有用于开发的接口dll,其中有打开串口,寻卡,装载密码,验证,读卡,终止读卡,关闭串口的函数。我想问的是,程序应该如何判断卡是否已经放到了读卡器上?(是非接触式的读卡器)是在程序一启动就执行打开串口的函数,然后看DataReceieved事件是否被触发判断吗?但是它是自带的打开串口函数,处理都在内部的,打开成功后还要返回一个串口标识符。。还有,我在程序的Loaded事件里已经打开了另一个串口(不是用来读卡的),会不会和这个发生冲突?有没有做过这方面程序的大侠指点一下啊。。
解决方案 »
- 如何把DataGridView 已有的其中一列转换为 DataGridViewImageColumn
- 记录查询器(WPF;散分贴,来者有分)
- 线程等待造成的数据重复问题,150分全上了。。
- 请问OleDB如何实现带参数的模糊查询
- 急~~在C#中如何加入扫描仪源程序
- 请问哪有漂亮的.net控件下载?
- ************************初学者的问题,请帮忙我!*******************************
- c#怎样动态来创建xml文件?
- 高分:过滤datagrid中的行
- 能不能将整个项目中的所有函数封装成一个dll文件?
- 正则表达式求助
- 代码看不懂, 求解释,关于反射
2、熟悉SDK的流程,然后再做工作,
我现在已经在程序启动时成功打开串口,并且设置1秒钟寻一次卡。但是我又遇到了新的问题(对不起分数太少了,问题又这么多。。)
SDK文档上写打开串口会返回一个串口标示符,将这个标示符作为寻卡函数的参数。
然后寻卡函数执行成功会输出一个唯一的IC卡序列号。我调试程序得到的串口标示符为76,但是作为参数执行寻卡函数后怎么也得不到IC卡序列号,也就是说寻卡函数总是不能正确执行。
这个序列号应该是出厂时就已经固化在卡里面的吧!还是要自己往卡里写呢?
下面是SDK文档的一些内容int Open_Device(int port,long baud);功 能:初始化串口参 数:port:串口号,取值为0~3 baud:为通讯波特率9600~115200返 回:成功则返回串口标识符>0,失败返回负值,见错误代码表 例:int icdev; icdev=Open_Device(0,9600);//初始化串口1,波特率9600 如果是WIN32程序则icdev为设备句柄,见下例: HANDLE icdev; icdev=Open_Device(0,115200); if(icdev<0) MessageBox(“Open_Device error”);int rf_card(int icdev,unsigned char _Mode,unsigned long *_Snr);功 能:寻卡,能返回在工作区域内某张卡的序列号参 数:icdev:通讯设备标识符 _Mode:寻卡模式mode_card _Snr:返回的卡序列号返 回:成功则返回 0 例:int st; unsigned long snr; st=rf_card(icdev,0,&snr); 注:选择IDLE模式,在对卡进行读写操作,执行rf_halt()rf_halt指令中止卡操作后,只有当该卡离开并再次进入操作区时,读写器才能够再次对它进行操作。
下面是我写的代码 bolIsSerialPortOpen = false;
int cntOpenSerialPort = 0; //用于循环打开读卡器串口
byte _Status = 0; while (cntOpenSerialPort <= 3 && !bolIsSerialPortOpen) //串口号取值为0~3
{
icDev = Open_Device(cntOpenSerialPort, 9600); if (icDev > 0)
{
if (rf_get_status(icDev, ref _Status) == 0) //取得读写器硬件版本号,如“mwrf100_v3.0”
{
bolIsSerialPortOpen = true; //串口已打开
rf_beep(icDev, 30); //IC卡读卡器蜂鸣30毫秒
}
}
cntOpenSerialPort++;
}
我的思路是初始化程序时打开串口,将寻卡函数放在一个定时器timer中,(如果串口已成功打开则)每秒寻卡一次。这么做会不会很耗内存呢?
散分