C# 扫码器串口对接

我们公司写web的系统,要嵌入到别人的桌面系统中,现在有业务要做扫码功能。

在某宝上找了一个支持二次开发,并且是usb的(有串口的直接对接,但是一般电脑都没有这个接口放弃,找了一个usb的厂家)

 

该厂家usb接口是需要一个操作安装一个驱动来虚拟一个串口,以上步骤就跳过了,上代码先。

        /// <summary>
        /// 连接串口
        /// </summary>
        /// <param name="name">串口名称</param>
        public void SerialPortConn(string name)
        {
            SerialPort serialPort = new SerialPort(name);
            serialPort.DataReceived += (object sender, SerialDataReceivedEventArgs e) =>
            {
                /**
                 * 这里面是扫码器传过来的
                 */
                SerialPort sp = (SerialPort)sender;
                byte[] buffer = new byte[sp.BytesToRead];
                sp.Read(buffer, 0, sp.BytesToRead);
                // 这个判断是一般二维码比这个长,而这个长度更多的是扫码器系统的反馈
                if (buffer.Length == 6 || buffer.Length == 7)
                {
                    // 初步判定这里是扫码器的内容
                    // 扫码器的内容是16进制,所以要用不一样的方式解码去判断
                    string str = BitConverter.ToString(buffer);
                    if (str == "04-D0-00-00-FF-2C")
                    {
                        MessageBox.Show("设置成功");
                        return;
                    }
                    else if (str == "05-D1-00-00-01-FF-29")
                    {
                        MessageBox.Show("设置失败");
                        return;
                    }
                    // 上面没有命中的话,就单单做是二维码内容
                    string content = System.Text.Encoding.UTF8.GetString(buffer);

                    // content 是二维码内容,开始你自己的业务吧
                }
            };
            serialPort.Open();
        }

        /// <summary>
        /// 发送指令
        /// </summary>
        /// <param name="bytes"></param>
        private void send(byte[] bytes)
        {
            serialPort.Write(bytes, 0, bytes.Length);
        }
        /// <summary>
        /// 发送指令
        /// </summary>
        /// <param name="cmd"></param>
        private void send(string cmd)
        {
            serialPort.Write(cmd);
        }

我对接的厂家是16进制的指令,文档描述是这样子的

代码是这样子写的,自己模仿模仿吧,我也不知道怎么说给你听了(还是说一下吧,就是字节数组,只是数组的每一项前面加一个x0)

var bytes = new byte[] {
            0x07,
            0xC6,
            0x04,
            0x08,
            0x00,
            0x8C,
            0x02,
            0xFE,
            0x99,
};
send(bytes);

这样就可以了。

 

====================================================================================

估计要被打死,上面的name怎么来,这个是自己捣鼓的,应该有更好的方案,当时我没有找到,暂时还没有用,先用着我的简单的方案先吧

大致思路是借助设备的串口,发送指令之后会有回应,得到正确的回应为我们要的设备,代码就不贴完整的了,看上面的代码自己整吧

// 获取所有串口的名称
string[] PortItems = SerialPort.GetPortNames();

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值