各位大侠,请教射频卡读卡器函数如何调用?

dfwxj 2011-05-11 01:50:32
明华U330非接触式IC卡读写卡器,USB接口,函数库是MWRF32.DLL。

帮助是这样写的:

int rf_init(int port,long baud);

功 能:初始化串口

参 数:port:串口号,取值为0~3

baud:为通讯波特率9600~115200

返 回:成功则返回串口标识符>0,失败返回负值,见错误代码表

例:int icdev;

icdev=rf_init(0,9600);//初始化串口1,波特率9600



如果是WIN32程序则icdev为设备句柄,见下例:

HANDLE icdev;

icdev=rf_init(0,115200);

if(icdev<0)

MessageBox(“rf_init error”);


调用WINDOWS动态库的方法:

32位库

rf_init:
HANDLE rf_init(_int16 port,long baud); baud 9600~115200

返回值icdev:HANDLE

参数int:_int16

********************************
用VFP怎么写代码?那个“HANDLE”是个什么东西?怎么用?查了两天没查到。


这个函数是初始化串口的,问题是:这个读卡器是USB接口的,免驱动,插上电脑没有串口出现!查到其他厂商的产品,有个“usb_init()”函数,无参数,也是这样写的:

HANDLE icdev;
icdev=usb_init();

电话打到明华厂家,人家没听说过“VFP”!配的例程是VFP的16位动态库,没用!


...全文
681 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunway0628 2012-05-21
  • 打赏
  • 举报
回复
我也用的明华U330非接触式IC卡读写卡器,USB接口,免驱动,插上电脑没有串口出现。
请问你后来是怎么解决的?
dfwxj 2011-05-12
  • 打赏
  • 举报
回复
VB例程被我改了一下有用了,以下是声明部份的代码:
Option Explicit
Global icdev As Long
Global st As Integer


'comm function
Declare Function rf_config Lib "mwrf32.dll" (ByVal icdev%, ByVal mode%, ByVal baud%) As Integer
Declare Function rf_init Lib "mwrf32.dll" (ByVal port%, ByVal baud As Long) As Long
Declare Function rf_exit Lib "mwrf32.dll" (ByVal icdev As Long) As Integer
Declare Function rf_request Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%, atr_type%) As Integer
Declare Function rf_anticoll Lib "mwrf32.dll" (ByVal icdev As Long, ByVal Bcnt%, Snr As Long) As Integer
Declare Function rf_select Lib "mwrf32.dll" (ByVal icdev%, ByVal Snr As Long, Size%) As Integer
Declare Function rf_card Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%, Snr As Long) As Integer
Declare Function rf_load_key Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%, ByVal secnr%, ByRef nkey As Byte) As Integer
Declare Function rf_load_key_hex Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%, ByVal secnr%, ByVal nkey As String) As Integer
Declare Function rf_authentication Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%, ByVal scenr%) As Integer
Declare Function rf_read Lib "mwrf32.dll" (ByVal icdev As Long, ByVal Adr%, ByVal sdata$) As Integer
Declare Function rf_read_hex Lib "mwrf32.dll" (ByVal icdev As Long, ByVal Adr%, ByVal sdata$) As Integer
Declare Function rf_write Lib "mwrf32.dll" (ByVal icdev As Long, ByVal Adr%, ByVal sdata$) As Integer
Declare Function rf_write_hex Lib "mwrf32.dll" (ByVal icdev As Long, ByVal Adr%, ByVal sdata$) As Integer
Declare Function rf_check_write Lib "mwrf32.dll" (ByVal icdev As Long, ByVal Snr As Long, ByVal mode%, ByVal Adr%, ByVal sdata$) As Integer
Declare Function rf_check_writehex Lib "mwrf32.dll" (ByVal icdev As Long, ByVal Snr As Long, ByVal mode%, ByVal Adr%, ByVal sdata$) As Integer
'
Declare Function rf_initval Lib "mwrf32.dll" (ByVal icdev As Long, ByVal Adr%, ByVal value As Long) As Integer
Declare Function rf_readval Lib "mwrf32.dll" (ByVal icdev As Long, ByVal Adr%, value As Long) As Integer
Declare Function rf_increment Lib "mwrf32.dll" (ByVal icdev As Long, ByVal Adr%, ByVal value As Long) As Integer
Declare Function rf_decrement Lib "mwrf32.dll" (ByVal icdev As Long, ByVal Adr%, ByVal value As Long) As Integer
Declare Function rf_restore Lib "mwrf32.dll" (ByVal icdev As Long, ByVal Adr%) As Integer
Declare Function rf_transfer Lib "mwrf32.dll" (ByVal icdev As Long, ByVal Adr%) As Integer
Declare Function rf_halt Lib "mwrf32.dll" (ByVal icdev As Long) As Integer

