Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

read data from serialport

Tags:

c#

serial-port

I am new to C# and programming in general.

I am trying to communicate with a ohmmeter which is conneted via usb to my computer.

I am able to configurate the device and even recieve data. But i can not acces this data. I can just print it on to the console. (Was inspired by the code on the microsoft site)

Here is the constructer of my "communication"-class where i configurate the port:

public SCPI_Commands()
    {
        _SerialPort.PortName = SetPortName(_SerialPort.PortName);
        _SerialPort.BaudRate = 115200;
        _SerialPort.Parity = Parity.None;
        _SerialPort.DataBits = 8;
        _SerialPort.StopBits = StopBits.One;
        _SerialPort.Handshake = Handshake.None;
        _SerialPort.ReadTimeout = 500;
        _SerialPort.WriteTimeout = 500;
        _SerialPort.Open();
        _SerialPort.DataReceived += _serialPort_DataReceived;
    }

Here is my function which sends a query to the device (The constant Measurment_Value represents a scpi command which is understood by my ohmmeter) :

public void get_measurement()
    {
        _SerialPort.WriteLine(Measurment_Value);
    }

And here is the private function which checks if the device is sending data and printing it on the console (not sure how this function works) :

private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        Console.WriteLine(_SerialPort.ReadLine());
    }

Unfortunately i am not able to return the data as a string. My goal is to do some calculations with the received data. Does someone has any ideas ?

Greetings from Germany.

Luke

like image 366
Prime_Joe Avatar asked Sep 21 '18 10:09

Prime_Joe


People also ask

How do you read data from UART?

Select the UART port on the board from which the block reads data. At each sample time, the Rx port on the block outputs the values read from the UART port using the Rx pin on the port. To specify the Rx pin, go to Configuration Parameters > Hardware Implementation pane > UARTx > Rx Pin.

How can I transfer data from RS232 to computer?

What do you need to read data from an RS232 serial port? Launch Serial Port Reader and select “Session -> New Session” from the Session menu option. You can also click Ctrl+N. A list of view options is displayed in the “New monitoring session” window.

How do I read a COM port in Windows?

1) Click Start. 2) Click Control Panel in the Start menu. 3) Click Device Manager in the Control Panel. 4) Click + next to Port in the Device Manager to display the port list.


1 Answers

You can read from buffer to temp byte array and then get it as string, see the below example. Put this in _serialPort_DataReceived

    // this the read buffer
    byte[] buff = new byte[9600];
    int readByteCount = _serialPort.BaseStream.Read(buff, 0, _serialPort.BytesToRead);
    // you can specify other encodings, or use default
    string response = System.Text.Encoding.UTF8.GetString(buff);

Side Note

If you want to keep your sanity while working with SerialPort, always send and receive as byte array. Then, get the equivalent string using Encoding.

like image 199
raidensan Avatar answered Nov 15 '22 01:11

raidensan