Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c#上位机开发

作者:一岁就很帅   发布日期:2025-04-21   浏览:34

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();  // 关闭串口
            }
        }
    }
}

解释说明:

  1. 命名空间和类

    • using System;using System.IO.Ports; 导入了必要的命名空间。
    • MainForm 类继承自 Form,表示一个 Windows 窗体应用程序。
  2. 串口初始化

    • InitializeSerialPort() 方法用于初始化串口设置,包括端口号、波特率等参数,并尝试打开串口。
    • 使用 try-catch 块捕获可能发生的异常,如权限不足或串口不存在。
  3. 数据发送和接收

    • SendDataToPLC(string data) 方法用于向串口发送数据,通常用于与下位机(如PLC)通信。
    • ReceiveDataFromPLC() 方法用于从串口读取数据,并显示接收到的内容。
  4. 窗体关闭事件

    • MainForm_FormClosing 事件确保在窗体关闭时正确关闭串口,避免资源泄露。

这个示例代码展示了如何使用 C# 进行上位机开发,通过串口与下位机进行通信。

上一篇:c# listbox

下一篇:c# while

大家都在看

c# 二进制

c# tcp client

c# type.gettype

c# sqlconnection

.net和c#

c#游戏开发

c#网络编程

c# rectangle

c# if else

c# rtsp

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站