如何用C#写一个简易的上位机

这篇具有很好参考价值的文章主要介绍了如何用C#写一个简易的上位机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上位机的界面如下c#上位机,c#,开发语言,笔记

 有点不好看,自己可以按照自己的来设计,这里着重功能的实现

直接上代码,打开VS新建项目,选择Windows窗口应用(NET。Framework)创建好项目

c#上位机,c#,开发语言,笔记

 选择视图,打开工具箱(快捷键 Ctrl + Alt + x)

c#上位机,c#,开发语言,笔记

 在工具箱中,输入GroupBox ,拖拽到界面中,调节合适的大小,把箭头指向GroupBox的框架,c#上位机,c#,开发语言,笔记c#上位机,c#,开发语言,笔记

 右键打开属性界面,在Text中改写显示在界面的文字,然后在Font中改变字体的大小

c#上位机,c#,开发语言,笔记

 再次打开工具箱,输入ladel,拖拽6个过来界面上,依次按上面的操作把Text改成对应的名字

c#上位机,c#,开发语言,笔记

 打开工具箱,输入comboBox,拖拽5个过来界面上,依次对应每一个

c#上位机,c#,开发语言,笔记

 在工具箱中输入serialPort ,拖拽过来界面上,就会出现一下的界面,用了获取串口的信息c#上位机,c#,开发语言,笔记c#上位机,c#,开发语言,笔记

双击窗口空白处,也可以右键进入代码界面

c#上位机,c#,开发语言,笔记

 添加方法text_Serial_port()来获取电脑的串口,然后在Form1_load中调用方法,

 private void text_Serial_port()
        {
            string[] ports = System.IO.Ports.SerialPort.GetPortNames(); //获得可用的串口
            for (int i = 0; i < ports.Length; i++)
            {
                comboBox1.Items.Add(ports[i]);
            }
            comboBox1.SelectedIndex = comboBox1.Items.Count > 0 ? 0 : -1;//如果里面有数据,显示第0个
        }
private void Form1_Load(object sender, EventArgs e)
        {
            text_Serial_port();
        }

运行一下就有以下界面,如果出现右边的界面,说明电脑上没有虚拟串口,可以查询虚拟串口,有相关的资源

c#上位机,c#,开发语言,笔记c#上位机,c#,开发语言,笔记

 完成上面之后,回到界面,把箭头指向,停止位的comboBox,右键打开属性,找到ltems(集合)点击右边的(...)打开编辑器,在里面输入下面的数据(复制就行,他会自动排序)

 c#上位机,c#,开发语言,笔记c#上位机,c#,开发语言,笔记

 停止位:


1.5
2

数据位:

8
7
6
5

 波特率:

1382400
921600
460800
256000
230400
128000
115200
76800
57600
43000
38400
19200
14400
9600
4800
1200

奇偶校验:


奇校验
偶校验

全部输入后,运行以下画面