'
Declare Function rf_HL_increment Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%, ByVal secnr%, ByVal value As Long, Snr As Long, svalue As Long, ssnr As Long) As Integer
Declare Function rf_HL_decrement Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%, ByVal secnr%, ByVal value As Long, Snr As Long, svalue As Long, ssnr As Long) As Integer
Declare Function rf_HL_write Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%, ByVal Adr%, Snr As Long, ByVal sdata$) As Integer
Declare Function rf_HL_read Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%, ByVal Adr%, Snr As Long, ByVal sdata$, ssnr As Long) As Integer
Declare Function rf_HL_writehex Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%, ByVal Adr%, Snr As Long, ByVal sdata$) As Integer
Declare Function rf_HL_readhex Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%, ByVal Adr%, Snr As Long, ByVal sdata$, Rsnr As Long) As Integer
Declare Function rf_HL_initval Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%, ByVal secnr%, ByVal value As Long, Snr As Long) As Integer


'ML card function
Declare Function rf_initval_ml Lib "mwrf32.dll" (ByVal icdev As Long, ByVal value%) As Integer
Declare Function rf_readval_ml Lib "mwrf32.dll" (ByVal icdev As Long, value%) As Integer
Declare Function rf_decrement_ml Lib "mwrf32.dll" (ByVal icdev As Long, ByVal value%) As Integer
Declare Function rf_decrement_transfer Lib "mwrf32.dll" (ByVal icdev As Long, ByVal Adr%, ByVal value%) As Integer
Declare Function rf_authentication_2 Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%, ByVal keynr%, ByVal Adr%) As Integer
'device fuction
Declare Function rf_reset Lib "mwrf32.dll" (ByVal icdev As Long, ByVal msec%) As Integer
Declare Function rf_get_status Lib "mwrf32.dll" (ByVal icdev As Long, ByVal status$) As Integer
Declare Function rf_encrypt Lib "mwrf32.dll" (ByVal key As String, ByVal ptrsource As String, ByVal msglen%, ByVal ptrdest$) As Integer
Declare Function rf_decrypt Lib "mwrf32.dll" (ByVal key As String, ByVal ptrsource As String, ByVal msglen%, ByVal ptrdest$) As Integer
Declare Function lib_ver Lib "mwrf32.dll" (ByVal str_ver As String) As Integer
Declare Function rf_beep Lib "mwrf32.dll" (ByVal icdev As Long, ByVal time1 As Integer) As Integer
Declare Function rf_srd_snr Lib "mwrf32.dll" (ByVal icdev As Long, ByVal offset%, ByVal rec_buffer$) As Integer
Declare Function rf_srd_eeprom Lib "mwrf32.dll" (ByVal icdev As Long, ByVal offset%, ByVal lenth%, ByVal rec_buffer$) As Integer
Declare Function rf_swr_eeprom Lib "mwrf32.dll" (ByVal icdev As Long, ByVal offset%, ByVal lenth%, ByVal send_buffer$) As Integer
Declare Function rf_changeb3 Lib "mwrf32.dll" (ByVal Adr As Long, ByVal secer As Integer, ByRef KeyA As Byte, ByVal B0 As Integer, ByVal B1 As Integer, ByVal B2 As Integer, ByVal B3 As Integer, ByVal Bk As Integer, ByRef KeyB As Byte) As Integer
Declare Function rf_disp8 Lib "mwrf32.dll" (ByVal icdev As Long, ByVal pt_mode As Integer, ByRef digit As Byte) As Integer
Declare Function rf_gettimehex Lib "mwrf32.dll" (ByVal icdev As Long, ByVal time$) As Integer
Declare Function rf_settimehex Lib "mwrf32.dll" (ByVal icdev As Long, ByVal time$) As Integer
Declare Function rf_setbright Lib "mwrf32.dll" (ByVal icdev As Long, ByVal value%) As Integer
Declare Function rf_ctl_mode Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%) As Integer
Declare Function rf_disp_mode Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%) As Integer
Declare Function rf_comm_check Lib "mwrf32.dll" (ByVal icdev As Long, ByVal mode%) As Integer
Declare Function set_host_check Lib "mwrf32.dll" (ByVal mode%) As Integer
Declare Function set_host_485 Lib "mwrf32.dll" (ByVal mode%) As Integer


******************************************************
以下是初始化按钮的代码:

Private Sub M1_init_Click()
Snr = 0
Rsnr = 0
loadmode = 0
sector = 2
address = 9
wvalue = 1000



If icdev < 0 Then
icdev = rf_init(0, 115200) 'Com2
End If
If icdev < 0 Then
M1_label.Caption = "Call rf_init() error.Exit!"
Exit Sub
End If


akey(0) = &HFF
akey(1) = &HFF
akey(2) = &HFF
akey(3) = &HFF
akey(4) = &HFF
akey(5) = &HFF

For sector = 0 To 15
st = rf_load_key(ByVal icdev, loadmode, sector, akey(0))
If st <> 0 Then
M1_label.Caption = "Call rf_load _key() error.Exit!"
Exit Sub
End If
Next


'hexkey = "FFFFFFFFFFFF"
'st = rf_load_key_hex(ByVal icdev, loadmode, sector, ByVal hexkey)
'If st <> 0 Then
'M1_label.Caption = "Call rf_Load_key_hex() error.Exit!"
'Exit Sub

'End If

M1_label.Caption = "Initalize OK !"
End Sub

本来出错是因为上面倒数第三行的“End If”没有注释掉。

这里也是用的:
icdev = rf_init(0, 115200) 'Com2
事实上我的设备管理器里面只看到一个串口COM5(蓝牙的)
dfwxj 2011-05-11
  • 打赏
  • 举报
回复
这个是真正的USB,不是USB转串口,有VB例程,不过好象试了没用,调试不通过。
dfwxj 2011-05-11
  • 打赏
  • 举报
回复
老大,如果是要驱动的话,早就解决了,那其实就是USB转串口,驱动装好了会出现一个串口号。问题是这个是免驱的,插上去就是一个人体学输入设备。他应当提供一个“usb_init()”函数。

电话打过去,叫我“做一个通道连接”,连接后自然就有了个句柄,那我也知道该咋办了。问题是:怎么做这个“连接”?给我的帮助说明就是
“HANDLE icdev;

icdev=rf_init(0,115200);”

稍懂一点的人都知道这还是串口啊,没错!USB也是串口,是通用串行总线,厂里人也说了,后面两上参数随便打(0,0)就行了,问题是:前面的那句“HANDLE icdev”是啥意思?看来明天还要继续浪费电话费了~~~~
十豆三 2011-05-11
  • 打赏
  • 举报
回复
首先要搞清你的 IC卡读写卡器 是真正的USB,还是 USB转串口,如果后者

Declare Integer rf_init In MWRF32.Dll Integer port,Long baud && 声明。注意 MWRF32.DLL 的路径,必要是加上路径或COPY至SYSTEM32目录
lnHandle=rf_init(3,9600) && 初始化串口3,波特率为9600
If lnHandle<=0
Messagebox('初始化串口失败!',48,'信息提示')
Return
Endif

* 如果 lnHandle>0,说明初始化成功,lnHandle为接口打开此串口返回的句柄,此句柄为后面对串口读写时要用到。

* 一般 USB转串口 是需要驱动的,看你的情况是真正的USB,这个接口函数是串口,明显不对应,向厂家要USB接口,不用要VFP例程,一般都有VB例程,有VB的,VFP就可以参考用。

关于句柄的理解,你可以参考下面例子:

Local gnFileHandle,nSize,cString
gnFileHandle = Fopen("test.txt") && gnFileHandle 为 Fopen 函数打开的文件句柄,此句柄后面读写要用到。
* Seek to end of file to determine number of bytes in the file.
nSize = Fseek(gnFileHandle, 0, 2) && 移动指针到末尾
If nSize <= 0
* If file is empty, display an error message.
Wait Window "This file is empty!" Nowait
Else
* If file is not empty, store the file's contents in memory
* and display the text in the main Visual FoxPro window.
= Fseek(gnFileHandle, 0, 0) && 移动指针到开始
cString = Fread(gnFileHandle, nSize)
? cString
Endif
= Fclose(gnFileHandle) && 关闭文件
十豆三 2011-05-11
  • 打赏
  • 举报
回复
接口如果VB可以用,VFP99%就可以用。
十豆三 2011-05-11
  • 打赏
  • 举报
回复
读卡器是USB接口的,应该是 USB 转串口的,你看一下设备管理器有没有COM3及以后,如果有接口就应该可以用。
dfwxj 2011-05-11
  • 打赏
  • 举报
回复
自己写接口就免了,那就是自己做读卡器了(模块刚收到,如果做好就不用买成品了)
ACMAIN_CHM 2011-05-11
  • 打赏
  • 举报
回复
不行就自己用VB或者C写个接口,然后从VFP中调你自己写的接口以得到信息。

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