C#winform上位机开发学习笔记5-串口助手的定时发送功能添加

这篇具有很好参考价值的文章主要介绍了C#winform上位机开发学习笔记5-串口助手的定时发送功能添加。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.功能描述

C#winform上位机开发学习笔记5-串口助手的定时发送功能添加,学习,笔记,winform,C#,上位机,嵌入式

选择自动发送功能后,按照设定的发送时间发送发送框中的信息数据,设定时间可以手动输入,当手动输入信息无效(非数字)时,系统弹出错误提示,并将其设置为默认定时时间。

2.代码部分

步骤1:增加计时器空间Timer

C#winform上位机开发学习笔记5-串口助手的定时发送功能添加,学习,笔记,winform,C#,上位机,嵌入式

步骤2:使能计时器,默认设置定时时间为1秒

C#winform上位机开发学习笔记5-串口助手的定时发送功能添加,学习,笔记,winform,C#,上位机,嵌入式

注:这里在测试时出现错误,默认使能应该关闭,如果一开始就开启,那在软件打开时会自动启动定时发送数据!!!默认使能,点击定时发送选择框才会使能。

C#winform上位机开发学习笔记5-串口助手的定时发送功能添加,学习,笔记,winform,C#,上位机,嵌入式

步骤3:组合框设置默认复选信息

C#winform上位机开发学习笔记5-串口助手的定时发送功能添加,学习,笔记,winform,C#,上位机,嵌入式

