创新can调试器Linux版
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

326 lines
7.4 KiB

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ControlCAN;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Button1: TButton;
Button2: TButton;
GroupBox1: TGroupBox;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Button5: TButton;
GroupBox2: TGroupBox;
Label8: TLabel;
Label9: TLabel;
Button6: TButton;
ComboBox6: TComboBox;
ComboBox7: TComboBox;
Edit1: TEdit;
Edit4: TEdit;
GroupBox6: TGroupBox;
ListBox1: TListBox;
GroupBox3: TGroupBox;
Label1: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Label2: TLabel;
Edit5: TEdit;
Label10: TLabel;
Edit6: TEdit;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
ComboBox3: TComboBox;
ComboBox4: TComboBox;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ComboBox1Click(Sender: TObject);
procedure ComboBox2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure EnableUI(bEnable: BOOL);
private
{ Private declarations }
public
end;
PTListBox=^TListBox;
var
Form1: TForm1;
var
m_devtype : DWORD;
m_devind : DWORD;
m_cannum : DWORD;
m_connect : DWORD;
m_threadhandle : integer;
implementation
{$R *.dfm}
function ReceiveThread(param : Pointer): integer;
var
receivedata : array[0..49] of VCI_CAN_OBJ;
len : integer;
j : integer;
i : integer;
str : AnsiString;
tmpstr :AnsiString;
box : PTListBox;
errinfo : VCI_ERR_INFO;
begin
box:=param;
while TRUE do
begin
if m_connect=0 then
break;
Sleep(1);
len:=VCI_Receive(m_devtype,m_devind,m_cannum,@receivedata[0],50,200);
if len<=0 then
begin
continue;
end;
for i:=0 to len-1 do
begin
str:='Receive: ';
if receivedata[i].TimeFlag=0 then
tmpstr:='Time Stamp:ÎÞ '
else
tmpstr:='Time Stamp:0x'+IntToHex(receivedata[i].TimeStamp,1)+' ';
str:=str+tmpstr;
tmpstr:='ID:0x'+IntToHex(receivedata[i].ID,1)+' ';
str:=str+tmpstr;
str:=str+'Type:';
if receivedata[i].RemoteFlag=0 then
tmpstr:='Data '
else
tmpstr:='Remote ';
str:=str+tmpstr;
str:=str+'Format:';
if receivedata[i].ExternFlag=0 then
tmpstr:='Standard '
else
tmpstr:='Extended ';
str:=str+tmpstr;
box.Items.Add(str);
if receivedata[i].RemoteFlag=0 then
begin
str:='Data:';
if receivedata[i].DataLen>8 then
receivedata[i].DataLen:=8;
for j:=0 to receivedata[i].DataLen-1 do
begin
tmpstr:=IntToHex(receivedata[i].Data[j],2)+' ';
str:=str+tmpstr;
end;
box.Items.Add(str);
end;
end;
box.ItemIndex:=box.Items.Count-1;
end;
EndThread(0);
ReceiveThread:=0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
index: integer;
cannum: integer;
threadid: LongWord;
initconfig : VCI_INIT_CONFIG;
begin
index:=m_devind;
cannum:=ComboBox2.ItemIndex;
if m_connect=1 then
begin
m_connect:=0;
Button1.Caption:='Connection';
VCI_CloseDevice(m_devtype,m_devind);
EnableUI(True);
Exit;
end;
if (index>=0) and (cannum>=0) then
begin
if VCI_OpenDevice(m_devtype,index,0)<>1 then
ShowMessage('Port open failed')
else
begin
initconfig.AccCode:=StrToInt('0x'+Edit2.Text);
initconfig.AccMask:=StrToInt('0x'+Edit3.Text);
initconfig.Timing0:=StrToInt('0x'+Edit5.Text);
initconfig.Timing1:=StrToInt('0x'+Edit6.Text);
initconfig.Filter:=ComboBox3.ItemIndex;
initconfig.Mode:=ComboBox4.ItemIndex;
if VCI_InitCAN(m_devtype,m_devind,cannum,@initconfig)<>1 then
begin
Showmessage('CAN initialization failure');
Exit;
end;
m_devind:=index;
m_cannum:=cannum;
m_connect:=1;
Button1.Caption:='Disconnect';
threadid:=111;
m_threadhandle:=BeginThread(0,0,ReceiveThread,@ListBox1,0,threadid);
EnableUI(False);
end;
end
else
ShowMessage('Options can not be empty');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if m_connect=0 then
Exit;
if VCI_ResetCAN(m_devtype,m_devind,m_cannum)<>1 then
ShowMessage('Reset CAN failure')
else
begin
ListBox1.Items.Add('Reset CAN success');
Button5.Enabled := False;
end
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
m_devtype := 4;//USBCAN2 type number
m_devind := 0;
m_cannum :=0;
m_connect:= 0;
ComboBox1.ItemIndex:=1;
ComboBox2.ItemIndex:=0;
ComboBox3.ItemIndex:=0;
ComboBox4.ItemIndex:=0;
ComboBox6.ItemIndex:=0;
ComboBox7.ItemIndex:=0;
Button5.Enabled := False;
end;
procedure TForm1.Button5Click(Sender: TObject);
var
sendtype,frametype,frameformat : BYTE;
id : DWORD;
data : array[0..7] of BYTE;
str : AnsiString;
strdata : AnsiString;
senddata : VCI_CAN_OBJ;
i : integer;
begin
if m_connect=0 then
Exit;
sendtype:=0;
frametype:=ComboBox6.ItemIndex;
frameformat:=ComboBox7.ItemIndex;
id:=StrToInt('0x'+Edit1.Text);
str:=Edit4.Text;
for i:=0 to 7 do
begin
strdata:=Copy(str,3*i+1,2);
strdata:=Trim(strdata);
if Length(strdata)=0 then
break;
data[i]:=StrToInt('0x'+strdata);
end;
senddata.SendType:=sendtype;
senddata.ExternFlag:=frametype;
senddata.RemoteFlag:=frameformat;
senddata.ID:=id;
senddata.DataLen:=i;
Move(data,senddata.Data,i);
if VCI_Transmit(m_devtype,m_devind,m_cannum,@senddata,1)=1 then
ListBox1.Items.Add('Sent successfully')
else
ListBox1.Items.Add('Failed to send');
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
if m_connect=0 then
Exit;
if VCI_StartCAN(m_devtype,m_devind,m_cannum)<>1 then
ShowMessage('Start CAN failure')
else
begin
ListBox1.Items.Add('CAN successful start');
Button5.Enabled := True;
end
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if m_connect=1 then
begin
m_connect:=0;
WaitForSingleObject(m_threadhandle,2000);
m_threadhandle:=0;
VCI_CloseDevice(m_devtype,m_devind);
end
end;
procedure TForm1.ComboBox1Click(Sender: TObject);
begin
m_devtype := ComboBox1.ItemIndex + 3;
if m_devtype = 3 then
begin
m_cannum := 0;
ComboBox2.ItemIndex := 0;
end
end;
procedure TForm1.ComboBox2Click(Sender: TObject);
begin
m_cannum := ComboBox2.ItemIndex;
if m_devtype = 3 then
begin
ComboBox2.ItemIndex := 0;
m_cannum := 0;
end
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ListBox1.Clear();
end;
procedure TForm1.EnableUI(bEnable: BOOL);
begin
Label8.Enabled := bEnable;
ComboBox1.Enabled := bEnable;
Label9.Enabled := bEnable;
ComboBox2.Enabled := bEnable;
Label1.Enabled := bEnable;
Edit2.Enabled := bEnable;
Label2.Enabled := bEnable;
Edit3.Enabled := bEnable;
Label12.Enabled := bEnable;
ComboBox3.Enabled := bEnable;
Label10.Enabled := bEnable;
Edit5.Enabled := bEnable;
Label11.Enabled := bEnable;
Edit6.Enabled := bEnable;
Label13.Enabled := bEnable;
ComboBox4.Enabled := bEnable;
end;
end.