Page 1 of 1

Transmitere fisier prin interfata seriala

Posted: 21 Jul 2008, 09:14
by Popa Alin
Hello all,

Simplu sec si sincer: "Se poate transmite un fisier pe interfata seriala? Adica, dintr-un program in Visual c++ sa iau un fisier pe care sa-l trimit pe interfata seriala."

Daca se poate acest lucru, va rog sa imi da-ti cateva indicii.

Mersi fain.

Cu bine,
Alin POPA

Re: Transmitere fisier prin interfata seriala

Posted: 21 Jul 2008, 09:48
by Dragos Cojocari
Da, se poate.

1. citesti fisierul ( vezi MSDN, google)
2. trimiti octetii fisierului pe interfata seriala ( vezi MSDN, google)

Re: Transmitere fisier prin interfata seriala

Posted: 21 Jul 2008, 09:55
by Viorel

Re: Transmitere fisier prin interfata seriala

Posted: 21 Jul 2008, 12:19
by MrSmersh
In Win chiar folosesti CreateFile sa deschizi seriala, adica ea e tratata banalizat ca un soi mai ketz de feser :biggrin: . Pe la iteratia 2 de program recomand sa muti opertiile cu seriala pe un alt thread.

Re: Transmitere fisier prin interfata seriala

Posted: 21 Jul 2008, 12:48
by neagu_laurentiu
La capitolul alternative sau componente ce inglobeaza multe aspecte in lucrul cu portul serial, mai putem enumera: control ActiveX facut de MS http://msdn.microsoft.com/en-us/library ... S.60).aspx sau cel din .NET folosind C++/CLI http://msdn.microsoft.com/en-us/library ... lport.aspx

Re: Transmitere fisier prin interfata seriala

Posted: 22 Jul 2008, 10:23
by Popa Alin
Dragos Cojocari wrote:Da, se poate.

1. citesti fisierul ( vezi MSDN, google)
2. trimiti octetii fisierului pe interfata seriala ( vezi MSDN, google)
Ciao Dragos,

Cand spui sa citesc fisierul, asta inseamna sa citesc cate un octet ( 8 biti ) si apoi sa ii trimit pe seriala si tot asa pana la sfarsitul fisierului? Sau cum trebuie citit acel fisier?

Mersi fain.

Re: Transmitere fisier prin interfata seriala

Posted: 22 Jul 2008, 11:47
by Silviu Ardelean
Ma bag si eu in discutzie si propun citirea o singura data a fisierului si salvarea sa intr-un buffer. Ulterior, trimitzi din acest buffer octet cu octet pe serial.
In plus, recomand ca aceste operatii sa se efectueze intr-un thread separat.

Re: Transmitere fisier prin interfata seriala

Posted: 22 Jul 2008, 12:39
by neagu_laurentiu
Silviu Ardelean wrote:trimitzi din acest buffer octet cu octet pe serial
De ce "octet cu octet" ?
Trimiti cati octeti vrei, ca se ocupa Windows-ul de serializare... Eu am lucrat cu acele componente mai sus amintite si transmiteam buffer-e mari iar in MSDN WriteFile nu am vazut sa aiba limitare ! Doar nu suntem la microcontrolere unde resursele sunt limitate...

Re: Transmitere fisier prin interfata seriala

Posted: 22 Jul 2008, 12:50
by Silviu Ardelean
neagu_laurentiu wrote:
Silviu Ardelean wrote:trimitzi din acest buffer octet cu octet pe serial
De ce "octet cu octet" ?
Trimiti cati octeti vrei, ca se ocupa Windows-ul de serializare... Eu am lucrat cu acele componente mai sus amintite si transmiteam buffer-e mari iar in MSDN WriteFile nu am vazut sa aiba limitare ! Doar nu suntem la microcontrolere unde resursele sunt limitate...
Intr-adevar Windows-ul a evoluat si pe partea asta. Dar, de unde stii ca poate Alin nu lucreaza chiar cu micro-controlere? WriteFile are limita de 65,535 bytes pentru operatii de scriere prin retea. ;)

Re: Transmitere fisier prin interfata seriala

Posted: 22 Jul 2008, 12:53
by Popa Alin
Silviu Ardelean wrote:Ma bag si eu in discutzie si propun citirea o singura data a fisierului si salvarea sa intr-un buffer. Ulterior, trimitzi din acest buffer octet cu octet pe serial.
In plus, recomand ca aceste operatii sa se efectueze intr-un thread separat.
Interesanta ideea ta Silviu, dar pentru a citi din fisier folosesc functia MFC f.Read(chBuff, nCount), unde chBuff este declarat char chBuff[xxxx] iar nCount intradevar poate fi inlocuit cu f.GetLength().
Problema care o vad eu aici este: "Ce se intampla atunci cand fisierul este foarte mare si tipul char nu este capabil sa retina toate informatiile?"

Mersic.

O zi faina

Re: Transmitere fisier prin interfata seriala

Posted: 22 Jul 2008, 12:56
by Silviu Ardelean
Popa Alin wrote: Problema care o vad eu aici este: "Ce se intampla atunci cand fisierul este foarte mare si tipul char nu este capabil sa retina toate informatiile?"
Alin, daca estimezi ca fisierele ce le trimitzi pe serial vor fi de dimensiuni f. mari (de la zece de mega in sus) atunci potzi lua "calupuri de date" din fisier si sa le pui in buffer. Dupa terminarea unei bucatzi de fisier, citesti de unde ai ramas si pui in bufferul tau.
Spor si o zi faina si tie! ;)

Re: Transmitere fisier prin interfata seriala

Posted: 22 Jul 2008, 14:32
by Dragos Cojocari
Popa Alin wrote:
Silviu Ardelean wrote:Ma bag si eu in discutzie si propun citirea o singura data a fisierului si salvarea sa intr-un buffer. Ulterior, trimitzi din acest buffer octet cu octet pe serial.
In plus, recomand ca aceste operatii sa se efectueze intr-un thread separat.
Interesanta ideea ta Silviu, dar pentru a citi din fisier folosesc functia MFC f.Read(chBuff, nCount), unde chBuff este declarat char chBuff[xxxx] iar nCount intradevar poate fi inlocuit cu f.GetLength().
Problema care o vad eu aici este: "Ce se intampla atunci cand fisierul este foarte mare si tipul char nu este capabil sa retina toate informatiile?"

Mersic.

O zi faina
Asta si e premiza de la care trebuie sa pleci. Nu incerca sa tii totul in memorie din mai multe motive:
0. memoria nu e o chestie magica cu 7 vieti. mai devreme sau mai tarziu se gata.
1. nu castigi nimic - portul serial va trimite informatia la fel de incet
2. irosesti inutil o resursa importanta a sistemului, memoria
3. se consuma timp pentru citirea intregului fisier chiar daca e posibil ca transmisia sa fie intrerupta dupa primul octet trimis