C#上位机系列(4)—示波器一新窗口的建立

本文是讲解C#.net平台的Winform框架下的第四个内容,手把手介绍上位机项目的创建方式以及一些写软件时常用的功能,讲解从零开始的每一个步骤。

本次介绍上位机中新窗口的建立方式和软件示波器的代码原理

从此节开始,所有代码附后

1.新窗口的建立

一般上位机可以和其他功能在同一个窗口下显示

然而随着功能逐渐复杂后,需要新建一个独立的窗口来完成示波器的功能。

新建一个用于打开新窗口的按键

C#上位机系列(4)—示波器一新窗口的建立_第1张图片

C#上位机系列(4)—示波器一新窗口的建立_第2张图片

 双击Button按钮,后面编写新窗体函数

C#上位机系列(4)—示波器一新窗口的建立_第3张图片

 创建一个新的窗口

C#上位机系列(4)—示波器一新窗口的建立_第4张图片

C#上位机系列(4)—示波器一新窗口的建立_第5张图片

 给窗口加上标签C#上位机系列(4)—示波器一新窗口的建立_第6张图片

 回到主窗口的函数,声明一个新窗体实例

C#上位机系列(4)—示波器一新窗口的建立_第7张图片

回到主窗口按键的函数,添加如下代码创建并开启新窗口

 为了避免多次创建,需要判断当前新窗口是否存在C#上位机系列(4)—示波器一新窗口的建立_第8张图片

 运行程序,可以开启关闭试一试

C#上位机系列(4)—示波器一新窗口的建立_第9张图片

2.示波器代码原理

前期粗略展示

C#上位机系列(4)—示波器一新窗口的建立_第10张图片

 所有的图像无非是一帧一帧的动画组成的

一帧动画由点线面和各种图案文字组成

为了画出这图案,就需要知道点的坐标,和其他的一些绘图参数(如颜色等)

图案分为两组,一种是固定不变的(背景图案),还有不断变化的(波形曲线)

对于一个窗口的来说,左上角即为坐标原点,既(0,0),往右是x轴,往下是Y轴

了解了这些基本原理,下一节便可以在新窗口中进行作图了

附主窗口功能代码供参考

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WinForms_Start1
{
    public partial class Form1 : Form
    {
        int a = 1;//用于定时器计数

        FormScope form_Scope;        //声明一个示波器窗口的类

        public Form1()
        {
            InitializeComponent();//窗口初始化
            //这里我们设置两个串口,一个发送,另一个接受
            //设置串口1参数
            serialPort1.PortName = "COM1"; //端口为串口一
            serialPort1.BaudRate = 9600;   //波特率9600
            serialPort1.Parity = System.IO.Ports.Parity.None;  //校验位无
            serialPort1.DataBits = 8;   //数据位8
            serialPort1.StopBits = System.IO.Ports.StopBits.One;  //停止位1
            //设置串口2参数                                               
            serialPort2.PortName = "COM2"; //端口为串口二
            serialPort2.BaudRate = 9600;   //波特率9600
            serialPort2.Parity = System.IO.Ports.Parity.None;  //校验位无
            serialPort2.DataBits = 8;   //数据位8
            serialPort2.StopBits = System.IO.Ports.StopBits.One;  //停止位1

            //serialPort1.Open();  //打开串口1
            //serialPort2.Open();  //打开串口2

        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            a++;
            //lbl1.Text = a.ToString();
        }
        //发送按钮
        private void btn_send_Click(object sender, EventArgs e)
        {
            byte[] b = new byte[1];  //创建一个保存发送数据的字节数组
            b[0] = Convert.ToByte(textBox3.Text);   //将发送文本框里的数字存入数组
            serialPort1.Write(b,0,1);   //发送
        }
        //接受按钮
        private void btn_receive_Click(object sender, EventArgs e)
        {
            byte[] buffer = new byte[serialPort2.BytesToRead];//创建一个保存接受数据的字节数组
            serialPort2.Read(buffer, 0, buffer.Length);   //将接受的数据保存到数组中
            textBox2.Text = buffer[0].ToString();//读一个字节
        }
        //新窗口
        private void btn_Scope_Click(object sender, EventArgs e)
        {
            //新窗口开启函数
            if (form_Scope == null)//Displayer = null则为第一次创建
            {
                form_Scope = new FormScope();//实例化
                form_Scope.Show(); //显示窗口
            }
            else
            {
                if (form_Scope.IsDisposed)//多次创建通过判断IsDisposed确定是否已关闭,避免多次创建
                {
                    form_Scope = new FormScope();
                    form_Scope.Show(); //显示窗口
                }
            }
        }
    }
}

你可能感兴趣的:(C#工控上位机系列,c#,开发语言)