CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  非技术区

关于读写器读写IC卡程序编写

楼主noscan(11212)2006-06-01 23:07:23 在 Delphi / 非技术区 提问

我使用的是调用读写器提供的外部DLL  
  这个是读写器的使用说明:  
  我有两上问题不明白:  
  1.如这个函数  
  __int16   __stdcall   check_cardtype(unsigned   char   icaddr,char   *type)  
  参数: icaddr:表明此设备在485总线中的地址,0为通用地址  
  *type:用以载出文件中测出卡的厂家名称(即Card_Manu)  
  说明: 该函数可以自动测出卡的型号,同时给出此卡在表文件中对应的厂家代号  
  返回值:0表示不能识别卡,小于0见上述代码,大于0表示对应卡类型。  
  举例: st   =   check_cardtype(1,type)  
  unsigned   char   icaddr   的作用是什么。。。。  
  _int16   *变量     (指针)在DELPHI中用什么表示  
  2。我在后面有我写的我就是不知道怎么用这个ICADDR,每个函数都使用这个unsigned   char   icaddr,  
  不知道怎么用他。。。。  
   
   
  接触式读写器使用说明  
   
   
   
   
   
  三、 接口函数说明及使用例程  
  Add_Manufacture   添加卡型厂商代码  
  check_cardtype 自动测卡型  
  get_address 取读写器节点地址  
  mod_address 修改读写器节点地址  
  init_com 初始化串口  
  close_com 关闭串口  
  init_ic 初始化通讯接口,并检测连接  
  iauto-comm 自动通讯,智能选择波特率  
  rdstr_ver 读读写器的版本号  
  ic_beep 让蜂鸣器发生鸣响  
  pull_card 自动弹卡  
  wrstr_eep 写eeprom  
  wrstr_eep 读eeprom  
  power_on 给卡上电  
  power_off 卡下电    
  asc_hex 数据转换(具体见后面介绍)  
  hex_   asc 数据转换(具体见后面介绍)  
  asc_asc 数据转换(具体见后面介绍)  
  rdstr_xx 读卡中数据  
  wrstr_xx 写卡中数据  
  ckey_xx   比较密码(compare     key)  
  mkey_xx   修改密码(modify     key)  
  rkey_xx   读取密码(read     key)  
  rkeyc_xx   读密码错误计数(read   key   counter)  
  dll_version 读动态库的版本号  
  inc_val 增值操作(设备)  
  dec_val 减值操作(设备)  
  set_val 设值操作(设备)  
  encrypt_ic 加密数据  
  decrypt_ic 解密数据  
   
  错误代码 错误名称  
  00 操作正确  
  -01 通讯头错误  
  -02 读或写的地址错误  
  -03 通讯出错  
  -04 校验和出错  
  -05 通讯口占用  
  -06 数据长度错误  
  -07 通讯超时  
  -08 读错误  
  -09 写错误  
  -10 测卡错误  
  -11 无卡  
  -12 卡号错误  
  -13 厂商记录文件CardTable.txt不存在  
  -14 文件中记录重复  
  -15 密码错误  
  -16 错误的操作命令  
  -17 自动弹卡错误  
  -18 未标明错误  
  -19 计数值太小  
  -20 no   use  
  -21 卡密码错误计数为0    
   
  接口函数说明以及调用例程:  
  1、__int16   __stdcall   Add_Manufacture(char   *Card_Type,char   *Card_Manu,char     *Card_Idfy)  
  参数: *Card_Type:指向卡型号字符串的指针 *Card_Manu:指向卡厂商字符串的指针  
  *Card_Idfy:指向卡认证码字符串的指针  
  说明: 该函数的作用是向CardTable.txt文件中加入一个可供自动测卡时校验卡认证码的记录条。  
  返回值:0表示正常,小于0见上述代码。  
  举例:  
  st=Add_Manufacuture(“SIMENS”,”4442”,”a2131092ff8125”)  
  2、__int16   __stdcall   check_cardtype(unsigned   char   icaddr,char   *type)  
  参数: icaddr:表明此设备在485总线中的地址,0为通用地址  
  *type:用以载出文件中测出卡的厂家名称(即Card_Manu)  
  说明: 该函数可以自动测出卡的型号,同时给出此卡在表文件中对应的厂家代号  
  返回值:0表示不能识别卡,小于0见上述代码,大于0表示对应卡类型。  
  举例: st   =   check_cardtype(1,type)  
  3、__int16   __stdcall   get_address()  
  参数: 无  
  说明: 此函数是用来读取设备在总线中的地址,使用此函数时,注意总线上只有一台读写器,否则总线出错  
  返回值:0表示正常,小于0见上述代码。  
  举例: st   =   get_address()  
  4、__int16   __stdcall   mod_address(   unsigned   char   icaddr,unsigned   char   newicaddr);  
  参数: icaddr:表明此设备在485总线中的地址,0为通用地址  
  newicaddr:修改后设备的地址  
  说明: 此函数是用来修改总线中对应的地址读写器的地址  
  返回值:0表示正常,小于0见上述代码。  
  举例: st   =   mod_address(1,2)  
  5、__int16   __stdcall   init_ic(unsigned   char   icaddr,__int16   port,unsigned   long   baud)  
  参数: icaddr:表明此设备在485总线中的地址,0为通用地址  
  port:通讯口,0为com1,1为com2  
  baud:通讯波特率  
  说明: 初始化端口函数,同时按指定波特率进行通讯  
  返回值:0表示正常,小于0见上述代码。  
  举例: st   =   init_ic(icaddr,0,9600)  
  6、__int16   __stdcall   init_com(__int16   port,unsigned   long   baud)  
  参数: port:通讯口,0为com1,1为com2  
  baud:通讯波特率  
  说明: 初始化端口函数  
  返回值:0表示正常,小于0见上述代码。  
  举例: st   =   (0,9600)  
  7、__int16   __stdcall     rdstr_ver(   unsigned   char   icaddr,__int16   len, unsigned   char   *data_buffer)  
  参数: icaddr:表明此设备在485总线中的地址,0为通用地址  
  len   :读取的长度  
  data_buffer:传输版本的内容  
  说明: 读读写器的版本函数  
  返回值:0表示正常,小于0见上述代码。  
  举例: st   =   rdstr_ver(1,18,databuf)  
  8、__int16   __stdcall   ic_beep(   unsigned   char   icaddr,__int16   time)  
  参数: icaddr:表明此设备在485总线中的地址,0为通用地址  
  time:蜂鸣器鸣响时间  
  说明: 此函数是用来让蜂鸣器鸣响一定的时间  
  返回值:0表示正常,小于0见上述代码。  
  举例: st   =   ic_beep(1,200)  
  9、__int16   __stdcall   pull_card(   unsigned   char   icaddr)  
  参数: icaddr:表明此设备在485总线中的地址,0为通用地址  
  说明: 此函数是用来自动弹卡  
  返回值:0表示正常,小于0见上述代码。  
  举例: st   =   pull_card(1)  
  问题点数:20、回复次数:3Top

