Показать сообщение отдельно
  #20  
Старый 08.04.2012, 20:03
Аватар для Darlok
Darlok Darlok вне форума
Прохожий
 
Регистрация: 27.03.2012
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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;
На то что передается через эдиты прошу не обращать внимания, я уже всё под ряд пытался делать..
Ответить с цитированием