Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Uso della seriale in Visual C++
Forum - C/C++ - Uso della seriale in Visual C++

Avatar
giuliol83 (Normal User)
Newbie


Messaggi: 3
Iscritto: 23/10/2009

Segnala al moderatore
Postato alle 12:05
Venerdì, 23/10/2009
Ciao, devo realizzare un programma in Visual c++ per inviare delle stringhe via seriale. Nel sito Microsoft ho trovato che bisogna usare lo spazio dei nomi System.IO.Ports
Ma come si fa ad allegarlo? Che liberia devo allegare?

Inoltre ho trovato anche un esempio ma in c#.
Qualcuno mi potrebbe dire cosa modificare per realizzarlo in c++?
Ho già un po' di esperienza nell'uso del linguaggio c++ e delle classi ma praticamente nessuna eperienza con il visual c++!!
Grazie mille.

Questo è il programma in c# per usare la seriale:

using System;
using System.IO.Ports;
using System.Threading;

public class PortChat
{
    static bool _continue;
    static SerialPort _serialPort;

    public static void Main()
    {
        string name;
        string message;
        StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
        Thread readThread = new Thread(Read);

        // Create a new SerialPort object with default settings.
        _serialPort = new SerialPort();

        // Allow the user to set the appropriate properties.
        _serialPort.PortName = SetPortName(_serialPort.PortName);
        _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
        _serialPort.Parity = SetPortParity(_serialPort.Parity);
        _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
        _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
        _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);

        // Set the read/write timeouts
        _serialPort.ReadTimeout = 500;
        _serialPort.WriteTimeout = 500;

        _serialPort.Open();
        _continue = true;
        readThread.Start();

        Console.Write("Name: ");
        name = Console.ReadLine();

        Console.WriteLine("Type QUIT to exit");

        while (_continue)
        {
            message = Console.ReadLine();

            if (stringComparer.Equals("quit", message))
            {
                _continue = false;
            }
            else
            {
                _serialPort.WriteLine(
                    String.Format("<{0}>: {1}", name, message) );
            }
        }

        readThread.Join();
        _serialPort.Close();
    }

    public static void Read()
    {
        while (_continue)
        {
            try
            {
                string message = _serialPort.ReadLine();
                Console.WriteLine(message);
            }
            catch (TimeoutException) { }
        }
    }

    public static string SetPortName(string defaultPortName)
    {
        string portName;

        Console.WriteLine("Available Ports:");
        foreach (string s in SerialPort.GetPortNames())
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("COM port({0}): ", defaultPortName);
        portName = Console.ReadLine();

        if (portName == "")
        {
            portName = defaultPortName;
        }
        return portName;
    }

    public static int SetPortBaudRate(int defaultPortBaudRate)
    {
        string baudRate;

        Console.Write("Baud Rate({0}): ", defaultPortBaudRate);
        baudRate = Console.ReadLine();

        if (baudRate == "")
        {
            baudRate = defaultPortBaudRate.ToString();
        }

        return int.Parse(baudRate);
    }

    public static Parity SetPortParity(Parity defaultPortParity)
    {
        string parity;

        Console.WriteLine("Available Parity options:");
        foreach (string s in Enum.GetNames(typeof(Parity)))
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Parity({0}):", defaultPortParity.ToString());
        parity = Console.ReadLine();

        if (parity == "")
        {
            parity = defaultPortParity.ToString();
        }

        return (Parity)Enum.Parse(typeof(Parity), parity);
    }

    public static int SetPortDataBits(int defaultPortDataBits)
    {
        string dataBits;

        Console.Write("Data Bits({0}): ", defaultPortDataBits);
        dataBits = Console.ReadLine();

        if (dataBits == "")
        {
            dataBits = defaultPortDataBits.ToString();
        }

        return int.Parse(dataBits);
    }

    public static StopBits SetPortStopBits(StopBits defaultPortStopBits)
    {
        string stopBits;

        Console.WriteLine("Available Stop Bits options:");
        foreach (string s in Enum.GetNames(typeof(StopBits)))
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Stop Bits({0}):", defaultPortStopBits.ToString());
        stopBits = Console.ReadLine();

        if (stopBits == "")
        {
            stopBits = defaultPortStopBits.ToString();
        }

        return (StopBits)Enum.Parse(typeof(StopBits), stopBits);
    }

    public static Handshake SetPortHandshake(Handshake defaultPortHandshake)
    {
        string handshake;

        Console.WriteLine("Available Handshake options:");
        foreach (string s in Enum.GetNames(typeof(Handshake)))
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Stop Bits({0}):", defaultPortHandshake.ToString());
        handshake = Console.ReadLine();

        if (handshake == "")
        {
            handshake = defaultPortHandshake.ToString();
        }

        return (Handshake)Enum.Parse(typeof(Handshake), handshake);
    }
}

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 12:29
Venerdì, 23/10/2009
alt, fermo un attimo. Se vuoi usare il Namespace System allora devi usare necessariamente C++/CLI e quindi il sapere il C++ non serve a niente. Devi conoscere la piattaforma .NET quindi tanto vale usare c# secondo me

PM Quote
Avatar
giuliol83 (Normal User)
Newbie


Messaggi: 3
Iscritto: 23/10/2009

Segnala al moderatore
Postato alle 13:23
Venerdì, 23/10/2009
ah ok...quindi queste classi sono attivabili solo usando la piattaforma .net se nn ho capito male?
Per caso sai come realizzare un programma per comunicare con la seriale in visual c++?
Il punto è che ho già un programma fatto e devo aggiungere un modulo per comunicare con la seriale. Quindi non posso cambiare linguaggio di programmazione...

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 13:28
Venerdì, 23/10/2009
http://www.pierotofy.it/pages/extras/forum/2/19200-inviare ...

execretor era il mio vecchio nick:rotfl:

come dicevo l'ho fatto a scuola e non so se funziona....prova a documentarti su quelle funzioni.

vedi anche qui che ti spiega parecchie cose
http://msdn.microsoft.com/en-us/library/ms810467.aspx

PM Quote
Avatar
giuliol83 (Normal User)
Newbie


Messaggi: 3
Iscritto: 23/10/2009

Segnala al moderatore
Postato alle 13:30
Venerdì, 23/10/2009
Ok grazie mille. In caso faccio qualche prova e ti posto qualcosa se mi da particolari problemi :)

PM Quote