Люди помогите плз! Я самбы сделал просто хз как.
Надо сделать чтоб данные с массива передовались на тренд и таблицу.
Спасибо заранее благодарен!
Вот листинг проги:
Код:
var
DCB : TDCB;
CT: TCommTimeouts;
hPort : THandle;
i:integer;
ReadThread:TReadThread;
Value:array[1..9] of real;
tick:integer=0;
tck_reg:Integer=0;
Form1: TForm1;
NamePatch:String;
RegFileName:string;
RegFile:TFileStream;
str,st_file:string;
implementation
{$R *.dfm}
Procedure Create_RegFile;
var
n:byte;
begin
RegFileName:=DateToStr(now)+'.txt';
if FileExists(RegFileName) Then
begin
RegFile := TFileStream.Create(RegFileName,fmOpenWrite or fmShareDenyRead);
RegFile.Seek(0,soFromEnd);
end
else
begin
RegFile:=TFileStream.Create(RegFileName, fmCreate or fmOpenReadWrite or fmShareDenyNone);
st_file:=st_file+'Время;';
For n:=1 To 9 Do
begin
st_file:=st_file+'Канал'+IntToStr(n)+';';
end;
st_file:=st_file+#13;
RegFile.Write(Pchar(st_file)^, Length(st_file));
end;
end;
procedure StartRead;
begin
ReadThread:=TReadThread.Create(True);
with ReadThread do begin
Priority:=tpNormal;
FreeOnTerminate:=True;
Resume;
end;
end;
procedure clr_com;
begin
PurgeComm(hPort,PURGE_TXCLEAR);
PurgeComm(hPort,PURGE_RXCLEAR);
end;
Function InitADAM():boolean;
begin
hPort := CreateFile(PChar('COM1'),GENERIC_READ + GENERIC_WRITE,0, nil,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if hPort = INVALID_HANDLE_VALUE then
begin
exit;
end;
if not GetCommState(hPort, DCB) then ShowMessage('Ошибка чтения настроек порта') else
begin
DCB.BaudRate := CBR_38400;
DCB.ByteSize :=8;
DCB.StopBits :=ONESTOPBIT;
DCB.Parity := 0;
if not SetCommState(hPort, DCB) then ShowMessage('Ошибка записи настроек порта');
CT.ReadTotalTimeoutConstant:=50;
CT.ReadIntervalTimeout :=25;
CT.ReadTotalTimeoutMultiplier :=0;
CT.WriteTotalTimeoutMultiplier := 0;
CT.WriteTotalTimeoutConstant := 0;
If Not SetCommTimeouts(hPort, CT) Then ShowMessage('Ошибка конфигурации таймаутов !!!');
if not SetupComm(hPort, 1024, 1024) then ShowMessage('Ошибка записи настроек буферов порта');
if PurgeComm(hPort, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR) then ;
Result:=True;
end;
end;
Function ReadValue(Module:byte):string;
var
ByteWritten,ByteReaded:dword;
ReadByte,ReadByte1:array [0..255] of char;
begin
str:='#0'+inttostr(Module)+#13;
clr_com;
WriteFile(hPort,pchar(Str)^,Length(Str),ByteWritten,Nil);
ReadFile(hport,ReadByte,SizeOf(ReadByte),ByteReaded,Nil);
sleep(50);
Result:=ReadByte;
end;
Procedure TReadThread.Execute;
var
respone:string;
num,n,m:byte;
begin
For num:=1 To 2 Do
begin
respone:=ReadValue(num);
sleep(10);
If num=1 Then
begin
delete(Respone,1,1);
n:=1;
m:=1;
While n<>57 Do
begin
Value[m]:=StrToFloat(copy(Respone,n,6));
inc(n,7);
inc(m,1);
end;
end;
If num=2 Then
begin
delete(Respone,1,1);
Value[9]:=StrToFloat(copy(Respone,1,6));
end;
end;
For i:=1 To 9 Do
begin
Form1.StringGrid1.Cells[i-1,0]:='CH'+IntToStr(i);
Form1.StringGrid1.Cells[i-1,1]:=FloatToStr(value[i]);
end;
end;
{+02.409+03.221+03.102+02.988+02.879+02.774+02.673+02.576 >данные передоваемые через компорт из adam-4019 (value[1..8])
{>+19.531}>данные передоваемые через компорт из adam-4011(value[9])}
Procedure WriteValue;
var
n:byte;
begin
st_file:='';
st_file:=st_file+TimeToStr(now)+';';
For n:=1 To 9 Do
begin
st_file:=st_file+FloatToStr(value[n])+';';
end;
st_file:=st_file+#13;
RegFile.Write(Pchar(st_file)^, Length(st_file));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
InitADAM;
NamePatch:=ExtractFilePath(Application.ExeName);
Create_RegFile;
Timer1.Enabled:=True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
StartRead;
inc(tick,1);
Label1.Caption:='Cicle='+IntToStr(tick);
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
WriteValue;
inc(tck_reg,1);
Label2.Caption:='Регистрация:'+IntToStr(tck_reg);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Timer1.Enabled:=False;
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Timer2.Interval:=StrToInt(ComboBox1.Text);
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Timer2.Interval:=StrToInt(ComboBox1.Text);
Timer2.Enabled:=True;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
Timer2.Enabled:=False;
end;
end.
Помогите с прогой плз ЛЮЮЮДДДИИИ