一个写卡的问题。读卡原函数为:int ReadCard(BYTE com,char * data,char * err);
参数:
com: 串口号,如:com=0表示串口一;com=1表示串口二;
data: 读出的数据(字符串);
err: 错误信息(字符串);
返回: 1: 成功 2: 失败 其中data的格式如下。
写入 / 读出的数据格式说明如下 (共125位):起始位 结束位 字段说明
0 1 客户卡类型, 固定值“00”
2 7 房间号 000000 – 999999
不足6位时相左对齐,其余用空格补齐。
例如:
房间号“101”
数据格式:“101 ”
8 8 子房间号,可忽略
9 9 房间卡顺序号 1 – 8
新卡为”1”;
复制卡从顺序号2 –8 ,最多可复制7张卡.
10 21 房卡开始时间
写卡 200206131015 为2002年6月13日10时15分
读卡 200206131015 为2002年6月13日10时15分
建议使用当前时间作为新卡的开始时间
*复制卡的开始时间必须是原始卡的开始时间
22 33 房卡结束时间
写卡 200206131015 为2002年6月13日10时15分
读卡 200206131015 为2002年6月13日10时15分
34 35 开锁延时,一般为5,其格式为 “5 ”
36 56 宾客姓名,比如"李文峰"、"迈克.乔丹"、"Kasanbulanc"等,可忽略
57 76 身份证号/信用卡号,比如"430105600818345"、"430105196008183458"、"123Com名字09MYi"等,可忽略
77 85 公司代码,比如"12345678"、"135"、"3Com公司"等,可忽略
86 86 帐务类型:1表示餐帐、2表示房帐、3表示其他帐,其余的值自定义,可忽略
87 99 帐号 (含识别码) ,比如"1234567890Bn"、"帐号98abC12",可忽略
100 110 可用金额,比如"4567.8",可忽略
111 125 扩展设施标志 ,可忽略
问题:读取时不管我怎么定义data,读出来都为空值。请帮忙看下到底应该怎么定义DATA,怎么读取DATA的内容。谢谢。分数不是问题
参数:
com: 串口号,如:com=0表示串口一;com=1表示串口二;
data: 读出的数据(字符串);
err: 错误信息(字符串);
返回: 1: 成功 2: 失败 其中data的格式如下。
写入 / 读出的数据格式说明如下 (共125位):起始位 结束位 字段说明
0 1 客户卡类型, 固定值“00”
2 7 房间号 000000 – 999999
不足6位时相左对齐,其余用空格补齐。
例如:
房间号“101”
数据格式:“101 ”
8 8 子房间号,可忽略
9 9 房间卡顺序号 1 – 8
新卡为”1”;
复制卡从顺序号2 –8 ,最多可复制7张卡.
10 21 房卡开始时间
写卡 200206131015 为2002年6月13日10时15分
读卡 200206131015 为2002年6月13日10时15分
建议使用当前时间作为新卡的开始时间
*复制卡的开始时间必须是原始卡的开始时间
22 33 房卡结束时间
写卡 200206131015 为2002年6月13日10时15分
读卡 200206131015 为2002年6月13日10时15分
34 35 开锁延时,一般为5,其格式为 “5 ”
36 56 宾客姓名,比如"李文峰"、"迈克.乔丹"、"Kasanbulanc"等,可忽略
57 76 身份证号/信用卡号,比如"430105600818345"、"430105196008183458"、"123Com名字09MYi"等,可忽略
77 85 公司代码,比如"12345678"、"135"、"3Com公司"等,可忽略
86 86 帐务类型:1表示餐帐、2表示房帐、3表示其他帐,其余的值自定义,可忽略
87 99 帐号 (含识别码) ,比如"1234567890Bn"、"帐号98abC12",可忽略
100 110 可用金额,比如"4567.8",可忽略
111 125 扩展设施标志 ,可忽略
问题:读取时不管我怎么定义data,读出来都为空值。请帮忙看下到底应该怎么定义DATA,怎么读取DATA的内容。谢谢。分数不是问题
i:integer;
InBufer:array[0..125] of Char;
ErrCode:array[0..254] of Char;begin
i := ReadCard(0,InBufer,ErrCode);
if i = 1 then
begin
showmessage(StrPas(@InBufer));
end;
end;
Function ReadCard(com:byte;var data:TICData;Var err:TICError):integer ; 这个试试,其中后两个参数是变量参数,TICData和 TICError通过Type来定义,具体如下:
type
TICData = array[0..125] of Char ;
TICError= array[0..254] of Char ;
mStime,mETime,mRmno,mName:String;
Ret:Byte;
InBufer:array[0..125] of Char;
ErrCode:array[0..254] of Char;
i:Integer;
data:string;
begin
mRmno:=Edit1.Text;
mName:=Edit3.Text;
dtpkTime.Date:=dtpkDate.Date;
DateTimePicker2.Date:=DateTimePicker1.Date;
mStime:=FormatDateTime('yyyymmddhhnn',DateTimePicker2.Datetime); mETime:=FormatDateTime('yyyymmddhhnn',dtpkTime.DateTime);
data:='00'+Copy(mRmno+' ',0,6)+
' '+'1'+
mSTime+mETime+
'5 '+
copy(mName+' '+
' '+
' ',0,21)+'3209111982';
data:=copy(data,1,126); for i:=0 to Length(data)-1 do
InBufer[i]:=data[i+1]; case WriteCard(0,InBufer,ErrCode,0) of
1:
begin
ShowMessage('写入成功!');
Edit2.Text:=Data;
showmessage(String(InBufer));
end;
else
begin ShowMessage('失败');
end;
end;
end;
for i:=0 to Length(data)-1 do
InBufer[i]:=data[i+1];
反过程var
i:integer;
data:string;
InBufer:array[0..125] of Char;
ErrCode:array[0..254] of Char;begin
i := ReadCard(0,InBufer,ErrCode);
if i = 1 then
begin
for i:=0 to 125 do
data[i+1]:=InBufer[i];
showmessage(data);
end;
end;这样试试看
但是要是自己想开发的话,就有点难呀???????
是门锁。DLL是他们封装的 不过这家锁厂由于比较老 现在已经联系不上了
留存下来的文档都没有,就2个函数说明