【C#】NLS_Speed使用说明

系列文章

【C#】单号生成器(编号规则、固定字符、流水号、产生业务单号)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787

【C#】日期范围生成器(构建开始日期、结束日期)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129040663

【C#】组件化开发,调用dll组件方法
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129492112

【C#】GridControl控件和List数据集双向绑定
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129423755

【C#】数据实体类使用
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816638

【C#】单据审批流方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128972545

【C#】二维码标签制作及打印
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126884228

【C#】最全单据打印源码(设计打印模板、条形码&二维码、标签、字体)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129415723

【C#】条码管理操作手册
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126589496

【C#】WebAPI发布和IIS部署,及异常处理
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126539836

【C#】【提高编程效率】代码模板生成工具
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126890673

【C#】【提高编程效率】Excel数据批量导入数据库
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126427323

【C#】Windows服务(Service)安装及启停方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053794

【C#】穿透Session隔离,服务调用外部程序(无窗体界面解决)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053033

【C#】任务计划实现,使用Quartz类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/123667723

【C#】《周计划管理关于产前准备模块》解决方案20200203
本文链接:https://blog.csdn.net/youcheng_ge/article/details/122919543

【C#】源码解析正则表达式
本文链接:https://blog.csdn.net/youcheng_ge/article/details/118337074

【C#】软件版本和文件MD5记录(XML操作)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/112513871

【C#】测试网络是否连通
本文链接:https://blog.csdn.net/youcheng_ge/article/details/110137288

【C#】程序开发,你使用DataTable还是List?
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129792726

【C#】根据名称获取编码(Dictionary获取key)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129816701


文章目录

  • 系列文章
  • 前言
  • 一、问题描述
  • 二、解决方案
  • 三、软件开发(源码展示)
    • 3.1 Form1.cs
    • 3.2 C_ComPort.cs


前言

我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的整个生命周期都可以调用你。 可惜世上没有这样的常量,我也无法定义你,因为你在我心中是那么的具体。

哈喽大家好,本专栏为【项目实战】专栏,有别于【底层库】专栏,本专栏介绍项目开发过程中,遇到问题的解决方案,是我实际项目开发过程,相对成熟、可靠方法的提炼,我将这些问题的处理思路梳理,撰写本文分享给大家,大家遇到类似问题,可按本文方案处理。

本专栏会持续更新,不断完善,大家有任何问题,可以私信我。本专栏之间关联性较弱(文章之间依赖性较弱,没有阅读顺序区分)。如果您对本专栏感兴趣,欢迎关注吧,我将带你用最简洁的代码,实现最复杂的功能。

·提示:本专栏为项目实战篇,未接触项目开发的同学可能理解困难,不推荐阅读。

一、问题描述

NLS_Speed使用说明(C#)

二、解决方案

1.首先确定设备是chip且已经打开虚拟串口通模式连接CP
2.我的电脑右键=》设备管理=》端口号(查询设备相对应的端口号),
如下图端口号为COM10,全文将以COM10为端口号
在这里插入图片描述

3.设置端口号和波特率后,可点击打开串口,如下图
在这里插入图片描述

4.(1)所示,则虚拟串口打开成功,如果(1)显示为串口打开失败,则因查看端口是否被占用,或则端口号和波特率的正确性。
(2)显示的按钮则是打开串口和关闭串口
(3)为测试按钮,点击可出现扫描光,此时可扫描条码,扫描成功显示在下方编辑框, 超时则不显示。
(4)为连续发送模式,如设置为3000毫秒,则每三秒可扫描一次。打勾则开始,停止再次点击取消打勾。
(5)显示的读码率是:成功读码次数/总读码次数,不成功读码次数为超时
(6)处阅读时间为:手持式按键触发则是用户点击设备上的扫描键

在这里插入图片描述

三、软件开发(源码展示)

3.1 Form1.cs

using System;
using System.IO.Ports;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Collections;
using System.Collections.Generic;
using System.Management; 

namespace TestSpeed
{
    public partial class SpeedTest : Form
    {
        StringBuilder aBytesStr = new StringBuilder();
        DateTime Time1,Time2;
        int t=0, a=0;
        private Boolean flage = false;
      
        public SpeedTest()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            
            if (button1.Text == "打开串口")
            {
                ComPortInfo iComInfo = new ComPortInfo();
                iComInfo.PortName =com_box.Text;
                iComInfo.ComParity = Parity.None;
                iComInfo.ComStopBits = StopBits.One;
                iComInfo.InoupSize = 5120;
                iComInfo.OutPutSize = 1024;
                iComInfo.PortBaudRate = int.Parse(comboBox1.Text);
                iComInfo.DataBits =8;
                C_ComPort.InitComPort(iComInfo);
                if (C_ComPort.OpenCom() == false)
                {
                    label3.Text = "串口打开失败";
                    return;
                }
                this.button1.Text = "关闭串口";
                label3.Text = "串口打开成功";
                time_ret.Start();

               
            }else if (button1.Text == "关闭串口")
            {

                C_ComPort.ColseCom();

                this.button1.Text = "打开串口";
                label3.Text = "串口已经关闭";
                time_ret.Stop();
            }


        }


        private void time_ret_Tick(object sender, EventArgs e)
        {
            if (C_ComPort.ByteList.Count <= 0)
                return;

            byte[] iBytes = (byte[])C_ComPort.ByteList.Dequeue();
            OrderStr(iBytes);
        }

        private void OrderStr(byte[] OrderByte)
        {

           
            string str=System.Text.Encoding.Default.GetString(OrderByte);
            if (str != "")
            {
                if (flage)
                {
                    Time2 = DateTime.Now;
                    TimeSpan ts = Time2 - Time1;
                    string tim = "a"+ts.TotalMilliseconds.ToString();
                    int i = tim.IndexOf("a");//找a的位置
                    int j = tim.IndexOf(".");//找b的位置
                    tim = (tim.Substring(i + 1)).Substring(0, j - i - 1);//找出a和b之间的字符串
                    tim = tim.Substring(0, tim.Length - 1);
                    a++;
                    if (tim.Length == 2) {
                        tim = tim + " ";
                    }
                    txt_Ret.Text += tim + "                                " + str + "\r\n";
                    flage = false;
                }
                else {
                    a++;
                    t++;
                    txt_Ret.Text +=  "手持式按键触发                     " + str + "\r\n";
                
                }
            }

            txt_ver.Text = "读码率:" + a + "/" + t;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            flage = true;
            Time1 = DateTime.Now;
            t++;
            string iSetStr = "1b 31".ToUpper().Replace(" ", "");
            int iSetSum = iSetStr.Length / 2;
            byte[] iSetByte = new byte[iSetSum];
            for (int i = 0; i < iSetSum; i++)
            {
                string iByte = iSetStr.Substring(i * 2, 2).PadLeft(2, '0');
                iSetByte[i] = byte.Parse(iByte, System.Globalization.NumberStyles.AllowHexSpecifier);
            }

            if (C_ComPort.ComSetData(iSetByte) == false)
            {
                MessageBox.Show("发送数据失败!\n" + C_ComPort.ErrMsg, "提示");
                t--;
            }




        }

        private void button3_Click(object sender, EventArgs e)
        {
            txt_Ret.Text = "";
            t = 0;
            a= 0;
            txt_ver.Text = "读码率:" + a + "/" + t;
        }

        

        private void btnMore_CheckedChanged(object sender, EventArgs e)
        {


            if (btnMore.Checked) {
                Int32 iTime = 0;
                try
                {
                    iTime = Int32.Parse(timebox.Text);
                }
                catch (Exception Err)
                {
                    MessageBox.Show(Err.Message, "提示");
                    timebox.Focus();
                    timebox.SelectAll();
                    btnMore.Checked = false;
                    return;
                }

                timer_AutoSetData.Interval = iTime;
                timer_AutoSetData.Start();


            }
            else
            {
                timer_AutoSetData.Stop();
            }

        }

        private void timer_AutoSetData_Tick(object sender, EventArgs e)
        {
            button2_Click(null, null);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.SelectedIndex = 5;
           
        }


       
    }
}

3.2 C_ComPort.cs

