?? unit1.~pas
字號:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
ComboBox_NetCard: TComboBox;
Label1: TLabel;
BitBtn_Open: TBitBtn;
BitBtn_Sent: TBitBtn;
Memo_Rec: TMemo;
BitBtnRecData: TBitBtn;
ComboBox_DDSFre: TComboBox;
Label2: TLabel;
Label3: TLabel;
ComboBox1_SignFre: TComboBox;
Label4: TLabel;
Label5: TLabel;
Timer1: TTimer;
Label6: TLabel;
SaveDialog1: TSaveDialog;
Edit_Save: TEdit;
Edit_Syn: TEdit;
Label7: TLabel;
procedure FormShow(Sender: TObject);
procedure BitBtn_OpenClick(Sender: TObject);
procedure BitBtn_SentClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BitBtnRecDataClick(Sender: TObject);
procedure Edit_SaveDblClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
const MAX_PACKET_LEN = 1536; //以太網(wǎng)數(shù)據(jù)包的最大長度
//成功返回0 不成功返回-1
//獲得網(wǎng)卡的數(shù)目
function GetNetCardCount():integer;stdcall;external 'WinPcapNetCardIO.dll';
//獲得指定網(wǎng)卡的ID號
//CardIndex 網(wǎng)卡序號 0->
//NameBuf[] 輸出的網(wǎng)卡名字
function GetNetCardName(CardIndex:integer;NameBuf:pchar):integer;stdcall;external 'WinPcapNetCardIO.dll';
//獲得指定網(wǎng)卡的描述
//CardIndex 網(wǎng)卡序號 0->
//DSBuf[] 輸出的網(wǎng)卡描述信息
function GetNetCardDescription(CardIndex:integer;DSBuf:pchar):integer;stdcall;external 'WinPcapNetCardIO.dll';
//打開指定網(wǎng)卡
//CardIndex 網(wǎng)卡序號 0->
//FilterStr 地址過濾格式 AA:BB:CC:DD:EE:FF 關(guān)系到數(shù)據(jù)接受和發(fā)送不能設(shè)錯
//BufSize 磁盤緩沖區(qū)的大小 單位M
function OpenNetCard(CardIndex:integer;FilterStr:pchar;BufSize:byte):integer;stdcall;external 'WinPcapNetCardIO.dll';
//關(guān)閉打開的網(wǎng)卡
function CloseNetCard():integer;stdcall;external 'WinPcapNetCardIO.dll';
//向打開的網(wǎng)卡發(fā)送數(shù)據(jù)報,可自動添加網(wǎng)絡(luò)數(shù)據(jù)頭12字節(jié)數(shù)據(jù)
//Pdata 數(shù)據(jù)指針
//Length 數(shù)據(jù)長度
//HeadFill 是否自動添加12字節(jié)的網(wǎng)絡(luò)數(shù)據(jù)包頭
function NetCardSentData(Pdata:pchar;Length:integer;HeadFill:integer):integer;stdcall;external 'WinPcapNetCardIO.dll';
//從打開的網(wǎng)卡中讀取數(shù)據(jù)
//Pdata 數(shù)據(jù)指針
//Length 數(shù)據(jù)長度
//返回值 <0出錯了 >0讀出成功或不夠 比較返回值和Length是否相等即可
function NetCardRecData(Pdata:pchar;Length:integer):integer;stdcall;external 'WinPcapNetCardIO.dll';
var
Form1: TForm1;
RecDataBuf:array[0..1000] of char;
filestream:Tfilestream;
RecPacket : longword;
implementation
{$R *.dfm}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseNetCard();
end;
procedure TForm1.FormShow(Sender: TObject);
var
NetCount:integer;
NetCardInfor:array[0..255] of char;
tempstr:string;
i:integer;
begin
NetCount := GetNetCardCount();
for i:=0 to NetCount-1 do
begin
NetCardInfor := '';
GetNetCardDescription(i,NetCardInfor);
tempstr := NetCardInfor;
copy(tempstr,1,pos(' ',tempstr));
ComboBox_NetCard.Items.Add(tempstr);
end;
if(NetCount<>0) then
form1.ComboBox_NetCard.ItemIndex:=0;
end;
procedure TForm1.BitBtn_OpenClick(Sender: TObject);
var
TargetAddr:array[0..5] of char;
begin
//目標(biāo)地址
TargetAddr[0] := #$aa;
TargetAddr[1] := #$bb;
TargetAddr[2] := #$cc;
TargetAddr[3] := #$dd;
TargetAddr[4] := #$ee;
TargetAddr[5] := #$ff;
//打開網(wǎng)卡
if(BitBtn_Open.Caption = '打開網(wǎng)卡') then
begin
if(OpenNetCard(form1.ComboBox_NetCard.ItemIndex,TargetAddr,32)= 0)then
begin
BitBtn_Open.Caption := '關(guān)閉網(wǎng)卡';
Memo_Rec.Lines.Add('網(wǎng)卡打開,目標(biāo)地址:aa:bb:cc:dd:ee:ff, 緩存32M,');
end;
end
else
begin
CloseNetCard();
BitBtn_Open.Caption := '打開網(wǎng)卡';
Memo_Rec.Lines.Add('網(wǎng)卡關(guān)閉');
end;
end;
procedure TForm1.BitBtn_SentClick(Sender: TObject);
var
ComBuf:array[0..9] of char;
Fre:double;
Bit32Fre:longword;
begin
ComBuf[0]:=#129; //控制命令的標(biāo)志字
//設(shè)定DDS仿真信號的頻率,0xB8000000 即57.5MHz
//計算方法為:(信號的中頻 -80MHz)/80MHz*2^32
Fre := strtofloat(ComboBox_DDSFre.text); //信號
Fre := (Fre-1562.5); //中頻
//算法
Bit32Fre := round((Fre-80)* high(longword)/80 );
ComBuf[1]:=chr(Bit32Fre); //最低8位
ComBuf[2]:=chr(Bit32Fre shr 8);
ComBuf[3]:=chr(Bit32Fre shr 16);
ComBuf[4]:=chr(Bit32Fre shr 24); //最高8位
//設(shè)定接收信號的頻率,0xB8000000 即57.5MHz=137.5MHz,計算方法同上
//接收信號的頻率與衛(wèi)星有關(guān),一般是137.5MHz,但考慮到今后的擴展,建議將該值可由用戶在界面上進(jìn)行設(shè)定
//對于低分辨的信號而言,射頻頻率為:1691MHz,本振頻率為1562.5MHz,經(jīng)過混頻后的中頻頻率為128.5MHz
//則需設(shè)定的值為:(128.5-80)/80*2^32 = 0x9B333333
Fre := strtofloat(ComboBox1_SignFre.text); //信號
Fre := (Fre-1562.5); //中頻
//算法
Bit32Fre := round((Fre-80)* high(longword) /80);
ComBuf[5]:=chr(Bit32Fre); //最低8位
ComBuf[6]:=chr(Bit32Fre shr 8);
ComBuf[7]:=chr(Bit32Fre shr 16);
ComBuf[8]:=chr(Bit32Fre shr 24); //最高8位
//接受門限
ComBuf[9]:=chr(strtoint(Edit_Syn.Text));
if(NetCardSentData(ComBuf,10,1)= 0) then
begin
Memo_Rec.Lines.Add('設(shè)定頻率指令發(fā)送成功');
end
else
begin
Memo_Rec.Lines.Add('設(shè)定頻率指令發(fā)送失敗');
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
form1.Timer1.Enabled:=false;
if(NetCardRecData(RecDataBuf,1000)=1000)then
begin
filestream.WriteBuffer(RecDataBuf,1000);
RecPacket := RecPacket + 1;
form1.Memo_Rec.Lines.Add('接受到數(shù)據(jù):' + inttostr(RecPacket) +'KB');
if(form1.Memo_Rec.Lines.Count>=1000) then
form1.Memo_Rec.Clear;
end;
form1.Timer1.Enabled:=(BitBtnRecData.Caption = '停止讀取');
end;
procedure TForm1.BitBtnRecDataClick(Sender: TObject);
var
FileName:string;
begin
if(BitBtnRecData.Caption = '讀取數(shù)據(jù)') then
begin
form1.Timer1.Enabled:=true;
Createdir(Edit_Save.Text);
FileName :='\衛(wèi)星數(shù)據(jù)'+Datetimetostr(Now)+'.dat';
insert('-',FileName,pos(':',FileName));
delete(FileName,pos(':',FileName),1);
insert('-',FileName,pos(':',FileName));
delete(FileName,pos(':',FileName),1);
FileName := Edit_Save.Text+ FileName;
filestream:=Tfilestream.Create(FileName,fmCreate);
BitBtnRecData.Caption := '停止讀取';
Memo_Rec.Lines.Add('建立文件'+FileName+'讀取數(shù)據(jù)');
RecPacket:=0;
//form1.Label_RecKB.Caption:='0 KB';
end
else
begin
form1.Timer1.Enabled:=false;
BitBtnRecData.Caption := '讀取數(shù)據(jù)';
Memo_Rec.Lines.Add('停止讀取數(shù)據(jù)');
end;
end;
procedure TForm1.Edit_SaveDblClick(Sender: TObject);
begin
form1.SaveDialog1.FileName:=Edit_Save.Text;
form1.SaveDialog1.Execute;
if(form1.SaveDialog1.FileName<>'')then
Edit_Save.Text := form1.SaveDialog1.FileName;
end;
end.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -