[프로그램]

C#에서 이더넷, RS-485 및 RS-232 통신을 구현하는 예제 코드

Blackberrys 2023. 6. 26. 18:16
반응형

C#에서 이더넷, RS-485 및 RS-232 통신을 구현하는 예제 코드입니다.

이더넷 통신:

csharp
Copy code
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

public class EthernetCommunication
{
    private Socket clientSocket;

    public void Connect(string ipAddress, int port)
    {
        IPAddress serverIP = IPAddress.Parse(ipAddress);
        IPEndPoint serverEndPoint = new IPEndPoint(serverIP, port);

        clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        clientSocket.Connect(serverEndPoint);
    }

    public void SendMessage(string message)
    {
        byte[] sendData = Encoding.ASCII.GetBytes(message);
        clientSocket.Send(sendData);
    }

    public string ReceiveMessage()
    {
        byte[] receiveData = new byte[1024];
        int dataSize = clientSocket.Receive(receiveData);
        string message = Encoding.ASCII.GetString(receiveData, 0, dataSize);
        return message;
    }

    public void Disconnect()
    {
        clientSocket.Close();
    }
}

RS-485 통신:

RS-485는 하드웨어 제어가 필요하므로 여기서는 라이브러리를 사용하여 구현하는 것이 좋습니다. 대표적인 라이브러리로는 "Modbus.SerialPort.dll"이 있습니다. 이 라이브러리는 RS-485 통신을 위한 Modbus 프로토콜을 제공합니다.

csharp
Copy code
using Modbus;
using Modbus.Data;
using Modbus.Device;

public class RS485Communication
{
    private SerialPortAdapter serialPort;

    public void Connect(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
    {
        serialPort = new SerialPortAdapter(portName);
        serialPort.BaudRate = baudRate;
        serialPort.Parity = parity;
        serialPort.DataBits = dataBits;
        serialPort.StopBits = stopBits;
        serialPort.Open();
    }

    public void SendMessage(byte slaveAddress, ushort startAddress, ushort[] data)
    {
        IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort);
        master.WriteMultipleRegisters(slaveAddress, startAddress, new RegisterCollection(data));
    }

    public ushort[] ReceiveMessage(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
    {
        IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort);
        ushort[] data = master.ReadHoldingRegisters(slaveAddress, startAddress, numberOfPoints);
        return data;
    }

    public void Disconnect()
    {
        serialPort.Close();
    }
}

RS-232 통신:
RS-232 통신도 하드웨어 제어가 필요하므로 라이브러리를 사용하여 구현하는 것이 좋습니다.C#에는 기본적으로 포함된 System.IO.Ports 네임스페이스를 사용하여 RS-232 통신을 구현할 수 있습니다. 이 네임스페이스는 SerialPort 클래스를 제공하며, 시리얼 포트를 열고 데이터를 송수신할 수 있는 기능을 제공합니다

이어서 RS-232 통신의 예제 코드입니다.

csharp
Copy code
using System.IO.Ports;

public class RS232Communication
{
    private SerialPort serialPort;

    public void Connect(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
    {
        serialPort = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
        serialPort.Open();
    }

    public void SendMessage(string message)
    {
        serialPort.WriteLine(message);
    }

    public string ReceiveMessage()
    {
        return serialPort.ReadLine();
    }

    public void Disconnect()
    {
        serialPort.Close();
    }
}
위의 예제 코드를 사용하여 C#에서 이더넷, RS-485 및 RS-232 통신을 구현하고 상호간 통신을 테스트할 수 있습니다. 필요에 따라 코드를 수정하여 특정 프로토콜이나 장치에 맞게 커스터마이즈할 수 있습니다.

I am a father of one boy and two girls living in Cheongju. We love to go "plogging" together every day. Plogging is an activity where we pick up litter while taking a walk, with the goal of preserving the environment and creating a clean community. It's a valuable time for our family to join forces.

You can find our activities on YouTube at https://www.youtube.com/@0070TV. We kindly ask for your support and encouragement.