Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: C++ (auch C++0x und C++11) ::  Boost Serielle Schnittstelle  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Markus W.
Unregistrierter




Beitrag Markus W. Unregistrierter 18:19:37 08.03.2010   Titel:   Boost Serielle Schnittstelle            Zitieren

Hallo,
ich habe bis jetzt immer die von .Net zur Verfügung gestellte Schnittstelle genutzt. Jetzt möchte ich mein Programm aber wahrscheinlich doch in der Konsole entwickeln. Dazu habe ich mir mal die boost Lib angesehen.
In .Net ging das ja ganz einfach:

C/C++ Code:
serialPort1->PortName=...
serialPort1->Open();
C/C++ Code:
serialPort1->PortName=...
serialPort1->Open();
C/C++ Code:
serialPort1->PortName=...
serialPort1->Open();


In Boost geht das alles irgendwie unnötig kompliziert.
http://www.boost.org/doc/libs/1_41_0/doc/html/boost_asio/overview/serial_ports.html

Also erst einmal braucht man ein IO Device, warum auch immer.

C/C++ Code:
io_service io;
serial_port port( io, "COM1" );
C/C++ Code:
io_service io;
serial_port port( io, "COM1" );
C/C++ Code:
io_service io;
serial_port port( io, "COM1" );


Aber warum man jetzt nicht einfach.

Die Einstellungen sind auch total aufwendig:

C/C++ Code:
port.set_option(boost::asio::serial_port_base::baud_rate(9600) );
C/C++ Code:
port.set_option(boost::asio::serial_port_base::baud_rate(9600) );
C/C++ Code:
port.set_option(boost::asio::serial_port_base::baud_rate(9600) );

Da braucht man erst einmal ein Baudraten Objekt, warum auch immer.

Aber warum ich jetzt nicht einfach
C/C++ Code:
port.open();
C/C++ Code:
port.open();
C/C++ Code:
port.open();
machen kann erschließt
sich mir immer noch nicht.

Kann mir da bitte jemand helfen? Ich möchte einen Seriellen Port erstellen, den Port Namen und die Baudrate einstellen, den Port öffnen, ein Zeichen senden und wieder schließen. In .Net war das alles selbsterklärend. In Boost irgendwie überhaupt nicht.
evilissimo
Chefkoch

Benutzerprofil
Anmeldungsdatum: 11.11.2003
Beiträge: 2281
Beitrag evilissimo Chefkoch 20:05:04 08.03.2010   Titel:              Zitieren

Also wenn du das Device schon im Konstruktor angibst sollte es eigentlich schon geöffnet sein. Wenn du open auf eine bereits geöffnete Instanz aufrufst sollte das natürlich fehlschlagen.

Ich kenne mich aber nicht mit serial_port aus. Du könntest ja mal diesen Code ausprobieren:

http://www.college-code.com/blog/wp-content/uploads/2008/11/boost_serial_port_demo.cpp

_________________
evilissimo - R.I.P. dmr
< Moderator im C++/CLI Forum und im C++ Forum >
About Singletons: "Anyway, if our experts can make this mistake, you have made it and you don't even know about it."
Markus W.
Unregistrierter




Beitrag Markus W. Unregistrierter 20:16:41 08.03.2010   Titel:              Zitieren

Wie erstelle ich denn dann einen Port, ohne ihn zu öffnen? Wenn ich das "COM1" beim erstellen weglasse kommt eine exception.
theta
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.09.2008
Beiträge: 3646
Beitrag theta Mitglied 23:19:28 08.03.2010   Titel:              Zitieren

Lies die Dokumentation genauer:

Hier eine Einstiegshilfe:

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <string>
#include
<iostream>
#include
<boost\asio.hpp>
#include
<boost\system\system_error.hpp>

