我使用的是调用读写器提供的外部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)

解决方案 »

  1.   

    如果要完整说明和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的使用