Forum > Componenti Aggiuntivi

Synapse e Domotica

(1/8) > >>

Diego1981:
Ciao A tutti
è da un bel po' che non entro nel forum ma vedo che è sempre molto attivo...
volevo avere il parere di qualcunche usa synapse.
visto che il mio vecchio impianto è saltato con un bel fulmine ho ammodernato le schede di domotica e ora è tutto over IP
ho probelmi con una scheda che utilizza le "stringhe" esadecimali ma il problema è che non riesco a ricevere tutti i byte che dovrei, ho utilizzato anche altri software e con quelli ricevo tutto correttamente
come libreria usa synapse e il codice che uso è molto semplice
PER INVIARE (E FIN QUI TUTTO OK)

procedure.........invo
var
  HexString,StrChr:String;
  Str,i:Integer;
begin
HexString:='5E0123C001000000000000000000000000000000000000000000000000000000000000000000000000000000FF';
    StrChr:='';
    Str:=0;
    i:=1;
    while i<=Length(HexString)do
      begin
        Str:=Hex2Dec(HexString+HexString[i+1]);
        StrChr:=StrChr+Chr(Str);
        i:=i+2;
      end;
    ArrSckt[ScktIndx].Sckt.SendString(StrChr); 
end;

QUESTA è LA "STRINGA CHE RICEVO"
5E0123C011000000000000000000000000000000000000000000000000000000000000000000000000000000FF

con questa procedura (semplificata)

procedure....ricezione
var
  Str,Nome,Val,StrElab:AnsiString;
  i,n,Posiz:Integer;
begin

Str:=ArrSckt.Sckt.RecvPacket(ArrSckt.Timeout);

StrElab:=str;
for n:=1 to Length(Str) do //converto la stringa ricevuta da char a hex
StrElab:=StrElab+IntToHex((Ord(Str[n])),2);
end;

MA LA STRINGA CHE DOVREI RICEVERE è QUESTA
5E0123C011000000000000000000000000000000000000000000000000000000000000000000000000000000FF00000000000000000101010001010101

in sostanza dopo FF ho lo stato degli input digitali ma da li in poi non ho più nulla

pensavo al timeout troppo corto ma anche portandolo ad un secondo le cose non cambiano
oppure al fatto che le variabili di tipo stringa non possano contenere tutto quello che devo ricevere ma mi sembra molto strano
altra possibilità è che il recvpacket (Str:=ArrSckt.Sckt.RecvPacket(ArrSckt.Timeout)) non sia la scelta migliore
grazie in anticipo a tutti

xinyiman:
Se posti un sorgente da compilare e lanciare proviamo a darti una mano nel debug del problema.

Diego1981:
Ciao Xiny
dammi un'idea di come fare per favore perchè il sorgente completo ha i collegamenti al DB e credo che senza le schede a cui connetterti sia difficile avere un'idea di quello che succede (non che non voglia mandarlo)
Ho cercato di estrapolare il codice inerente alla comunicazione TCP per chiedervi supporto, forse non sono siuscito a farvi capire il problema?

xinyiman:
Il problema l'ho capito, ma per aiutare a risolvere abbiamo bisogno di test che replichino il problema.

Diego1981:
Ciao Xiny
stavo provando a scriverti il codice come mi chiedevi ma estrapolandolo e usandolo in una semplice form buttata li funziona  :-[ :-X :o
(figura di M...)
Ora provo a capire se mi perdo qualcosa nel programma passandolo da un thread all'altro
Azz..

Navigazione

[0] Indice dei post

[#] Pagina successiva

Vai alla versione completa