《Visual Studio Installer》物联网工程关键技术实现低频卡门禁系统

设计界面要具备开关串口的功能,串口协议默认(19200,8位数据宽度,1位停止位,无校验);要具备读取卡号(卡信息)的功能;可以对新卡进行注册;可以对已经注册的卡进行注销;手动读取卡数据(每个小组设定的读卡块位置不同,数据也不同);对读取到的数据进行判断,并正确显示“开门”或“禁止入内”等信息。

介绍

本次我们要做的是用低频卡实现模拟小区门禁系统的作业。随着感应卡技术的发展,门禁系统得到了飞跃式的发展,进入了成熟期,出现了感应卡式门禁系统,它在安全性,方便性,易管理性等方面优势显著,门禁系统的应用领域也越来越广。

课前准备

首先我们要安装Visual Studio Installer这款软件,我们可以在电脑自带的应用商店里下载,也可以在微软官网下载。
官网下载地址:http://b.zhr33.cn/vs/
我们进入官网后可以看到十个版本,我们根据自己电脑配置安装合适的版本,在安装手册里可以看见每个版本所需要的电脑配置参数, 这样我们就能很容易选出我们适合安装的版本(如果你以前用过此软件,对某个版本很熟悉,如果官网没有这个版本,你也可以去微信搜索安装)。安装完成软件后,点快捷方式进入软件,Visual Studio分为社区版、专业版、企业版3个版本,社区版无需激活码 ,我们初学者就用社区版。选了社区版本之后你还要在里面安装模块组件功能扩展包,通常我们安装ASP.NET和Web开发、.NET桌面开发、通用Windows平台开发。讲完了安装,我们之后就可进行我们项目的创建了。

1、门禁系统逻辑框图,工作流程

开始创建项目之前,我们先来了解一下门禁系统工作流程
门禁系统工作流程

2、初步了解低频卡电子标签通信协议,命令解析

2.1、电子标签通信协议

我们先来了解主从命令的描述,看一下我们要修改模块所要发送的命令:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2、NewLab平台通信协议

NewLab平台通信协议

2.3、CRC16校验

对于没一串数据,我们CRC16校验都是不同的,我们也很难去了解具体的计算过程,那么我们就可以利用软件去帮我们完成CRC16校验。
CRC16校验链接:http://www.ip33.com/crc.html
使用方法入如下图:
CRC校验工具使用
上面这些就是我们要在课程之前先要了解的步骤了。

3、软件设计

3.1、界面设计

我们使用Visual Studio Installer软件创建windos窗体应用,大概解释下面这个样子:
界面设计
使用控件时,一定要做好控件的命名,不会的可以去查控件命名手册链接地址:https://www.cnblogs.com/netserver/p/4564010.html,这是我们刚开始接触时老师就反复强调的事项。

3.2、代码部分

窗体主函数部分Form代码:

String[] port = SerialPort.GetPortNames();
            for (int i = 0; i < port.Length; i++) {cboxSerialPort.Items.Add(port[i]);}
            if (port.Length != 0) cboxSerialPort.SelectedItem = 0;

            if (!com1.IsOpen)
            {
                btnOpen.BackColor = Color.Red;
            }

打开串口(btnOpen)代码:

if (!com1.IsOpen)                        //判断串口是否打开
            {
                com1.PortName = cboxSerialPort.Text;       //先获取端口号
                com1.BaudRate = 115200;                 /*int.Parse(comboBox2.Text);*/     //获取选项框2的文本信息,并转换成整数;
                com1.DataBits = 8;                             //设置数据位宽             
                com1.StopBits = StopBits.One;                  //设置停止位
                com1.Parity = Parity.None;                     //设置奇偶校验 
                com1.Open();                                   //设置协议完成,打开端口
                btnOpen.Text = "关闭端口";
                btnOpen.BackColor = Color.Green;
                button2.Enabled = true;
                btnRegister.Enabled = true;
                timer1.Enabled = true;
                /*com1.DataReceived += new SerialDataReceivedEventHandler(button3_Click);*/
            }

            else if (com1.IsOpen)
            {
                com1.Close();
                btnOpen.Text = "打开端口";
                btnOpen.BackColor = Color.Red;
                button2.Enabled = false;
                label1.Text = "";
                timer1.Enabled = false;

            }

注册(btnRegister)代码:

txtDisplay.Text = " ";
            byte[] buff = new byte[] { 0xff, 0x55, 0x00, 0x00, 0x03, 0x04, 0x05, 0x01, 0x00, 0x00, 0x44, 0x66, 0x9D, 0xEF };
            com1.Write(buff, 0, buff.Length);
            label1.Text = "注册完成!";

读卡(btnCardRead)代码:

txtDisplay.Text = " ";
            byte[] buff = new byte[] { 0xff, 0x55, 0x00, 0x00, 0x03, 0x03, 0x01, 0x01, 0x0E, 0x70 };
            com1.Write(buff, 0, buff.Length);
            label1.Text = "读卡成功";

注销(btnOff)代码:

txtDisplay.Text = " ";
            byte[] buff = new byte[] { 0xff, 0x55, 0x00, 0x00, 0x03, 0x04, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0C };
            com1.Write(buff, 0, buff.Length);
            label1.Text = "注销成功";

时间控件(timer)代码:

if (com1.BytesToRead != 0)
            {
                int len = com1.BytesToRead;
                byte[] buffer = new byte[len];
                com1.Read(buffer, 0, len);

                if (buffer[9] == 0x44 && buffer[10] == 0x66)
                {
                    btnAccessControl.Text = "开门";
                    btnAccessControl.BackColor = Color.Green;
                }
                else
                {
                    btnAccessControl.Text = "禁止入内";
                    btnAccessControl.BackColor = Color.Red;
                }

                for (int i = 0; i < len; i++)
                {
                    txtDisplay.Text += buffer[i].ToString("X").PadLeft(2, '0') + " ";
                }
            }

注意:通信命令协议
我们看见代码块里面有很多这样的0Xxx的数据,这就是电子标签通信协议,文章前面也有部分协议,大家对电子标签通信协议一定要记住,只有写了才能读出相应数据块的信息。

4、硬件设计

4.1、连接硬件

当我们用连接线将硬件连接好后(连接位置如下图),接通电源,NEWLab平台波动开关置于“通信模式”,放上低频卡,点击我们设置的界面,就可以完成低频卡的读卡、写卡,注册和注销了。
连接
到这里我们这次的实验就结束了,自己也快去动手做做这个实验吧!不防也叫上你的小伙伴,一起体验这样的快乐,在代码的世界里遨游!
有什么问题的小伙伴也可以在评论区留言,我们一起解决你的疑惑!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值