Академический Документы
Профессиональный Документы
Культура Документы
BestPracticesforCodeModuleDevelopmentNationalInstruments
BestPracticesforCodeModuleDevelopment
PublishDate:Jun10,2016
Overview
Acodemoduleisasoftwarecomponentthatperformsaspecifictestoraction.NITestStandprovidesadaptersthatcancall
codemodulesdevelopedusingvariousprogrammingenvironmentsandlanguagessuchasNILabVIEW,NI
LabWindows/CVI,C#,VB.NET,C/C++,HTBasicandActiveX.
Thispaperwilldetailseveralconsiderationstokeepinmindasyoudevelopcodemodules.Unlessotherwisenoted,this
documentappliestoTestStandversion3.5andlater.
TableofContents
1.AvailableTestStandAdapters
2.WheretoImplementFunctionality
3.StrategiesforTerminatingorBreakingSequences
4.UsingInstrumentationwithinCodeModules
5.PerformingSwitchingFunctions
6.HandlingErrors
7.LoadandUnloadOptions
8.LocatingCodeModuleFiles
9.Conclusion
10.ViewAdditionalSectionsoftheNITestStandAdvancedArchitectureSeries
11.AbouttheAuthor
12.RelatedLinks
1.AvailableTestStandAdapters
ThefivebuiltinTestStandsteptypesshowninFigure1createstepinstancesthatcaninvokeacodemodule.Thenewly
createdstepusesthedefaultpropertiesdefinedbythesteptype,suchastheRunOptionsandStatusExpression,butdoes
notspecifythecodemodule.
Figure1Builtinsteptypesthatcallcodemodules
TheTestStandEngineusesanadaptertoprovideaninterfacetoacodemodulesotheenginecanload,call,andpassdatato
andfromcodemoduleswhileTestStandexecutessequences.
RefertoChapter4,BuiltInStepTypes(http://zone.ni.com/reference/enXX/help/370052M
01/tsfundamentals/infotopics/built_in_step_types/),andChapter5,ModuleAdapters(http://zone.ni.com/reference/en
XX/help/370052M01/tsfundamentals/infotopics/module_adapters/),oftheNITestStandReferenceManualformore
informationaboutbuiltinsteptypesandhowtospecifycodemodules.
Youcanusethesefivebuiltinsteptypeswithalladaptertypes,asshowninFigure2.Usethe<None>Adapterifyoudonot
wantasteptocallacodemodule.TheSequenceAdapterishiddenbydefault.SelectConfigureAdaptersfromthe
TestStandmenubarandremovethecheckmarkfromthecheckboxintheHiddencolumntodisplaytheSequenceAdapterin
theadapterringcontrol.
http://www.ni.com/productdocumentation/10369/en/
1/8
18/11/2016
BestPracticesforCodeModuleDevelopmentNationalInstruments
Figure2TestStandAdapters
2.WheretoImplementFunctionality
Whenyoudefinerequirementsatthebeginningofthedevelopmentprocess,youshouldalsodeterminethefunctionalityyou
willimplementwithincodemodules.Usingsimple,welldefinedcodemodulesthatareindependent,reusablecomponentscan
lessentheburdenofsoftwaremaintenanceandcanhelpsupportacompanywidecommonteststrategy.
FunctionalitytoIncludeinCodeModules
Usecodemodulesforthefollowingcommontasks:
Settingupstimuli
Makingmeasurementsorservingasaninterfacetohardware
Performingroutingtasks
CompletingactionsbettersuitedforcodemodulesratherthanforTestStand,suchascomplexarraymanipulation
Iteratingoverlargeamountsofdataorperforminglargenumbersofcalculations
FunctionalitytoIncludeinTestStand
BecauseTestStandimplementsthefollowingtasks,considerexcludingthemfromcodemodules:
Sequencingordeterminingtheexecutionorderoftestsorsubtests
Evaluatingtestmeasurementsagainstlimits
Reportingandloggingresults
Sometestengineershardcodetestlimitsincodemodulestoensuretamperfreelimitvaluesandappropriatetestparameters.
However,embeddingtestlimitsincodemodulesrestrictsthereusabilityofcodemodules,canincreasethetimeneededto
updatetestsystemsbyrequiringcodechanges,andpreventsyoufromusingtoolssuchastheTestStandPropertyLoaderto
loadorsavelimitsintextfiles,spreadsheets,anddatabases.Insteadofembeddingtestlimitsincodemodules,definetest
limitsinthesequencefileandusetheparameterlisttopassthelimitstothecodemodules,ifnecessary.WithTestStand4.x
andlater,youcansavesequencefilesinalockedbinaryformattoreducetheriskoftamperingonthetargetcomputer.
LoopingInternallyorExternally
Ifthecodemoduleperformsameasurementwithsomeswitchingtoconnecttoanddisconnectfromatestpoint,useexternal
loopingsoTestStandcanprovidetheloopindex.However,ifyouneedtoperformanadjustmentortakeaseriesof
measurements,performloopingwithinthecodemodulebecauseaccessingseveralcodemodulestoperformthetaskcan
considerablyincreasetheruntime.
AnotherwaytodeterminewhichloopingstrategytouseistoconsiderwhatinformationyouneedtoreturntotheTestStand
architecturelayerforreportingordatabaselogging.Ifallyouneedisthefinalresultorasubsetofallthepossibleiteration
results,considerinternalloopinginthecodemodule.Ifyouneedalltheiterationresults,considerexternallyloopingin
TestStandsoyoucancontroltheactionsaroundthecalltothecodemodule.
PassingtheSequenceContextObjectReferencetoCodeModules
UsingtheTestStandAPIincodemodulesrequirespassinginreferencestotherelevantTestStandobjects.Typically,steps
passareferencetotheSequenceContextobjecttocodemodulesbecausetheSequenceContextobjectprovidesaccesstoall
otherTestStandobjects.IfyoupassareferencetotheSequenceContextobjecttoallcodemodules,youcanusethe
TestStandAPIwithinthemodulesinthefuturewithoutupdatingexistingcallstoaparticularmodule.Youcanusethe
SequenceContextobjecttoaccessanyvariableorproperty,andyoucanusethePropertyObjectinterfacetostoreorretrieve
values.ThedrawbacksofusingthisapproachinsteadofusingexplicitadditionalparametersarethatitrequiresTestStandAPI
callswithinthemoduletoaccessdata.Therefore,theparameterlistofthecodemoduleisnolongerafullyaccurate
representationofthedatathemodulerequiresorreturns.Bynotexplicitlypassingdatathroughparameters,youcanmake
sequencefiledebuggingandvalidationmoredifficult.
http://www.ni.com/productdocumentation/10369/en/
2/8
18/11/2016
BestPracticesforCodeModuleDevelopmentNationalInstruments
IfthecodemoduledoesnotallowanullSequenceContextvalue,youcannotcallthemoduleoutsideofTestStand.Therefore,
youshouldtestthevalidityoftheSequenceContextreference.InLabVIEW,youcanusetheNotANumber/Path/Refnum?
function,whichreturnsaBooleanvalue,asshowninFigure3.
Figure3UsingNotaNumber/Path/Refnum?tocheckvalidityoftheSequenceContextObjectReference
3.StrategiesforTerminatingorBreakingSequences
WhenauserpressestheTerminatebutton,TestStandstopstheexecutingsequenceandrunsanyCleanupsteps.However,
onceTestStandgivescontroltoacodemodule,themodulemustcompleteexecutionandreturncontrolbacktoTestStand
beforethesequencecanterminate.Whentheruntimeofacodemoduleisalwaysafewsecondsorless,itisusuallynota
problemtowaitforthecodemoduletocompleteexecutionwhenterminating.
However,whentheruntimeofacodemoduleislongerthanafewsecondsorwhenthemodulewaitsforaconditiontooccur,
suchasuserinput,waitingforthecodemoduletocompleteexecutionbeforeterminatingatestsequencecanbe
unacceptablebecauseitcanappeartotheuserthattheirterminatecommandwasignored.
Codemodulesthatdonotalwayscompleteinashorttimecantesttheexecutionstateofthetestsequenceandcheckfor
termination.Forexample,youcanusetheExecution.GetTerminationMonitorStatusTestStandAPImethodtoobtainthe
executionstate.Basedontheexecutionstate,thecodemodulecanquicklyexitiftheTestStandEngineattemptstoterminate
theexecution.BeforeyoucalltheExecution.GetTerminationMonitorStatusmethod,youmustfirstcallthe
Execution.InitTerminationMonitormethodtocreateaPropertyObjecttoholdtheexecutionandterminationstates.The
Execution.GetTerminationMonitorStatusmethodusesthePropertyObjectandreturnsaBooleanvalueyoucanuseto
terminateloopsorskipcodetoquicklyexitbacktoTestStand.
LabVIEWincludesVIsyoucanusetomonitortheexecutionstatus.TheComputerMotherboardTestexamplecallsthe
ComputerSequenceSimulationDialogVIfromtheSetupstepgroupoftheMainSequenceoftheComputerMotherboardTest
Sequence.seqfile,asshowninFigure4.
Figure4MotherboardTestSimulatorVIthatmonitorsforexecutiontermination
TheTestStandInitializeTerminationMonitorVIcallstheExecution.InitTerminationMonitormethodtoobtaintheexecution,
terminationmonitor,andSequenceContextreferencestopasstotheTestStandGetTerminationMonitorStatusVI.
TheTestStandGetTerminationMonitorStatusVIcallstheExecution.GetTerminationMonitorStatusmethodandreturnsa
Booleanvalue,whichiswiredtoanArithmeticCompoundFunctionsettotheORoperation.TheinvertedoutputoftheOR
functioniswiredtotheWhileLoopconditionalterminal,whichissettoContinueifTrue.Theloopexitsifthe
Execution.GetTerminationMonitorStatusmethodreturnsTRUE,ifanerroroccurs,oriftheuserpressestheOKbuttononthe
frontpaneloftheVI.TheTestStandCloseTerminationMonitorVIclosestheexecutionandterminationmonitorreferences
theTestStandInitializeTerminationMonitorVIopened.WhentheWhileLoopconditionalterminalissettoStopifTrue,you
donotneedtoinverttheoutputoftheArithmeticCompoundFunction.
http://www.ni.com/productdocumentation/10369/en/
3/8
18/11/2016
BestPracticesforCodeModuleDevelopmentNationalInstruments
IntheLabWindows/CVIversionoftheComputerMotherboardTestexample,theComputerSequenceSimulationDialogfunction
callusestheTS_CancelDialogIfExecutionStopsfunctiontoautomaticallyexitthedialogiftheexecutionterminates.
Refertothe<TestStandPublic>\Examples\DemodirectoryfortheComputerMotherboardTestexamplesforother
programminglanguages.RefertotheTSUtilfilesintherelevantdirectoriesofthe<TestStand>\APIdirectoryforsimilar
executionmonitoringfunctions.RefertotheNITestStandHelpformoreinformationaboutTestStandAPImethods.
TheTerminationMonitorisveryusefulinsituationswherecodemodulesthattakealongtimetoexecuteneedtoevaluatethe
statusoftheexecutionsothattheycanquicklyexitinsituationswhereanexecutionhasbeenterminated.Atothertimes
duringalongcodemodulesexecution,ratherthanterminate,developersneedtomanuallybreakasimultaneouslyexecuting
threadforthepurposesofdebugging.Executionsmustwaituntilallthreadsareinbetweenstepsbeforebreaking,which
meansalengthycodemodulewouldberequiredtocompleteandreturn.Asaresult,duringcodemodulesthathavealengthy
runtimeorwaitforsomeconditiontooccur,executionwillnotbreakuntilthecodemodulehascompletedandtheuser
interfacemaygivetheimpressionofbeingunresponsiveifthedevelopertriestousethedebuggingtools.
Inordertodebugonethreadwhilealengthycodemodulerunsinanother,youcansettheThread.ExternallySuspended
propertytotruewithinthecodemoduleimmediatelybeforerunningthebodyofthecode.AfterusingtheTestStandAPItoset
thispropertywithinthecodemodule,theexecutiontreatsthisthreadasthoughitisalreadysuspendedbytheexternal
module.Ifthedeveloperthenbreaksanalternativethreadwhilethemoduleisrunning,themodulewillcontinuetorunto
completionbuttheinterfacewillimmediatelyrespondappropriatelyinsteadofwaitingforthemoduletoreturn.
ItisimportanttorememberthatwhenThread.ExternallySuspendedissettoTRUE,developersshouldrefrainfromusingthe
TestStandAPItoguaranteethatallraceconditionsandcollisionsareavoided.IfyouneedtoutilizetheTestStandAPIorifthe
modulebodyfinishesexecuting,besuretoresettheThread.ExternallySuspendedpropertybacktoitsoriginalstate.
WithNITestStand4.2andlater,LabVIEWdeveloperscanusetheSetThreadExternallySuspendedVItoeasilyaccessthe
Thread.ExternallySuspendedpropertywithinthecodemoduleitself,asseenwithinFigure5.
Figure5UsingtheSetThreadExternallySuspendedVIwithinacodemodule
4.UsingInstrumentationwithinCodeModules
Tocallaninstrumentdriver,youtypicallyfirstopenahandletothedriver,usethehandletomakedriverspecificcalls,and
thenclosethehandlewhenyouaredone.
YoucanreturnthehandlethataninstrumentdriverInitializefunctioncreatesinacodemodulesoyoucanstoreitina
TestStandlocalorglobalvariable.Youcanthenpassthevariableasaninputtoeachstepthatrequiresaccesstothe
instrument.InLabVIEW,youcanusetheLabVIEWIOControlastheterminaldatatype.Alternatively,youcanusethelegacy
SessiontoRefnumVIthatconvertsanexternalsessionhandletoaLabVIEWrefnumandthelegacyRefnumtoSessionVI
thatconvertsaLabVIEWrefnumtoasessionhandlesoyoucanstorethehandleinaTestStandnumericvariableorproperty.
WhenyouexplicitlypassinstrumenthandlesbetweenTestStandandcodemodules,youmustdecideinwhichvariablesto
storethehandles,andyoumustconsidertheplacementoftheinitializeandtheclosecodemoduleswithinthesequencesyou
createsoyoucanusethehandlewithinallthestepsthatrequireit.TheadvantagesofreturningthehandletoTestStandare
thatyouhavecompletecontroloverwhenyouinitializeandclosetheinstrumentandthatthecodemodulesaredecoupled
fromobtainingtheinstrumenthandle.
Alternatively,youcankeepthehandleinglobalcodemodulememorysoitisaccessiblefromwithinallcodemodules,suchas
withinastaticviSessionvariable(CVI/C++)orwithinaLabVIEWglobalvariable.Whenyoukeepthehandlewithinthecode,
youcanavoidtheneedforaseparateinitializestepbyretrievingitthroughcodethattestsforavalidhandleandcreateoneif
onedoesnotexist.Thedisadvantagesofthisapproacharethatitcouplesthecodemoduleswiththeglobalvariable,anditis
moredifficulttoshareinstrumenthandlesamongcodemoduleswrittenindifferentlanguagesthatcannotshareglobal
variables.Also,youstillneedtoexplicitlydecidewhentoclosethehandle.
ForVISAandIVIinstrumenthandles,anotheroptionistousetheSessionManager.Codemodulesandsequencespassa
logicalname,suchasDMM1,toobtainareferencecountedsessionobjectfromtheSessionManager,whichholdsthe
correspondinginstrumenthandle.TheSessionManagerautomaticallyinitializesthehandleafterthesessioniscreatedand
http://www.ni.com/productdocumentation/10369/en/
4/8
18/11/2016
BestPracticesforCodeModuleDevelopmentNationalInstruments
automaticallyclosesthehandlewhenthelastreferencetothesessionisreleased.Thus,codemodulescansharean
instrumenthandlebynamewithoutexplicitcouplingthroughsharedglobalvariables.Inaddition,byholdingareferencetoa
session,ahigherlevelentity,suchasasequence,canmakecertainthatasessionexistsforthedurationofitsexecution.This
ensuresthattheinstrumenthandlewillbeinitializedandclosedonetimeatmost,nomatterhowmanyofthesequencecode
modulesandsubsequencesaccessthesamesession.
IntheexampleshowninFigure6,theGetDMMSessionstepobtainsareferencetotheinstrumentsessionobjectforthe
DMMforthelogicalname.Thestepstoresthesessionreferenceinalocalvariablesothatthesessionremainsinitializedfor
thedurationofthesequence.
Figure6TheLabVIEWversionoftheTestStandexampleforSessionManager
ThepreviousexamplesequenceobtainsthesessionfromaLabVIEWcodemodulethatcallstheSessionManagerinsteadof
callingtheSessionManagerdirectlybecausethisexampleconfiguredtheLabVIEWAdaptertorunVIsinaseparateprocess.
RefertotheLimitationswithSharingInstrumentSessionsBetweenProcessestopicintheSessionManagerHelp
(http://zone.ni.com/reference/enXX/help/370052M01/tsexamples/infotopics/session_manager/)formoreinformation.
ToobtainaninstrumentrefnumfromalogicalnameinaLabVIEWcodemodule,calltheGetInstrumentSessionVItoobtain
theinstrumenthandlefromtheSessionManager.CalltheSessiontoRefnumVItoconvertthehandletoaLabVIEWrefnum,
whichyouthenpasstoaLabVIEWinstrumentdriverVI,asshowninFigure7.
Figure7LabVIEWcodemodulethatdemonstratestheuseoftheSessionManager
TheTestStandSessionManagerexamplesarelocatedinthe<TestStandExamplesFolder>\SessionMgrdirectory.Select
ProgramFilesNationalInstrumentsSessionManagertolaunchtheSessionManagerHelp
(http://zone.ni.com/reference/enXX/help/370052M01/tsexamples/infotopics/session_manager/).
5.PerformingSwitchingFunctions
http://www.ni.com/productdocumentation/10369/en/
5/8
18/11/2016
BestPracticesforCodeModuleDevelopmentNationalInstruments
5.PerformingSwitchingFunctions
YoucanhandleswitchinginTestStandbycallingswitchdriverfunctionswithincodemodules,usingtheTestStandIVISwitch
step,orbyusingthebuiltinswitchingpropertiesofastep.However,ifyouarenotusingNISwitchExecutive,youcannotuse
theswitchingpropertiesofastep.IfyouareusingIVI,considerusingNISwitchExecutivesoyoucanremovetheswitching
functionsfromthecodemodulesandconvenientlyusetheswitchingpropertiesofstepsinstead.Takingthisapproachcan
increasethereusabilityandreducethecomplexityofyourcodemodules.
MaintainingswitchroutenamesorchannelnamesinaTestStandarrayisaconvenientapproachwhenyouwanttomakea
seriesofmeasurementsatdifferentlocations.AsdemonstratedinFigure8,youcanusetheRunState.LoopIndexpropertyor
anothervariabletoindextherouteorroutegroupnamesforstepsthatyouloopon.Also,ifthestepispartofatestsequence
thatusestheParallelorBatchprocess,youcanusethetestsocketindexRunState.TestSockets.MyIndexaspartofthe
routingstringorastheindextoanarray.
Figure8RunState.LoopIndexisaconvenientvariableforswitchrouteconnectionindexingonloopingsteps
RefertotheAcceleratingDevelopmentandSimplifyingMaintenancewithNISwitchExecutive
(http://zone.ni.com/wv/app/doc/p/id/wv704)webcastformoreinformationaboutusingtheswitchingsteppropertiesto
incorporateswitching.
6.HandlingErrors
Anerrorinatestsystemisanunexpectedruntimebehaviorthatpreventstestingfrombeingperformed.Incontrast,atest
failureoccurswhenafaultisdetectedinaunitundertest,suchastheresultofthetestmeasurementfallingoutsidethe
boundariesofitslimits.
Whenacodemodulegeneratesanerror,passthatinformationbackintothetestsequencetodeterminewhatactionto
performnext,suchasterminatingtheexecution,repeatingthelasttest,ortakinganotheraction.
YoureturnerrorinformationtotheResult.Errorcontainerofthestep,asshowninFigures9and10.Inmostofthelanguages
TestStandsupports,youmustfillintheindividualitemsoftheErrorcontainerseparately,asshowninFigure9.InLabVIEW,
youdonothavetofilltheitemsoftheErrorcontainerseparately,asshowninFigure10.
Figure9ROMTeststepfromthe.NETversionoftheComputerMotherboardTestexample
http://www.ni.com/productdocumentation/10369/en/
6/8
18/11/2016
BestPracticesforCodeModuleDevelopmentNationalInstruments
Figure10ROMTeststepfromtheLabVIEWversionoftheComputerMotherboardTestexample
Noticethatthecodemodulepassestheerrorinformationout,orbacktoTestStand.Youdonotneedtopasstheerror
informationfromTestStandintothecodemodule.IfthecodemodulereturnsanerrortoTestStand,executioncanbranchto
anotherpartofthetestsequence,suchastotheCleanupstepgroup.
7.LoadandUnloadOptions
Youcansettheloadandunloadoptionsofastep.TheloadoptiondefaultisPreloadwhenexecutionbegins.Theunload
optiondefaultisUnloadwhensequencefileisclosed.Withthedefaultsettings,TestStandloadscodemodulesintomemory
whenthesequencefilebeginsexecutingandunloadsthecodemodulesfrommemorywhenthesequencefileisunloaded.
Withlargesequencefilesthatincludemanycodemodules,anoticeableinitialdelaycanoccurwhenyoustartasequence.
ThePreloadwhenopeningsequencefileloadoptionincreasestheloadingtimeofsequencefilesbecauseTestStandloads
allthecodemodulesintomemoryatthesametimeasthesequencefile,butwhenstarted,thesequencebeginsrunning
immediately.TheLoaddynamicallyloadoptionloadsthecodemoduleintomemoryonlywhenthestepexecutes.Usethe
LoaddynamicallyloadoptionwiththeUnloadafterstepexecutesunloadoptionfortheleastamountofmemoryusage.
OneadvantageofloadingallthecodemodulesatsequencefileloadtimeisthatTestStandimmediatelyreportsanyissues
withthecodemodules,suchasmissingDLLs,brokenVIs,andsoon.Whenyoudynamicallyloadcodemodules,TestStand
doesnotreportissuesforthecodemodulesuntilitloadsthecodemodule,whichcouldbetowardtheendofalengthy
execution.However,loadingcodemodulesduringexecutionisusefulwhenyouwanttodynamicallyselectaparticulartestfor
agivenUUTorwhenyouwanttorunadiagnostictestwhenafailureoccurs.Inthiscase,youmightnotwanttoautomatically
loadtheseoptionalcodemodules.Takingthisapproachcanreducetheoverallmemoryfootprintofsequencefiles,buttherun
timeincreasesasaresultoftheadditionalloadtimes.
TheDynamicallyDetermineCodeModuleexampleillustrateshowtousetheLoaddynamicallyloadoptionandtheUnload
afterstepexecutesunloadoption.
RefertoBestPracticesforImprovingNITestStandSystemPerformance(http://zone.ni.com/devzone/cda/tut/p/id/7559)for
moreinformationaboutotherwaystooptimizetheperformanceofatestsystem.
8.LocatingCodeModuleFiles
Youcanuseabsoluteorrelativepathstoreferencecodemodulesinsequencefiles.However,youshoulduserelativepaths
wheneverpossiblebecauseitismucheasiertomanipulatetheorganizationofthefiles.Forexample,ifasequencecallscode
modulefilesthatarelocatedinthesamedirectoryasthesequenceorwithinasubdirectoryofthatdirectory,youcanmoveor
copytheentiredirectoryifthecodemodulepathsarerelativetothesequencefile.However,ifthecodemodulepathsare
absolute,movingthedirectorycausestheabsolutecodemodulepathstorefertononexistentfiles.Whenyoucopythe
directory,thecodemodulepathsofthecopiedsequencefilestillrefertotheoriginalcodemodulefilesinsteadoftothecopies.
ForanexampleofhowtoappropriatelyuseabsolutepathsinanNITestStanddeployment,refertotheUseofAbsolutePaths
DeploymentExample(http://decibel.ni.com/content/docs/DOC7450).
AnotherissuetoconsideristhatwhenyouusetheTestStandDeploymentUtilitytodeploythetestsequencefilesthat
referencecodemoduleswithabsolutepaths,thedeploymentutilityattemptstoconverttheabsolutepathstoberelativetoa
commonroot.However,ifyouhaveabsolutepathstofilesondifferentdrives,orifyourdeploymentspecifiesmultiple
installationdirectories,thedeploymentutilitymightnotbeabletoautomaticallydeterminerelativepathsforallthefiles.
9.Conclusion
Whenyoucarefullyconsidertheissuesoutlinedinthisdocument,youcancreateefficient,reusablecodemodulesthatare
easytomaintainanddeploy.
10.ViewAdditionalSectionsoftheNITestStandAdvancedArchitectureSeries
http://www.ni.com/productdocumentation/10369/en/
7/8
18/11/2016
BestPracticesforCodeModuleDevelopmentNationalInstruments
ClicktoviewadditionaldocumentswithintheNITestStandAdvancedArchitectureSeriescoveringtopicsofinterestto
advancedNITestStanddevelopers(http://www.ni.com/whitepaper/7022/en)
11.AbouttheAuthor
RayFarmerNomadTechnicalServices,Ltd.(mailto:ray.farmer@talk21.com)
RayFarmerhasbeenahighlydemandedspecialistconsultantforovertwelveyears,implementingtestsolutionsforawide
spectrumofclientswiththeuseofLabVIEW,LabWindows/CVI,andTestStandacrossavarietyofindustries.
12.RelatedLinks
BestPracticesforImprovingNITestStandSystemPerformance(http://zone.ni.com/devzone/cda/tut/p/id/7559)
AcceleratingDevelopmentandSimplifyingMaintenancewithNISwitchExecutive(http://zone.ni.com/wv/app/doc/p/id/wv704)
UseofAbsolutePathsDeploymentExample(http://decibel.ni.com/content/docs/DOC7450)
http://www.ni.com/productdocumentation/10369/en/
8/8