Transmitere fisier prin interfata seriala

Intrebari despre programarea cu VC++ incluzand mediul de dezvoltare, instalare, setari, debugger, compilator, linker si documentatie.
Post Reply
User avatar
Popa Alin
Membru
Membru
Posts: 52
Joined: 30 May 2008, 11:00
Judet: Timiş
Location: Timisoara

Transmitere fisier prin interfata seriala

Post by Popa Alin » 21 Jul 2008, 09:14

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


Great minds disscuss ideas, average minds disscuss events, small minds disscuss people.

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: Transmitere fisier prin interfata seriala

Post by Dragos Cojocari » 21 Jul 2008, 09:48

Da, se poate.

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

Viorel
Microsoft MVP
Microsoft MVP
Posts: 292
Joined: 13 Jul 2007, 12:26

Re: Transmitere fisier prin interfata seriala

Post by Viorel » 21 Jul 2008, 09:55


User avatar
MrSmersh
Microsoft MVP
Microsoft MVP
Posts: 289
Joined: 20 Jul 2007, 10:18
Location: Timisoara
Contact:

Re: Transmitere fisier prin interfata seriala

Post by MrSmersh » 21 Jul 2008, 12:19

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.

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: Transmitere fisier prin interfata seriala

Post by neagu_laurentiu » 21 Jul 2008, 12:48

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

User avatar
Popa Alin
Membru
Membru
Posts: 52
Joined: 30 May 2008, 11:00
Judet: Timiş
Location: Timisoara

Re: Transmitere fisier prin interfata seriala

Post by Popa Alin » 22 Jul 2008, 10:23

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.
Great minds disscuss ideas, average minds disscuss events, small minds disscuss people.

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: Transmitere fisier prin interfata seriala

Post by Silviu Ardelean » 22 Jul 2008, 11:47

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.

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: Transmitere fisier prin interfata seriala

Post by neagu_laurentiu » 22 Jul 2008, 12:39

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

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: Transmitere fisier prin interfata seriala

Post by Silviu Ardelean » 22 Jul 2008, 12:50

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. ;)
Last edited by Silviu Ardelean on 22 Jul 2008, 12:53, edited 1 time in total.

User avatar
Popa Alin
Membru
Membru
Posts: 52
Joined: 30 May 2008, 11:00
Judet: Timiş
Location: Timisoara

Re: Transmitere fisier prin interfata seriala

Post by Popa Alin » 22 Jul 2008, 12:53

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
Great minds disscuss ideas, average minds disscuss events, small minds disscuss people.

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: Transmitere fisier prin interfata seriala

Post by Silviu Ardelean » 22 Jul 2008, 12:56

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! ;)

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: Transmitere fisier prin interfata seriala

Post by Dragos Cojocari » 22 Jul 2008, 14:32

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

Post Reply