c#上位机,c#,开发语言,笔记

 在代码中添加初始化方法,并在然后在Form1_load中调用方法,运行以下结果

            private void Form1_Load(object sender, EventArgs e)
        {
            text_Serial_port();
            Initialization();
        }

        //初始化
        private void Initialization()
        {
            comboBox2.Text = "1";
            comboBox3.Text = "8";
            comboBox4.Text = "115200";
            comboBox5.Text = "奇校验";

        }

 c#上位机,c#,开发语言,笔记

 打开工具箱,输入Button,找到并拖进界面中,调整大小,并在属性中的Text中改写成(打开串口)

 c#上位机,c#,开发语言,笔记c#上位机,c#,开发语言,笔记

 把箭头指向Button,双击进入代码界面,在其中添加Button方法,即可打开串口

 //串口的开关
        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "打开串口")
            {
                try
                {
                    serialPort1.PortName = comboBox1.Text;//获取要打开的串口
                    serialPort1.BaudRate = int.Parse(comboBox4.Text);//获得波动率
                    serialPort1.DataBits = int.Parse(comboBox3.Text);//获得数据位
                    //设置停止位
                    if (comboBox2.Text == "1")
                    {
                        serialPort1.StopBits = StopBits.One;
                    }
                    else if (comboBox2.Text == "1.5")
                    {
                        serialPort1.StopBits = StopBits.OnePointFive;
                    }
                    else if (comboBox2.Text == "2")
                    {
                        serialPort1.StopBits = StopBits.Two;
                    }
                    //设置奇偶校验
                    if (comboBox5.Text == "无")
                    {
                        serialPort1.Parity = Parity.None;
                    }
                    else if (comboBox5.Text == "奇校验")
                    {
                        serialPort1.Parity = Parity.Odd;
                    }
                    else if (comboBox5.Text == "偶校验")
                    {
                        serialPort1.Parity = Parity.Even;
                    }
                    serialPort1.Open();//打开串口
                    button1.Text = "关闭串口";
                }
                catch (Exception err)
                {
                    MessageBox.Show("打开失败" + err.ToString(), "提示!");
                }
            }
            else
            {
                //关闭串口
                try
                {
                    
                        serialPort1.Close();//关闭串口

                }
                catch (Exception) { }
                button1.Text = "打开串口"; //按钮显示打开
            }
        }

 在工具箱中输入TextBox,拖到界面中,点击组件上面的小箭头,把MultiLine勾上,然后调节大小

c#上位机,c#,开发语言,笔记

c#上位机,c#,开发语言,笔记

 打开TextBox的属性,在BackColor中调节画面的颜色,在ForeColor中调节字体的颜色,这里我界面选择的是黑色,字体选择的是蓝色

 c#上位机,c#,开发语言,笔记

 将鼠标箭头指向serialPort右键打开属性,在属性页面点击那个闪电一样,在下面找到DataReceived

 c#上位机,c#,开发语言,笔记c#上位机,c#,开发语言,笔记

 双击进入代码界面,加入接收信息的方法

//读取并显示接收的信息
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            int len = serialPort1.BytesToRead; //获取可以读取的字节数

            byte[] buff = new byte[len];
            serialPort1.Read(buff, 0, len);//把数据读取到数组中
            string reslut = Encoding.Default.GetString(buff);
            //将byte值根据为ASCII值转为string
            Invoke((new Action(() =>
            {
                //还应该添加16制转化
                textBox1.AppendText(" " + reslut);     //追加显示在界面上        
            }
            )));

        }

下载一个虚拟助手XCOM测试一下效果,打开串口一个是COM1,一个是COM3,发送数据,观察是否数据显示

接下来添加清除数据和16进制显示,在工具箱中查找CheckBox,拖拽到界面中,并且把Text改成“16进制显示”

c#上位机,c#,开发语言,笔记

 在代码中添加16进制的方法,并且在刚才的 serialPort1_DataReceived中 的if中添加上判断

 //16进制显示字符串
        private string byteToHexstr(byte[] buff)
        {
            string str = "";
            try
            {
                if (buff != null)
                {

                    for (int i = 0; i < buff.Length; i++)
                    {
                        //char a = (char)buff[i];
                        //str += a.ToString();
                        str += buff[i].ToString("x2");
                        str += " ";//两个之间用空格
                    }
                    //str = new string(buff);
                    return str;
                }
            }
            catch (Exception)
            {
                return str;
            }
            return str;
        }

 if的判断ceh

//读取并显示接收的信息
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            int len = serialPort1.BytesToRead; //获取可以读取的字节数

            byte[] buff = new byte[len];
            serialPort1.Read(buff, 0, len);//把数据读取到数组中
            string reslut = Encoding.Default.GetString(buff);
            //将byte值根据为ASCII值转为string
            Invoke((new Action(() =>
            {
                if (checkBox1.Checked)//16进制转化
                {
                    textBox1.AppendText(" " + byteToHexstr(buff));
                }
                else
                {
                    textBox1.AppendText(" " + reslut);
                }
            }
            )));

        }

 测试:在虚拟串口助手中勾上16进制发送,01 02 03 04 05 ,在上位机中勾上16进制显示c#上位机,c#,开发语言,笔记

