概述
在开始代码前先要准备好两件事:
首先,要安装新大陆的相应驱动,使得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# 控制新大陆扫码器自动扫码读取序列号所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复