zoukankan      html  css  js  c++  java
  • 【硬件模块】RFIDSetting

    The Octane SDK includes the core library by acting as a wrapper for extraction, modifying, and the application of a Reader's Low Level Reader Protocol (LLRP) settings, as well as high-level control over Reader settings, tag query, and tag-write operation.

    1. Environment

    1.1. Device

    • down Octanesdk.zip, contains the libraries, technical reference.

    1.2. Theory

    1.2.1. Backscatter Power

    the power is affected by the antenna design, impedance matching, and the changes in reflection coefficient as a function of tag modulator state.

    Propagation effects such as absorption and scattering; Antenna effects such as impedance mismatch, polarization mismatch; Multipath propagation and undesired signals in the environment can combine with the primary backscatter.

    image-20210121152935337

    1.2.2. RF Phase

    the reader's transmit circuits, the tag's reflection characteristic, and the reader's receiver circuits.

    • Phase estimates should only be compared on a single antenna and channel. RF phase is a function of frequency and antenna path.
    • Gen2 UHF RFID employs a slotted-aloha media access scheme, which means that the order in which tags are inventoried will be random. The time between successive inventories of the same tag will depend on reader mode, tag population size, and environmental conditions (e.g. interference levels).

    Velocity Measure

    1.2.2.1. velocity
    • If two time-phase pairs are measured for the same tag, one at (t0, 0) and one at (t1, 1), the radial distance traversed by the tag is: assumes that the tag moves less than half a wavelength in the radial direction between observations (dRADIAL < $lambd$/2).

    1.2.3. Doppler Shift

    Doppler frequency shift is the shift in frequency of the received signal at the reader due to relative motion between the reader and the tag.

    1.2.4. Inventroy, Antenna Switching, and Frequency Hopping Effects
    • Phase estimates should only be compared on a single antenna and channel.

    • Gen2 UHF RFID employs a slotted-aloha media access scheme, which means that the order in which tags are inventoried will be random. The time between successive inventories of the same tag will depend on reader mode, tag population size, and environmental conditions (e.g. interference levels).

    • requirements for successful reading of a passive tag with the backscatter scheme:

      • the tag power(sensitivity) threshold Pts, minimum received power to turn on the RFID chip.
      • the reader sensitivity threshold Prs, the minimum level of the tag signal that the reader can detect and resolve.

      image-20210310110207862

      • the mac protocol for the C1G2 system is based on Slotted ALOHA, where each frame has a number of slots and each active tag will reply in a randomly selected slot per frame;
      • the reader powers up and transmits a continuous wave(CW) to energize the tags.

    2. Setting Relative

    2.1. Query Services

    2.2. Command Service

    2.4. Reading Type

    • Synchronously

    the observed tag data is stored in Reader memory and a report of all observed tags is sent only when commanded by the client application;

    // wait until the tag query has ended before sending the tag report
    settings.Report.Mode=ReportMode.WaitForQuery;
    Reader.ApplySettings(settings);
    //Read tags for 5 seconds
    TagReport tagReport=Reader.QueryTags(5)
    
    • Asynchronously

    the reader report reach tag to the client application, as soon as it is observed.

    //send a tag report for every tag read
    settings.Report.Mode=ReportMode.Individual;
    //assign the TagsReported handler, this specifies which function to call when tags reports are avaible;
    Reader.TagsReport+=new EventHandler<TagsReportedEventArgs>(OnTagsReported);
    Reader.Start();
    //wait for the user to press enter
    Console.WriteLine("Press enter when done.");
    Console.ReadLine();
    Reader.Stop();
    Reader.Disconnect();
    
    static void OnTagsReported(object sender, TagsReportedEventArgs args){
        //This function is called asynchronously when tag reports are available,loop through each tag in the report and print the data
        foreach(Tag tag in args.TagReport.Tags){
            //Todo
        }
    }
    
    • using periodic trigger

    During polling, the reader initiates a scan for tags for a specified period of time and then waits for a set period before scanning again, which is sufficient and reduces both network and RF congestion.

    settings.Report.Mode=ReportMode.Individual;
    // Reading tags for 5 seconds every 10 seconds
    settings.AutoStart.Mode=AutoStartMode.Periodic;
    settings.AutoStart.PeriodInMs=10000;
    settings.AutoStop.Mode=AutoStopMode.duration;
    settings.AutoStop.DurationInMs=5000;
    

    2.5. Filter

    2.5.1. SingleTag

    using GEN 2 filtering, either EPC, User, TID or a combination of these to read certain tags based on their data;

    • to have all the tags in the read-zone and backscatter their data to the reader, then use filtering in the application layer.
    • configure the reader that it commands only tags matching the filter to response while the others will stay silent;
    // setup a tag filter only the tags that match this filter will respond;
    settings.Filters.Mode=TagFilterMode.OnlyFilter1;
    //apply the filger to the EPC memory bank
    settings.Filters.TagFilter1.MemoryBand=MemoryBank.Epc;
    // start matching at address 0*20, since the first 32-bits of the EPC memory bank are the CRC and control bits;
    settings.Filters.TagFilter1.BitPointer=0x20;
    //our filter is 16-bits long(the first word of the EPC)
    settings.Filters.TagFilter1.BitCount=16;
    //only match tags with EPCs that start with 3008
    settings.Filters.TagFilter1.TagMask="3008";
    //include tags that match this filter, and alternatively,we could exlude tags that match the filter
    settings.Filters.TagFilter1.FilterOp=TagFilterOp.Match;
    
    2.5.2. User Memory

    the Impinj Monza 4 tags offer up to 512 bits of user memory, query the user memory using exception handling.

    //Define how we want to perform the read
    ReadUserMemoryParams readParams=new ReadUserMemoryParams();
    //use antenna #1
    readParams.AntennaPortNumber=1;
    //No access password required for this tag
    readParams.AccessPassword=null;
    //start reading from the base of user memory(address 0)
    readParams.WordPointer=0;
    //read 32 words of user memory(512 bits)
    readParams.WordCount=32;
    //read the first tag we see,or choose a specific tag by EPC or other identifier;
    readParams.Target=null;
    readParams.TimeoutInMs=5000;
    //Perform the read and check the results
    ReadUserMemoryResult result=Reader.ReadUserMemory(readParams);
    if(result.ReadResult.Result==AccessResult.Success){
    	//todo
    }
    Reader.Disconnect();
    
    2.5.2. Read Serialized TID
    static string ReadTid(string epc){
    	//Read the TID memory bank
    	ReadTidMemoryParams readParams=new ReadTidMemoryParams();
    	// No password set
    	readParams.AccessPassword=null;
    	readParams.AntennaPortNUmber=0;
    	readParams.TargetTag=epc;
    	readParams.WordCount=2;
    	readParams.TimeoutInMs=5000;
    	ReadTidMemoryResult result=Reader.ReadTidMemory(readParams);
    	return result.ReadResult.ReadData;
    }
    settings.Report.IncludeAntennaPortNumber=true;
    settings.Report.IncludeSerializedTid=true;
    settings.Report.Mode=ReportMode.Individual;
    Reader.ApplySettings(settings);
    TagReport tagReport=Reader.QueryTags(5);
    foreach(Tag tag in tagReport.Tags){
        if(tag.IsSerialzedTidPresent){
            tid=tag.SerializedTid;
        }else{
            tid=ReadTid(tag.Epc);
        }
    }
    Reader.Disconnect();
    

    2.6. Tag Access

    covers modifying tag data including writing and locking of EPC, user memory and passwords, killing a tag;

    • program EPC
    epcParams.NewEpc="new EPC";
    ProgramEpcParams epcParams=new ProgramEpcParams();
    ProgramEpcResult result=Reader.ProgramEpc(epcParams);
    if(result.WriteResult.Result==AccessResult.Success){
    	TagReport report=Reader.QueryTags(2);
    }
    
    • user memory
    ProgramUserBlockParams writeParams=new ProgramUserBlockParams();
    writeParams.NewUserBlock="new user data";
    ProgramUserBlockResult result=Reader.ProgramUserBlock(writeParams);
    if(result.WriteResult.Result==AccessResult.Success){
    	#pass;
    }
    
    • Kill Tags
    ProgramKillPasswordParams pwParams=new ProgramKillPasswordParams();pwParams.TargetTag=TARGET_TAG;pwParams.NewKillPassword=NEW_KILL_PW; #new kill passwordProgramKillPasswordResult pwResult=Reader.ProgramKillPassword(pwParams);if(pwResult.WriteResult.Result==AccessResult.Success){	#todo	KillTagParams killParmas=new KillTagParams();	killTagResult killResult=Reader.KillTag(killParams);	if(killResult.KillResult.Result==AccessResult.Success){	#todo	}}
    

    3. GPIO

    The inputs allow external devices to trigger the reader, like light sensors, motion detectors, pressure mats etc. The output allow the reader to affect external devices such as access gates, indicator lights, conveyors .etc.

    Settings settings=Reader.QueryFactorySettings();settings.Report.IncludeAntennaPortNumber=true;settings.Report.Mode=ReportMode.Individual;// starting reading tags when GPI #1 goes highsettings.GPis[1].IsEnable=true;settings.GPis[1].DebounceInMs=50;settings.AutoStart.Mode=AutoStartMode.GpiTrigger;settings.AutoStart.GpiPortNumber=1;settings.AutoStart.GpiLevel=true;//stop reading tags when gpi #1 goes lowsettings.AutoStop.Mode=AutoStopMode.GpiTrigger;settings.AutoStop.GpiPortNUmber=1;settings.AutoStop.GpiLevel=false;reader.ApplySettings(settings);
    

    4. Subscribe

    • Subscribe to reader events
    Reader.GpiChanged+=new EventHandler<GpiChangedEventArgs>(OnGpiEvent);Reader.AntennaChanged+=new EventHandler<AntennaChangedEventArgs>(OnAntennaEvent);static void OnGpiEvent(object sender, GpiChangedEventArgs args){	//todo}static void OnAntennaEvent(object sender, AntennaChangedEventArgs args){	//Todo}
    
    • Power Ramp

    find the lowest power level that still finds all tags, the transmit power is steadily increased.

    FeatureSet features=Reader.QueryFeatureSet();minTx=features.TxPowers.Entries.First().Dbm;maxTx=features.TxPowers.Entries.Last().Dbm;for(double power=minTx; power<=maxTx; power+=1.0){	settings.Antennas[1].TxPowerInDbm=power;	Reader.ApplySettings(settings);	TagReport report=Reader.QueryTags(2);	foreach(Tag tag in report.Tags){		//todo	}}
    

    5. Classes

    5.1. methods

    • void Connect(string readerIp); void Disconnect(); void Start(); void Stop();
    • void ResumeEventsAndReport():
    • FeatureSet QueryFeatureSet(): return featureSet (supported modes, powers, frequencies, and optional features);
    • Settings QuerySettings(): return current feature settings;
    • Settings QueryFactorySettings(): return reader factory settings, vary by model and region;
    • void ChangeSettings(Settings settings):
    • Status QueryStatus(StatusRefresh refreshWhat): return the reader stauts including antennas, RFID operations, and GPI/O;
    • Status QueryStatus():
    • TagReport QueryTags(seconds):
    • void setGpo(int portNubmer, bool level):
    • ProgramAccessPasswordResult ProgramAccessPassword(...):
    • ProgramKillPasswordResult ProgramKillPassword()
    • ProgramUserBlockResult ProgramUserBlock();

    5.2. Callbacks

    • OnConnectionChange(ConnectionChangedEventArgs);
    • OnConnected(ConnectiolnChangedEventArgs);
    • OnConnectionLost(ConnectionChangedEventArgs);
    • OnGpiChanged(GpiChangedEventArgs);
    • OnGpiXChanged(GpiChangedEventArgs);
    • OnReportBufferOverflowed(ReportBufferOverflowedEventArgs);
    • OnStarted(StartedEventArgs);
    • OnTagsReported(TagsReportedEventArgs);

    5.3. Property

    • ReaderMode: controls modulation and data rate under different environments;
      • AutoSetDenseReader, AutSetSingleReader, MaxThroughput, etc.
    • SearchMode: controls whether tags are singulated repeatedly or once;
      • ReaderSelected, DualTarget, SingleTarget, etc.
    • TagPopulationEstimate: estimate how many tags will be in the reader's field of view at one time;
    • Filters: control which tags the reader singulated and reports;
    • Filters.Mode: how the reader combine the two filters;
    • Filters.TagFilter1.MemoryBank: Reserved, Epc, Tid, User;
    • Filters.TagFilter1.BitPointer: the bit offset in the specified memory bank at which the tag mask begins;
    • Filters.TagFilter1.BitCount: the number of bits contained within the tag mask;
    • Filter.TagFilter1.TagMask: a hex string representing the bit pattern to match.
    • Antennas[port].PortNumber;
    • Antennas[port].IsEnable;
    • Antennas[port].TxPowerInDbm: the amout of transmit power to use on the antenna, 10.00db~30.0db;
    • Antennas[port].RxSensitivityInDbm: the minimum signal strength that must receive by the reader;
    • LowDutyCyble: low duty cyble is used in situation where the field of view is empty most of time; 用于没有很多标签的时候周期性扫描;
    • Report: controls how often the reader sends a report of tags singulated and which optional fields are reported;
    • Report.Mode; Report.IncludePeakRssi; Report.InlcudeAntennaPortNumber;
    • Report.IncludeFirstSeenTime; IncludelastSeenTime; IncludeSeenCount; IncludePhaseAngle;

    6. 学习资源

  • 相关阅读:
    The Elements of C# Style Design
    The Elements of C# Style Programming
    The Elements of C# Style General Principles
    浅谈CLR
    堆排序
    WPF系列:GridView列绑定控件(一)
    分发服务器迁移(distribute service migration‏)
    通过编码规范来学习一门编程语言
    如何维护数据库中的静态表
    关于短地址服务的一些看法
  • 原文地址:https://www.cnblogs.com/liu-dongdong/p/15117548.html
Copyright © 2011-2022 走看看