步骤4:编写选择框事件函数

        //自动发送事件
        private void checkBox27_CheckedChanged(object sender, EventArgs e)
        {
            //启动定时器发送
            if (checkBox27.Checked == true)
            {
                textBox1.AppendText("[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "->");
                textBox1.AppendText("启动定时发送!\r\n");

                //设定定时参数
                try
                {
                    //将组合框中的数据转换为整型赋值给定时器参数
                    timer3.Interval = Convert.ToUInt16(comboBox15.Text, 10);
                }
                catch
                {
                    //出错提示
                    MessageBox.Show("输入时间有误,设定为默认值", "提示");
                    comboBox15.Text = "1000";
                    timer3.Interval = 1000;
                }
                //启动定时器
                timer3.Start();
            }
            //关闭定时器发送
            else
            {
                textBox1.AppendText("[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "->");
                textBox1.AppendText("关闭定时发送!\r\n");
            }
            //关闭定时器
            timer3.Stop();
        }

步骤5:自动发送定时器函数

采用两种方式,其一是将发送按钮的函数代码copy,其二是直接调用发送按钮事件函数

生成按钮单击事件:

                //实现方式2:生成发送按钮事件
                button29.PerformClick();

//定时发送定时器函数
        private void timer3_Tick(object sender, EventArgs e)
        {
            if(false)
            {
             //实现方法1:直接调用发送按钮中的程序--------------------------------------------------------------------------
            byte[] data = new byte[1];//发送函数需要定义数组首地址
            //发送格式为ASCII
            if (!checkBox24.Checked)//复用框没有被选择时
            {
                try
                {
                    //支持中文输出
                    Encoding Chinese = System.Text.Encoding.GetEncoding("GB2312");//定义一个可以进行中文编码的变量
                    byte[] Sendbytes = Chinese.GetBytes(textBox5.Text);//将发送框的内容编译为中文

                    //遍历发送用法
                    foreach (byte Member in Sendbytes)//循环函数
                    {
                        data[0] = Member;
                        serialPort1.Write(data, 0, 1);//单字节发送
                    }
                    //发送回车换行
                    if (checkBox26.Checked)//发空复选框
                    {
                        data[0] = 0x0D;//发送回车
                        serialPort1.Write(data, 0, 1);
                        data[0] = 0x0A;//发送换行
                        serialPort1.Write(data, 0, 1);
                    }
                    //统计发送字节数
                    UInt32 SBytes = Convert.ToUInt32(textBox6.Text, 10);//定义发送字节数变量,并初始化为已接收字节数
                    SBytes += (UInt32)Sendbytes.Length;//加ASCII码字节数
                    if (checkBox26.Checked == true)//加回车换行2个字节
                        SBytes += 2;
                    textBox6.Text = Convert.ToString(SBytes, 10);//显示总发送字节数
                }
                catch
                {
                    textBox1.AppendText("\r\n串口数据发送错误!\r\n");
                    //textBox5.Text = "";//若出现错误不清空发送框的内容

                    //串口按钮显示为关闭
                    serialPort1.Close();
                    button2.BackgroundImage = Properties.Resources.Image_CloseSerial;
                    button2.Tag = "OFF";
                    timer1.Stop();//串口关闭情况下关闭串口有效检测功能
                }
            }
            //发送格式为HEX
            else
            {
                //处理字符串
                string Buf = textBox5.Text;
                Buf = Buf.Replace("0x", string.Empty);//将buf中的0x替换为空格,消除0x的不规范书写方式
                Buf = Buf.Replace("0X", string.Empty);
                Buf = Buf.Replace(" ", string.Empty);
                byte[] Calculate_CRC = new byte[(Buf.Length - Buf.Length % 2) / 2];//CRC缓存区

                textBox5.Text = " ";
                //循环发送
                for (int i = 0; i < (Buf.Length - Buf.Length % 2) / 2; i++)//取余运算作用是防止用户输入的字符为奇数个
                {

                    textBox5.AppendText(Buf.Substring(i * 2, 2) + " ");//Buf.Substring为Buf的子字符串,长度为2
                    try
                    {
                        data[0] = Convert.ToByte(Buf.Substring(i * 2, 2), 16);//将字符串转换为十六进制的整型
                        serialPort1.Write(data, 0, 1);//单字节发送
                        Calculate_CRC[i] = data[0];//CRC参数赋值
                    }
                    catch
                    {
                        textBox1.AppendText("\r\n串口数据发送错误!\r\n");
                        //textBox5.Text = "";//若出现错误不清空发送框的内容
                        //串口按钮显示为关闭
                        serialPort1.Close();
                        button2.BackgroundImage = Properties.Resources.Image_CloseSerial;
                        button2.Tag = "OFF";
                        timer1.Stop();//串口关闭情况下关闭串口有效检测功能
                    }
                }
                //发送CRC
                if (checkBox25.Checked)
                {
                    UInt32 CRC = Crc_Check(Calculate_CRC, (byte)Calculate_CRC.Length);//crc计算
                    byte CRC_H = (byte)(CRC >> 8);
                    byte CRC_L = (byte)CRC;
                    try
                    {
                        data[0] = CRC_L;
                        serialPort1.Write(data, 0, 1);//发送低位
                        data[0] = CRC_H;
                        serialPort1.Write(data, 0, 1);//发送高位
                    }
                    catch
                    {
                        textBox1.AppendText("\r\n串口数据发送错误!\r\n");
                        //textBox5.Text = "";//若出现错误不清空发送框的内容
                        //串口按钮显示为关闭
                        serialPort1.Close();
                        button2.BackgroundImage = Properties.Resources.Image_CloseSerial;
                        button2.Tag = "OFF";
                        timer1.Stop();//串口关闭情况下关闭串口有效检测功能
                    }
                }
                //统计发送字节数
                UInt32 SBytes = Convert.ToUInt32(textBox6.Text, 10);//定义发送字节数变量,并初始化为已接收字节数
                SBytes += (UInt32)Calculate_CRC.Length;//加HEX字节数  
                //byte[] Calculate_CRC = new byte[        (Buf.Length - Buf.Length % 2)        / 2];//同等替用
                if (checkBox25.Checked == true)//加CRC校验2个字节  
                    SBytes += 2;
                textBox6.Text = Convert.ToString(SBytes, 10);//显示总发送字节数
            }
            //发送完清空
            if (checkBox23.Checked)//发空复选框
            {
                textBox5.Text = "";
            }
        //实现方式1程序止--------------------------------------------------------------------------
            }
            else
            {
                //实现方式2:生成发送按钮事件
                button29.PerformClick();
            }
        }

步骤6:编写组合框事件函数

//设置定时时间事件
        private void comboBox15_SelectedIndexChanged(object sender, EventArgs e)
        {
            //设定定时参数
            //将组合框中的数据转换为整型赋值给定时器参数
            timer3.Interval = Convert.ToUInt16(comboBox15.Text, 10);
        }

3.完整代码

代码部分已是完整代码

4.测试结果

正常根据选择时间定时发送数据

C#winform上位机开发学习笔记5-串口助手的定时发送功能添加,学习,笔记,winform,C#,上位机,嵌入式

C#winform上位机开发学习笔记5-串口助手的定时发送功能添加,学习,笔记,winform,C#,上位机,嵌入式

输入定时时间为非数字时弹出提示框

C#winform上位机开发学习笔记5-串口助手的定时发送功能添加,学习,笔记,winform,C#,上位机,嵌入式

参考自B站硬件家园文章来源地址https://www.toymoban.com/news/detail-816834.html

到了这里,关于C#winform上位机开发学习笔记5-串口助手的定时发送功能添加的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【个人笔记】51单片机串口通信的字符串接收和发送,串口通信调节数码管显示时钟(串口通信,定时器,数码管)

           目的:利用PROTUES仿真软件、串口调试助手、虚拟串口,搭建单片机与PC通信仿真平台,熟悉单片机串口的配置及与PC机的通信方法;尝试制定通信协议,单片机根据通信协议解析接收到的内容,并根据接收的指令执行相应的操作。 基本功能: 1.时分秒的动态显示。

    2024年02月11日
    浏览(37)
  • Visual Studio 2019 C# 上位机入门(2):写一个简单的串口助手

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

    2024年02月08日
    浏览(31)
  • 18、江科大stm32视频学习笔记——USART串口发送&串口发送和接收

    目录 一、USART串口发送  1、电路图 2、printf函数的移植方法 3、serial.c 4、main.c 5、解决直接写汉字,编译器报错 二 、USART串口发送和接收 1、查询实现 2、中断实现  (1)在Serial.c中添加的代码 (2)主函数中调用 (3)思路 (4)完整的Serial.c代码 (5)mian.c  要交叉连接,所

    2023年04月08日
    浏览(46)
  • QT三驾马车(一)——实现上位机(串口数据发送和接收)

    以后同学们做项目一定会用到QT的三驾马车,QT的三驾马车即QT的串口编程,QT的网络编程和QT的GPIO,今天我们通过一个项目来介绍第一部分,QT的串口编程。 之前看过很多相关的文章,但是按照顺序来编译总是会出错,可是我自己还找不到原因,对于我这种新手小白来说极其

    2024年02月15日
    浏览(36)
  • 串口通信——串口助手发送正数/负数(以ascii码的形式发送或者以16进制形式发送),最后展示出发送的数

    1.串口助手发送一个数(发送的形式是ascii码),最后除以100展示这个数,如发送一个-29987,最后要展示出-299.87。 2.串口助手发送一个数(发送的形式是16进制),最后除以100展示这个数,如发送一个-3,最后要展示出-0.03。 其中串口是USART1,其端口是GPIOA,引脚是PIN9、PIN10,

    2023年04月23日
    浏览(36)
  • FPGA学习笔记(三)——串口通信之发送数据(调试过程)

    本学习笔记主要参考小梅哥B站教学视频,网址如下: https://www.bilibili.com/video/BV1va411c7Dz?p=1 使用的编译器为Vivado,HDL语言为verilog 一、串口通信之发送数据 原理 设计代码 测试代码 仿真结果 发现Send_en拉高之前,uart_tx就置为0了,不符合常理。 转到第二个发送信号处,发现Send

    2023年04月09日
    浏览(36)
  • 蓝牙串口调试助手通过PC蓝牙发送数据给ESP32同时在串口上显示

    OK,好久没有更新Blog啦 今天把之前积累的代码放上,给需要学习的程序猿们使用 我还是不太喜欢写文字,倒是比较喜欢客套,哈哈 硬件图: ESP32和USB-micro-B数据线一根 蓝牙串口调试助手通过PC蓝牙发送数据给ESP32同时在串口上显示 具体代码如下:

    2024年02月09日
    浏览(35)
  • 【嵌入式知识08】STM32的USART串口通信,给上位机连续发送Hello Windows!

    本文主要介绍串口协议和RS-232、485标准,以及RS232、485电平与TTL电平的区别,了解\\\"USB/TTL转232\\\"模块的工作原理;并完成一个STM32的USART串口通讯程序。   串口通信(Serial Communication)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。尽管比按字节(byte)的并行通信

    2024年02月13日
    浏览(39)
  • STM32学习笔记 IO口模拟串口 (接收采用定时器方式)

            硬件:基于STM32F407VET6编写         软件:使用两个GPIO口,一个用作串口发送TX,一个用作串口接收RX,采用的是定时器模拟                     时序。          要模拟串口,首先肯定是需要了解串口的协议,根据协议来编写程序。                  UART的

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

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

    2024年01月23日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包