SoFunction
Updated on 2025-04-08

Use C# and SerialPort classes for real-time data acquisition and control

1. Overview of serial communication

Serial port communication is a data transmission method based on UART (Universal Asynchronous Transmission and Receiver Transmission) protocol. Through serial communication, the computer can exchange data with external devices (such as sensors, instruments, embedded devices, etc.). Common serial communication interfaces include RS-232, RS-485, TTL, etc.

In C#SerialPortThe class provides us with the basic functions required for serial port communication, including opening the serial port, reading data, writing data, configuring serial port parameters, etc.

2. Basic steps to using the SerialPort class

2.1 Configuring SerialPort Objects

SerialPortThe class allows you to configure various parameters of the serial port, including baud rate, data bit, stop bit, verification method, etc. The following are common configuration items:

  • PortName: Serial slogan, for exampleCOM1
  • BaudRate: Baud rate, common ones are9600115200wait.
  • DataBits: Data bits, usually 7 or 8.
  • Parity: Checking methods, common ones includeNoneOddEvenwait.
  • StopBits: Stop bit, usually11.5or2
  • Handshake: Handshake agreement, common ones includeNoneXOnXOffRequestToSend

2.2 Open the serial port and start communication

Once the serial port parameters are configured, you can passOpenMethod to open the serial port. Once turned on, you can start reading and writing data.

2.3 Reading and writing data

SerialPortIt provides two ways to read and write data synchronously and asynchronously. The synchronization method is throughReadandWriteThe method performs data transmission, while the asynchronous method is to interact with data through event processing.

2.4 Close the serial port

When the communication is completed, remember to call itCloseMethod close the serial port and release resources.

3. Sample code: Real-time data acquisition and control

Here is a simple C# application example showing how to use itSerialPortClasses perform real-time data collection and control. The program will continuously read data from the serial port and make corresponding controls based on the read value.

3.1 Basic serial communication settings

using System;
using ;
 
class SerialPortCommunication
{
    private SerialPort serialPort;
 
    public SerialPortCommunication(string portName, int baudRate)
    {
        // Create a SerialPort instance and configure basic parameters        serialPort = new SerialPort
        {
            PortName = portName,        // Serial number            BaudRate = baudRate,        // Baud rate            DataBits = 8,               // Data bits            Parity = ,       // Check bit            StopBits = ,    // Stop position            Handshake =   // No handshake agreement        };
        
        // Set the event handler to trigger the event when data is received         += new SerialDataReceivedEventHandler(DataReceivedHandler);
    }
 
    // Open the serial port    public void Open()
    {
        if (!)
        {
            ();
            ("Serial port is turned on");
        }
    }
 
    // Close the serial port    public void Close()
    {
        if ()
        {
            ();
            ("Serial port is closed");
        }
    }
 
    // Send data to the serial port    public void WriteData(string data)
    {
        if ()
        {
            (data);
            ("Data sending: " + data);
        }
        else
        {
            ("The serial port is not open, data cannot be sent");
        }
    }
 
    // Read serial port data and trigger event    private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
        string data = ();
        ("Received data: " + data);
        
        //Control based on the received data        ProcessReceivedData(data);
    }
 
    // Process the received data    private void ProcessReceivedData(string data)
    {
        if (("ERROR"))
        {
            ("Equipment error, control measures are taken");
            // Execute the corresponding control command            // For example, send a closing command            WriteData("CLOSE");
        }
        else
        {
            ("The device is in normal condition");
            // Execute other control commands        }
    }
}
 
class Program
{
    static void Main()
    {
        SerialPortCommunication spComm = new SerialPortCommunication("COM1", 9600);
 
        try
        {
            // Open the serial port and start receiving data            ();
            
            // Main loop: simulate continuous monitoring            while (true)
            {
                // Simulate real-time data acquisition                ("REQUEST_DATA");
 
                // Request data every 2 seconds                (2000);
            }
        }
        catch (Exception ex)
        {
            ("An error occurred: " + );
        }
        finally
        {
            // Close the serial port at the end of the program            ();
        }
    }
}

3.2 Code parsing

  1. Serial port configuration:existSerialPortCommunicationIn the constructor of the class, we createdSerialPortObject, and common serial port parameters (such as baud rate, data bit, check bit, etc.) are set. These configurations are adjusted according to the actual equipment requirements.

  2. Event handling:passDataReceivedEvents, the program can read data from the serial port in real time. When the device sends data,DataReceivedHandlerThe method will be called and the received data will be passed to the program for processing.

  3. Real-time data acquisition and control: The program passedWriteDataMethods periodically send data request commands (such as "REQUEST_DATA") to the serial port. After the device receives the request, it will return the corresponding data. Based on the received data, the program decides whether to perform control operations (for example, sending a "CLOSE" command to shut down the device).

  4. Exception handling:passtry-catchBlock catches possible exceptions to ensure that the serial port can be closed gracefully in the event of an error.

3.3 Start and close the serial port

The program is called at startup()Open the serial port and start monitoring the serial port data. After receiving the data, the program passesProcessReceivedDataMethods process data and make corresponding controls. When the program ends, call()Close the serial port.

3.4 Data sending and receiving

  • Send data:passMethod sends data to the serial port. For example, in the above example, we sent the "REQUEST_DATA" command, requiring the device to return data.

  • Receive data:passEvents andMethod to receive data sent by the serial port. The received data can be used for real-time monitoring and control.

4. Frequently Asked Questions and Solutions

4.1 The serial port cannot be opened

  • reason: The serial port is occupied by other applications or has insufficient permissions.
  • Solution: Make sure no other applications occupy the serial port and the program has sufficient permissions to access the serial port.

4.2 Data loss or garbled code

  • reason: The serial port configuration does not match (the settings such as baud rate, data bit, stop bit, etc. are inconsistent).
  • Solution: Ensure that the serial port parameters are configured correctly and are consistent with the serial port settings of the device.

4.3 Event processing delay

  • reason: When the data volume is large, event processing may be delayed.
  • Solution: Improve data processing efficiency by optimizing event processing code or using background threads.

5. Summary

Using C# andSerialPortThe real-time data acquisition and control of the class is very suitable for application in industrial automation, equipment monitoring, sensor data acquisition and other scenarios. By configuring serial port parameters, processing data reception events, and implementing data control functions, developers can easily realize serial port communication with hardware devices. It should be noted that during the development process, it is necessary to ensure that the serial port parameters are configured correctly and exceptions are handled properly to ensure the stability and reliability of communication.

The above is the detailed content of using C# and SerialPort classes for real-time data acquisition and control. For more information about C# SerialPort data acquisition and control, please pay attention to my other related articles!