显示成功后,在工具箱中找到Button拖拽过来界面,Text改成“清除数据”,双击添加方法

c#上位机,c#,开发语言,笔记

//清除接收
        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Clear(); 
        }   

 添加发送信息的功能

从工具箱中找到TextBox并拖拽到界面,找到CheckBox改名成16进制发送 并添加两个Button改名为“发送信息”和”清除数据“

c#上位机,c#,开发语言,笔记

 添加1字符串转化16进制的方法

        //字符串转16进制
        private byte[] strToHexbytes(string str)
        {
            str = str.Replace(" ", "");//清除空格
            byte[] buff;
            if ((str.Length % 2) != 0)
            {
                buff = new byte[(str.Length + 1) / 2];
                try
                {
                    for (int i = 0; i < buff.Length; i++)
                    {
                        buff[i] = Convert.ToByte(str.Substring(i * 2, 2), 16);
                    }
                    buff[buff.Length - 1] = Convert.ToByte(str.Substring(str.Length - 1, 1).PadLeft(2, '0'), 16);
                    return buff;
                }
                catch (Exception err)
                {
                    MessageBox.Show("含有f非16进制的字符", "提示");
                    return null;
                }
            }
            else
            {
                buff = new byte[str.Length / 2];
                try
                {
                    for (int i = 0; i < buff.Length; i++)
                    {
                        buff[i] = Convert.ToByte(str.Substring(i * 2, 2), 16);
                    }
                    //buff[buff.Length - 1] = Convert.ToByte(str.Substring(str.Length - 1, 1).PadLeft(2, '0'), 16);
                }
                catch (Exception err)
                {
                    {
                        MessageBox.Show("含有非16进制的字符", "提示");
                        return null;
                    }
                }
            }

            return buff;
        }

添加发送信息的方法,并且双击Button3进入代码界面添加事件


        private void button3_Click(object sender, EventArgs e)
        {
            
                Task.Run(() => {
                    send_();
                });
        }

        string data_;
        //发送数据  
        private void send_()
        {
            data_ = textBox2.Text.ToString();
                try
                {
                    if (data_.Length != 0)
                    {
                        data_ += " ";
                        if (checkBox2.Checked) //16进制发送
                        {
                            serialPort1.Write(Encoding.Default.GetString(strToHexbytes(data_)));
                        }
                        else
                        {
                            serialPort1.Write(data_);
                            //byte[] byteArray = Encoding.Default.GetBytes(shuju);//Str 转为 Byte值
                            //serialPort1.Write(byteArray, 0, byteArray.Length, 0, null, null); //发送数据         
                        }
                    }

                }
                catch (Exception) { }         
        }

最后添加清除数据的方法

        //清除数据
        private void button4_Click(object sender, EventArgs e)
        {
            textBox2.Clear();
        }

到此,一个简易的上位机就做好了,有什么不足还请大佬指出。文章来源地址https://www.toymoban.com/news/detail-590874.html