1 楼noscan(11212)回复于 2006-06-01 23:09:17 得分 0

如果要完整说明和DLL到lsgo.ys168.com上面下载  
  下面是我写的:一部分代码  
   
      function   init_ic(icaddr:byte;port:smallint;band:longword):smallint;stdcall;  
        far;external   'YJRDIC.DLL'   name   'init_ic';  
  function   init_com(port:smallint;band:longword):smallint;stdcall;  
        far;external   'YJRDIC.DLL'   name   'init_com';  
  function   Add_Manufacture(Card_Type:PChar;Card_Manu:PChar;Card_Idfy:PChar):smallint;stdcall;  
        far;external   'YJRDIC.DLL'   name   'Add_Manufacture';  
  function   get_address():smallint;stdcall;  
        far;external   'YJRDIC.DLL'   name   'get_address';  
  function   ic_beep(icaddr:byte;time:smallint):smallint;stdcall;  
        far;external   'YJRDIC.DLL'   name   'ic_beep';  
  function   check_cardtype(icaddr:byte;type1:pchar):smallint;stdcall;  
        far;external   'YJRDIC.DLL'   name   'check_cardtype';  
  function   rdstr_4428(icaddr:byte;offset:smallint;len:smallint;data_byffer:pchar):smallint;stdcall;  
        far;external   'YJRDIC.DLL'   name   'rdstr_4428';  
  function   wrstr_4428(icaddr:byte;offset:smallint;len:smallint;data_byffer:pchar):smallint;stdcall;  
        far;external   'YJRDIC.DLL'   name   'rdstr_4428';  
  function   rdstr_ver(icaddr:byte;len:smallint;data_byffer:pchar):smallint;stdcall;  
        far;external   'YJRDIC.DLL'   name   'rdstr_ver';  
  function   rkeyc_4428(icaddr:byte;counter:pointer):smallint;stdcall;  
        far;external   'YJRDIC.DLL'   name   'rdstr_ver';  
   
   
   
   
   
   
  implementation  
   
  {$R   *.dfm}  
  uses   ictype,   inicom;  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
  form3.ShowModal;  
  //st1:=get_address();  
  st:=Init_ic(0,form3.port1,form3.band1);  
            case   st   of  
                      00:listbox1.Items.Add   ('操作正确');  
                    -01:listbox1.Items.Add   ('通讯头错误');  
                      -02:listbox1.items.Add   ('读或写的地址错误');  
                      -03:listbox1.Items.Add   ('通讯出错');  
                      -04:listbox1.Items.add('校验和出错');  
                      -05:LISTBOX1.Items.add('通讯口占用');  
                      -06:listbox1.Items.add('数据长度错误');  
                      -07:listbox1.Items.add('通讯超时');  
                      -08:listbox1.items.add('读错误');  
                      -09:listbox1.Items.Add   ('写错误!');  
                      -10:listbox1.Items.Add   ('测卡错误');  
                      -11:listbox1.Items.Add   ('无卡');  
                      -12:listbox1.Items.Add   ('卡号错误');  
                      -13:listbox1.Items.Add   ('厂商记录文件CARDTABLE.txt不存在');  
                      -14:listbox1.Items.Add   ('文件中记录重复');  
                      -15:listbox1.Items.Add   ('密码错误');  
                      -16:listbox1.Items.Add   ('错误的操作命令');  
                      -17:listbox1.Items.Add   ('自动弹卡错误');  
                      -18:listbox1.Items.Add   ('未标明错误');  
                      -19:listbox1.Items.Add   ('计数值太小');  
                      -20:listbox1.Items.Add   ('no   use');  
                      -21:listbox1.Items.Add   ('卡密码错误计数为0');  
   
            else  
                    listbox1.Items.add('初始系统卡失败!');  
            end;  
  end;  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  begin  
  form3.ShowModal;  
  //st:=Init_com(0,9600);  
  if   form3.e   then  
  begin  
  st:=Init_com(form3.port1,form3.band1);  
            case   st   of  
                      00:listbox1.Items.Add   ('操作正确');  
                    -01:listbox1.Items.Add   ('通讯头错误');  
                      -02:listbox1.items.Add   ('读或写的地址错误');  
                      -03:listbox1.Items.Add   ('通讯出错');  
                      -04:listbox1.Items.add('校验和出错');  
                      -05:LISTBOX1.Items.add('通讯口占用');  
                      -06:listbox1.Items.add('数据长度错误');  
                      -07:listbox1.Items.add('通讯超时');  
                      -08:listbox1.items.add('读错误');  
                      -09:listbox1.Items.Add   ('写错误!');  
                      -10:listbox1.Items.Add   ('测卡错误');  
                      -11:listbox1.Items.Add   ('无卡');  
                      -12:listbox1.Items.Add   ('卡号错误');  
                      -13:listbox1.Items.Add   ('厂商记录文件CARDTABLE.txt不存在');  
                      -14:listbox1.Items.Add   ('文件中记录重复');  
                      -15:listbox1.Items.Add   ('密码错误');  
                      -16:listbox1.Items.Add   ('错误的操作命令');  
                      -17:listbox1.Items.Add   ('自动弹卡错误');  
                      -18:listbox1.Items.Add   ('未标明错误');  
                      -19:listbox1.Items.Add   ('计数值太小');  
                      -20:listbox1.Items.Add   ('no   use');  
                      -21:listbox1.Items.Add   ('卡密码错误计数为0');  
   
            else  
                    listbox1.Items.add('初始系统卡失败!');  
            end;  
  end;  
  end;  
   
  我就是明白那个ICADDR的使用Top

2 楼noscan(11212)回复于 2006-06-03 07:34:45 得分 0

帮助Top

3 楼mylovelypig(猪的魅力!......)回复于 2006-06-03 10:39:09 得分 0

考勤系统呀?  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:noscan

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo