Forum: PC-Programmierung Serial Port Ansteuern in Visual Studio


von Heinz (Gast)


Lesenswert?

Hallo, Ich habe da eine Nette Frage.

Ich habe Windows 7 32bit.
Ich habe Visual Studio 2012.

Ich wollte mal nett Fragen wie die Variablen für das Ansteuern des 
Serial Com Ports sind.

Bei Microsoft hier steht das der Command SerialPort() heisst.

https://msdn.microsoft.com/de-de/library/system.io.ports.serialport%28v=vs.110%29.aspx

Aber bei mir in Visual Studio wird der nicht erkannt.
Brauche ich da jezt ne bestimmte Einstellung oder eine Header datei?

Kann mir da jemand Helfen?

Vielen Dank.

Mit Freundlichen Grüßen.

von Peter II (Gast)


Lesenswert?

Heinz schrieb:
> Kann mir da jemand Helfen?

nein, weil du nicht mal schreibt welche Programmiersprache.

Und SerialPort ist kein Kommando oder Befehl sondern eine Klasse.

von Heinz (Gast)


Lesenswert?

Hallo, Ich benutze C++.

Und wie funktioniert eine klasse kann mir das jemand erklären.

von Peter II (Gast)


Lesenswert?

Heinz schrieb:
> Hallo, Ich benutze C++.
warum liest du denn die Doku für .net?

Für C gibt es hier ein Beispiel
https://msdn.microsoft.com/en-us/library/windows/desktop/aa363201(v=vs.85).aspx
und hier die Referenz
https://msdn.microsoft.com/en-us/library/windows/desktop/aa363194(v=vs.85).aspx

> Und wie funktioniert eine klasse kann mir das jemand erklären.
ja, jedes Buch über objektorientiertes Programmieren.

von Heinz (Gast)


Lesenswert?

Vielen Dank Genau das habe ich Gesucht.

Mit Freundlichen Grüßen.

von Sebastian M. (nicht_nerven)


Lesenswert?

Hallo
bin jetzt bei der selben Aufgabenstellung. Muss mit VS2017 über RS232 
mit einem MC kommunizieren. Bin aber gerade erstmal dabei eine 
funktionierende Syntax für VS hinzubekommen.

Habe mir diese Beispiele von Peter II/ MSDN angeschaut, aber bei mir 
kommen extrem viele Fehler-Meldungen.
Kann mir bitte jemand erklären wie ich mit den Referenzen umgehen muss? 
Muss ich alle Codes der einzelnen Ref´s extra einfügen bzw einen 
zusätzlichen Header einbauen?

Hoffe, dass ich nicht sagen muss, dass ein absoluter Newbe bin....

von Peter II (Gast)


Lesenswert?

Sebastian M. schrieb:
> Hoffe, dass ich nicht sagen muss, dass ein absoluter Newbe bin....

welche Fehler kommen denn?

von Sebastian M. (nicht_nerven)


Lesenswert?

boar, mit so einer schnellen Antwort habe ich nicht gerechnet.. ;)

Großteils circa 50% der 62 Fehler, dass Typen(?) DCB HANDLE BOOL , 
ebenso Befehle wie GENERIC READ/ WRITE, OPEN EXISTING und auch Variablen 
HCOM FSUCCESS nicht deklarierte Bezeichner sind.

Sonst noch, dass einige Bezeichner nciht gefunden wurden sind (circa 
40%)

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Sebastian M. schrieb:
> Großteils circa 50% der 62 Fehler, dass Typen(?) DCB HANDLE BOOL ,
> ebenso Befehle wie GENERIC READ/ WRITE, OPEN EXISTING und auch Variablen
> HCOM FSUCCESS nicht deklarierte Bezeichner sind.

dann fehlt vermutlich einfach

1
#include <Windows.h>

von Sebastian M. (nicht_nerven)


Lesenswert?

Peter II schrieb:
> dann fehlt vermutlich einfach
>
> #include <Windows.h>

nee, ist drinne

er hatte beim ersten compilieren auch gemeckert, dass ich #include 
"stdafx.h" einfügen soll.
Nach dem einfügen und zweitem compilieren kamen die ganzen 
Fehlermeldungen.
Auch eine Klammer zum Beenden der Main fehlte am Ende des 
Original-Codes.

