Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.11.2012, 10:11
DMBS DMBS вне форума
Прохожий
 
Регистрация: 19.11.2012
Сообщения: 1
Репутация: 10
По умолчанию Расшифровке кода (Delphi). Cерверное приложение

Есть серверное приложение на DELPHI,имеются терминалы(клиенты)к которым подключаются всевозможные датчики .На сервер от терминала приходит посылка вида 08:31:35 812 from Terminal:45 00 50 13 00 22 31 07 DC 0B 16 08 1F 04 00 00 00 00 E2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00.....Где (22) код посылки,07-04 время, E2 значение с датчика.Пришедшую посылку пишем в базу данных.
Код:
procedure TfMain.ssForTerminalsClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  Text : string;
  wI:Word;
  cRSchar: char;
  st:string;
  ___st:string;
  Buf: array[0..1000] of byte;
  Buf1: array[0..20] of byte;
  adr: integer;
  i, j :integer;
  code: integer;
  t:integer;
  year,month,day,hour,minute,second:integer;

  myDate : TDateTime;
  myYear, myMonth, myDay : Word;
  myHour, myMin, mySec, myMilli : Word;


  ass : array[0..12] of byte;
  str, zss : string;

begin
// Принимает от клиента сообщение
   Text := socket.ReceiveText;
   if Length(Text) <> 12 then begin
     st := '';
     for wI:=0 to  Length(Text)-1 do
     begin
       //cRSchar:=Form1.ApdComPort1.GetChar;
       cRSchar:=Text[wI+1];
       Buf[wI]:=ord(cRSchar);
       st := st + inttohex((ord(cRSchar)),2) + ' ';
     end;

     DateTimeToString(___st,'hh:nn:ss:zzz',time);
     fMAin.lbLog.Items.Add(___st + 'From Terminal: '+ st);

     if (fMAin.lbLog.Items.Count > 1000) then  fMAin.lbLog.Items.Delete(0);

     //len:=Buf[0]+Buf[1]*256;
     adr:=Buf[3]+Buf[4]*256;
     code:=Buf[5];
if (code = 1) then exit;

     for i:=0 to MAX_TERMINALS do
     begin
       if terminals[i].adr = adr then
       begin
         if  terminals[i].socket <> socket then
         begin
           terminals[i].socket := socket;
           terminals[i].active := true;
           terminals[i].adr := adr;
           terminals[i].setDate := false;
           //fMain.lbTerminals.Items.Delete(i);
           fMain.lbTerminals.Items[i]:= inttostr(i+1)+'. '+terminals[i].name+' , ' + inttostr(terminals[i].adr) + '        Подключен.';
           //fMain.lbTerminals.Items.Add(inttostr(i+1)+'. '+terminals[i].name+' , ' + inttostr(terminals[i].adr) + '         Подключен.');
         end;
       end;
     end;
     t:=0;
     if not terminals[t].setDate then
     begin
       Buf1[0]:=14;
       Buf1[1]:=0;
       Buf1[2]:=0;
       Buf1[3]:=0;
       Buf1[4]:=0;
       Buf1[5]:=$1B;
       Buf1[6]:=0;
       myDate:=Now;
       DecodeDateTime(myDate, myYear, myMonth, myDay, myHour, myMin, mySec, myMilli);
       Buf1[7]:=myYear mod 256;
       Buf1[8]:=myYear div 256;
       Buf1[9]:=myMonth;
       Buf1[10]:=myDay;
       Buf1[11]:=myHour;
       Buf1[12]:=myMin;
       Buf1[13]:=mySec;
       terminals[t].socket.SendBuf(Buf1,14);
       terminals[t].setDate:=True;
     end;

//Особенно интересует код ниже
if code = $22 then
     begin
       //Bu[6]
       t:=0;
       terminals[t].countFail:=0;
       if Buf[6] = $31 then
       begin
         year:=Buf[7]*256 + Buf[8];
         month:=Buf[9];
         day:=Buf[10];
         hour:=Buf[11];
         minute:=Buf[12];
         second:=Buf[13];
         if terminals[t].active = true then Buf[60]:= 1;
         for i:=0 to 23 do
           terminals[t].values[i] := Buf[14+i*2] + Buf[15+i*2]*256;
           saveToDBDate(t,year,month,day,hour,minute,second);
         end;
       end
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025