Newsgroup: it.comp.lang.delphi
Titolo: [D6]Comunicazione con la Porta Seriale (Com)

Salve a tutti,
ho la necessita' di sviluppare un'applicazione che legge e scrive sulla 
porta seriale, per comunicare con un dispositivo ad essa collegato.
Per far cio' ho scaricato i componenti free TPapro 4.06 dal sito 
http://sourceforge.net/
 , solo che i suddetti componenti aprono non solo 
la porta COM, ma un intero mondo relativo alla comunicazione via modem, 
FAX, e tutto il resto.
A me invece serve di poter leggere e scrivere i singoli bit presenti 
sulla porta seriale, in quanto il tipo di protocollo usato dal 
dispositivo, inserisce in un solo byte piu' informazioni.
A questo punto la mia domanda e', qualsiasi byte mi arrivi, esso e' 
codificabile come un carattere? Ad es. #3 o #7 ??? Oppure devo 
smembrarmi il byte? Come si puo' fare??? Grazie mille,
Ciao a tutti,
Davide

smembrarmi il byte? Come si puo' fare???
Il ng e' proprio un bel posto, a volte ti capita che qualcun'altro abbia gia'
fatto queste cose e ti possa dare una mano. ;)
Se tu sei gia' arrivato al punto di avere il byte bello fresco, allora puoi
"smembrarlo" (che termina alla hannibal lecter.... brrrrr!!!!) per ricavarne i
valori dei singoli bit in questo modo:
function GetBitValue(const L,Nbit:integer):boolean;
function TfrmRicezione.GetBitValue(const L, Nbit: integer): boolean;
begin
   result:=odd(l shr nbit);
end;
In teoria, se hai impostato il componente apdcomport nel modo giusto, dovrai
solo intercettare il dato nell'evento OnTirggerAvailable
procedure TfrmRicezione.PortaSerialeTriggerAvail(CP: TObject; Count: Word);
var c : char;
    b : Byte;
begin
   c := PortaSeriale.GetChar;
   b := ord(c);
   if GetBitValue(b,5) then 
      MessageDlg('il bit numero cinque e'' acceso', mtInformation, [mbOK], 0)
   else 
      MessageDlg('il bit numero cinque e'' spento', mtInformation, [mbOK], 0);
end;
Sulla falsariga di questo esempietto puoi sviluppare tutta la tua logica.
Se ti serve loggare il byte intero che hai ricevuto usa queste funzioni:
http://snipurl.com/4p0n
ciao, buon lavoro :) 
-- 
Morde. 
(
mo...@despammed.com
)
M-List di icld: 
http://it.groups.yahoo.com/group/icld/

 
http://snipurl.com/4p0n
ti ringrazio molto! Ora mi guardo l'articolo!
Ciao,
Davide

    result:=odd(l shr (nbit-8));
Sei sicuro? A me funziona perfettamente nell'altro modo.
Del resto la funzione e' stata copiata dal newsgroup: 
http://snipurl.com/4prc
Fammi sapere :)
Ciao


 Del resto la funzione e' stata copiata dal newsgroup: 
http://snipurl.com/4prc
Si, ho fatto i test e com'era prima mi risultava il byte con soli 1 
oppure soli 0, ad esempio
00000000
11111111
11111111
00000000
Quando il valore da tradurre era 2 o 3 al massimo.
A te funziona??? Forse l'abbiamo intesa in modo differente e tu gli 
passi direttamente il valore (nBit - 8).
Ora ho una domanda, chissa' se anche altri leggono dentro i thred, al 
limite ne apro uno nuovo, vediamo.
Se voglio spedire il valore binario 00000010 ovvero in byte il numero 2, 
uso:
   ComPort.PutChar(#2);
quindi se voglio spedire il valore 2 e il 5, scrivo:
   ComPort.PutString(#2+#5); Giusto??? O devo anche inserire il 
terminatore???
   ComPort.PutString(#2+#5+#0);
Ho un pochino di confusione in merito.
Ringrazio ancora per l'aiuto.
Ciao,
Davide

limite ne apro uno nuovo, vediamo.
Ti ho scritto in privato.
Ciao.


 Ciao.
Mi sa che ho la MailBox Piena, riprova a questo indirizzo, quello era 
vecchio non l'ho cambiato.
Ciao,
Davide.
davide.gurgone_REM...@sweetvillage.it