using System;
using System.Collections;
using System.IO.Ports;
using System.Windows.Forms;

namespace TestSpeed
{
   public static class C_ComPort
    {
        public static Queue ByteList = Queue.Synchronized(new Queue());
        public static int JsByteSum = 0;
        public static int FsByteSum = 0;
        public static bool IsGroup = false;
        public static int OneGroupSum = 16;
        public static bool IsOpenCom 
        {
            get 
            {
                if (aSerialPor == null)
                    return false;

                return aSerialPor.IsOpen; 
            }
        }
        public static string ErrMsg
        {
            get { return aErrMsg; }
        }

        private static SerialPort aSerialPor = null;
        private static string aErrMsg = "";
        //private static C_Order aBuilderOrder = new C_Order();
        private static ComPortInfo aComInfo;

        public static void InitComPort(ComPortInfo ComSet)
        {
            aComInfo = ComSet;
            aSerialPor = new SerialPort();
            aSerialPor.BaudRate = ComSet.PortBaudRate;
            aSerialPor.DataBits = 8;
            aSerialPor.StopBits = StopBits.One;
            aSerialPor.Parity = Parity.None;
            aSerialPor.PortName = ComSet.PortName;
        }

        private static void InitComPort()
        {
            if (aSerialPor != null)
                ColseCom();

            aSerialPor = new SerialPort();
            aSerialPor.BaudRate = aComInfo.PortBaudRate;
            aSerialPor.DataBits = 8;
            aSerialPor.StopBits = StopBits.One;
            aSerialPor.Parity = Parity.None;
            aSerialPor.PortName = aComInfo.PortName;
        }

        public static bool OpenCom()
        {
            if (aSerialPor == null)
            {
                aErrMsg = "未初始化的COM对象!";
                return false;
            }

            try
            {
                aSerialPor.DataReceived += new SerialDataReceivedEventHandler(aSerialPor_DataReceived);

                aSerialPor.Open();
                JsByteSum = 0;
            }
            catch (Exception Err)
            {
                aErrMsg = Err.Message;
                return false;
            }
            return true;
        }

        public static bool ColseCom()
        {
            ByteList.Clear();

            try
            {
                if (aSerialPor != null)
                {
                    aSerialPor.DiscardInBuffer();
                    aSerialPor.DiscardOutBuffer();
                    aSerialPor.Close();
                    aSerialPor.Dispose();
                    aSerialPor = null;
                }
            }
            catch (Exception Err)
            {
                MessageBox.Show(Err.Message, "提示");
            }

            return true;
        }

        public static bool ComSetData(byte[] SetData)
        {
            if (aSerialPor == null)
            {
                aErrMsg = "未初始化COM对象";
                return false;
            }
            if (aSerialPor.IsOpen == false)
            {
                aErrMsg = "未打开的COM对象";
                return false;
            }

            aSerialPor.DiscardOutBuffer();

            try
            {
                aSerialPor.Write(SetData, 0, SetData.Length);
                FsByteSum += SetData.Length;
            }
            catch (Exception Err)
            {
                aErrMsg = Err.Message;
                return false;
            }
            return true;
        }

        public static bool ClearDataBuffer()
        {
            if (aSerialPor == null)
                return true;
            if (aSerialPor.IsOpen == false)
                return true;

            try
            {
                aSerialPor.DiscardInBuffer();
            }
            catch (Exception Err)
            {
                aErrMsg = Err.Message;
                return false;
            }

            return true;
        }

        private static void aSerialPor_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            int iByteLen = aSerialPor.BytesToRead;