von Peter II (Gast)


Lesenswert?

Sebastian M. schrieb:
> nee, ist drinne

und das ist auch wirklich C(++) und nicht CLI ?

bitte mal deinen code und die genaue Fehlermeldung posten.

von Sebastian M. (nicht_nerven)


Lesenswert?

ok, erstmal gegoogled was CLI ist...
also der CODE ist aus dem Link weiter oben, den du damals mal gepostet 
hast, herauskopiert. Da steht ja auch c++

ich habe hier einen kleinen Auszug:

void PrintCommState(DCB dcb)
{
  //  Print some of the DCB structure values
  _tprintf(TEXT("\nBaudRate = %d, ByteSize = %d, Parity = %d, StopBits = 
%d\n"),
    dcb.BaudRate,
    dcb.ByteSize,
    dcb.Parity,
    dcb.StopBits);
}

int _tmain(int argc, TCHAR *argv[])
{
  DCB dcb;
  HANDLE hCom;
  BOOL fSuccess;
  TCHAR *pcCommPort = TEXT("COM1"); //  Most systems have a COM1 port
                    //  Open a handle to the specified com port.
  hCom = CreateFile(pcCommPort,
    GENERIC_READ | GENERIC_WRITE,
    0,      //  must be opened with exclusive-access
    NULL,   //  default security attributes
    OPEN_EXISTING, //  must use OPEN_EXISTING
    0,      //  not overlapped I/O
    NULL); //  hTemplate must be NULL for comm devices

  if (hCom == INVALID_HANDLE_VALUE)


Fehlermeldungen sind dann ua:

"DCB": nichtdeklarierter Bezeichner
Syntaxfehler: Fehlendes ")" vor Bezeichner "dcb"
Syntaxfehler: Es fehlt ";" vor "{"
"{": Funktionsheader fehlt - Parameterliste im alten Stil?
Syntaxfehler: Fehlendes ";" vor Bezeichner "dcb"

aber du hattest ja auch mal was wegen der Referenzen noch gepostet. Hat 
es damit was zu tun?

von Peter II (Gast)


Lesenswert?

Sebastian M. schrieb:
> ich habe hier einen kleinen Auszug:

https://msdn.microsoft.com/de-de/library/windows/desktop/aa363214(v=vs.85).aspx

DCB ist in Winbase.h (include Windows.h) definiert.

auch sehe ich dein include nicht. Wie soll man helfen, wenn du nicht den 
complette code zeigst?

von Sebastian M. (nicht_nerven)


Lesenswert?

Peter II schrieb:
> DCB ist in Winbase.h (include Windows.h) definiert.
>
> auch sehe ich dein include nicht. Wie soll man helfen, wenn du nicht den
> complette code zeigst?

sorry, dachte nicht dass es wichtig ist, wenn der selbe code weiter oben 
aus einem link nur herauskopiert ist

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

#include "stdafx.h"

void PrintCommState(DCB dcb)
{
  //  Print some of the DCB structure values
  _tprintf(TEXT("\nBaudRate = %d, ByteSize = %d, Parity = %d, StopBits = 
%d\n"),
    dcb.BaudRate,
    dcb.ByteSize,
    dcb.Parity,
    dcb.StopBits);
}


int _tmain(int argc, TCHAR *argv[])
{
  DCB dcb;
  HANDLE hCom;
  BOOL fSuccess;
  TCHAR *pcCommPort = TEXT("COM1"); //  Most systems have a COM1 port

                    //  Open a handle to the specified com port.
  hCom = CreateFile(pcCommPort,
    GENERIC_READ | GENERIC_WRITE,
    0,      //  must be opened with exclusive-access
    NULL,   //  default security attributes
    OPEN_EXISTING, //  must use OPEN_EXISTING
    0,      //  not overlapped I/O
    NULL); //  hTemplate must be NULL for comm devices

  if (hCom == INVALID_HANDLE_VALUE)
  {
    //  Handle the error.
    printf("CreateFile failed with error %d.\n", GetLastError());
    return (1);
  }

  //  Initialize the DCB structure.
  SecureZeroMemory(&dcb, sizeof(DCB));
  dcb.DCBlength = sizeof(DCB);

  //  Build on the current configuration by first retrieving all current
  //  settings.
  fSuccess = GetCommState(hCom, &dcb);

  if (!fSuccess)
  {
    //  Handle the error.
    printf("GetCommState failed with error %d.\n", GetLastError());
    return (2);
  }

  PrintCommState(dcb);       //  Output to console

                 //  Fill in some DCB values and set the com state:
                 //  57,600 bps, 8 data bits, no parity, and 1 stop bit.
  dcb.BaudRate = CBR_57600;     //  baud rate
  dcb.ByteSize = 8;             //  data size, xmit and rcv
  dcb.Parity = NOPARITY;      //  parity bit
  dcb.StopBits = ONESTOPBIT;    //  stop bit

  fSuccess = SetCommState(hCom, &dcb);

  if (!fSuccess)
  {
    //  Handle the error.
    printf("SetCommState failed with error %d.\n", GetLastError());
    return (3);
  }

  //  Get the comm config again.
  fSuccess = GetCommState(hCom, &dcb);

  if (!fSuccess)
  {
    //  Handle the error.
    printf("GetCommState failed with error %d.\n", GetLastError());
    return (2);
  }

  PrintCommState(dcb);       //  Output to console

  _tprintf(TEXT("Serial port %s successfully reconfigured.\n"), 
pcCommPort);
  return (0);



}

von Peter II (Gast)


Lesenswert?

Sebastian M. schrieb:
> sorry, dachte nicht dass es wichtig ist, wenn der selbe code weiter oben
> aus einem link nur herauskopiert ist

geht bei mir Problemlos.

VS2013 -> neues Projekt -> Konsolenanwendung -> leeres Projekt -> neue 
Datei main.cpp -> code einfügen -> zeile stdafx löschen

1>------ Neues Erstellen gestartet: Projekt: ConsoleApplication1, 
Konfiguration: Debug Win32 ------
1>  main.cpp
1>  ConsoleApplication1.vcxproj -> 
C:\Develop\x5\ConsoleApplication1\Debug\ConsoleApplication1.exe
========== Alles neu erstellen: 1 erfolgreich, 0 fehlerhaft, 0 
übersprungen ==========

von Sebastian M. (nicht_nerven)


Lesenswert?

?!? hat das was mit VS2017 zu tun? bin halt auf arbeit und kann mir mal 
nicht so schnell ein altes VS installieren

aber geatn wie du schriebst: Fehler

Fehler  C1010  Unerwartetes Dateiende während der Suche nach dem 
vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode 
"#include "stdafx.h"" einzufügen?

ich krieg ne macke....
ich glaub ich lass es und versuche es mit einem anderen Beispiel-Code 
mich daran langsam aufzubauen

von Peter II (Gast)


Lesenswert?

Sebastian M. schrieb:
> ich krieg ne macke....

dann schalte einfach mal die vorkompilierten Header ab.

von Sebastian M. (nicht_nerven)


Lesenswert?

ok, jetzt scheint es zu laufen...

kannst du kurz erklären was das bedeuten soll mit dem "abschalten" der 
vorkompilierten header?

und es kommt immer kurz die konsole auf
versuche diese halt über eine scanf-funk bzw while-schleife aufrecht 
zuerhalten, aber sie beendet sich trotzdem immer. Hat das was mit der 
Fehlermeldung zu tun? oder hast du eine bessere Idee, dass die Konsole 
offen bleibt?

vielen dank für die mühen

von Peter II (Gast)


Lesenswert?

Sebastian M. schrieb:
> kannst du kurz erklären was das bedeuten soll mit dem "abschalten" der
> vorkompilierten header?

ich habe mich bis jetzt noch nicht wirklich mit den "vorkompilierten 
Header" beschäftig. Es soll die Kompilierzeiten verringern, aber meine 
Projekte sind so klein das das egal ist. Bis jetzt empfand ich sie nur 
als störend weil es nur Probleme damit gab. (zumindest bei mir).

> oder hast du eine bessere Idee, dass die Konsole offen bleibt?
einfach eine Breakpoint setzen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.