MES与西门子RFID读写设备实现数据交互

一、总体架构

 基于C# 代码构建了一个基于 Windows 窗体的应用程序,主要用于MES系统与 RFID 设备进行交互,实现对设备信息的读取、展示和保存。

二、主要功能模块

  1. 初始化
    • 在窗体的构造函数中,进行了一系列初始化操作,包括组件初始化、设置键盘捕获、启动读取器、暂停一段时间后调用其他初始化方法。如果读取服务成功启动,会在特定标签中显示相应提示信息。
  2. 表单创建
    • CreateFrom方法根据一个变量FormRows的值动态创建标签、复选框和面板,并添加到窗体的特定面板中,用于展示检查项和状态选择。
  3. 读取 RFID 信息
    • ReaderTag方法是读取 RFID 卡信息的核心方法。它首先清空特定面板上的控件,然后尝试获取 RFID 卡的标签 ID 和内存数据。
    • 如果成功获取到标签 ID,会根据标签 ID 查询相关信息,如用户信息、时间、设备信息等,并填充到窗体的相应控件中。
    • 根据设备信息确定检查项的数量,创建表单展示检查项名称,并根据内存数据设置检查项的初始状态。
  4. 复选框状态改变处理
    • MainForm_CheckStateChanged方法在复选框状态改变时被触发。它根据触发的复选框名称判断是 “良好” 还是 “故障” 复选框被选中,然后相应地设置另一个复选框的状态,确保同一检查项的两个状态复选框不能同时被选中。
  5. 读取按钮点击处理
    • Bt_read_Click方法在用户点击 “读取” 按钮时被调用,它会触发重新读取 RFID 卡信息并更新窗体显示的操作。
  6. 保存数据
    • SaveTag方法用于保存 RFID 卡相关数据。它根据用户选择的信息和当前时间等数据,更新一个字节数组中的数据。然后将这些数据插入到数据库表中。如果没有检测到 RFID 卡,则弹出提示消息。

三、改进方向

  1. 错误处理方面,可以增加更详细的错误日志记录,以便更好地进行调试和故障排查。
  2. 性能优化上,可以考虑使用异步操作来读取 RFID 卡和处理数据,避免阻塞用户界面。
  3. 提高代码可读性,可通过更清晰的变量命名和添加注释来实现。
  4. 对于数据库操作,可以考虑使用数据库连接池等技术提高性能。

部分代码:

public partial class MainForm : Form
    {
        public const string deviceType = "RF310M";
        public int Service_Ok = 0;
        public int FormRows = 5;
        public string TagId = "000000";
        //记录需要写入的rfid内容
        byte[] BufNo = new byte[112];

        public MainForm()
        {
            InitializeComponent();
            CaptureKeys(this);
            this.ReaderStart();
            Thread.Sleep(1000);
            this.menuReader();
            if (Service_Ok == 2)
            {
                lb_service.Text = "读取服务已启动!";
                //lb_service.Text = "Reader successfully started";
            }
        }

        Label[] lab = new Label[16];
        CheckBox[] Ch1 = new CheckBox[16];
        CheckBox[] Ch2 = new CheckBox[16];
        Panel []  Pa=new Panel[16];
        private void CreateFrom()
        {
            if (FormRows == 0)
            {
                FormRows = 5;
                MessageBox.Show("没有检测到RFID卡!");            
            }
            for (int i = 1; i < FormRows + 1; i++)
            {

                lab[i] = new Label();
                lab[i].Name = "Lb_checkno" + i.ToString();
                lab[i].Text = "检查项";
                lab[i].Size = new Size(220, 20);
                lab[i].Location = new Point(2,  50 * (i-1));
                this.panel1.Controls.Add(lab[i]);

                Ch1[i] = new CheckBox();
                Ch1[i].Name = "Ch_stategood" + i.ToString();
                Ch1[i].Text = "良好";
                Ch1[i].Size = new Size(60, 20);
                Ch1[i].Location = new Point(100, 50 * (i - 1)+25);
                this.panel1.Controls.Add(Ch1[i]);

                Ch2[i] = new CheckBox();
                Ch2[i].Name = "Ch_statebug" + i.ToString();
                Ch2[i].Text = "故障";
                Ch2[i].Size = new Size(57, 20);
                Ch2[i].Location = new Point(160, 50 * (i - 1)+25);
                this.panel1.Controls.Add(Ch2[i]);

                Pa[i] = new Panel();
                Pa[i].Size = new Size(220, 1);
                Pa[i].Location = new Point(2, 50 * (i - 1) + 47);
                Pa[i].BackColor = new Color();       
                this.panel1.Controls.Add(Pa[i]);
            }
        }
       
        private void Rea

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值