到了这里,关于如何用C#写一个简易的上位机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# WPF上位机开发(键盘绘图控制)

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         在软件开发中,如果存在canvas图像的话,一般有几种控制方法。一种是鼠标控制;一种是键盘控制;还有一种是定时器控制。定时器控制,多常见动画、游戏、3d视频当中。而鼠标控制

    2024年02月02日
    浏览(41)
  • C# 三菱PLC上位机开发环境搭建

    一、安装软件 用到两个三菱的软件: 1. MX Component(下载地址 也可以直接在官网上搜索,注意MX后面有空格) 用于连接PLC 2. GX Works2(下载地址 用GX Works3也行) 这个软件主要是电气做PLC编程,我们用来作为仿真,省去开发时摆弄真实PLC 序列号:117-570766844 二、配置软件 MX

    2023年04月18日
    浏览(50)
  • Visual Studio 2019 C# 上位机入门(2):写一个简单的串口助手

    本文记录一下用Visual Studio 2019 C# 写一个简单的串口助手的过程,由于没有先从小处学习,而是直接找相关资料就开始做,免不了很多奇怪的问题花了一些时间,基于此情况,我将尽可能整理出更多细节,尤其是我遇到的坑,以便和我一样的新手小白上手。后续我还准备单独分

    2024年02月08日
    浏览(42)
  • C# 上位机之海康相机开发(SDK)

    发现工作中好多计算机视觉上位机项目都用海康相机,为了能够更好的学习和工作,我自己依据同事的源码和网上的一些总结编写本博客。通过本次学习,让我明白一点,无论学习什么技术都要学会自己看技术文档,而不是第一时间上网找源码。以工业相机SDK使用说明.chm为例

    2024年02月03日
    浏览(52)
  • Visual Studio 2019 C# 上位机入门(1):如何创建工程编写一个简单应用

    Visual Studio 2019下载安装步骤可以看:https://blog.csdn.net/weixin_44788542/article/details/114271126 这里不赘述,默认电脑上已经安装好了。 1、打开安装好的Visual Studio后,选择创建新项目。 2、找到选择C#下面的Windows 窗体应用,然后下一步起名和文件存放位置 如果找不到Windows 窗体应用,

    2024年02月05日
    浏览(54)
  • C# WPF上位机开发(Web API联调)

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         很多时候,客户需要开发的不仅仅是一个上位机系统,它还有其他很多配套的系统或设备,比如物流小车、立库、数字孪生等一整套系统。这个时候,上位机系统就需要和各个子系统

    2024年01月20日
    浏览(42)
  • C# | 上位机开发新手指南(五)校验算法——CRC

    当我们在进行数据传输时,可能会因为信道噪声、干扰等因素导致数据出现错误,从而影响传输的可靠性和准确性。此时,我们需要一种方法来检测数据是否出现错误,并尽可能快速地发现和纠正错误。CRC(Cyclic Redundancy Check)校验算法就是一种常用的数据校验方法,它通过

    2024年01月18日
    浏览(55)
  • 自动化PLC工程师能否转到c#上位机开发?

    成功从自动化PLC工程师转向C#上位机开发的经历可能因人而异,以下是一些分享的思路和建议: 扩展编程技能:学习C#语言和相关的开发工具和框架,掌握语言的基础知识和常用的编程技巧。可以通过在线教程、培训课程、书籍等途径进行学习,并积极实践和项目经验。 系统

    2024年02月11日
    浏览(55)
  • C#上位机与欧姆龙PLC的通信12----【再爆肝】上位机应用开发(WPF版)

    继上节完成winform版的应用后,今天再爆肝wpf版的,看看看。 可以看到,wpf的确实还是漂亮很多,现在人都喜欢漂亮的,颜值高的,现在是看脸时代,作为软件来说,是交给用户使用的,UI自然是要讲究,可以看出,wpf比winform漂亮多了,因为wpf使用样式css来美化界面,虽然这

    2024年01月16日
    浏览(46)
  • C#上位机与欧姆龙PLC的通信11----【爆肝了】上位机应用开发(Winform版)

    前面10讲,让你爽煹了肝,已经进入最后收尾阶段,这节来个常规应用,让前面的技能直接飞上天,我们要做的界面软件是这样的,虽然没有潘金莲漂亮,但也是爆抱: 这里经过与PLC电气硬件工程师沟通,明确了这3个区的寄存器代表的含义,具体哪些寄存器存放的是什么数据

    2024年01月23日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包