我是靠谱客的博主 淡淡啤酒,最近开发中收集的这篇文章主要介绍C# 控制新大陆扫码器自动扫码读取序列号,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在开始代码前先要准备好两件事:

首先,要安装新大陆的相应驱动,使得COM口能识别到扫码器。

其次,将扫码器切换到代码控制的自动扫码模式。这个找厂家要一下就行,他们会给你一串码,用扫码器扫一下这些码就能进行切换。

OK,下面开始代码。核心就是将扫码器作为COM口,通过发送指令来控制其扫码并获取扫码结果。

/// <summary>
/// 串口,用于操作扫码器
/// </summary>
private System.IO.Ports.SerialPort _scannerPort;


/// <summary>
/// 新大陆的扫码指令
/// </summary>
private const string NEWLAND_COMMAND_READ_CODE = "01-54-04"; 


public string ScanSN( )
{
    string returnText = "";

    // ------ 创建串口对象 ------

    _scannerPort = new System.IO.Ports.SerialPort();
    _scannerPort.PortName = "COM4"; // 需要修改为对应的值
    _scannerPort.BaudRate = 9600;
    _scannerPort.DataBits = 8;
    _scannerPort.Parity = Parity.None;
    _scannerPort.StopBits = StopBits.One;
    _scannerPort.DtrEnable = false;

    // ------ 打开串口(注意捕获可能的错误,这里忽略) ------ 
    _scannerPort.Open();


    // ------ 执行扫码指令启动扫码器扫码 ------ 

    // 清空接收缓冲区
    _scannerPort.DiscardInBuffer();

    // 发送命令
    byte[] commandByte = NEWLAND_COMMAND_READ_CODE.Split('-').AsParallel().Select(x => Convert.ToByte(x, 16)).ToArray();
    _scannerPort.Write(commandByte, 0, commandByte.Length);
    while (_scannerPort.BytesToWrite > 0)
    {
        System.Threading.Thread.Sleep(1);
    }

    // ------ 读取扫码结果 ------ 

    // 延时等待接收缓冲区有数据
    System.Diagnostics.Stopwatch timerWatch = new System.Diagnostics.Stopwatch();
    timerWatch.Start();
    while (_scannerPort.BytesToRead <= 0)
    {
        System.Threading.Thread.Sleep(1);
        if (timerWatch.ElapsedMilliseconds > 5000) { break; }
    }
    timerWatch.Stop();
    timerWatch = null;

    // 读缓冲区内容
    if (_scannerPort.BytesToRead > 0)
    {
        byte[] m_recvBytes = new byte[_scannerPort.BytesToRead]; // 定义缓冲区大小
        int result = _scannerPort.Read(m_recvBytes, 0, m_recvBytes.Length); // 从串口读取数据
        if (result > 0)
        {
            returnText = Encoding.ASCII.GetString(m_recvBytes, 0, m_recvBytes.Length); // 对数据进行转换
            _scannerPort.DiscardInBuffer();
            returnText = returnText.Replace("n", "");
            returnText = returnText.Replace("r", "");
        }
    }

    return returnText;
}
 

最后

以上就是淡淡啤酒为你收集整理的C# 控制新大陆扫码器自动扫码读取序列号的全部内容,希望文章能够帮你解决C# 控制新大陆扫码器自动扫码读取序列号所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部