            byte[] iBytes;
            if (IsGroup)
            {
                int iGroup = iByteLen / OneGroupSum;
                for (int i = 0; i < iGroup; i++)
                {
                    iBytes = new byte[OneGroupSum];
                    aSerialPor.Read(iBytes, 0, OneGroupSum);
                    JsByteSum += OneGroupSum;
                    ByteList.Enqueue(iBytes);
                }
            }
            else
            {
                iBytes = new byte[iByteLen];
                aSerialPor.Read(iBytes, 0, iByteLen);
                JsByteSum += iByteLen;
                ByteList.Enqueue(iBytes);
            }
        }

    }

    public class ComPortInfo
    {
        public string PortName = "COM1";
        public int PortBaudRate = 9600;
        public int InoupSize = 5120;
        public int OutPutSize = 1024;
        public int DataBits = 8;
        public StopBits ComStopBits = StopBits.One;
        public Parity ComParity = Parity.None;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/8076.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ToBeWritten之杂项2

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

C-NCAP 2025主动安全ADAS测试研究

中汽中心汽车测评管理中心&#xff08;简称“中汽测评”&#xff09;是负责运营C-NCAP、CCRT等测评项目的管理机构。中汽测评以引领汽车行业进步、支撑汽车强国建设为使命&#xff0c;通过独立、公正、专业、开放的测试评价&#xff0c;服务消费者&#xff0c;当好选车购车参谋…

面了 6 家大厂,并拿下 5 家 offer,进大厂好像也没有那么困难吧....

前言 二月份的时候因为换工作的缘故&#xff0c;陆续参加了华为、阿里巴巴、字节跳动、拼多多、百度、Paypal 的社招面试&#xff0c;除了字节跳动流程较长&#xff0c;我主动结束面试以外&#xff0c;其他的都顺利拿到了 Offer。 最近时间稍微宽裕点了&#xff0c;写个面经&…

【建站】手把手教你搭建惊艳的博客

系列文章目录 第一章 手把手教你搭建自己的博客 文章目录系列文章目录前言一、网站软件的选择二、网站空间的选择1. 建议选择有名、大厂的2. 上手容易&#xff0c;丰富而详实的文档3. 要稳定&#xff0c;少出问题4. 及时处理并有能力处理问题三、 环境准备四、 安装PHP81. 首先…

【OpenCV-Python】cvui 之 图像

CVUI 之 图像 Python import numpy as np import cv2 import cvuidef image_test():WINDOW_NAME Image-Test# 创建画布frame np.zeros((400, 600, 3), np.uint8)# 读取图像image cv2.imread("lena-face.jpg", cv2.IMREAD_COLOR)cvui.init(WINDOW_NAME)while True…

Spring的Bean初始化过程和生命周期

Spring的Bean初始化过程和生命周期一、Spring创建bean的流程图二、Spring创建bean的详细流程1.加载bean信息2.实例化bean3.bean属性填充4.初始化bean5.后置操作三、bean的生命周期四、总结Spring的核心功能有三点IOC、DI、AOP&#xff0c;IOC则是基础&#xff0c;也是Spring功能…

CoreDNS 性能优化

CoreDNS 作为 Kubernetes 集群的域名解析组件&#xff0c;如果性能不够可能会影响业务&#xff0c;本文介绍几种 CoreDNS 的性能优化手段。合理控制 CoreDNS 副本数考虑以下几种方式:根据集群规模预估 coredns 需要的副本数&#xff0c;直接调整 coredns deployment 的副本数:k…

【计算机视觉】图像分类模型

VIT 输入size&#xff0c;(4&#xff0c;3&#xff0c;256&#xff0c;256) &#xff0c;为了序列化输入进 transformer 中&#xff0c;利用 patch 进行分块。patch_size32。 (4&#xff0c;3&#xff0c;256&#xff0c;256) -> b c (h p1) (w p2) -> 4,3, 8 32 8 32 …

LIN节点结构和主要技术特点

文章目录前言一、CAN/LIN总线的区别二、LIN节点结构三、主要技术特点1.单线连接2.低成本3.低传输速率。小于20kb/s4.采用NRZ编码5.单主/多从媒体访问、无需仲裁。6.同步机制简单7.通信确定性。8.报文的数据长度可变。9.采用奇偶校验和求和校验相结合的双重校验机制。前言 LIN总…

VSCode修改配置(设置settings.json)汇总

1.settings.json文件在哪&#xff08;打开settings.json方式&#xff09; &#xff08;1&#xff09;C:\Users\【你电脑名字username】\AppData\Roaming\Code\User &#xff08;2&#xff09;左下角设置按钮 &#xff08;3&#xff09;文件 -> 首选项 -> 设置 在这设置…

【Linux】权限管理

文章目录&#x1f4d6; 前言1. 什么是权限2. 权限管理2.1 Linux的用户分类&#xff1a;2.2 Liunx文件的分类&#xff1a;2.3 文件的访问权限2.4 文件访问权限的相关设置方法&#xff1a;chmod对文件权限的修改chown / chgrp2.5 以八进制修改文件权限&#xff1a;2.6 默认权限&a…

用ChatGPT怎么赚钱?普通人用这5个方法也能赚到生活费

ChatGPT在互联网火得一塌糊涂&#xff0c;因为它可以帮很多人解决问题。比如&#xff1a;帮编辑人员写文章&#xff0c;还可以替代程序员写代码&#xff0c;帮策划人员写文案策划等等。ChatGPT这么厉害&#xff0c;能否用它来赚钱呢&#xff1f;今天和大家分享用ChatGPT赚钱的5…

C语言笔记5-字符串的指针

对于字符常量&#xff0c;是由一个固定内存的。 所以 指针 指向同一个内存地址。 函数中定义 void func (char *a) //字符型指针变量做参数 {}void func (char b[]) //字符数组名做参数 {} 指针变量值可以改变、但是数组首地址不可变 char *a "I love China!";…

【Vue2从入门到精通】深入浅出,带你彻底搞懂Vue2组件通信的9种方式

文章目录Vue组件间通信分类1.props / $emit1.1 父组件向子组件传值1.2 子组件向父组件传值2.$parent / $children3.ref / $refs3.1 ref作用于组件3.2 ref作用于Html标签3.3 $nextTick()4.EventBus &#xff08;$emit / $on&#xff09;4.1 初始化4.2 发送事件4.3 接收事件4.4 移…

三、线程状态【3/12】【多线程】

线程的状态3. 线程的状态3.1 观察线程的所有状态3.2 线程状态和状态转移的意义3.3 观察线程的状态和转移3. 线程的状态 3.1 观察线程的所有状态 线程的状态是一个枚举类型 Thread.State public class ThreadState {public static void main(String[] args) {for (Thread.State…

【随笔记】Win11、RTX3070、CUDA117的深度学习机器学习环境配置

文章目录一、创建深度学习 Conda 虚拟环境二、安装 Pytorch-Gpu三、安装 PyTorch Geometric四、安装 Sklearn五、Jupyter 配置5.1 将虚拟环境加入内核5.2 插件配置5.3 主题、字体、字号配置假设你已经安装了Anaconda3&#xff08;最新Anaconda3的安装配置及使用教程&#xff08…

【docx模块】python中可以处理word文档的模块

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 今天给大家带来docx模块得介绍以及使用~ 一.docx模块 Python可以利用python-docx模块处理word文档&#xff0c;处理方式是面向对象的。 也就是说python-docx模块会把word文档&#xff0c;文档中的段落、文本、字体等都看…

JDK8和JDK17安装切换,IDEA配置多个版本JDK

文章目录JAVA8不香了&#xff1f;JDK下载JDK安装配置环境变量IDEA中配置多个JDK版本JAVA8不香了&#xff1f; JAVA之父高斯林推荐我们用JDK17&#xff0c;请尽快离开JDK8。JDK17 LTS在每个维度上都是一个巨大的飞跃&#xff1a; 在Java 17正式发布之前&#xff0c;Java开发框架…

ChatGPT中文在线官网-如何与chat GPT对话

怎么下载ChatGPT中文版 ChatGPT是一种基于Transformer架构的自然语言处理技术&#xff0c;其中包含了多个预训练的中文语言模型。这些中文ChatGPT模型大多数发布在Github上&#xff0c;可以通过Github的源码库来下载并使用&#xff0c;包括以下几种方式&#xff1a; 下载预训练…

linux centos 系统提示No space left on device错误 centos清理硬盘空间

一、问题描述 线上的一个centos系统,硬盘满了,通过以下方式清理后,启动程序还是会提示No space left on device错误&#xff0c;具体请看解决方法&#xff0c;这里讲下如何清理硬盘&#xff1a; 1、查看系统磁盘是否已满 df -h 看哪个目录use到100%&#xff0c;我这里是删除过…
最新文章