using System;
using System.IO.Ports;
using System.Windows.Forms;
namespace CSharpSCADA
{
    public partial class MainForm : Form
    {
        private SerialPort serialPort;
        public MainForm()
        {
            InitializeComponent();
            InitializeSerialPort();
        }
        private void InitializeSerialPort()
        {
            // 初始化串口设置
            serialPort = new SerialPort
            {
                PortName = "COM1",  // 设置串口号
                BaudRate = 9600,   // 设置波特率
                Parity = Parity.None,
                DataBits = 8,
                StopBits = StopBits.One,
                Handshake = Handshake.None,
                ReadTimeout = 500,
                WriteTimeout = 500
            };
            try
            {
                serialPort.Open();  // 打开串口
                MessageBox.Show("串口打开成功!");
            }
            catch (UnauthorizedAccessException)
            {
                MessageBox.Show("无法访问指定的串口,请检查权限或是否被占用。");
            }
            catch (IOException)
            {
                MessageBox.Show("串口不存在或已被占用。");
            }
            catch (Exception ex)
            {
                MessageBox.Show($"发生错误: {ex.Message}");
            }
        }
        private void SendDataToPLC(string data)
        {
            if (serialPort.IsOpen)
            {
                try
                {
                    serialPort.WriteLine(data);  // 发送数据到下位机(例如PLC)
                    MessageBox.Show("数据发送成功!");
                }
                catch (TimeoutException)
                {
                    MessageBox.Show("发送超时,请检查连接。");
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"发送失败: {ex.Message}");
                }
            }
            else
            {
                MessageBox.Show("串口未打开,请先初始化串口。");
            }
        }
        private void ReceiveDataFromPLC()
        {
            if (serialPort.IsOpen)
            {
                try
                {
                    string receivedData = serialPort.ReadLine();  // 从下位机接收数据
                    MessageBox.Show($"接收到的数据: {receivedData}");
                }
                catch (TimeoutException)
                {
                    MessageBox.Show("接收超时,请检查连接。");
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"接收失败: {ex.Message}");
                }
            }
            else
            {
                MessageBox.Show("串口未打开,请先初始化串口。");
            }
        }
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (serialPort != null && serialPort.IsOpen)
            {
                serialPort.Close();  // 关闭串口
            }
        }
    }
}命名空间和类:
using System; 和 using System.IO.Ports; 导入了必要的命名空间。MainForm 类继承自 Form,表示一个 Windows 窗体应用程序。串口初始化:
InitializeSerialPort() 方法用于初始化串口设置,包括端口号、波特率等参数,并尝试打开串口。try-catch 块捕获可能发生的异常,如权限不足或串口不存在。数据发送和接收:
SendDataToPLC(string data) 方法用于向串口发送数据,通常用于与下位机(如PLC)通信。ReceiveDataFromPLC() 方法用于从串口读取数据,并显示接收到的内容。窗体关闭事件:
MainForm_FormClosing 事件确保在窗体关闭时正确关闭串口,避免资源泄露。这个示例代码展示了如何使用 C# 进行上位机开发,通过串口与下位机进行通信。
上一篇:c# listbox
下一篇:c# event
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站