Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[C-Programming] Send and receive on com port

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer een string te sturen naar me com port en daarna de return op te vangen.

Nu heb ik de code als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    FILE *port;
    int int_out;
    char buffer[1024];

    if((port=fopen("COM3","w+b"))==NULL){
        printf("Not opened\n");
        }
    else printf("Opened\n");

    char x[]="test";
    fwrite(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), port); //write
    fread(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), port); //return opvangen
    
    printf("%s",port);
fclose(port);
return 0;


Het lukt me nu niet om iets te verzenden en laat staan de return terug te krijgen.
Ik doe iets verkeerd maar weet niet waar het aan lig.
Heb al geprobeert met gets enzovoort maar dat werkt allemaal niet..

  • Ealanrian
  • Registratie: Februari 2009
  • Nu online
Ik denk dat er iets meer info nodig is. Platform waarop je werkt, welke errors krijg je, is je poort naam correct?

Verwijderd

Topicstarter
Platform is windows
Errors, staan hier boven en wat ik terug krijg is een hele vreemde string
Port klopt en opent hij ook goed. Kom namelijk wel tot "Opened"

  • Ealanrian
  • Registratie: Februari 2009
  • Nu online
Je print port terwijl je de data opvangt in x hoort dat zo?

Verwijderd

Topicstarter
Ik send een string. Krijg een string terug en deze wil ik printen.
Ik doe iets verkeerd alleen weet niet waar dat aan legt. Ben niet zo bekend met het besturen van een COM port...

  • Ealanrian
  • Registratie: Februari 2009
  • Nu online
Het gaat mij om dit stukje:
code:
1
2
3
  fwrite(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), port); //write
    fread(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), port); //return opvangen
printf("%s",port);

je fread naar x en printf port, port is een file pointer dus een rare string. als je het printf("%s",x); probeert verwacht ik iets beters

Verwijderd

Topicstarter
Ealanrian schreef op donderdag 05 december 2013 @ 11:40:
Het gaat mij om dit stukje:
code:
1
2
3
  fwrite(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), port); //write
    fread(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), port); //return opvangen
printf("%s",port);

je fread naar x en printf port, port is een file pointer dus een rare string. als je het printf("%s",x); probeert verwacht ik iets beters
Klopt dan krijg ik een *smile* zoals deze :)
Oftewel dat schiet niet op....

  • Ealanrian
  • Registratie: Februari 2009
  • Nu online
In dat geval is het denk ik handig om je even in te lezen in het gebruik van een com port. bijvoorbeeld: http://batchloaf.wordpres...es-to-a-serial-port-in-c/

Verwijderd

Topicstarter
Helaas heb ik daar niks aan wan het is C++ en het is gebasseerd op een byte over sturen.
Ik wil gewoon een string kunnen sturen en de return string kunnen printen.

  • Ealanrian
  • Registratie: Februari 2009
  • Nu online
Ik weet niet waar je vandaan haalt dat het C++ is maar in C is een string niks meer als een byte array. dus om een string te kunnen sturen en de return string te kunnen printen moet je bytes sturen.

Verwijderd

Topicstarter
Te snel gekeken inderdaad maar het is alleen versturen.
Heb het gecompileerd en ja krijg wel overal een OK

String kan worden verstuur volgens mij.
Nu is de vraag hoe krijg ik me return string?

  • Ealanrian
  • Registratie: Februari 2009
  • Nu online
Ik neem aan dat je aan die com port iets hebt hangen waar het heen gaat. aan die kant moet je dus de data opvangen en terug sturen.

Verwijderd

Topicstarter
terminal met putty werkt het gewoon.
Dus het is werkend alleen nog in C krijgen.... en dat lukt me niet....

  • Ealanrian
  • Registratie: Februari 2009
  • Nu online
Kan je iets meer detail geven hoe je het hebt opgezet?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22-11 22:46

Creepy

Tactical Espionage Splatterer

En ook iets meer melden dan "het lukt me niet". Dus welke code heb je dan nu geprobeerd? Wat ging er mis? Wat had je wel verwacht? Kreeg je een foutmelding? Welke foutmelding dan? etc. etc. etc. Nu lijkt dit een persoonlijk helpdesk topic te worden. Dat is heel lief van Ealanrian dat ie je zo wil helpen maar dat is nu eigenlijk niet de bedoeling ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Putty: COM3
Speed: 9600
Voor de rest type ik het commando in en druk ik op enter.

Vervolgens komt mijn output, de return op het scherm.
Dus wil dit nu in C hebben maar het lukt me niet.
Krijg steeds vreemde karakters terug of mijn dos box gaat direct onderuit...

  • JeromeB
  • Registratie: September 2003
  • Laatst online: 15-11 14:27

JeromeB

woei

Weet je zeker dat je communiceert met een COM-poort? Voor zover ik weet zijn COM-poorten onder Windows niet standaard gemapt op het bestandssysteem.

PC load letter? What the fuck does that mean?


Verwijderd

Topicstarter
Dit is eigelijk wat ik wil. Maar dit is in java:
http://www.java2s.com/Tut...ortandwritestringtoit.htm

Nu heb ik het zelf nu zo staan:
code:
1
2
3
4
5
6
char test;
  
  write (fp,"1\r\n",7);
  printf("%d",&write);
  read(fp,&test, 7);
  printf("%s\n",test);


Alleen ik krijg bij me print een (NULL) geprint...

  • JeromeB
  • Registratie: September 2003
  • Laatst online: 15-11 14:27

JeromeB

woei

Die code uit de link die je plaatst is C#, geen Java. Verder maakt die code gebruik van een onderliggende API. Dat kun je dus niet 1-op-1 vertalen naar C. Je zult gebruik moeten maken van een andere API of het besturingssysteem moet directe communicatie met een seriële poort toestaan.

In de code uit je topic-start open je domweg een bestand genaamd "COM3". Als dat bestand nog niet bestaat dan wordt het aangemaakt (vanwege de parameter w+). Volgens mij communiceert je programma dus helemaal niet met een seriële poort.

PC load letter? What the fuck does that mean?


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 13:12
Openen van een serial device onder Windows doe je met CreateFile ( "\\\\.\\COM3" .... )
Parameters instellen met SetCommConfig
Lezen en schrijven met ReadFile/WriteFile
en sluiten met CloseHandle

Zie hier bijvoorbeeld : MSDN: Configuring a Communications Resource (Windows)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
JeromeB schreef op donderdag 05 december 2013 @ 14:39:
In de code uit je topic-start open je domweg een bestand genaamd "COM3". Als dat bestand nog niet bestaat dan wordt het aangemaakt (vanwege de parameter w+). Volgens mij communiceert je programma dus helemaal niet met een seriële poort.
COM3 is geen filename op Windows. Het is inderdaad de seriele poort. "w+" is geen zinnige optie; hoe maak je hardware vanuit software ?

Mijn gok is dat het simpelweg fout gaat omdat de seriele poort niet op 9600 baud staat.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Topicstarter
Probleem opgelost.
Ondertussen werkend gekregen met behulp van deze site:
http://123a321.wordpress....1/serial-port-with-mingw/
Pagina: 1