Цитата:
Сообщение от cotseec
имхо лучше так
Код:
....
ReadData(Mess.LParam);
...
на какой именно строке возникает ошибка? тут как минимум две конвертации, да и еще неизвестно, что в процедуре ReadData
|
Ошибка возникает на Edit14.Text:=(tg);
От ком-порта в приходит набор байтов. Они сначало записываются в массив, а потом слепливаются в одну строку которая передается на WParam. В Lparam передается количество байт в буффере (количество загоняется в переменную n). WParam успешно передается в Edit и так же отрабатывается в процедуре ReadData (в процедуре по формуле каждые 4 байта считаются и уже выходит конечный результат). А вот количество(n) не желает передаваться..
Обработка
Код:
procedure TWorkThread.Execute;
var
i,n:integer;
BufRD:array[0..17] of byte;
TempCab:array[0..1] of byte; //massiv dlya command
u:Integer; //nomer cabiny
DT{dry tmp},RDT:string;
begin
u:=FData+128+64;
TempCab[0]:=(u);
TempCab[1]:= 129;
DM.Comm1.SetRTS(true);
Sleep(20);
DM.Comm1.WriteBuf(TempCab, Length(TempCab));
sleep (20);
DM.Comm1.SetRTS(false);
Sleep(50);
Sleep(50);
Sleep(50);
Sleep(50);
Sleep(50);
n:=DM.Comm1.ReadBufUsed;
DM.Comm1.ReadBuf(BufRD[0],n);
for i:=0 to n-1 do DT:=DT+IntToStr(BufRD[i]);
SendMessage(FWndThread,MY_MESSAGE,DWORD(dt),n);
end;
procedure TWorkThread.Get;
begin
end;
Код:
procedure TMnFrm.ReadData();
var
i:Integer;
ty:integer;
BufMC:array [0..17] of Integer;
DT{dry tmp},RDT:integer;
begin //Edit13 - набор байтов Edit14 - количество
ty:=StrToInt(Edit14.text);
for i:=0 to Length(Edit13.Text) do BufMC[i]:= strtoint(Edit13.Text[i]);
case ty of
0:begin
label2.Color:=clRed;
label6.Color:=clRed;
label7.Color:=clRed;
color:=clred;
Label9.Caption:='';
Label9.Caption:=' нет связи!!! ';
label2.Caption:='XXX';
label6.Caption:='XXX';
label7.Caption:='XXX';
TimerSeren.Enabled:=true;
TimerRunLabel.Enabled:=true;
end;
14:begin
label2.Color:=clYellow;
label6.Color:=clYellow;
label7.Color:=clYellow;
color:=clyellow;
Label9.Caption:='';
TimerRunLabel.Enabled:=false;
TimerSeren.Enabled:=false;
TimerDatch.Enabled:=false;
DT:=256*BufMC[0]+16*BufMC[1]+BufMC[2];
if BufMC[3]=0 then BufMC[3]:=1 else
RDT:=16 mod BufMC[3];
Label2.Hint:=(IntToStr(DT)+(',')+ FloatToStr(RDT));
Label2.Caption:=(IntToStr(DT)+(',')+ FloatToStr(RDT));
Sravn(Edit4.text, edit6.Text,Edit8.text, label2.caption,1);
end
else
begin
//ShowMessage(IntToStr(n));
end;
end;
end;
На то что передается через эдиты прошу не обращать внимания, я уже всё под ряд пытался делать..