int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
{
    using namespace boost::system;
    using namespace boost::asio;

    io_service ioService;
    serial_port serialPort(ioService);

    try
    {
        serialPort.open("\\\\.\\COM1");

        serialPort.set_option(serial_port::baud_rate(9600));
        serialPort.set_option(serial_port::parity(serial_port::parity::none));
        serialPort.set_option(serial_port::character_size(serial_port::character_size(8)));
        serialPort.set_option(serial_port::stop_bits(serial_port::stop_bits::one));
        serialPort.set_option(serial_port::flow_control(serial_port::flow_control::none));

        std::string s = "test";
        serialPort.write_some(buffer(s));

        serialPort.close();
    }
    catch (system_error& error)
    {
        std::cout << error.what() << std::endl;
    }
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <string>
#include
<iostream>
#include
<boost\asio.hpp>
#include
<boost\system\system_error.hpp>

int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
{
using namespace boost::system;
using namespace boost::asio;

io_service ioService;
serial_port serialPort(ioService);

try
{
serialPort.open("\\\\.\\COM1");

serialPort.set_option(serial_port::baud_rate(9600));
serialPort.set_option(serial_port::parity(serial_port::parity::none));
serialPort.set_option(serial_port::character_size(serial_port::character_size(8)));
serialPort.set_option(serial_port::stop_bits(serial_port::stop_bits::one));
serialPort.set_option(serial_port::flow_control(serial_port::flow_control::none));

std::string s = "test";
serialPort.write_some(buffer(s));

serialPort.close();
}
catch (system_error& error)
{
std::cout << error.what() << std::endl;
}
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <string>
#include
<iostream>
#include
<boost\asio.hpp>
#include
<boost\system\system_error.hpp>

int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
{
    using namespace boost::system;
    using namespace boost::asio;

    io_service ioService;
    serial_port serialPort(ioService);

    try
    {
        serialPort.open("\\\\.\\COM1");

        serialPort.set_option(serial_port::baud_rate(9600));
        serialPort.set_option(serial_port::parity(serial_port::parity::none));
        serialPort.set_option(serial_port::character_size(serial_port::character_size(8)));
        serialPort.set_option(serial_port::stop_bits(serial_port::stop_bits::one));
        serialPort.set_option(serial_port::flow_control(serial_port::flow_control::none));

        std::string s = "test";
        serialPort.write_some(buffer(s));

        serialPort.close();
    }
    catch (system_error& error)
    {
        std::cout << error.what() << std::endl;
    }
}
Markus W.
Unregistrierter




Beitrag Markus W. Unregistrierter 00:05:38 09.03.2010   Titel:              Zitieren

Gut mein Fehler war, dass man anscheinend nicht die Eigenschaften setzen kann, bevor der COM Port geöffnet ist.
Nur wie integriere ich so was in mein Projekt. Also das ich per Menü den COM Port setzen kann verbinden und trennen etc. Schreibt man dafür eine Klasse, die den ganzen Aufwand verbirgt? Oder via Funktion, was ja aber nicht im Sinne der OOP ist.
Markus W.
Unregistrierter




Beitrag Markus W. Unregistrierter 10:18:00 11.03.2010   Titel:              Zitieren

Kann mir keiner helfen und erklären, wie man so was in ein Projekt implementiert. Es geht ja nicht einmal um boost, sondern allgemein um solche fremden Libs.
blub²
Mitglied

Benutzerprofil
Anmeldungsdatum: 07.03.2008
Beiträge: 458
Beitrag blub² Mitglied 10:47:11 11.03.2010   Titel:              Zitieren

Wie hast du es denn bisher integriert? Du musst halt dafür sorgen dass wenn jemand auf deinen Button drückt z.B.
C/C++ Code:
serialPort.set_option(serial_port::baud_rate(9600));
C/C++ Code:
serialPort.set_option(serial_port::baud_rate(9600));
C/C++ Code:
serialPort.set_option(serial_port::baud_rate(9600));

ausgeführt wird.

Wie du das dann genau umsetzt hängt von der Situation ab. Du kannst das ganze natürlich in eine Klasse packen und dann irgendwie sowas machen:
C/C++ Code:
mySerialPort.setBaudRate(38400);
C/C++ Code:
mySerialPort.setBaudRate(38400);
C/C++ Code:
mySerialPort.setBaudRate(38400);
Markus W.
Unregistrierter




Beitrag Markus W. Unregistrierter 21:52:38 11.03.2010   Titel:              Zitieren

Bisher habe ich es halt in der Main drinnen, da ich erst einmal in der Konsole teste. Und es ist halt extrem unübersichtlich wie ich finde, wenn ich um eine Schnittstelle einzustellen etliche Befehle brauche.
theta
Mitglied

Benutzerprofil
Anmeldungsdatum: 26.09.2008
Beiträge: 3646
Beitrag theta Mitglied 22:01:25 11.03.2010   Titel:              Zitieren

Sehe dein Problem nicht. Mach halt ein Dialog, der die Settings hat und leite diese dann bei OnOk() an die Serielle Schnittstelle weiter.

Simon
Markus W.
Unregistrierter




Beitrag Markus W. Unregistrierter 22:05:29 11.03.2010   Titel:              Zitieren

Naja im Moment bin ich ja noch in der Konsole da gibts keinen Button ;-).
C/C++ Forum :: C++ (auch C++0x und C++11) ::  Boost Serielle Schnittstelle  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.