📄 main.~pas
字号:
EarseCard := GetEarsecard(cardK_num);
Re_Earsecard_bak := GetRe_Earsecard(cardk_num);
sendtype := 3;
ComPort.Write(Earsecard,16);
ResetEvent(hevent);
if WaitForSingleObject(hevent,1000) = WAIT_TIMEOUT then
begin
memo1.Lines.Add('接收擦卡超时,重新发送'+inttostr(cardK_num));
Re_Earsecard := Re_Earsecard_bak;
ComPort.Write(Earsecard,16);
ResetEvent(hevent);
if WaitForSingleObject(hevent,1000) = WAIT_TIMEOUT then
begin
memo1.Lines.Add('接收擦卡超时,重新发送'+inttostr(cardK_num));
ComPort.Write(Earsecard,16);
end;
end;
end
else inc(cardy_num,1);
if cardk_num > 2048 then Break;
end else inc(sendID,1);
end;
wavFile.Free;
memo1.Lines.Add('发送语音文件成功!');
end;
procedure TForm1.ComPortAfterClose(Sender: TObject);
begin
if sbtn_open <> nil then
sbtn_open.Caption := '打开串口';
end;
procedure TForm1.ComPortAfterOpen(Sender: TObject);
begin
sbtn_open.Caption := '关闭串口';
end;
function TForm1.GetDatasend(pMlh: byte; pdata : TparaArray): Tdatasend;
var sDataSend : Tdatasend;
begin
Fillchar(sDataSend,16,0);
with sdatasend do
begin
Sendpc := $78;
Recpc := $05;
mlh := pMlh;
databuff := pdata;
Rec := 0-(Recpc + Sendpc + mlh+databuff[0]+databuff[1]+databuff[2]+databuff[3]
+databuff[4]+databuff[5]+databuff[6]+databuff[7]);
end;
Result := sDataSend;
end;
function TForm1.GetWritecard(pcard_k: smallint; pcard_y: byte): TWriteCard;
var sWritecard : TWriteCard;
begin
Fillchar(sWritecard,16,0);
with sWritecard do
begin
Sendpc := $78;
Recpc := $05;
mlh := $10;
card_k := pcard_k;
card_y := pcard_y;
Rec := 0-(Recpc + Sendpc + mlh+ HiByte(card_k)+byte(card_k)+card_y);
end;
Result := sWritecard;
end;
function TForm1.GetReadcard(pcard_k: smallint; pcard_y: byte): TReadCard;
var sReadcard : TReadCard;
begin
Fillchar(sReadcard,16,0);
with sReadcard do
begin
Sendpc := $78;
Recpc := $05;
mlh := $11;
card_k := pcard_k;
card_y := pcard_y;
Rec := 0-(Recpc + Sendpc + mlh+ HiByte(card_k)+byte(card_k)+card_y);
end;
Result := sReadcard;
end;
function TForm1.GetEarsecard(pcard_k: smallint): TEarseCard;
var sEarsecard : TEarseCard;
begin
Fillchar(sEarsecard,16,0);
with sEarsecard do
begin
Sendpc := $78;
Recpc := $05;
mlh := $12;
card_k := pcard_k;
Rec := 0-(Recpc + Sendpc + mlh+ HiByte(card_k)+byte(card_k));
end;
Result := sEarsecard;
end;
function TForm1.Getstopsound: TStopSound;
var sStopSound : TStopSound;
begin
Fillchar(sStopSound,16,0);
with sStopSound do
begin
Sendpc := $78;
Recpc := $05;
mlh := $13;
Rec := 0-(Recpc + Sendpc + mlh);
end;
Result := sStopSound;
end;
function TForm1.Getopensound: TopenSound;
var sOpenSound : TopenSound;
begin
Fillchar(sOpenSound,16,0);
with sOpenSound do
begin
Sendpc := $78;
Recpc := $05;
mlh := $14;
Rec := 0-(Recpc + Sendpc + mlh);
end;
Result := sOpenSound;
end;
procedure TForm1.sbtn_sendClick(Sender: TObject);
var pThread : Tcomsend;
begin
pThread := Tcomsend.Create(False);
sbtn_send.Enabled := False;
end;
{procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var pRe_stopsound : TRe_StopSound;
begin
// if count >= 16 then
// begin
case sendtype of
0 : begin comport.Read(DataRec,16);
if CompareDataRec(DataRec,DataRec_bak) then
begin
// Memo1.Lines.Add('发送数据成功');
SetEvent(hevent);
end else
begin
// ComPort.Write(datasend,16);
end;
end;
1 : begin comport.Read(Re_writecard,16);
if CompareRe_writecard(Re_writeCard,Re_writeCard_bak) then
begin
// Memo1.Lines.Add('写卡成功 第'+inttostr(WriteCard.card_k)+'块'+inttostr(Writecard.card_y)+'页');
SetEvent(hevent);
end;// else
//comport.Write(writecard,16);
end;
2 : begin comport.Read(Re_Readcard,16);
if CompareRe_ReadCard(Re_ReadCard,Re_ReadCard_Bak)then
begin
SetEvent(hevent);
end //else
//comport.Write(Readcard,16);
end;
3 : begin comport.Read(Re_EarseCard,16);
if compareRe_Earsecard(Re_Earsecard,Re_Earsecard_bak) then
begin
SetEvent(hevent);
Memo1.Lines.Add('擦卡成功第'+inttostr(Earsecard.card_k)+'块');
end //else
// comport.Write(Earsecard,16);
end;
4 : begin comport.Read(Re_stopsound,16);
if CompareRe_stopsound(Re_stopsound,Re_stopsound_Bak) then
begin
setEvent(hevent);
Memo1.Lines.Add('停止放音!');
end else
begin
// comport.Write(stopsound,16);
end;
end;
5 : begin comport.Read(Re_opensound,16);
if CompareRe_opensound(Re_opensound,Re_opensound_Bak) then
begin
SetEvent(hevent);
Memo1.Lines.Add('打开放音!');
end //else
//comport.Write(opnesound,16);
end;
end;
// end else Memo1.Lines.add('数据长度小于16,数据不完整');
end; }
function TForm1.GetdataRec(pMlh: byte; pdata: TparaArray): TdataRec;
var sDataRec : TdataRec;
begin
Fillchar(sDataRec,16,0);
with sDataRec do
begin
Recpc := $05;
mlh := pMlh;
databuff := pdata;
Rec := 0-(Recpc + mlh+databuff[0]+databuff[1]+databuff[2]+databuff[3]
+databuff[4]+databuff[5]+databuff[6]+databuff[7]);
end;
Result := sDataRec;
end;
function TForm1.GetRe_Earsecard(pcard_k: smallint): TRe_EarseCard;
var sRe_Earsecard : TRe_EarseCard;
begin
Fillchar(sRe_Earsecard,16,0);
with sRe_Earsecard do
begin
Recpc := $05;
mlh := $12;
card_k := pcard_k;
Rec := 0-(Recpc + mlh+ HiByte(card_k)+byte(card_k));
end;
Result := sRe_Earsecard;
end;
function TForm1.GetRe_opensound: TRe_openSound;
var sRe_OpenSound : TRe_openSound;
begin
Fillchar(sRe_OpenSound,16,0);
with sRe_OpenSound do
begin
Recpc := $05;
mlh := $14;
Rec := 0-(Recpc + mlh);
end;
Result := sRe_OpenSound;
end;
function TForm1.GetRe_Readcard(pcard_k: smallint;
pcard_y: byte): TRe_ReadCard;
var sRe_Readcard : TRe_ReadCard;
begin
Fillchar(sRe_Readcard,16,0);
with sRe_Readcard do
begin
Recpc := $05;
mlh := $11;
card_k := pcard_k;
card_y := pcard_y;
Rec := 0-(Recpc + mlh+ HiByte(card_k)+byte(card_k)+card_y);
end;
Result := sRe_Readcard;
end;
function TForm1.GetRe_stopsound: TRe_StopSound;
var sRe_StopSound : TRe_StopSound;
begin
Fillchar(sRe_StopSound,16,0);
with sRe_StopSound do
begin
Recpc := $05;
mlh := $13;
Rec := 0-(Recpc + mlh);
end;
Result := sRe_StopSound;
end;
function TForm1.GetRe_Writecard(pcard_k: smallint;
pcard_y: byte): TRe_WriteCard;
var sRe_Writecard : TRe_WriteCard;
begin
Fillchar(sRe_Writecard,16,0);
with sRe_Writecard do
begin
Recpc := $05;
mlh := $10;
card_k := pcard_k;
card_y := pcard_y;
Rec := 0-(Recpc + mlh+ HiByte(card_k)+byte(card_k)+card_y);
end;
Result := sRe_Writecard;
end;
function TForm1.CompareDataRec(DataRec1, DataRec2: TdataRec): Boolean;
begin
if (DataRec1.Recpc = DataRec2.Recpc) and (DataRec1.mlh = DataRec2.mlh) and
(DataRec1.databuff[0] = DataRec2.databuff[0]) and (DataRec1.databuff[1] = DataRec2.databuff[1]) and
(DataRec1.databuff[2] = DataRec2.databuff[2]) and (DataRec1.databuff[3] = DataRec2.databuff[3])and
(DataRec1.databuff[4] = DataRec2.databuff[4]) and (DataRec1.databuff[5] = DataRec2.databuff[5])and
(DataRec1.databuff[6] = DataRec2.databuff[6]) and (DataRec1.databuff[7] = DataRec2.databuff[7])and
(DataRec1.Rec = DataRec2.Rec) then Result := True else Result := False;
end;
function TForm1.CompareRe_writecard(DataRec1,
DataRec2: TRe_WriteCard): Boolean;
begin
if (DataRec1.Recpc = DataRec2.Recpc) and (DataRec1.mlh = DataRec2.mlh) and
(DataRec1.card_k = DataRec2.card_k) and (DataRec1.card_y = DataRec2.card_y) and
(DataRec1.Rec = DataRec2.Rec) then Result := True else Result := False;
end;
function TForm1.compareRe_Earsecard(DataRec1,
DataRec2: TRe_EarseCard): Boolean;
begin
if (DataRec1.Recpc = DataRec2.Recpc) and (DataRec1.mlh = DataRec2.mlh) and
(DataRec1.card_k = DataRec2.card_k) and (DataRec1.Rec = DataRec2.Rec) then
Result := True else Result := False;
end;
function TForm1.CompareRe_opensound(DataRec1,
DataRec2: TRe_openSound): Boolean;
begin
if (DataRec1.Recpc = DataRec2.Recpc) and (DataRec1.mlh = DataRec2.mlh) and
(DataRec1.Rec = DataRec2.Rec) then Result := True else Result := False;
end;
function TForm1.CompareRe_ReadCard(DataRec1,
DataRec2: TRe_ReadCard): Boolean;
begin
if (DataRec1.Recpc = DataRec2.Recpc) and (DataRec1.mlh = DataRec2.mlh) and
(DataRec1.card_k = DataRec2.card_k) and (DataRec1.card_y = DataRec2.card_y) and
(DataRec1.Rec = DataRec2.Rec) then Result := True else Result := False;
end;
function TForm1.CompareRe_stopsound(DataRec1,
DataRec2: TRe_StopSound): Boolean;
begin
if (DataRec1.Recpc = DataRec2.Recpc) and (DataRec1.mlh = DataRec2.mlh) and
(DataRec1.Rec = DataRec2.Rec) then Result := True else Result := False;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Opnesound := Getopensound;
sendtype := 5;
Re_opensound_Bak := GetRe_opensound;
ComPort.Write(opnesound,16);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
hevent := CreateEvent(nil,True,False,nil);
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
Memo1.Lines.Add('停止发送');
Exit;
end;
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var pRe_stopsound : TRe_StopSound;
begin
if count = 16 then
begin
case sendtype of
{ 0 : begin
Fillchar(DataRec,16,0);
comport.Read(DataRec,16);
// memo1.Lines.Add(inttostr(Count));
if CompareDataRec(DataRec,DataRec_bak) then
begin
// Memo1.Lines.Add('发送数据成功');
SetEvent(hevent);
end else
begin
// ComPort.Write(datasend,16);
end;
end; }
1 : begin comport.Read(Re_writecard,16);
// memo1.Lines.Add(inttostr(Count));
if CompareRe_writecard(Re_writeCard,Re_writeCard_bak) then
begin
// Memo1.Lines.Add('写卡成功 第'+inttostr(WriteCard.card_k)+'块'+inttostr(Writecard.card_y)+'页');
SetEvent(hevent);
end;// else
//comport.Write(writecard,16);
end;
2 : begin comport.Read(Re_Readcard,16);
// memo1.Lines.Add(inttostr(Count));
if CompareRe_ReadCard(Re_ReadCard,Re_ReadCard_Bak)then
begin
SetEvent(hevent);
end //else
//comport.Write(Readcard,16);
end;
3 : begin comport.Read(Re_EarseCard,16);
// memo1.Lines.Add(inttostr(Count));
if (Re_Earsecard_bak.card_k = 256) or (Re_Earsecard_bak.card_k = 255) then
begin
// Re_Earsecard := Re_Earsecard_bak;
end;
if compareRe_Earsecard(Re_Earsecard,Re_Earsecard_bak) then
begin
SetEvent(hevent);
Memo1.Lines.Add('擦卡成功第'+inttostr(Earsecard.card_k)+'块');
end //else
// comport.Write(Earsecard,16);
end;
4 : begin comport.Read(Re_stopsound,16);
if CompareRe_stopsound(Re_stopsound,Re_stopsound_Bak) then
begin
setEvent(hevent);
Memo1.Lines.Add('停止放音!');
end else
begin
// comport.Write(stopsound,16);
end;
end;
5 : begin comport.Read(Re_opensound,16);
// memo1.Lines.Add(inttostr(Count));
if CompareRe_opensound(Re_opensound,Re_opensound_Bak) then
begin
SetEvent(hevent);
Memo1.Lines.Add('打开放音!');
end //else
//comport.Write(opnesound,16);
end;
end;
end;
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
WriteCard := GetWritecard(255,1);
sendtype := 1;
Re_writeCard_bak := GetRe_Writecard(255,1);
ComPort.Write(writecard,16);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -