⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readerform.cs

📁 RFID Reader SampleCode
💻 CS
📖 第 1 页 / 共 3 页
字号:
		private void ReaderForm_Load(object sender, System.EventArgs e)
		{
            //since the assembly is deprecated, show deprecated message  
            MessageBox.Show("This sample uses the Symbol.RFID assembly. Symbol.RFID is deprecated.  Use Symbol.RFID2 demonstrated in CS_RFID2Sample instead.", "Deprecated");

			// If we can initialize the Reader
			if ( !this.InitReader() )
			{
				MessageBox.Show("Unable to initialize RFID!","Error");

				// If not, close this form
				this.Close();

				return;
			}
		}
		
		/// <summary>
		/// Application is closing
		/// </summary>
		protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
		{
			// Terminate reader
			this.TermReader();
			base.OnClosing(e);
		}

		/// <summary>
		/// Initialize the reader.
		/// </summary>
		private bool InitReader()
		{
			// If reader is already present then fail initialize
			if ( this.MyReader != null )
			{
				return false;
			}

			try
			{
				// Create new reader, first available reader will be used.
				this.MyReader = new Symbol.RFID.Reader();

				// Create reader data to read upto 20 tags
				this.MyReaderData = new Symbol.RFID.ReaderData(20);
				this.FindReaderData = new Symbol.RFID.ReaderData(1);

				// Enable reader
				this.MyReader.Actions.Enable();
	
				// Attach handler for read notification
				this.MyEventHandler	= new EventHandler(MyReader_ReadNotify);
				this.MyReader.ReadNotify += this.MyEventHandler;

				// Attach handler for trigger notification
				this.MyTriggerHandler = new Symbol.RFID.Reader.TriggerEventHandler(MyTrigger_Pressed);
                this.MyReader.TriggerNotify += this.MyTriggerHandler;

				// Attach to activate and deactivate events
				this.Activated += new EventHandler(ReaderForm_Activated);
				this.Deactivate +=new EventHandler(ReaderForm_Deactivate);

				// Select the TagType for Actions
				this.MyReader.Parameters.TagType = Symbol.RFID.Tag.Types.EPC_CLASS1;

				// Set Attenuation as required
				this.MyReader.Parameters.Attenuation = 140;
			}
			catch
			{
				return false;
			}
	
			return true;
		}

		/// <summary>
		/// Stop reading and disable/close reader
		/// </summary>
		private void TermReader()
		{
			// If we have a reader
			if ( this.MyReader != null )
			{
				// Remove read notification handler
				this.MyReader.ReadNotify -= null;
				
				// Attempt to stop any pending read
				this.StopRead();

				// Disable reader, with wait cursor
				this.MyReader.Actions.Disable();
		
				// Free it up
				this.MyReader.Dispose();

				// Indicate we no longer have one
				this.MyReader = null;
			}

			// If we have a reader data
			if ( this.MyReaderData != null )
			{
				// Free it up
				this.MyReaderData.Dispose();

				// Indicate we no longer have one
				this.MyReaderData = null;
			}
		}

		/// <summary>
		/// Start a read on the reader
		/// </summary>
		private void StartRead()
		{
			this.ReaderStatus.Text = "Reading ...";

			// If the flag is set then start a new TagList
			if (ClearListFlag)
				this.MyReaderData.ClearInventory = true;
			else
				this.MyReaderData.ClearInventory = false;

			// If we have both a reader and a reader data
			if((this.MyReader != null) && (this.MyReaderData != null))
			{
				// Submit a read
				this.MyReader.Actions.Read(this.MyReaderData);
			}
		}

		/// <summary>
		/// Start a find on the selected tag
		/// </summary>
		private void StartFind()
		{
			this.ReaderStatus.Text = "Finding ...";

			// Clear the inventory flag
			this.FindReaderData.ClearInventory = true;
			
			// If we have both a reader and a reader data
			if((this.MyReader != null) && (this.FindReaderData != null))
			{
				// Submit a read
				this.MyReader.Actions.Read(this.FindReaderData);
			}
		}

		/// <summary>
		/// Stop all reads on the reader
		/// </summary>
		private void StopRead()
		{
			// If we have a reader
			if ( this.MyReader != null )
			{
				// Prevent new reads
                this.MyReader.TriggerNotify -= this.MyTriggerHandler;

				// Disable the timer
				this.ReaderTimer.Enabled = false;

				// Try to cancel pending read or wait for it's completion
				this.MyReader.Actions.Flush();
			}
		}

		/// <summary>
		/// Handles Stage2 Notification from the trigger
		/// </summary>
		private void MyTrigger_Pressed(object sender, Symbol.RFID.TriggerEventArgs e)
		{
			// Handle Trigger Press or Release 
			if ( e.NewState == Symbol.RFID.TriggerState.STAGE2 )
			{
				this.TriggerReleasedFlag = false;
				this.ReaderStatus.Text = "Trigger Pulled";
                
				// If we have a reader and it is not already busy
				if ( (this.MyReader != null) && (!this.MyReader.Info.IsBusy) )
				{
					if (menuItemFind.Checked)
					{
						int i = 0;
			
						try
						{
							i = ReaderDataListView.Items[ReaderDataListView.SelectedIndices[0]].Index;
						}
						catch(ArgumentOutOfRangeException)
						{
							System.Windows.Forms.MessageBox.Show("TagID not selected", "CS_RFIDSample2");
							return;
						}

						this.prevTagMask = this.MyReader.Parameters.Mask;
						// Lock all tags of the given data length in range 
						byte TagLength = (byte)this.MyReaderData.TagList[i].DataLength;
						byte[] TagID = this.MyReaderData.TagList[i].TagID;
	
						// Set new tag mask
						Symbol.RFID.TagMask tagMask = new TagMask( (byte)(TagLength * 8), 16, TagID );
						this.MyReader.Parameters.Mask = tagMask;

						// Request inventory using masked  scroll command
						this.MyReader.Parameters.InventoryType = 1;
						this.MyReader.Parameters.OuterLoop = 2;
						this.MyReader.Parameters.InnerLoop = 2;
						this.MyReader.Parameters.OuterWakes = 1;
						this.MyReader.Parameters.InnerOuterWakes = 1;
						this.MyReader.Parameters.HoppingFlag = 1; 
						this.MyReader.Parameters.NumSleeps = 0;
	
						// Remove previous handler
						this.MyReader.ReadNotify -= this.MyEventHandler;

						// Attach handler for read notification
						this.FindEventHandler	= new EventHandler(MyReader_FindNotify);
						this.MyReader.ReadNotify += this.FindEventHandler;

						// To improve performance, power up the reader until we release trigger
						this.MyReader.Parameters.PowerMode = true;

						// Start a find
						this.StartFind();
					}
					else 
					{
						// Reset Inventory Loop Parameters to their defaults
						this.MyReader.Parameters.InventoryType = 0;
						this.MyReader.Parameters.OuterLoop = 5;
						this.MyReader.Parameters.InnerLoop = 3;
						this.MyReader.Parameters.OuterWakes = 2;
						this.MyReader.Parameters.InnerOuterWakes = 2;
						this.MyReader.Parameters.HoppingFlag = 0; 
						this.MyReader.Parameters.NumSleeps = 3;

						// Remove previous handler
						this.MyReader.ReadNotify -= this.FindEventHandler;

						// Re-attach handler for read notification
						this.MyReader.ReadNotify += this.MyEventHandler;

						// To improve performance, power up the reader until we release trigger
						this.MyReader.Parameters.PowerMode = true;

						// Start a new read
						this.StartRead();
					}

					// Set timer which handles sending further reads until trigger is released
					this.ReaderTimer.Interval = 2000;
					this.ReaderTimer.Enabled = true;
				}
			}
			else if ( e.NewState == Symbol.RFID.TriggerState.RELEASED )
			{
				this.ReaderStatus.Text = "Trigger Released";

				// Disable the timer
				this.ReaderTimer.Enabled = false;

				// Set the flag so that the power to the reader can be disabled upon 
				// completion of the read.
				TriggerReleasedFlag = true;

				//restore the mask after find tag calls
				if (menuItemFind.Checked)
				{
					this.MyReader.Parameters.Mask = prevTagMask;
				}
			}
		}

		/// <summary>
		/// Submits a new read at every timer tick
		/// </summary>
		private void ReaderTimer_Tick(object sender, System.EventArgs e)
		{
			// If another RFID operation has not already started
			if (!this.MyReader.Info.IsBusy)
			{
				if (menuItemFind.Checked)
				{
					// Start a new find
					this.StartFind();
				}
				else
				{
					// Start a new read
					this.StartRead();
				}
			}
		}
	
		/// <summary>
		/// Read complete or failure notification
		/// </summary>
		private void MyReader_ReadNotify(object sender, EventArgs e)
		{
			// Get the next ReaderData
			Symbol.RFID.ReaderData TheReaderData =
				(Symbol.RFID.ReaderData)this.MyReader.GetNextReaderData();

			// If it is a successful read (as opposed to a failed one)
			if ( TheReaderData.Result == Symbol.Results.SUCCESS )
			{
				// Handle the data from this read
				this.HandleData(TheReaderData);
			}

			// Disable power if the trigger has been released
			if (this.TriggerReleasedFlag)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -