📄 datacomm232.pas
字号:
unit DataComm232;
interface
uses
SysUtils, Classes, ComDrv32,Windows;
type
TDllDataModule = class(TDataModule)
Comm232: TCommPortDriver;
procedure Comm232ReceiveData(Sender: TObject; DataPtr: Pointer;
DataSize: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
DllDataModule: TDllDataModule;
CardNo : Integer = 0;
CardType : byte = $00;
bb : boolean = false;
procedure Send_Card_Comm(var Card_No : integer;var Card_Type : byte;var bl : boolean);stdcall;
implementation
uses Ucomm, DataType, DKQ, packet_unit, CommandWord, CRCMAC_unit;
{$R *.dfm}
procedure TDllDataModule.Comm232ReceiveData(Sender: TObject;
DataPtr: Pointer; DataSize: Integer);
var
k,kk,m,mm : Word;
jh : byte;
begin
try
ZeroMemory(@recbuf[1],MAXBUF);
Move(DataPtr^,(@recbuf[1])^,DataSize);
CopyMemory(@CommonBuf[1],@recbuf[1],DataSize);
case CommonBuf[PACKET_HEAD_LEN+2] of
SEND_CARD: begin
if(CommonBuf[PACKET_HEAD_LEN+3] = $00) then
begin
//如果没有卡片插入时发送状态
CopyMemory(@kk,@CommonBuf[PACKET_HEAD_LEN-1],2);
mm := CRC16(@CommonBuf[1],PACKET_HEAD_LEN-2);
CopyMemory(@k,@CommonBuf[PACKET_HEAD_LEN+5],2);
m := CRC16(@CommonBuf[PACKET_HEAD_LEN+1],4);
if((k = m) and (kk = mm)) then
begin
ZeroMemory(@CommonBuf[1],MAXBUF);
end;
end
else
begin
if((CommonBuf[PACKET_HEAD_LEN+3] = $11) or (CommonBuf[PACKET_HEAD_LEN+3] = $22) or (CommonBuf[PACKET_HEAD_LEN+3] = $33)) then
begin
CopyMemory(@kk,@CommonBuf[PACKET_HEAD_LEN-1],2);
mm := CRC16(@CommonBuf[1],PACKET_HEAD_LEN-2);
CopyMemory(@k,@CommonBuf[PACKET_HEAD_LEN+8],2);
m := CRC16(@CommonBuf[PACKET_HEAD_LEN+1],7);
if((k = m) and (kk = mm)) then
begin
CopyMemory(@CardNo,@CommonBuf[PACKET_HEAD_LEN+4],4);
CardType := CommonBuf[PACKET_HEAD_LEN+3];
jh := CommonBuf[PACKET_HEAD_LEN+1];
TempData := RecvCard(jh);
Comm232.SendData(TempData.RSMP,TempData.RSML);
//在发送数据前,清空接收缓冲区
ZeroMemory(@CommonBuf[1],MAXBUF);
end;
end;
end;
end;
RECV_CARD : begin
CopyMemory(@kk,@CommonBuf[PACKET_HEAD_LEN-1],2);
mm := CRC16(@CommonBuf[1],PACKET_HEAD_LEN-2);
CopyMemory(@k,@CommonBuf[PACKET_HEAD_LEN+3],2);
m := CRC16(@CommonBuf[PACKET_HEAD_LEN+1],2);
if((k = m) and (kk = mm)) then
begin
bb := true;
ZeroMemory(@CommonBuf[1],MAXBUF);
end;
end;
end;
except
end;
end;
procedure Send_Card_Comm(var Card_No : integer;var Card_Type : byte;var bl : boolean);stdcall;
begin
Card_No := CardNo;
Card_Type := CardType;
bl := bb;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -