当前位置:   article > 正文

物联网关键技术-停车场收费系统

物联网关键技术-停车场收费系统

一、项目介绍:

1.RFID停车场收费系统是一种利用无线射频识别技术实现停车场车辆管理和收费的系统。它使用RFID标签(也称为RFID卡片或RFID标签)和RFID读写器进行车辆识别和数据传输,通过无线通信实现车辆进出控制和自动化收费管理。

2.项目功能

入场功能:RFID读取低频信息,成功读取到卡号,点击入场,则把卡号、卡余额、入场时间记录在建立的文本文件里,如果此卡已经入场、没有出场记录,则无法进入停车场。

出场功能:RFID读取低频信息,成功读取到卡号,点击出场,则把文本文件里对应卡号、入场时间、计算停车费用((出场时间-入场时间)*收费标准),模拟每一秒钟2块钱。如果此卡没有入场,则无法进行出场。

3.界面布局

串口界面

 停车场界面

 二、项目代码

1.打开串口,读取低频卡信息

  1. public delegate void showReceiveDelegate(string text); //当采用响应模式,应申明一个委托,实现不同线程的控件实验
  2. SerialPort com = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);
  3. int com_num = 0;
  4. int timer_num;
  5. /*-------------------------------------------------------------
  6. * status_num状态字
  7. * 1,表示读取信息
  8. --------------------------------------------------------------*/
  9. int status_num = 0;//状态字
  10. public Form1()
  11. {
  12. InitializeComponent();
  13. }
  14. //窗体加载
  15. private void Form1_Load(object sender, EventArgs e)
  16. {
  17. //串口初始化
  18. cmbPort.SelectedIndex = 2;
  19. cmbBaudRate.SelectedIndex = 4;
  20. cmbDataBits.SelectedIndex = 0;
  21. cmbStopBits.SelectedIndex = 0;
  22. cmbParity.SelectedIndex = 0;
  23. //定时器初始化
  24. System.Timers.Timer t = new System.Timers.Timer(50);//实例化Timer类,设置间隔时间为1000毫秒 就是1秒;
  25. t.Elapsed += new System.Timers.ElapsedEventHandler(theout); //到达时间的时候执行事件;
  26. t.AutoReset = true; //设置是执行一次(false)还是一直执行(true);
  27. t.Enabled = true; //是否执行System.Timers.Timer.Elapsed事件;
  28. timer_num = 0;
  29. //存储数据空间数据初始化
  30. comboBox1.SelectedIndex = 0;
  31. comboBox2.SelectedIndex = 0;
  32. //comboBox3.SelectedIndex = 1;
  33. //button12.Enabled = false;
  34. }
  35. //串口打开与关闭
  36. private void btnOpen_Click(object sender, EventArgs e)
  37. {
  38. if (btnOpen.Text == "打开串口")
  39. {
  40. try
  41. {
  42. if (!com.IsOpen)
  43. {
  44. com.PortName = cmbPort.Text;
  45. com.BaudRate = int.Parse(cmbBaudRate.Text);
  46. com.DataBits = int.Parse(cmbDataBits.Text);
  47. switch (cmbStopBits.SelectedIndex)
  48. {
  49. case 0:
  50. com.StopBits = StopBits.One; break;
  51. case 1:
  52. com.StopBits = StopBits.Two; break;
  53. case 2:
  54. com.StopBits = StopBits.OnePointFive; break;
  55. case 3:
  56. com.StopBits = StopBits.None; break;
  57. }
  58. switch (cmbParity.SelectedIndex)
  59. {
  60. case 0: com.Parity = Parity.None; break;
  61. case 1: com.Parity = Parity.Odd; break;
  62. case 2: com.Parity = Parity.Even; break;
  63. }
  64. com.Open();//打开串口
  65. }
  66. btnOpen.Text = "关闭串口";
  67. txtStatus.Text = "串口已打开!";
  68. btnInformation.Enabled = true;
  69. button1.Enabled = true;
  70. button2.Enabled = true;
  71. button3.Enabled = true;
  72. // 数据接收模式变化时,设置串口的数据接收侦听事件
  73. try
  74. {
  75. com.DataReceived += new SerialDataReceivedEventHandler(com_DataReceived); //加载接收事件
  76. }
  77. catch (Exception err)
  78. {
  79. txtStatus.Text = err.ToString();
  80. }
  81. }
  82. catch
  83. { txtStatus.Text = "串口打开错误或串口不存在!"; }
  84. }
  85. else //关闭串口
  86. try
  87. {
  88. if (com.IsOpen)
  89. com.Close(); //关闭串口
  90. btnOpen.Text = "打开串口";
  91. txtStatus.Text = "串口已关闭!";
  92. btnInformation.Enabled = false;
  93. button1.Enabled = false;
  94. button2.Enabled = false;
  95. button3.Enabled = false;
  96. }
  97. catch
  98. {
  99. txtStatus.Text = "串口关闭错误或串口不存在!";
  100. }
  101. }

2.点击入场,发送指令获取卡号

  1. private void button22_Click(object sender, EventArgs e)
  2. {
  3. txtSend.Text = "";
  4. txtReceive.Text = "";
  5. status_num = 20;
  6. String str1 = "FF 55 00 00 01 03 00 30 75";
  7. byte[] data = getBytesFromString(str1);
  8. com.Write(data, 0, data.Length);
  9. txtSend.Text = str1;
  10. }

3.判断卡号是否符合入场要求,符合要求即可进入停车场

  1. if (status_num == 20)
  2. {
  3. status_num = 0;
  4. int i;
  5. for (i = 0; i < 10; i++)
  6. {
  7. if (str.Substring(i, 20).Equals("FF 55 00 00 81 03 08"))
  8. {
  9. textBox16.Text = str.Substring(i + 21, 11);//截取4个字节
  10. txtStatus.Text = "高频卡信息读取成功!";
  11. int j = 0;
  12. List<string> liststr = new List<string>();
  13. string path = @"E:\01\收费系统.txt";
  14. StreamReader sr1 = new StreamReader(path);
  15. while (sr1.Peek() != -1)
  16. {
  17. liststr.Add(sr1.ReadLine());
  18. j++;
  19. }
  20. for (int k = 0; k < j; k++)
  21. {
  22. if (textBox16.Text == liststr[k])
  23. {
  24. txtStatus.Text = "此卡已入场!";
  25. textBox20.Text = "";
  26. textBox21.Text = "";
  27. sr1.Close();
  28. return;
  29. }
  30. }
  31. sr1.Close();
  32. FileStream fs1 = new FileStream(path, FileMode.Append);
  33. StreamWriter sw = new StreamWriter(fs1);
  34. now1 = DateTime.Now;
  35. textBox20.Text = now1.ToString("yyyy-MM-dd HH:mm:ss");
  36. textBox21.Text = "10000";
  37. sw.WriteLine(textBox16.Text);
  38. sw.WriteLine(textBox20.Text);
  39. sw.WriteLine(textBox21.Text);
  40. txtStatus.Text = "读卡成功,进入停车场,开始记录时间!";
  41. textBox22.Text = "";
  42. textBox23.Text = "";
  43. textBox24.Text = "";
  44. sw.Close();//关闭文件流
  45. fs1.Close();
  46. break;
  47. }
  48. }

4.点击出场,发送指令获取卡号

  1. private void button23_Click(object sender, EventArgs e)
  2. {
  3. txtSend.Text = "";
  4. txtReceive.Text = "";
  5. status_num = 21;
  6. String str1 = "FF 55 00 00 01 03 00 30 75";
  7. byte[] data = getBytesFromString(str1);
  8. com.Write(data, 0, data.Length);
  9. txtSend.Text = str1;
  10. }

5.判断卡号是否符合出场要求,符合要求即清除卡号,入场时间,计算停车的总费用

  1. if (status_num == 21)
  2. {
  3. status_num = 0;
  4. if (str.Substring(18, 2).Equals("08"))
  5. {
  6. textBox16.Text = str.Substring(21, 11);//截取4个字节
  7. int j = 0;
  8. List<string> listStr = new List<string>();
  9. string path = @"E:\01\收费系统.txt";
  10. StreamReader sr = new StreamReader(path);
  11. List<string> str2 = new List<string>(File.ReadAllLines(path));//多创建一个泛型集合,读取全部文本
  12. while (sr.Peek() != -1)
  13. {
  14. listStr.Add(sr.ReadLine());
  15. j++;
  16. }
  17. for (int k = 0; k < j; k++)
  18. {
  19. if (textBox16.Text == listStr[k])
  20. {
  21. textBox20.Text = listStr[k + 1];
  22. textBox21.Text = listStr[k + 2];
  23. now2 = DateTime.Now;
  24. textBox22.Text = now2.ToString("yyyy-MM-dd HH:mm:ss");
  25. now3 = DateTime.ParseExact(textBox20.Text, "yyyy-MM-dd HH:mm:ss", null);
  26. //停留时间
  27. textBox23.Text = (now2 - now3).ToString();//显示停留时间
  28. TimeSpan ts = now2.Subtract(now3).Duration();
  29. money1 = int.Parse(ts.Hours.ToString()) * 3600 + int.Parse(ts.Minutes.ToString()) * 60 + int.Parse(ts.Seconds.ToString());
  30. money1 = money1 * 2;
  31. money = money - money1;
  32. textBox24.Text = money1.ToString();//显示消费金额
  33. textBox21.Text = money.ToString(); //显示余额
  34. money = 10000;
  35. j = 0;
  36. txtStatus.Text = "计费完毕!欢迎下次光临!";
  37. sr.Close();
  38. str2.Remove(listStr[k + 2]);//删除读取到的文本
  39. str2.Remove(listStr[k + 1]);
  40. str2.Remove(listStr[k]);
  41. File.WriteAllLines(path, str2.ToArray());//把剩余的文本重新写入覆盖
  42. return;
  43. }
  44. }
  45. txtStatus.Text = "不是入场卡,无法进行出场";
  46. textBox20.Text = "";
  47. textBox21.Text = "";
  48. textBox22.Text = "";
  49. textBox23.Text = "";
  50. textBox24.Text = "";
  51. sr.Close();
  52. }

三、程序效果图:

因为没有硬件设备,这里用软件进行一个模拟效果:

1.卡号为空,无法进入停车场

 2.入场卡号不为空,进入停车场

 3.没有出停车场的卡,不能再次进入停车场

 4.出场卡号为空,无法出停车场

 5.出场卡号不为空,出停车场,进行费用结算,清除卡号和入场时间记录

 多张卡入场:信息存入文本文件,出场后在文本文件删除。

 

 

 

 

 

 四、项目总结

RFID停车场收费系统是一个利用无线射频识别技术实现停车场管理和收费的智能系统。通过使用RFID标签和读写器,系统能够准确地识别车辆,并自动进行收费和管理。RFID停车场收费系统通过RFID标签和读写器实现车辆的自动识别。无需人工干预,即可准确地记录车辆的进出时间和信息。这大大提高了效率,并减少了错误。系统根据停车时长和收费标准,自动计算车辆的停车费用。用户可以选择多种支付方式,如移动支付、预存卡等。这提供了更多的便利性和灵活性。通过RFID停车场收费系统,停车场管理者可以实现停车场的自动化管理,提高管理效率和服务质量。同时,用户也能够享受到更加便捷和智能的停车服务。RFID停车场收费系统的使用将大大改善目前传统停车方式的不便和繁琐,成为一个创新和高效的解决方案。

21物联网应用技术2班-阮祖钊

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/133652
推荐阅读