日期:2014-05-18 浏览次数:20894 次
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, jpeg, ExtCtrls, DB, ADODB, SPComm, StdCtrls, Grids,
DBGrids, ComCtrls, ToolWin, Buttons;
type
TFormMain = class(TForm)
var
FormMain: TFormMain;
checkSumData:array[0..100] of byte;
procedure TFormMain.Button8Click(Sender: TObject);
var
checkSumValue : integer;
strCmd: string;
begin
checkSumData[0] := $A0;
checkSumData[1] := $03;
checkSumData[2] := strtoint(EditReaderID.text);
checkSumData[3] := $08;
checkSumValue := CheckSum(4);
strCmd:= 'A0 03 ' + inttoHex(checkSumData[2],2) + ' 08 ' + inttoHex(checkSumValue,2);
SendHex(strCmd);
end;
//计算校验和的值
function CheckSum(uBuffLen : Byte ): Byte;
var
uSum: Byte;
i: Byte;
begin
uSum := 0;
i := 0;
for i:=0 to (uBuffLen - 1) do
uSum := uSum + checkSumData[i];
uSum := (Not uSum) + 1;
result:= uSum;
end;
//将string转换成16进制数发送
function SendHex(S: String): integer;
var
s2:string;
buf1:array[0..50000] of char;
i:integer;
begin
s2:='';
for i:=1 to length(s) do
begin
if ((copy(s,i,1)>='0') and (copy(s,i,1)<='9'))or((copy(s,i,1)>='a') and (copy(s,i,1)<='f'))
or((copy(s,i,1)>='A') and (copy(s,i,1)<='F')) then
begin
s2:=s2+copy(s,i,1);
end;
end;
for i:=0 to (length(s2) div 2-1) do
buf1[i]:=char(strtoint('$'+copy(s2,i*2+1,2)));
FormMain.Comm.WriteCommData(buf1,(length(s2) div 2));
end;