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..