﻿<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type=\'text/xsl\' href=\'rss.xsl\'?><rss version="2.0"><channel><title>Geotest - Knowledge Base Articles</title><link>http://www.geotestinc.com/KnowledgeBase/default.aspx</link><description>Articles compiled by Geotest answering the most frequently asked questions.</description><item><title>Installing and Using ATEasy Network License - Published on 1/5/2012</title><description>&lt;b&gt;Note:&lt;/b&gt; This article was modified to reflect the automated setup for the license server and the better client-server connectivity that was introduced in v6.0 build 134. If you are using an older version of ATEasy please upgrade ATEasy License server with the latest ATEasy version. We also recommended upgrading clients if possible.&amp;nbsp;&amp;nbsp;The network license handling in the client and in the server sides are backward compatible and were considerably enhanced to provide better performance and automated setup.&lt;br /&gt;&lt;br /&gt;The server application, License Server, must be installed at the computer that will be the ATEasy license server. The License Server computer must be a 32/64 bit Windows Operating System (Windows 2K and above). The computer must be turned ON and connected to the network while the clients are running. We recommend to install it on one of the the company servers (typically Windows Server) since it always turned on.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Setup the License Server&lt;/h2&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Run the &lt;b&gt;ATEasy Setup &lt;/b&gt;program at the server computer as an administrator privileges user. Select &lt;b&gt;Custom setup type&lt;/b&gt;. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Select the &lt;b&gt;License Server option&lt;/b&gt;, un-check all the other options (unless you intend to run ATEasy on that machine). &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;After the setup is complete, the license server icon will appear in the Windows Taskbar and will be added to the server Services. You can verify the service being installed by right clicking &lt;b&gt;My Computer &lt;/b&gt;&amp;nbsp;&amp;nbsp;icon on the server and selecting &lt;b&gt;Manage &lt;/b&gt;and then followed by &lt;b&gt;Services &lt;/b&gt; under &lt;b&gt;Services and Application&lt;/b&gt;. The ATEasy License Server should be displayed in the list. &lt;br /&gt;Note that for ATEasy versions prior to build 134 setup of the service was done manually and not using the setup.&amp;nbsp;&amp;nbsp;The procedure to install the server manually is described in ALicenseServerService.rtf file located in the ATEasy folder (instructions for manual installation also at the bottom of the page).&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Install the License Key in the server&lt;/h2&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Click on the ATEasy icon in the Task Bar and select &lt;b&gt;About ATEasy License Server&lt;/b&gt;. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Click the &lt;b&gt;Set License &lt;/b&gt;button to display the &lt;b&gt;License Setup dialog box&lt;/b&gt;. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;An ATEasy &lt;b&gt;Computer ID &lt;/b&gt;is displayed in the bottom field. The computer ID is used to identify the machine where the license is installed. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;With the ATEasy &lt;b&gt;Computer ID&lt;/b&gt; and &lt;b&gt;Serial Number &lt;/b&gt;printed on your ATEasy CD or purchase order, create a magic incident using your Geotest account or call Geotest Technical Support at &lt;b&gt;(949) 263-2222&lt;/b&gt;&amp;nbsp;&amp;nbsp;to obtain a license string or file. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Once you receive the license string or file, open the License Setup dialog box again. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Type in the &lt;b&gt;License String or File&lt;/b&gt;. Click &lt;b&gt;OK&lt;/b&gt;. The about dialog should display the # of license installed.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Set Up the Client&lt;/h2&gt;Perform this step only after you have obtained and installed the license string or file on the server.&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Install ATEasy at the client workstation, using the ATEasy Setup program. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Start ATEasy. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Open the License Setup dialog box. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Select Use Network License from the License Type list. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Select the server name from the License Location list. If the server is not displayed leave the dialog open for a few minutes to the server list to populate or type the server name &lt;b&gt;(DomainName/ServerName&lt;/b&gt; for example: GEOTEST/SERVER1). Click &lt;b&gt;OK&lt;/b&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;For more information regarding ATEasy Licensing, see the ATEasy On-Line Books help.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=64</link><pubDate>1/5/2012</pubDate></item><item><title>Programming GX1110 for AM and FM Modulation - Published on 9/9/2011</title><description>&lt;b&gt;Summary&lt;/b&gt;:&amp;nbsp;&amp;nbsp;This article discusses how program the GX1110 Arbitrary Waveform Generator instrument to apply Amplitude Modulation or Frequency Modulation to a carrier signal.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Introduction&lt;/b&gt;:&amp;nbsp;&amp;nbsp;The GX1110 is a 100 MHz, single-channel PXI Arbitrary Waveform Generator (AWG) that can also operate as a function generator with Direct Digital Synthesis (DDS) of the clocking resource.&amp;nbsp;&amp;nbsp;Built-in waveforms are available for use with both the DDS or AWG modes of operation and include Sine, Triangle, Ramp, Noise, Gaussian pulse and Sinx/x.&amp;nbsp;&amp;nbsp;The GX1110 can apply either Amplitude Modulation (AM) or Frequency Modulation (FM) to the carrier waveform using either an internal modulation source or an external modulation signal.&lt;br /&gt;&lt;br /&gt;This article demonstrates how to program the GX1110 to generate AM and FM signals using an internal modulation source.&amp;nbsp;&amp;nbsp;The modulating signal has three parameters that define its characteristics.&amp;nbsp;&amp;nbsp;For AM, those parameters are the modulation frequency, the modulation amplitude and the modulation waveform.&amp;nbsp;&amp;nbsp;For FM, the parameters are modulation frequency, deviation and modulation waveform.&amp;nbsp;&amp;nbsp;Specifications for the modulation parameters are:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' bgcolor=#999999 border=0 cellpadding=1 cellspacing=1&gt;&lt;tr&gt;&lt;td valign=top bgcolor=#F5F4EA class=reg12&gt;&lt;br /&gt;Modulation Parameters:&lt;blockquote&gt;Source:		Internal or External&lt;br /&gt;Frequency:		0 Hz - 20 KHz&lt;br /&gt;AM Amplitude:	0% - 100%&lt;br /&gt;FM Deviation:		0% - 100%&lt;br /&gt;Waveform:		Sine, Square, Triangle, Ramp Up, Ramp Down, Noise&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Program Examples:&amp;nbsp;&amp;nbsp;The following ‘C’ code sets the GX1110 to generate a &lt;br /&gt;100.0 KHz carrier signal with a 5.0V amplitude, and defines the modulation to be FM, 16.0 KHz modulation frequency and a 20.0 KHz frequency deviation.&amp;nbsp;&amp;nbsp;The resulting waveform is shown in figure 1.&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;// Initialize the GX1110 in slot #6&lt;br /&gt;	GtWaveInitialize(6,&amp;nHandle,&amp;nStatus);&lt;br /&gt;// Reset the GX1110&lt;br /&gt;	GtWaveReset(nHandle,&amp;nStatus);&lt;br /&gt;// Set the GX1110 to Function Generator mode&lt;br /&gt;	GtWaveSetOperationMode(nHandle,GTWAVE_OPERATING_MODE_FUNC,&amp;nStatus);&lt;br /&gt;// Set output to 5.0V, Enabled, Sine Wave, 100.0 KHz Frequency&lt;br /&gt;	GtWaveSetAmplitude(nHandle,GTWAVE_CHANNEL_A,5.0,&amp;nStatus);&lt;br /&gt;	GtWaveSetOutputState(nHandle,GTWAVE_CHANNEL_A,True,&amp;nStatus);&lt;br /&gt;	GtWaveFuncSetWaveform(nHandle,GTWAVE_CHANNEL_A,GTWAVE_WAVEFORM_SINE,&amp;nStatus);&lt;br /&gt;	GtWaveFuncSetFrequency(nHandle,GTWAVE_CHANNEL_A,1.0E5,&amp;nStatus);&lt;br /&gt;// Set FM modulation source to internal&lt;br /&gt;	GtWaveFuncGetFmSource(nHandle,GTWAVE_CHANNEL_A,GTWAVE_FUNC_FM_SOURCE_INTERNAL, &amp;nStatus)&lt;br /&gt;//&amp;nbsp;&amp;nbsp;Set modulation to FM Sine Wave, 16 KHz Modulation, 20.0 KHz Deviation&lt;br /&gt;	GtWaveFuncSetFmWaveform(nHandle,GTWAVE_CHANNEL_A,GTWAVE_WAVEFORM_SINE,&amp;nStatus);&lt;br /&gt;	GtWaveFuncSetFmFrequency(nHandle,GTWAVE_CHANNEL_A,16.0E3,&amp;nStatus);&lt;br /&gt;	GtWaveFuncSetFmDeviation(nHandle,GTWAVE_CHANNEL_A,20.0E3,&amp;nStatus);&lt;br /&gt;//&amp;nbsp;&amp;nbsp;Enable FM modulation&lt;br /&gt;	GtWaveFuncSetFmState(nHandle,GTWAVE_CHANNEL_A,True,&amp;nStatus);&lt;br /&gt;// Set the GX1110 to Run state&lt;br /&gt;	GtWaveRun(nHandle,GTWAVE_CHANNEL_A,&amp;nStatus);&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200222\FM_Triang_01.bmp" alt="ToolTip" title="ToolTip" border='0' &gt;&lt;/div&gt;&lt;div align='center'&gt;Figure 1:&amp;nbsp;&amp;nbsp;Frequency Modulation Waveform&lt;/div&gt;&lt;br /&gt;The following ‘C’ code sets the GX1110 to generate a 1.4 KHz carrier signal with a 5.0V amplitude, and defines the modulation to be AM, 50.0 Hz modulation frequency and&amp;nbsp;&amp;nbsp;100% modulation level.&amp;nbsp;&amp;nbsp;The resulting waveform is shown in figure 2.&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;// Initialize the GX1110 in slot #6&lt;br /&gt;	GtWaveInitialize(6,&amp;nHandle,&amp;nStatus);&lt;br /&gt;// Reset the GX1110&lt;br /&gt;	GtWaveReset(nHandle,&amp;nStatus);&lt;br /&gt;// Set the GX1110 to Function Generator mode&lt;br /&gt;	GtWaveSetOperationMode(nHandle,GTWAVE_OPERATING_MODE_FUNC,&amp;nStatus);&lt;br /&gt;// Set output to 5.0V, Enabled, Sine Wave, 1.4 KHz Frequency&lt;br /&gt;	GtWaveSetAmplitude(nHandle,GTWAVE_CHANNEL_A,5.0,&amp;nStatus);&lt;br /&gt;	GtWaveSetOutputState(nHandle,GTWAVE_CHANNEL_A,True,&amp;nStatus);&lt;br /&gt;	GtWaveFuncSetWaveform(nHandle,GTWAVE_CHANNEL_A,GTWAVE_WAVEFORM_SINE,&amp;nStatus);&lt;br /&gt;	GtWaveFuncSetFrequency(nHandle,GTWAVE_CHANNEL_A, 1.4E3,&amp;nStatus);&lt;br /&gt;//&amp;nbsp;&amp;nbsp;Set modulation to AM Sine Wave, 50 Hz Modulation, 100% Amplitude&lt;br /&gt;	GtWaveFuncSetFmWaveform(nHandle,GTWAVE_CHANNEL_A,GTWAVE_WAVEFORM_SINE,&amp;nStatus);&lt;br /&gt;	GtWaveFuncSetFmFrequency(nHandle,GTWAVE_CHANNEL_A,50,&amp;nStatus);&lt;br /&gt;	GtWaveFuncSetFmDeviation(nHandle,GTWAVE_CHANNEL_A,20.0E3,&amp;nStatus);&lt;br /&gt;//&amp;nbsp;&amp;nbsp;Enable FM modulation&lt;br /&gt;	GtWaveFuncSetFmState(nHandle,GTWAVE_CHANNEL_A,True,&amp;nStatus);&lt;br /&gt;// Set the GX1110 to Run state&lt;br /&gt;	GtWaveRun(nHandle,GTWAVE_CHANNEL_A,&amp;nStatus);&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt; &lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200222\AM_Sine_01.bmp" alt="ToolTip" title="ToolTip" border='0' &gt;&lt;/div&gt;&lt;div align='center'&gt;Figure 2:&amp;nbsp;&amp;nbsp;Amplitude Modulation Waveform&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200222\AM_Triang_01.bmp" alt="ToolTip" title="ToolTip" border='0' &gt;&lt;/div&gt;&lt;div align='center'&gt;Figure 2:&amp;nbsp;&amp;nbsp;Amplitude Modulation Waveform&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200222\AM_RampUp_01.bmp" alt="ToolTip" title="ToolTip" border='0' &gt;&lt;/div&gt;&lt;div align='center'&gt;Figure 2:&amp;nbsp;&amp;nbsp;Amplitude Modulation Waveform&lt;/div&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=222</link><pubDate>9/9/2011</pubDate></item><item><title>Using Interrupts with the GX3500 and GX3700/GX3700e FPGA Instruments - Published on 8/12/2011</title><description>Interrupts are widely used as a means for hardware to handshake and syncronize with software in order to signal the completion of a hardware process or the need for a change in software execution. The Gx3500 and Gx3700 User FPGA boards both support this feature by exposing a dedicated hardware interrupt pin to the FPGA designer, and three API functions in software for interrupt management and set up.&lt;br /&gt;&lt;br /&gt;Before getting started with Interrupts follow these steps:&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Verify that&amp;nbsp;&amp;nbsp;the GX3500 has the lastest firmware. The Interface FPGA, which contains the core firmware for the device, must be upgraded to version B003 or greater. This can be done by initializing the GX3500 from within the software front panel, clickong on the &lt;b&gt;About &lt;/b&gt;Tab, clicking on &lt;b&gt;Upgrade Firmware&lt;/b&gt;, and then browsing to the appropriate firmware file (.RPD file extension).&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Verify that the latest GXFPGA software package has been installed (Version 1.2 or greater).&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Software&lt;/h2&gt;The user can select to handle a hardware interrupt in one of two ways:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Assign a callback function to be invoked (in a new threadd) whenever an interrupt occurs (&lt;b&gt;GxFpgaSetEvent&lt;/b&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Block (Wait) until an interrupt occurs or timeout (&lt;b&gt;GxFpgaWaitOnEvent&lt;/b&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The software API functions that interface with the hardware generated interrupt are:&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;GxFpgaSetEvent&lt;/h2&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;GxFpgaSetEvent(SHORT nHandle, SHORT nEventType, BOOL bEnable, Gt_EventCallback procCallback, PVOID pvUserData, PSHORT pnStatus)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;This function is used to enable the capture of interrupt events and set up the callback interrupt handler. &lt;br /&gt;&lt;b&gt;nEventType&lt;/b&gt;: The type of event to capture. Currently this value must be set to &lt;b&gt;GT_EVENT_INTERRUPT&lt;/b&gt; &lt;br /&gt;&lt;b&gt;bEnable&lt;/b&gt;: A boolean flag to enable or disable interrupt generation&lt;br /&gt;&lt;b&gt;procCallBack&lt;/b&gt;: A call back function (function pointer) can be passed to the procCallback parameter &lt;br /&gt;&lt;b&gt;pvUserData&lt;/b&gt;: A pointer to user data (scalar or structured data) that will be passed to the callback function when an interrupt occurs&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note&lt;/b&gt;: The callback function (passed into &lt;b&gt;procCallback&lt;/b&gt;) must match the following prototype where GxFpgaCallBack can be any name:&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;GxFpgaCallBack(SHORT nHandle, SHORT nEventType, PVOID pvUserData)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;GxFpgaWaitOnEvent&lt;/h2&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;GxFpgaWaitOnEvent(SHORT nHandle, SHORT nEventType, LONG lTimeout, PSHORT pnStatus)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;This function blocks program execution and waits for an interrupt to occur.&lt;br /&gt;&lt;b&gt;nEventType&lt;/b&gt;: The type of event to capture. Currently this value must be set to &lt;b&gt;GT_EVENT_INTERRUPT&lt;/b&gt; &lt;br /&gt;&lt;b&gt;lTimeout&lt;/b&gt;: A timeout value (in terms of mS) to determine how long to wait for an interrupt before continuing the program&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;GxFpgaDiscardEvents&lt;/h2&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;GxFpgaDiscardEvents(SHORT nHandle, SHORT nEventType, PSHORT pnStatus)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;This function discards all pending interrupt requests.&lt;br /&gt;&lt;b&gt;nEventType&lt;/b&gt;: The type of event to capture. Currently this value must be set to &lt;b&gt;GT_EVENT_INTERRUPT&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Hardware&lt;/h2&gt;When creating an FPGA design, use the IRQ pin (as assigned in the pin planner) to generate a hardware interrupt. An interrupt is generated when the IRQ pin is driven from a logic low to a logic high state (Rising Edge).&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Example&lt;/h2&gt;The GXFPGA driver contains an example that shows how to program the card interrupt. See the The GxFpgaExampleC.cpp and the&amp;nbsp;&amp;nbsp;GxFpgaExampleIRQx250ms.rpd in the Examples\C folder. In the example an interrupt is generated every 250 mSec.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=221</link><pubDate>8/12/2011</pubDate></item><item><title>Consume a web service in ATEasy - Published on 7/28/2011</title><description>In this article, we will be consuming the CDYNE free weather service.&amp;nbsp;&amp;nbsp;We will be using the following resources:&lt;br /&gt;&lt;br /&gt;&lt;a href='http://wiki.cdyne.com/wiki/index.php?title=CDYNE_Weather'&gt;Weather Service WIKI&lt;/a&gt;&lt;br /&gt;&lt;a href='http://www.cdyne.com/downloads/SPECS_Weather.pdf'&gt;Weather service Specification Sheet&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Use WSDL.exe to generate the source code for the proxy class in one of the Visual Studio languages.&lt;/h2&gt;WSDL is a tool provided by Microsoft for the generation of Web Services proxy classes.&amp;nbsp;&amp;nbsp;The help file for the tool is located &lt;a href='http://msdn.microsoft.com/en-us/library/7h3ystb6(v=vs.80).aspx'&gt;here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The weather service specification sheet provides us with a listing of functions and parameters as well as the location of the WSDL formatted files.&amp;nbsp;&amp;nbsp;Type the following into your command prompt to generate the proxy class code in Visual Basic and save the output to "C:\Temp\myProxyClass.vb".&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;&gt;WSDL /L:VB /O:C:\Temp\myProxyClass.vb HTTP://wsf.cdyne.com/WeatherWS/Weather.asmx?wsdl&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Use Visual Studio to generate a .Net assembly from the source code.&lt;/h2&gt;Launch Visual Studio and create a class library project and import the code generated by WSDL.exe.&amp;nbsp;&amp;nbsp;User Project | Add Reference to add System.Web.Services to your project.&amp;nbsp;&amp;nbsp;Build the project and locate the compiled library.&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.geotestinc.com/images/support/Q200220\WeatherProxyClassVB.zip' target='_blank'&gt;Download Visual Basic project&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Import the .NET library into ATEasy.&lt;/h2&gt;Create a new ATEasy application and a new driver.&amp;nbsp;&amp;nbsp;Rename the new driver to WeatherSvc.&amp;nbsp;&amp;nbsp;Import the .NET library into the new driver.&amp;nbsp;&amp;nbsp;For convenience, you can also move the DLL file into the ATEasy application directory.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Instantiate the proxy class with ATEasy. &lt;/h2&gt;Create a driver procedure GetWeather().&amp;nbsp;&amp;nbsp;This procedure will allow us to retrieve the city, state and current temperature for the provided zip code.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Procedure GetWeather(zipcode, temperature, state, city): Void&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;	zipcode: Val BString&lt;br /&gt;	temperature: Var BString&lt;br /&gt;	state: Var BString&lt;br /&gt;	city: Var BString&lt;br /&gt;	WeatherReturn: WeatherProxyClass.WeatherReturn&lt;br /&gt;	weather: WeatherProxyClass.Weather&lt;br /&gt;{&lt;br /&gt;	weather=new WeatherProxyClass.Weather()&lt;br /&gt;	WeatherReturn=weather.GetCityWeatherByZIP(zipcode)&lt;br /&gt;	city=WeatherReturn.City&lt;br /&gt;	state=WeatherReturn.State&lt;br /&gt;	temperature=WeatherReturn.Temperature&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Create a command tree within your driver to link to this procedure.&amp;nbsp;&amp;nbsp;Attach this procedure to the "Driver Get Weather" command.&lt;br /&gt;&lt;br /&gt;To test this, create a series of variables and tests in the program module.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;	weatherCity: BString&lt;br /&gt;	weatherState: BString&lt;br /&gt;	weatherTemperature: BString&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Task 1 : "Perform Weather Operations"&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;	Id = Perform_Weather_Operations&lt;br /&gt;&lt;br /&gt;Test 1.1 : "Request information"&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;	Id = Request_information&lt;br /&gt;	Type = Other&lt;br /&gt;{&lt;br /&gt;	WeatherSvc Get Weather("92614", weatherTemperature, weatherState, weatherCity)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Test 1.2 : "Check City"&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;	Id = Check_City&lt;br /&gt;	Type = String&lt;br /&gt;	String = "Irvine"&lt;br /&gt;{&lt;br /&gt;	TestResult=weatherCity&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Test 1.3 : "Check State"&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;	Id = Check_State&lt;br /&gt;	Type = String&lt;br /&gt;	String = "CA"&lt;br /&gt;{&lt;br /&gt;	TestResult=weatherState&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Test 1.4 : "Check Temp"&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;	Id = Check_Temp&lt;br /&gt;	Unit = "Fahrenheit"&lt;br /&gt;	Type = MinMax&lt;br /&gt;	Min = 30&lt;br /&gt;	Max = 120&lt;br /&gt;{&lt;br /&gt;	TestResult=Val(weatherTemperature)&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;a href='http://www.geotestinc.com/images/support/Q200220\WeatherServiceATEasy.zip' target='_blank'&gt;Download ATEasy project&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=220</link><pubDate>7/28/2011</pubDate></item><item><title>Using the Gx5960 Pattern Test Flags to Qualify real time compare errors - Published on 6/7/2011</title><description>The Gx5960 series DIO boards are able to perform real time conditonal branching/halting and recording when a compare error has been detected from a particular data pattern. Each data pattern contains two flags to help qualify any errors generated. The qualification (by way of Pattern Test Flags) allows the sequencer to determine if a particular pattern's error can cause a branch/halt and if it will be recorded in the EAM (Error Address Memory) or not.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Pattern Test Flags&lt;/h2&gt;&lt;b&gt;Conditional Error Enable Flag&lt;/b&gt;: Each data pattern contains a Conditional Enable (CONDEN) flag that is used by the Conditional Logic to determine if a real time compare result generated by a particular data pattern will be used within a conditional error statement. &lt;br /&gt;A list of conditional error statements are:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Halting on error (or NOT error)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Jumping on error (or NOT error)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Go subroutine on error (or NOT error)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Looping on error (or NOT error)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Burst Error Enable Flag&lt;/b&gt;: Each data pattern also contains a Burst Error Enable (BERREN) flag that is used by the Error Address Memory to determine if an error generated by a particular data pattern will be recorded or not. &lt;br /&gt;&lt;br /&gt;Note that the Error Address Memory stores up to 1024 real time compare error addresses. The Burst Error Enable flag does not have any effect on the Record Memory.&lt;br /&gt;&lt;br /&gt;Either flag (&lt;b&gt;CONDEN&lt;/b&gt;, or &lt;b&gt;BERREN&lt;/b&gt;) can be set, or no flags set at all on a per data pattern basis.&lt;br /&gt;&lt;br /&gt;The API function used to configure the pattern test is as follows:&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;VOID WINAPI GtDio6xSetPatternTestEnable (SHORT nHandle, LONG lPatternOffset, SHORT nEnable, PSHORT pnStatus)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;After selecting the sequence step using the &lt;b&gt;GtDio6xSelectSequenceStep &lt;/b&gt;function, this function can be called to apply a pattern test flag to a particular data pattern.&lt;br /&gt;&lt;br /&gt;The possible values of nEnable are as follows:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;GTDIO6X_STE_NONE - No Flags are enabled for the data pattern&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;GTDIO6X_STE_COND - Only the CONDEN flag is enabled for the data pattern&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;GTDIO6X_STE_BURST - Only the BERREN flag is enabled for the data pattern&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;GTDIO6X_STE_BOTH - Both, CONDEN and BERREN flags are enabled for the data pattern&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Sequencer Basis Settings&lt;/h2&gt;The sequencer uses the following three settings to determine if the Pattern Test Flags (CONDEN and BERREN) will be used or not: &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Error Count Basis&lt;/b&gt; - Selection of the signal used for counting real time compare errors by the EAM&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Local - Unqualified (all), locally generated real time compare errors will be used in the EAM Error Count&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Local BERREN - Only qualified (with the BERREN flag enabled) locally generated real time compare errors will be used in the EAM Error Count&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Domain - Unqualified (all), domain wide real time compare errors will be used in the EAM Error Count&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Domain BERREN - Only qualified (with the BERREN flag enabled) domain wide real time compare errors will be used in the EAM Error Count&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;b&gt;Error Address Basis&lt;/b&gt; - Selection of the signal used to generate a real time compare error pattern/sequence address for use by the EAM&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Local - Unqualified (all), locally generated real time compare errors will be recorded in the EAM&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Local BERREN - Only qualified (with the BERREN flag enabled) locally generated real time compare errors will be recorded in the EAM&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Domain - Unqualified (all), domain wide real time compare errors will be recorded in the EAM&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Domain BERREN - Only qualified (with the BERREN flag enabled) domain wide real time compare errors will be recorded in the EAM&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;b&gt;Pass/Fail Basis &lt;/b&gt;- Selection of the signal used by the Conditional Logic to perform an action on a rela time compare error.&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Local - Unqualified (all), locally generated real time compare errors will be used by the Conditional Logic&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Local CONDEN - Only qualified (with the CONDEN flag enabled) locally generated real time compare errors will be used by the Conditional Logic&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Domain - Unqualified (all), domain wide real time compare errors will be used by the Conditional Logic&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Domain CONDEN - Only qualified (with the CONDEN flag enabled) domain wide real time compare errors will be used by the Conditional Logic&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The API Function used to configure the Error Count Basis and Error Address Basis is as follows:&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;VOID WINAPI GtDio6xSetErrorParameters (SHORT nHandle, SHORT nErrorCountBasis, SHORT nErrorAddressBasis, PSHORT pnStatus)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The API Function used to configure the Pass/Fail Basis is as follows:&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;VOID WINAPI GtDio6xSetPassFailParameters (SHORT nHandle, SHORT nPassFailBasis, SHORT nPassValidMode, PSHORT pnStatus)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Consult the Function Reference for more information on these functions.&lt;br /&gt;&lt;br /&gt;The following diagram explains the concepts described above:&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200217\Gx5960PatternTestCodes.bmp" alt="Real Time Compare Error Conditional" title="Real Time Compare Error Conditional" border='0' &gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=217</link><pubDate>6/7/2011</pubDate></item><item><title>Using GX5295 Level Comparators for Fast Go/NoGo Production Tests - Published on 5/13/2011</title><description>&lt;b&gt;Introduction&lt;/b&gt;&lt;br /&gt;In the semiconductor production test world, the maxim “Throughput is King” is as true today as when the term was coined decades ago.&amp;nbsp;&amp;nbsp;The underlying assumption is that the test “adequately” evaluates the operation and functionality of the UUT.&amp;nbsp;&amp;nbsp;Special emphasis is given to the word "&lt;b&gt;Adequate&lt;/b&gt;" because the typical practice is to perform a robust, comprehensive functional test and characterization for design verification, and then perform a subset of those tests on the production line.&amp;nbsp;&amp;nbsp;Once a design has been verified, it is usually not necessary to functionally test every aspect of each device, or fully characterize the AC and/or DC parameters of each device during the production test cycle.&amp;nbsp;&amp;nbsp;An adequate subset of the functional and parametric tests are selected such that, if the UUT passes these tests, you have high confidence that the component will function correctly in its intended application.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Limit Testing&lt;/b&gt;&lt;br /&gt;By limiting the number and scope of the tests performed, test time can be significantly reduced.&amp;nbsp;&amp;nbsp;And, as “time is money”, reducing test time can save money, improve production yields, and directly impact the profitability of a device in the market.&amp;nbsp;&amp;nbsp;But limiting the number and scope of tests performed during production is not the only way to reduce test time.&amp;nbsp;&amp;nbsp;Limit testing can also be an effective time saver that will improve yield without sacrificing quality.&amp;nbsp;&amp;nbsp;Limit testing is the practice of testing only to a minimum or maximum value to validate device parameters.&amp;nbsp;&amp;nbsp;For example, if a device is specified to provide a minimum 2.5V output under a specified load, it is not necessary to test the device to 2.6V.&amp;nbsp;&amp;nbsp;Nor is it necessary to actually measure the output voltage.&amp;nbsp;&amp;nbsp;So long as the device meets the minimum output threshold (or limit), it is considered within specification.&lt;br /&gt;&lt;br /&gt;Testing to a specific limit or threshold, rather than measuring an actual value, can improve test time by utilizing comparators for the limit test, rather than making a measurement.&amp;nbsp;&amp;nbsp;The output of a comparator provides an instantaneous pass/fail indication of whether the parameter meets the minimum (or maximum) allowable value for the parameter being measured.&amp;nbsp;&amp;nbsp;A measurement is not only slower than using a comparator, but requires that the measured value be evaluated against the pass/fail criteria.&amp;nbsp;&amp;nbsp;Typically this evaluation is performed in software, which is slower than a hardware comparison.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;GX5295 Limit Testing&lt;/b&gt;&lt;br /&gt;The GX5295, from Geotest - Marvin Test Systems, Inc., supports both methodologies.&amp;nbsp;&amp;nbsp;It has a full-function Parametric Measurement Unit (PMU) per pin, capable of forcing voltage or current, and measuring current or voltage, respectively.&amp;nbsp;&amp;nbsp;It also provides a dual-threshold comparator for each pin with minimum and maximum thresholds that can be used to validate whether or not a DC parameter meets an acceptable limit.&amp;nbsp;&amp;nbsp;By providing a dual-threshold comparator per pin, the GX5295 can be programmed with a unique minimum AND maximum limit for EACH pin, and then simply select for each pin which comparator output to use for a limit test.&amp;nbsp;&amp;nbsp;The output of the comparator is binary, “0” or “1”, “pass” or “fail”, “good” or “bad”.&amp;nbsp;&amp;nbsp;No measurement is performed, no evaluation of the measured value is needed.&amp;nbsp;&amp;nbsp;Compliance for the parameter is known immediately.&amp;nbsp;&amp;nbsp;Further, comparators can run at the maximum rate of the GX5295 and has minimal impact on throughput.&lt;br /&gt;&lt;br /&gt;A block diagram for one GX5295 channel input is shown below.&amp;nbsp;&amp;nbsp;Each channel can be independently configured to operate in Digital I/O mode (DIO) or Parametric Measurement Unit mode (PMU).&amp;nbsp;&amp;nbsp;The DIO mode is useful for performing standard digital functional test; supporting both Digital Stimulus/Response and Digital Real-Time compare.&amp;nbsp;&amp;nbsp;The PMU mode is useful for making DC measurements or validating DC limits.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200216\GX5295 PMU Blobk Diagram Small.jpg" alt="GX5295 DIO &amp; PMU Comparator Block Diagram" title="GX5295 DIO &amp; PMU Comparator Block Diagram" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In PMU mode, the GX5295 can force a voltage or a current on each channel, and then measure the respective current or voltage.&amp;nbsp;&amp;nbsp;The measured property can also be passed to the PMU comparators to be used in limit testing.&amp;nbsp;&amp;nbsp;Since each channel has fully independent control over the high and low limit values for it's comparator, as well as the force property and value, a complete DC validation of all input pin thresholds and output pin levels can be performed in a single measurement cycle.&amp;nbsp;&amp;nbsp;For bidirectional channels, two cycles would be required.&amp;nbsp;&amp;nbsp;Features and specifications for the GX5295 PMU are provided in the Table below:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Parametric Measurement Unit (PMU) Specifications:&lt;/b&gt;&lt;table width='100%' bgcolor=#999999 border=0 cellpadding=1 cellspacing=1&gt;&lt;tr&gt;&lt;td valign=top bgcolor=#F5F4EA class=reg12&gt;&lt;table width='100%' bgcolor=#EBEBEB cellpadding=1 cellspacing=1 border=0 class='reg12'&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;b&gt;Number of PMUs&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;32, one per data channel&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;4, one per auxiliar channel (for timing / control functions)&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;b&gt;Modes:&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Force voltage, measure current&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Forcecurrent, measure voltage&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;b&gt;Force Voltage Range:&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;-1 volts to +6 volts&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;b&gt;Force Accuracy:&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;+/- 25 mV&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;b&gt;Force Voltage Resolution:&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;16 bits&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;b&gt;Force Current Range:&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;+/- 32 mA FS, +/- 8 mA, +/- 2 mA, +/- 512 uA, +/- 128 uA, +/- 32 uA, +/- 8 uA, +/- 2 uA FS&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;b&gt;Force / Measure Current Accuracy:&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;+/ 160 uA, 32 mA range&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;+/- 40 uA, 8 mA range&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;+/- 10 uA , 2 mA range&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;+/- 2.56 uA, 512 uA range&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;+/- 640 nA, 128 uA range&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;+/- 160 nA 32 uA range&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;+/- 40 nA, 8 uA range&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;+/- 10 nA, 2 uA range&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;b&gt;Measure Voltage Range:&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;-2 volts to +7 volts&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;b&gt;Measure Voltage Accuracy:&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;+/- 5 mV&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;b&gt;High &amp; Low Voltage Clamps:&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;VCLo: -2 to +5 V&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;VCHi: 0 to +7 V&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;b&gt;Voltage Clamp Accuracy:&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;+/- 100 mV&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;The DLL API functions for utilizing the GX5295 PMU functions are:&lt;/b&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;DioGetChannelMode()&lt;br /&gt;DioGetInputLoadCurrent()&lt;br /&gt;DioGetInputLoadCommutatingVoltage()&lt;br /&gt;DioGetInputLoadState()&lt;br /&gt;DioMeasure()&lt;br /&gt;DioPmuGetComparatorsSource()&lt;br /&gt;DioPmuGetComparatorsStates()&lt;br /&gt;DioPmuGetComparatorsValues()&lt;br /&gt;DioPmuGetComparisonBooleanResult()&lt;br /&gt;DioPmuGetComparisonResults()&lt;br /&gt;DioPmuGetForcedCurrent()&lt;br /&gt;DioPmuGetForcedCurrentCommutatingVoltage()&lt;br /&gt;DioPmuGetForcedVoltage()&lt;br /&gt;DioPmuSetupComparatorsSource()&lt;br /&gt;DioPmuSetupComparatorsValues()&lt;br /&gt;DioPmuSetupForcedCurrent()&lt;br /&gt;DioPmuSetupForcedCurrentCommutatingVoltage()&lt;br /&gt;DioPmuSetupForcedVoltage()&lt;br /&gt;DioSetupChannelMode()&lt;br /&gt;DioSetupInputLoadCurrent()&lt;br /&gt;DioSetupInputLoadCommutatingVoltage()&lt;br /&gt;DioSetupInputLoadState()&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Example&lt;/b&gt;&lt;br /&gt;A example test setup and code for validating the output drive levels of a UUT are provided below.&amp;nbsp;&amp;nbsp;The UUT is a 10-bit full adder.&amp;nbsp;&amp;nbsp;There are 20 input signals mapped to GX5295 channels 0:19; Ain[0:9] and Bin[10:19].&amp;nbsp;&amp;nbsp;There are 11 output signals, 10 bits for the sum and one bit for the carry.&amp;nbsp;&amp;nbsp;these signals are mapped to GX5295 channels 20:30.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200216\KB Block Diagram_Small.jpg" alt="GX5295 Test Configuration" title="GX5295 Test Configuration" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example ATEasy Code for limit testing UUT outputs:&lt;/b&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;! Define DIO output as force voltage (drive UUT inputs)&lt;br /&gt;Dio Setup Channels Mode PmuForceVoltageMode RangeOfChannels(nHandle,0,19)&lt;br /&gt;! Set default voltage to 0V for DIO outputs - logic '0' for UUT Ain and Bin inputs&lt;br /&gt;Dio Setup Channels PMU ForceVoltage RangeOfChannels(nHandle,0,19,0,1,0,1)&lt;br /&gt;&lt;br /&gt;! Define DIO inputs as force current mode (load UUT outputs)&lt;br /&gt;Dio Setup Channels Mode PmuForceCurrentMode RangeOfChannels(nHandle,20,30)&lt;br /&gt;! Set force current to 1mA load using the 2mA range&lt;br /&gt;Dio Setup Channels PMU ForceCurrent RangeOfChannels(nHandle,20,30,1,2)&lt;br /&gt;! Set high/low commutating voltage to +3.5V and -1V, respectively&lt;br /&gt;Dio Setup Channels PMU ForcedCurrentCommutatingVoltage RangeOfChannels(nHandle,20,30,3.5,-1)&lt;br /&gt;&lt;br /&gt;! Set channels 20 - 30 for comparator mode (limit testing)&lt;br /&gt;Dio Setup Channels PMU ComparatorsSource RangeOfChannels(nHandle,20,30,aPmuComparatorsSourceIoVoltage)&lt;br /&gt;! Define High/Low input comparator limits to 1.5V/0.5V, respectively&lt;br /&gt;Dio Setup Channels PMU ComparatorsValues RangeOfChannels(nHandle,20,30,1.5,0.5)&lt;br /&gt;&lt;br /&gt;! Apply logic '0' (0V) to UUT Ain inputs (Bin is also '0') - force UUT sum outputs to '0'&lt;br /&gt;Dio Setup Channels PMU ForceVoltage RangeOfChannels(nHandle,0,9,0,1,0,1)&lt;br /&gt;! Return high/low comparator results in arrays adwHighStates and adwLowStates&lt;br /&gt;Dio Get Channels PMU ComparatorsStates(nHandle,False,adwHighStates,adwLowStates)&lt;br /&gt;&lt;br /&gt;! Apply logic '1' (3.0V) to UUT Ain inputs (Bin inputs are '0') - force UUT sum outputs to '1'&lt;br /&gt;Dio Setup Channels PMU ForceVoltage RangeOfChannels(nHandle,0,9,3,1,0,1)&lt;br /&gt;! Return high/low comparator results in arrays adwHighStates and adwLowStates&lt;br /&gt;Dio Get Channels PMU ComparatorsStates(nHandle,False,adwHighStates,adwLowStates)&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;br /&gt;Using comparator-based limit testing improves test throughput for DC parametric tests by streamlining the procedure for validating DC parameters of the UUT, without sacrificing quality or coverage.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=216</link><pubDate>5/13/2011</pubDate></item><item><title>How to use Microsoft Visual Studio to debug a DLL function called from ATEasy - Published on 5/12/2011</title><description>ATEasy is capable of interface and call external libraries such as DLL, .NET assemblies and ActiveX components. Sometimes it is necessary and useful to be able to debug and step into the code that reside in the external library. The procedure described here demonstrates debugging a C/C++ DLL debugged in Visual Studio 2005 . A similar approach can be done to debug ActiveX or .NET assembly and other development environments than Visual Studio (for example LabWindows /CVi).&lt;br /&gt;&lt;br /&gt;Follow these steps to debug your DLL using Visual Studio:&lt;br /&gt;&lt;br /&gt;1. Compile your DLL project within Visual Studio C++ in &lt;b&gt;Debug mode&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;2. Set the Visual Studio DLL project debug &lt;b&gt;Command&lt;/b&gt; to ATEasy (ATEasy.exe) and the &lt;b&gt;Working Directory&lt;/b&gt; to the ATEasy directory path (by default: &lt;br /&gt;C:\Program Files\ATEasy\):&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/\Q200219\DLLDebug1.JPG" alt="Visual Studio Debugger Property Page" title="Visual Studio Debugger Property Page" border='0' &gt;&lt;br /&gt;&lt;br /&gt;3. Place a breakpoint in the DLL source in the function ATEasy will call .&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/\Q200219\DLLDebug2.JPG" alt="Visual Studio Debugger Break Point" title="Visual Studio Debugger Break Point" border='0' &gt;&lt;br /&gt;&lt;br /&gt;4. Begin a debug session from within Visual Studio. This should result in ATEasy being started by visual studio debugger:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/\Q200219\DLLDebug3.JPG" alt="Visual Studio Debugge Runr" title="Visual Studio Debugge Runr" border='0' &gt;&lt;br /&gt;&lt;br /&gt;5. Make sure your ATEasy module library points to the debug version of the DLL file:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/\Q200219\DLLDebug6.JPG" alt="ATEasy DLL Path" title="ATEasy DLL Path" border='0' &gt;&lt;br /&gt;&lt;br /&gt;6. In ATEasy, run the DLL function using &lt;b&gt;DoIt&lt;/b&gt; or &lt;b&gt;Start&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/\Q200219\DLLDebug4.JPG" alt="ATEasy DoIt Start" title="ATEasy DoIt Start" border='0' &gt;&lt;br /&gt;&lt;br /&gt;7. The Visual Studio IDE should be paused when the breakpoint set earlier is reached. The debugger can now be used to step through the code:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/\Q200219\DLLDebug5.JPG" alt="Visual Studio Debugger Step Through Code" title="Visual Studio Debugger Step Through Code" border='0' &gt;&lt;br /&gt;&lt;br /&gt;8. You can confirm that the correct DLL is loaded by going to &lt;b&gt;Debug &lt;/b&gt;| &lt;b&gt;Windows &lt;/b&gt;| &lt;b&gt;Modules&lt;/b&gt; from the Visual Studio file menu:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/\Q200219\DLLDebug7.JPG" alt="Visual Studio Debugger Modules" title="Visual Studio Debugger Modules" border='0' &gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=219</link><pubDate>5/12/2011</pubDate></item><item><title>Error while using online help books: 'Navigation to the webpage was canceled' - Published on 5/11/2011</title><description>When attempting to open a Microsoft Compiled HTML Help CHM file via a link on a website, you may encounter a message stating 'Navigation to the webpage was canceled'&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200218\Navigation_Canceled.JPG" alt="Navigation to the webpage was canceled appears upon opening help file" title="Navigation to the webpage was canceled appears upon opening help file" border='0' &gt;&lt;br /&gt;&lt;br /&gt;Windows security update 896358 prevents the opening of CHM files from non-trusted locations.&amp;nbsp;&amp;nbsp;Specifically, when attempting to open a CHM by clicking a link from a website, the file is downloaded to your computer's local Internet cache.&amp;nbsp;&amp;nbsp;Although this file location is local to your machine, the directory is designated as Internet zone which is not by default an "Trusted" zone.&amp;nbsp;&amp;nbsp;By default, only the Local Machine (URL Security Zone 0) is trusted and therefore only CHM files downloaded and saved on the machine's local hard disks are accessible.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Workaround: Changing your max allowed zone&lt;/h2&gt;&lt;table width='100%' bgcolor=#EBEBEB cellpadding=1 cellspacing=1 border=0 class='reg12'&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;MaxAllowedZone&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;URL Security Zones Allowed&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;0&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Local Machine zone: Content that exists on the local computer.&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;1&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Local Intranet zone: Content located on an organizations local intranet.&amp;nbsp;&amp;nbsp;Also includes local machine zone.&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;2&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Trusted Sites zone: Content located on web sites that are considered more reputable or trustworthy than other sites on the Internet. The user designated these sites manually by adding the URLs of these trusted Web sites to this zone.&amp;nbsp;&amp;nbsp;Also includes local machine and intranet zone.&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;3&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Internet zone: Content located on web sites that are not designated as either trusted sites or restricted sites.&amp;nbsp;&amp;nbsp;Also includes zones 0 through 2.&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;4&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Restricted sites zone: Content located on web sites that are considered less reputable or trustworthy than other sites on the Internet.&amp;nbsp;&amp;nbsp;The user designates these sites manually by adding the URLs of these distrusted sites to this zone.&amp;nbsp;&amp;nbsp;Also includes all other zones.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;You can perform a registry edit to enable zones beyond the local machine zone.&amp;nbsp;&amp;nbsp;Copy this code below into a text editor and save as EnableCHM.reg; right-clicking and selecting Merge will merge these changes to the registry, enabling the running of .chm files opened from the Internet zone:&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;REGEDIT4&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp]&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]&lt;br /&gt;"MaxAllowedZone"=dword:00000003&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The will enable the running of .chm files from any site on the Internet except those listed within your computer's restricted sites.&amp;nbsp;&amp;nbsp;Copy the code below into a text editor and save as DisableChm.reg; right-clicking and selecting Merge will disable the running .chm files, except when opened from the local system, which is the most restrictive setting possible:&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;REGEDIT4&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp]&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]&lt;br /&gt;"MaxAllowedZone"=dword:00000000&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Note&lt;/b&gt;: IT personnel should be consulted before making registry changes.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Workaround: Running the CHM from the local machine&lt;/h2&gt;Choose to right-click and save the CHM file to your computer.&lt;br /&gt;&lt;br /&gt;If the file doesn't open from your local machine, it may still have a flag incidicating that the file originated from another computer.&lt;br /&gt;&lt;br /&gt;1. Right-click and open the Properties of the CHM file. &lt;br /&gt;2. Click 'Unblock' at the bottom of the Properties Dialog window. &lt;br /&gt;3. Retry opening the file.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=218</link><pubDate>5/11/2011</pubDate></item><item><title>Accessing ATEasy Internal Classes from other programming languages - Published on 4/29/2011</title><description>ATEasy has many documented methods for accessing externally developed code and software.&amp;nbsp;&amp;nbsp;DLLs, ActiveX objects, and .NET classes can be imported.&amp;nbsp;&amp;nbsp;Command line utilities, VIs, and scripts can be run from within the ATEasy environment.&amp;nbsp;&amp;nbsp;Should the need arise, ATEasy code can be exported to be used by other development environments.&amp;nbsp;&amp;nbsp;ATEasy projects can be compiled to DLLs which can be linked within other languages.&amp;nbsp;&amp;nbsp;Parameters described in a DLL procedure that are defined as ATEasy basic data types (short, long, word, dword, etc.) are easily passed and cast as a native type in the calling language.&amp;nbsp;&amp;nbsp;The article &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=210'&gt;Comparing C/C++, C#, VB and ATEasy Basic Data Types&lt;/a&gt; can be used as a reference for setting compatible basic data types.&amp;nbsp;&amp;nbsp;But, ATEasy Internal classes such as ATest, ATask, and ALog can require a bit more work.&amp;nbsp;&amp;nbsp;This article details the process for allowing external programming languages such as C++.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;IDispatch: Using the methods and properties of an ATEasy object&lt;/h2&gt;The IDispatch interface allows the programmer to access an object's property and method list at run-time.&amp;nbsp;&amp;nbsp;ATEasy reserved objects such as &lt;b&gt;Program&lt;/b&gt;, &lt;b&gt;System&lt;/b&gt;, and &lt;b&gt;Test&lt;/b&gt; can be passed out of ATEasy and used using the IDispatch interface.&amp;nbsp;&amp;nbsp;The ATEasy object's members can subsequently be read and altered.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Creating The DLL - C++&lt;/h2&gt;The DLL we are creating within Visual Studio will contain three exported functions:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasyClassSet() : Set a value to the specified property of the referenced object.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasyClassGet() : Get the value of the specified property of the referenced object.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasyClassMethod() : Call a method of the referenced object.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The project created is a Win32 console application that will be compiled to DLL.&amp;nbsp;&amp;nbsp;The project code was created in Visual Studio 2005 and entitled IDispatchExample.&amp;nbsp;&amp;nbsp;It is provided at the bottom of this article.&lt;br /&gt;&lt;br /&gt;The Microsoft knowledge base article &lt;a href='http://support.microsoft.com/kb/238393'&gt;How To Use Visual C++ to Access DocumentProperties with Automation&lt;/a&gt; details the automation of Excel operations using the IDispatch interface.&amp;nbsp;&amp;nbsp;We will reuse the helper function Autowrap() included within that article.&amp;nbsp;&amp;nbsp;The Autowrap() function ensures that your request is formatted properly and provides some user notification in case of an error while performing the get, set or call.&amp;nbsp;&amp;nbsp;Each of the following three exported functions will make a call to Autowrap:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ATEasyClassSet(): Setting an object's property&lt;/b&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;//PURPOSE: Sets the specified value vtParam to the specified property, sProperty on the object pATEasyObject&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;void WINAPI ATEasyClassSet(IDispatch *pATEasyObject, LPOLESTR sProperty, VARIANT vtParam)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; AutoWrap(DISPATCH_PROPERTYPUT, NULL, pATEasyObject, sProperty, 1, vtParam);&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;ATEasyClassGet(): Getting an object's property&lt;/b&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;//PURPOSE: Gets the value of the specified property, sProperty of the specified object pATEasyObject and returns it in the referenced variant pvtParam.&lt;br /&gt;&lt;br /&gt;void WINAPI ATEasyClassGet(IDispatch *pATEasyObject, LPOLESTR sProperty, VARIANT *pvtParam)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; AutoWrap(DISPATCH_PROPERTYGET, pvtParam, pATEasyObject, sProperty, 0);&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;ATEasyClassMethod(): Calling an object's method&lt;/b&gt;&lt;br /&gt;C supports calling functions with a variable number of arguments.&amp;nbsp;&amp;nbsp;Autowrap() supports variable arguments because we will be utilizing objects which are undefined within the DLL.&amp;nbsp;&amp;nbsp;Since ATEasy does not support variable arguments, the ATEasyClassMethod() function will take 4 variants as parameters and then check to see if each variant has been defined before calling Autowrap().&amp;nbsp;&amp;nbsp;It is assumed that if a variant is undefined within ATEasy, it will be passed to the DLL with the variant type VT_ERROR.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;//PURPOSE: Executes the specified object pATEasyObject's method sMethod.&amp;nbsp;&amp;nbsp;This method supports 0 to 4 parameters.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;void WINAPI ATEasyClassMethod(IDispatch *pATEasyObject, LPOLESTR sMethod, VARIANT vtParam1/*=VT_EMPTY*/, VARIANT vtParam2/*=VT_EMPTY*/, VARIANT vtParam3/*=VT_EMPTY*/, VARIANT vtParam4/*=VT_EMPTY*/)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (vtParam1.vt==VT_EMPTY)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AutoWrap(DISPATCH_METHOD, NULL, pATEasyObject, sMethod, 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (vtParam2.vt==VT_EMPTY)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AutoWrap(DISPATCH_METHOD, NULL, pATEasyObject, sMethod, 1, vtParam1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (vtParam3.vt==VT_EMPTY)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AutoWrap(DISPATCH_METHOD, NULL, pATEasyObject, sMethod, 2, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vtParam2, vtParam1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (vtParam4.vt==VT_EMPTY)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AutoWrap(DISPATCH_METHOD, NULL, pATEasyObject, sMethod, 3, vtParam3, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vtParam2, vtParam1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AutoWrap(DISPATCH_METHOD, NULL, pATEasyObject, sMethod, 4, vtParam4, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vtParam3, vtParam2, vtParam1);&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Testing the DLL with ATEasy&lt;/h2&gt;Now that the DLL has been created, we can create an ATEasy application to test it.&lt;br /&gt;&lt;br /&gt;The first step is to define the DLL in ATEasy.&amp;nbsp;&amp;nbsp;The ATEasy Internal Class should be passed as a Val Object.&amp;nbsp;&amp;nbsp;The property or method specifier should be a Val BString and the parameter data should Val or Var Variant, depending on whether you are sending or retrieve data.&amp;nbsp;&amp;nbsp;I started by creating a new library within my program module called IDispatchExample and defining the DLL procedures as such:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Procedure ATEasyClassMethod(pATEasyObject, sMethod, vtParam1, vtParam2, vtParam3, vtParam4): Void&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp; pATEasyObject: Val Object&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Specifies the ATEasy Object to access&lt;br /&gt;&amp;nbsp;&amp;nbsp; sMethod: Val BString&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !Specifies the method to call&lt;br /&gt;&amp;nbsp;&amp;nbsp; vtParam1: [Val] Variant = VarEmpty	! Optional parameter 1&lt;br /&gt;&amp;nbsp;&amp;nbsp; vtParam2: [Val] Variant = VarEmpty	! Optional parameter 2&lt;br /&gt;&amp;nbsp;&amp;nbsp; vtParam3: [Val] Variant = VarEmpty	! Optional parameter 3&lt;br /&gt;&amp;nbsp;&amp;nbsp; vtParam4: [Val] Variant = VarEmpty	! Optional parameter 4&lt;br /&gt;&lt;br /&gt;Procedure ATEasyClassGet(pATEasyObject, sProperty, pvtParam): Void&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp; pATEasyObject: Val Object&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Specifies the ATEasy Object to access&lt;br /&gt;&amp;nbsp;&amp;nbsp; sProperty: Val BString&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !Specifies the property to get the value of&lt;br /&gt;&amp;nbsp;&amp;nbsp; pvtParam: Var Variant&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!The returned value&lt;br /&gt;&lt;br /&gt;Procedure ATEasyClassSet(pATEasyObject, sProperty, vtParam): Void&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp; pATEasyObject: Val Object&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Specifies the ATEasy Object to access&lt;br /&gt;&amp;nbsp;&amp;nbsp; sProperty: Val BString&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !Specifies the property to set the value of&lt;br /&gt;&amp;nbsp;&amp;nbsp; vtParam: Val Variant&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !The value to be set&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;For the ATEasyClassSet test, the TestResult is intentionally set 	outside the Min/Max bounds.&amp;nbsp;&amp;nbsp;The ATEasyClassSet procedure is used to set the Min/Max bounds to 40 and 50.&amp;nbsp;&amp;nbsp;We expect this test to PASS if the ATEasyClassSet procedure is working.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Test 1.1 : "Modified Test Properties"&amp;nbsp;&amp;nbsp; ! ATEasyClassSet Test&lt;br /&gt;-------------------------------------------------------------&lt;br /&gt;Type = MinMax&lt;br /&gt;Min = 5&lt;br /&gt;Max = 5&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; TestResult=42&lt;br /&gt;&amp;nbsp;&amp;nbsp; IDispatchExample.ATEasyClassSet(Test, "Max", 50)&lt;br /&gt;&amp;nbsp;&amp;nbsp; IDispatchExample.ATEasyClassSet(Test, "Min", 40)&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;For the ATEasyClassMethod test, the TestResult is set to 42 and the Min/Max bounds have been set to 40 and 50.&amp;nbsp;&amp;nbsp;Within the test Test.Min and Test.Max have been used to set the Min and Max bounds to 5 and 10.&amp;nbsp;&amp;nbsp;The procedure ATEasyClassMethod is used to call the Test Object's Reset method. This should return the Max/Min bounds to 40 and 50 and will cause this test to PASS.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Test 1.2 : "Reset Method Called"&amp;nbsp;&amp;nbsp; ! ATEasyClassMethod Test&lt;br /&gt;-------------------------------------------------------&lt;br /&gt;Type = MinMax&lt;br /&gt;Min = 40&lt;br /&gt;Max = 50&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; TestResult=42&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; !Manually set the Test properties&lt;br /&gt;&amp;nbsp;&amp;nbsp; Test.Max=5&lt;br /&gt;&amp;nbsp;&amp;nbsp; Test.Min=10&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; !Call reset method from DLL, returning Test Properties to design-time default&lt;br /&gt;&amp;nbsp;&amp;nbsp; IDispatchExample.ATEasyClassMethod(Test, "Reset")&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The third test simply demonstrates the use of ATEasyClassMethod when a parameter has been provided.&amp;nbsp;&amp;nbsp;In this implementation, up to four parameters can be included with a method call.&amp;nbsp;&amp;nbsp;If this is working correctly, you should see the message "I am working!" appended to the end of this test.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Test 1.3 : "Log Append Called"&amp;nbsp;&amp;nbsp;!ATEasyClassMethod w/ Param Test&lt;br /&gt;----------------------------------------------------------------&lt;br /&gt;Type = Other&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; IDispatchExample.ATEasyClassMethod(Log, "Append", "\r\n///////////////////\r\n")&lt;br /&gt;&amp;nbsp;&amp;nbsp; IDispatchExample.ATEasyClassMethod(Log, "Append", "// I am working! //\r\n")&lt;br /&gt;&amp;nbsp;&amp;nbsp; IDispatchExample.ATEasyClassMethod(Log, "Append", "///////////////////\r\n")&lt;br /&gt;&amp;nbsp;&amp;nbsp; TestStatus=PASS&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The fourth and final test retrieves the file location of the Log object natively and also uses ATEasyClassGet to retrieve the Log's FullName property externally.&amp;nbsp;&amp;nbsp;The two values are compared and, if they match, the test will PASS.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Test 1.4 : "Get Log Properties" !ATEasyClassGet Test&lt;br /&gt;----------------------------------------------------&lt;br /&gt;Type = String&lt;br /&gt;String = ""&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; !Retrieve the application's file and path natively&lt;br /&gt;&amp;nbsp;&amp;nbsp; Test.String=Log.FullName&lt;br /&gt;	&lt;br /&gt;&amp;nbsp;&amp;nbsp; !Retrieve the application's file and path using IDispatch&lt;br /&gt;&amp;nbsp;&amp;nbsp; IDispatchExample.ATEasyClassGet(Log, "FullName", varTest)&lt;br /&gt;&amp;nbsp;&amp;nbsp; TestResult=varTest&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Applications&lt;/h2&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Integration of ATEasy and a scripting language.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Passing ATEasy objects out to be parsed externally.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Downloads&lt;/h2&gt;&lt;a href='http://www.geotestinc.com/images/support/Q200215\IDispatchExample.zip' target='_blank'&gt;VS2005 C++ Project&lt;/a&gt;&lt;br /&gt;&lt;a href='http://www.geotestinc.com/images/support/Q200215\SendATestToDLL.zip' target='_blank'&gt;ATEasy Test Workspace&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=215</link><pubDate>4/29/2011</pubDate></item><item><title>How to assign a Processor Core for an ATEasy thread or process - Published on 4/7/2011</title><description>As multi core processors become more prevalent, software developers can take advantage of the additional performance benefits by writing code that implement multiple threads to accomplish tasks in parallel. ATEasy fully supports multithreading technology and provides a set of API functions that easily allow a user to create, terminate and manage threads.&lt;br /&gt;&lt;br /&gt;This article describes two such API function that can be defined in your ATEasy application from the Windows API to manage the processor affinity property of a thread or process. Setting the processor affinity will lock a thread or process into using a particular CPU Core, bypassing the Windows scheduler.&lt;br /&gt;&lt;br /&gt;The following describe the function prototypes:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;BOOL WINAPI SetProcessAffinityMask( __in&amp;nbsp;&amp;nbsp;HANDLE hProcess, __in&amp;nbsp;&amp;nbsp;DWORD_PTR dwProcessAffinityMask)&lt;br /&gt;&lt;br /&gt;DWORD_PTR WINAPI SetThreadAffinityMask(__in&amp;nbsp;&amp;nbsp;HANDLE hThread, __in&amp;nbsp;&amp;nbsp;DWORD_PTR dwThreadAffinityMask)&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;These functions are defined in kernel32.dll. In order to use them in ATEasy, kernel32.dll library must be inserted into an ATEasy Program, System, or Driver and the above functions defined.&lt;br /&gt;&lt;br /&gt;For each function, the first parameter can be defined as Val AHandle and the second parameter can be defined as Val DWord in ATEasy. The return type can be defined as DWORD.&lt;br /&gt;&lt;br /&gt;Pass -1 to the&amp;nbsp;&amp;nbsp;&lt;b&gt;hProcess &lt;/b&gt; parameter to configure the main ATEasy process.&lt;br /&gt;&lt;br /&gt;Pass the return value from the ATEasy functions &lt;b&gt;CreateThread&lt;/b&gt; or &lt;b&gt;GetCurrentThread&lt;/b&gt; to &lt;b&gt;hThread&lt;/b&gt; to configure a specific thread. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;dwProcessAffinityMask&lt;/b&gt; and &lt;b&gt;dwThreadAffinityMask&lt;/b&gt; are bit-wise masks that indicate which core will be selected.&lt;br /&gt;&lt;br /&gt;More information can be found at the following links:&lt;br /&gt;&lt;a href='http://msdn.microsoft.com/en-us/library/ms686223(v=VS.85).aspx '&gt;SetProcessAffinityMask&lt;/a&gt;&lt;br /&gt;&lt;a href='http://msdn.microsoft.com/en-us/library/ms686247(VS.85).aspx. '&gt;SetThreadAffinityMask&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=214</link><pubDate>4/7/2011</pubDate></item><item><title>The ATEasy Crash Analysis Tool - Published on 4/6/2011</title><description>&lt;h2&gt;What is the ATEasy crash analysis tool?&lt;/h2&gt;The ATEasy Crash Analysis Tool replaces the default exception window generated by Windows when any application running crashes. It is designed to provide the user with additional support when developing and debugging ATEasy applications. The &lt;b&gt;ATEasy Exception Window&lt;/b&gt; created provides a snapshot of your information at the moment the exception was generated. It displays the exception as reported by Windows and a listing of the ATEasy procedure call stack organized by the user running threads. More information regarding the ATEasy internal libraries is logged to the&lt;b&gt; Windows Application Events Log&lt;/b&gt; to be used for user bug tracking and application debugging by Geotest engineers.&lt;br /&gt;&lt;br /&gt;The crash analysis tool is available in ATEasy version 8 and later.&lt;br /&gt;&lt;br /&gt;The following window shows the genereic exception as displayed by WIndows when it traps the application exception:&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200213\kb_WindowsExceptionDialog.bmp" alt="An application without crash analysis" title="An application without crash analysis" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;b&gt;The Windows Generic Exception Dialog&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The following windows show the ATEasy Exception window:&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200213\ATEasyExceptionWindow.jpg" alt="ATEasy using crash analysis" title="ATEasy using crash analysis" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;b&gt;The ATEasy Exception Dialog&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Breakdown: What does the log information mean?&lt;/h2&gt;Sample Exception Log Window Information:&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Unhandled exception at 0x7614fbae in C:\Windows\system32\kernel32.dll: 0xe06d7363&lt;br /&gt;Thread (Current) Index=0, ID=0x1178, Handle=0x2e0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HeartBeatMonitor.tmrHeartBeat.OnTimer Line 12&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IoPort.Msg8Byte Line 11&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Program1.Erase_HOST_EEPROM Line 76&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Program1.4 Line 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Internal Call Stack&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Internal PCode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;Thread Index=1, ID=0x1484, Handle=0x4a0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AbortTest.WaitOnEvent Line 2&lt;br /&gt;Thread Index=2, ID=0x17f8, Handle=0x560&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Program1.GUI_Abort.btnAbort.OnClick Line 7&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Program1.startAbortBtn Line 6&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The Threads Call Stack tree view displays the following information:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Thread.&lt;/b&gt; The first line always displays the thread where the crash occurred. This could be a user thread running ATEasy code or and thread created by the the ATEasy development environment or the ATEasy run-time. If your application is multi-threaded, additional user threads are also displayed at the time of the crash as a top level items of the tree view.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Call Stack and PCODE.&lt;/b&gt; The items bellow the each of the threads are the call stack followed by PCODE (pseudo code)information (only for the current thread). The current thread top item is the position in the code where the crash occurred. The position can be a procedure or test followed by a line number in the ATEasy code. For the current thread the next line shows the position in the PCODE followed by a PCODE memory dump of the procedure or test that caused the exception&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Getting more information with the Windows Application Event Log&lt;/h2&gt;The ATEasy call stack will help you pinpoint where the error occurred.&amp;nbsp;&amp;nbsp;If you still require assistance with analyzing the crash, you can send Geotest the Windows Application Event Log filtered for ATEasy events from the Windows Events Viewer.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;How to access the Windows Application Event Log for ATEasy events?&lt;/h2&gt;Right-click My Computer and click Manage&lt;br /&gt;Navigate the tree view to System Tools | Event Viewer | Application&lt;br /&gt;Use menu item View | Filter... and set event source to 'ATEasy' and click OK&lt;br /&gt;&lt;br /&gt;Each entry in the Event Log corresponds to documented crash.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Saving the log&lt;/h2&gt;After clicking on an entry in the Event View, the Actions panel on the right will be updated with additional options, including "Save Log File As..."&amp;nbsp;&amp;nbsp;The Event Viewer allows you to save to XML, CSV, TXT and EVT/EVTX.&amp;nbsp;&amp;nbsp;The EVT log for Windows XP (EVTX for Vista/7) can be reopened in the Event Viewer at a later time.&amp;nbsp;&amp;nbsp;This is the preferred file format when submitting information to Geotest.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' bgcolor=#EBEBEB cellpadding=1 cellspacing=2 border=0 class='reg12'&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;&lt;div align='center'&gt;The ATEasy Crash Analysis Tool.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200213\WindowsATEasyEventLog.jpg" alt="The Windows Application Event Viewer" title="The Windows Application Event Viewer" border='0' &gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;What causes these exceptions?&lt;/h2&gt;ATEasy catches several common exceptions and attempts to notify the user without allowing the application to crash. This protection does not generally extend to external libraries such as DLLs, COM/ActiveX or .NET assemblies that are called by your ATEasy application. Common cause of these exceptions are:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Buffer Overrun&lt;/b&gt;: Error occurs when more data is given to an array than it was allocated.For example calling a DLL function passing in a string that was not&amp;nbsp;&amp;nbsp;sized properly prior to the call, than the DLL function write to the buffer and corrupts the memory which later on cause a crash when accessing the corrupted memory. Generally this shows as memory access violation (0x5) but could also shows as unexpected behavior since memory is corrupted.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Buffer Not Allocated&lt;/b&gt;: Similar to buffer overrun, however the crash will show excetly the location of the problem. Usally memory access as well (0x5). Most likely passing a NULL string to a DLL that does not check for that. The crash occurs when the DLL attempt to write to address 0.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;DLL Parameter Mismatch&lt;/b&gt;: Parameter expected by DLL are not configured properly: wrong number of parameters or wrong data type.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Exception Thrown from an External Library&lt;/b&gt;: Exceptions generated from DLL/ActiveX or .NET will be passed up to ATEasy for reporting.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=213</link><pubDate>4/6/2011</pubDate></item><item><title>Comparing C/C++, C#, VB and ATEasy Basic Data Types - Published on 3/16/2011</title><description>&lt;h2&gt;Data type reference table&lt;/h2&gt;The following table describes ATEasy equivelenet data types when calling procedures defined in other programming languages such as C/C++. The table is also shows the suggested ATEasy data types used when importing C/C++ header file to ATEasy, these suggestions are offered using the ATEasy &lt;b&gt;Ambiguous C Type Dialog&lt;/b&gt; (see ATEasy on-line help for more information):&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' bgcolor=#EBEBEB cellpadding=1 cellspacing=1 border=0 class='reg12'&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;C/C++&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;C#.NET&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;VB.NET&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;ATEasy &lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;Description&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;signed char&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;sbyte&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal SByte&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val Char&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Signed 8-bit integer&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;signed char *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;sbyte *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByRef SByte&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val String, Var String, Val Char[ ], Var Char[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Pointer to a single or an array of signed 8-bit integer characters&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;unsigned char&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;byte&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal Byte&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val Byte&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Unsigned 8-bit integer&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;unsigned char *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;byte *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByRef Byte&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val Byte, Var Byte[ ], Val Byte[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Pointer to a single or an array of unsigned 8-bit integer&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;bool&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;bool&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal Boolean&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val Bool&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Boolean data type (True &lt;&gt;0/False 0), True is usually -1 but in C data type BOOL is 1&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;bool *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;bool *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByRef Boolean&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Var Bool, Var Bool[ ], Val Bool[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Pointer to a single or an array of boolean data type (True/False)&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;signed short int&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;short&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal Short&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val Short&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Signed 16-bit integer&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;signed short int *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;short *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByRef Short&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Var Short, Var Short[ ], Val Short[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Pointer to a single or an array of signed 16-bit integer&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;unsigned short int&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ushort&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal UShort&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val Word&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Unsigned 16-bit integer&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;unsigned short int *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ushort *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByRef UShort&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Var Word, Var Word[ ], Val Word[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Pointer to single or an array of unsigned 16-bit integer&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;wchar_t&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;char&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal Char&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val WChar&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Unicode 16-bit integer&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;wchar_t *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;char *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByRef Char&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Var WChar, Val BString, Var BString, Val WChar[ ], Var WChar[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Pointer to single or an array of Unicode 16-bit integer&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;signed int&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;int&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal Integer&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val Long&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Signed 32-bit integer&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;signed int *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;int *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByRef Integer&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Var Long, Var Long[ ], Val Long[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Pointer to single or an array of signed 32-bit integer&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;unsigned int&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;uint&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal UInteger&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val DWord&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Unsigned 32-bit integer&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;Var DWord, Var DWord[ ], Val DWord[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;unsigned int *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;uint *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByRef UInteger&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Pointer to a single or an array unsigned 32-bit integer&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;float&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;float&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal Single&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val Float&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;32-bit floating-point (single precision)&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;float *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;float *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByRef Single&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Var Float, Var Float[ ], Val Float[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Pointer to a single or an array of 32-bit floating-point&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;double&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;double&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal Double&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val Double&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;64-bit floating-point (double precision)&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;double *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;double *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByRef Double&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Var Double, Var Double[ ], Val Double[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Pointer to a single or an array of 64-bit floating-point&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;char[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;sbyte[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal Byte ( )&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val String, ValChar[ ], Var Char[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;String of NULL terminated ASCII characters&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;char[ ] *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByRef Byte ( )&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val String, Var String&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Pointer to string of NULL terminated ASCII characters&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;wchar_t[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;string&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal String&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val BString, Val WChar[ ], Var WChar[ ]&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;String of Unicode characters&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;VARIANT&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;object&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal Object&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val Variant&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Dynamically-changeable data type&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;int&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;int&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal Integer&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val Procedure&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Holds the address of a procedure, 32 bit&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;IUnknown *. IDispatch *&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;object&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;ByVal Object&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Val Object&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;COM/NET object, stored in a 32-bit address for the COM interface&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Using Val and Var Parameters&lt;/h2&gt;ATEasy function parameters can be either Val or Var.&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Val&lt;/b&gt;: The parameter is passed 'by value'.&amp;nbsp;&amp;nbsp;A local variable is made from the supplied argument.&amp;nbsp;&amp;nbsp;Any changes made to a Val parameter within ATEasy will not affect the original variable.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Var&lt;/b&gt;: The parameter is passed 'by reference'.&amp;nbsp;&amp;nbsp;The parameter is a reference to the supplied argument.&amp;nbsp;&amp;nbsp;Any changes made to a Var parameter within ATEasy will be made to the original variable.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Using MemoryCopy() to get/set variable values&lt;/h2&gt;The ATEasy &lt;b&gt;MemoryCopy(&lt;/b&gt;) internal procedure can be used in ATEasy to copy variables values into ATEasy using the variable's memory address and size.&lt;br /&gt;&lt;br /&gt;For instance, in this C++ DLL procedure a char array is created.&amp;nbsp;&amp;nbsp;The function returns the location of the first element in the array (plAddress) and the array's size (plSize):&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;void StringTest(int *plAddress, int *plSize)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;static char szExample[]="Test String ABC123";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*plAddress=(int)&amp;szExample[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*plSize=strlen(szExample);&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The ATEasy procedure shown below calls the C++ DLL procedure, retrieving the address and size data and then uses that information to construct its own variable using MemoryCopy.&amp;nbsp;&amp;nbsp;In this case, a string is the most appropriate variable.&amp;nbsp;&amp;nbsp;But this technique could be used for other basic and / or user-define variables.&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Procedure MemoryCopyTest(): String Public&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;sTest: String&lt;br /&gt;lSize: Long&lt;br /&gt;lAddress: Long&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringTest(lAddress, lSize)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetLen(sTest, lSize)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MemoryCopy(&amp;sTest, lAddress, lSize)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return sTest&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Related Material&lt;/h2&gt;Knowledge Base: &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=211'&gt;Passing Array between ATEasy and .NET&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=210</link><pubDate>3/16/2011</pubDate></item><item><title>DC Characterization of ICs Using PXI Instrumentation - Published on 3/8/2011</title><description>DC Parametric Measurement Units (PMU), also known as Source Measure Units (SMU), can be used in one of two modes to perform dc characterization tests on the input and output lines of digital devices:&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Method 1&lt;/b&gt;: Force voltage and measure current. With this method the PMU applies a constant voltage and using its on-board measurement capability it measures the current being drawn by the device/pin being tested. The voltage being supplied by the PMU can also be measured. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Method 2&lt;/b&gt;: Force current and measure voltage. With this method the parametric measurement unit either forces a constant current across a device or sinks a constant current from a device pin and then measures the resultant voltage. The PMU sink/source current also can be measured.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;This article will demonstate how DC parametric measurement units (PMU) can be used to perform DC characterization tests on digital devices. The tests described here can be conducted on a wide variety of digital devices from semiconductor IC's to printed circuit boards and can be performed using the built-in DC Parametric Measurement Unit (PMU) capability of the Geotest&amp;nbsp;&amp;nbsp;&lt;a href='http://www.geotestinc.com/Product.aspx?model=GX5295'&gt;GX5295&lt;/a&gt; Dynamic DIO cards. When operating in force voltage mode, the GX5295 PMU can supply a programmable constant voltage between -2V and +7Vdc. The PMU has eight current ranges that can be used for the Force Current or Measure Current modes. These ranges are:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;-32mA to +32mA.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;-8mA to +8mA.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;-2mA to +2mA.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;-512uA to +512uA.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;-128uA to +128uA.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;-32uA to +32uA.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;-8uA to +8uA.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;-2uA to +2uA.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;More information on the &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX5295'&gt;GX5295&lt;/a&gt; can be found on the &lt;a href='http://www.geotestinc.com/'&gt;Geotest website&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;The following terms will explain some of the DUT parameters that can be measured using the PMU:&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;VIH&lt;/b&gt;: (Voltage Input High) The minimum positive voltage applied to the input which will be accepted by the device as a logic High.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;VIL&lt;/b&gt;: (Voltage Input Low) The maximum positive voltage applied to the input which will be accepted by the device as a logic Low.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;VOL&lt;/b&gt;: (Voltage Output Low) The maximum positive voltage from an output which the device considers will be accepted as the maximum positive Low level.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;VOH&lt;/b&gt;: (Voltage Output High) The maximum positive voltage from an output which the device considers will be accepted as the minimum positive High level.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;IIL&lt;/b&gt;: (Low Level Input Leakage) The input leakage current measured when the input is a logic Low. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;IIH&lt;/b&gt;: (High Level Input Leakage) The input leakage current measured when the input is a logic High.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;IOS(H)&lt;/b&gt;: (High-level short-circuit output current) The short-circuit output current when the output is at a logic High&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;IOS(L)&lt;/b&gt;: (Low-level short-circuit output current) The short-circuit output current when the output is at a logic Low&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;&lt;b&gt;Output Voltage Level Testing (VOH, VOL, IOS)&lt;/b&gt;&lt;/h2&gt;Output Voltage Level tests are used to verify the operation of a digitial output when used under its specified loading conditions. They can also be used to simulate a worst-case loading condition to observe how a DUT will perform when an output is loaded beyond its specified limit, for example when shorted to ground. When performing these types of tests the test current range should be chosen to adaquately test the output without damaging the device-under-test (DUT).&lt;br /&gt; &lt;br /&gt;The following example shows how to perform a VOH test on a digital output. The purpose of this test is to ensure that the DUT can maintain an output voltage that is above the logic High threshold while supplying its maximum rated drive current. In this test the PMU will be programmed to sink current from the DUT output, simulating a load condition.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;Figure 1 below shows how the DUT and GX5295 are connected. To perform this test the DUT is powered up. One GX5295 channel (Ch1 in this example) is used to apply an input logic level that forces the DUT output to a logic High. As GX5295 channels can be set to either digital or PMU mode on a per-pin basis the type of signal applied to the input (a logic High/Low or a constant voltage value) will depend on the DUT test strategy. A second GX5295 channel (Ch2 in this example) is set to PMU Force Current/Measure Voltage mode with an initial sink current value that will not damage the DUT output pin. The PMU is then used to force a sink current from the minimum to the maximum test values. At each test current value the DUT output voltage is measured to ensure it is within its specified voltage range for a logic High. The actual PMU test current can be measured also. These measured values can be used to generate an I-V Curve trace for possible fault-finding in the event of an output failure. The testing technique shown here can also be used for VOL and IOS testing.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/\\Q200207\Q200207_VOH.JPG" alt="ToolTip" title="ToolTip" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;b&gt;Figure 1: VOH testing using the GX5295&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The following GX5295 pseudo code (ATEasy) shows how VOH testing is performed on the circuit in Figure 1 above&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;/*&lt;br /&gt;! Declare the following variables&lt;br /&gt;short nMasterNumber&amp;nbsp;&amp;nbsp;!The number of the master in the chassis. There may be multiple masters in a chassis&lt;br /&gt;short nMasterHandle&amp;nbsp;&amp;nbsp;!The handle of this master GX5295&lt;br /&gt;short nSlot&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!The slot where this master is located&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;short nDensity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !The amount of memory in MB on the card&lt;br /&gt;short nBanks&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !The number of banks on the card&lt;br /&gt;short i&lt;br /&gt;short nStatus&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Procedure return value&lt;br /&gt;double dPmuCurrent&amp;nbsp;&amp;nbsp; !PMU Current value&lt;br /&gt;double dMeasV&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Voltage measured at the PMU pin&lt;br /&gt;double dMeasI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Current measured at the PMU pin&lt;br /&gt;char sError[255]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !Used to store error string &lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;! Initialize variables&lt;br /&gt;nMasterNumber = 1&amp;nbsp;&amp;nbsp;!GX5295 is Master 1 in the PXI chassis&lt;br /&gt;nSlot = 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !It is located in slot 10&lt;br /&gt;nDensity = 256&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !There is 256MB of memory on the card&lt;br /&gt;nBanks = 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !One memory bank&lt;br /&gt;&lt;br /&gt;!Initialize the GX5295 &lt;br /&gt;DioSetupInitialization(0, nMasterNumber, nSlot, nDensity, nBanks, nMasterHandle, nStatus)&lt;br /&gt;if nStatus&lt;0 &lt;br /&gt;&amp;nbsp;&amp;nbsp; DioGetErrorString(nStatus, sError, 255) &lt;br /&gt;&amp;nbsp;&amp;nbsp; error nStatus, sError	! generate exception &lt;br /&gt;endif&lt;br /&gt;&lt;br /&gt;DioInitialize(nMasterNumber, nMasterHandle, nStatus)&lt;br /&gt; &lt;br /&gt;!Set Logic High to 5.0V and a Low to 0.0V&lt;br /&gt;DioSetupOutputVoltages(nMasterHandle, 1, 1, 5.0, 0.0, nStatus)&lt;br /&gt;&lt;br /&gt;! Set channel 1 mode to output a logic High &lt;br /&gt;DioSetupChannelMode(nMasterHandle, 1, 1, 3, nStatus)&lt;br /&gt; &lt;br /&gt;! Set channel 2 mode to PMU Forced Current mode &lt;br /&gt;DioSetupChannelMode(nMasterHandle, 2, 2, 4, nStatus)&lt;br /&gt; &lt;br /&gt;for i=0 to 16&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dPmuCurrent = -0.25*i&amp;nbsp;&amp;nbsp;!Run test in 0.25mA increments&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Set channels to sink dPmuCurrent and the current range to -8mA to +8mA. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DioPmuSetupForcedCurrent(nMasterHandle, 2, 2, dPmuCurrent, 1, nStatus)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Allow time for the DUT output to settle&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Delay(200)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Measure channel 2 output current using a 50rps measurement rate &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DioMeasure(nMasterHandle, 2, 4, dMeasI, 50, 0, 0, nStatus) &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Measure voltage at channel 2 using a 50rps measurement rate &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DioMeasure(nMasterHandle, 2, 5, dMeasI, 50, 0, 0, nStatus) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print "Ch2 measured output current="+str(dMeasI)+" Measured Voltage = "+str(dMeasV)+"\n"&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;DioReset(nMasterHandle, nStatus)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;b&gt;Input Leakage Testing (IIL, IIH)&lt;/b&gt;&lt;/h2&gt;Leakage current tests are performed by applying a constant voltage, in steps over a specified test voltage range, to the DUT input pin and measuring the input current at each step. As leakage currents are often in the uA range, the PMU should be set to its more sensitive current ranges to achieve more accurate measurements.&lt;br /&gt;To perform an Input Leakage Test the DUT is powered up and the PMU pin is set to Force Voltage/ Measure Current Mode. At each input voltage setting the PMU measures the current being drawn by the input and then verifies the value against the DUT specification. The actual test voltage that the PMU is sourcing can be measured also. &lt;br /&gt;The testing technique shown here can also be used for VIL and VIH testing.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/\\Q200207\Q200207_InLeak.JPG" alt="ToolTip" title="ToolTip" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;b&gt;Figure 1: Input Leakage testing using the GX5295 PMU capability&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; </description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=207</link><pubDate>3/8/2011</pubDate></item><item><title>Terminate an ATEasy software license - Published on 2/9/2011</title><description>&lt;b&gt;Solution:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To terminate the software license:&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Launch ATEasy (for single license) or the ATEasy License Server at the server (for network license). &lt;br /&gt;2.&amp;nbsp;&amp;nbsp; For ATEasy, click Help from the toolbar and then click About. For the license server open the About dialog by clicking on the icon in the Windows task bar. &lt;br /&gt;3.&amp;nbsp;&amp;nbsp; When the About dialog box appears, press: CTRL+ALT+SHFT+K (be sure to press and hold the first three keys before pressing the K key)&lt;br /&gt;&lt;br /&gt;Pay special attention to the following Steps: &lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;&amp;nbsp; A dialog box will appear asking you to confirm the termination of the key.&amp;nbsp;&amp;nbsp;Click Yes.&lt;br /&gt;5.&amp;nbsp;&amp;nbsp; &lt;b&gt;DO NOT click OK &lt;/b&gt;when the next dialog box appears with a string of characters. Write down the &lt;b&gt;Termination Code&lt;/b&gt; string of characters appearing on the dialog box. You will need this string of characters later. You can also take a screen capture (Alt+Screen Capture keys, paste to MS Paint, Save). &lt;br /&gt;6.&amp;nbsp;&amp;nbsp; Click OK.&lt;br /&gt;7.&amp;nbsp;&amp;nbsp; Close ATEasy. &lt;br /&gt;8.&amp;nbsp;&amp;nbsp; Log into M@GIC. &lt;br /&gt;9. Post the &lt;b&gt;Termination Code&lt;/b&gt; string of characters you wrote down in Step 5 (or screen capture) to a new or existing incident as proof of license termination. </description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=60</link><pubDate>2/9/2011</pubDate></item><item><title>Passing an array from a .NET object to an ATEasy callback procedure - Published on 2/2/2011</title><description>An ATEasy procedure can be used as a callback function when passed to an external library such as a .NET assembly or Windows DLL. &lt;br /&gt;&lt;br /&gt;This article will describe how an ATEasy callback procedure can be made to accept an array parameter from a calling .NET object.&lt;br /&gt;&lt;br /&gt;In this example, a simple .NET class called &lt;b&gt;MyClass&lt;/b&gt; will be used to pass an array of bytes to an ATEasy procedure. The MyClass constructor will accept one parameter of type MyCallback which is declared as a delegate accepting one parameter of type Object. The following c# code describes this class:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;namespace ArrayTest&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; public class MyClass&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public delegate void MyCallback(Object msg);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private MyCallback m_callback;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private byte[] m_data = new byte[3];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public MyClass(MyCallback callback) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_callback = callback;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// save the ATEasy procedure pointer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void Test()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_data[0] = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_data[1] = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_data[2] = 2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_callback(m_data);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// call the ATEasy procedure with array&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Using Object as the parameter type for the delegate, instead of an array, allows the .NET object to convert the passed in array to a Variant when invoking the ATEasy callback procedure.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200211\KBDotNetATEasy1.bmp" alt=".Net Callback" title=".Net Callback" border='0' &gt;&lt;br /&gt;&lt;br /&gt;The ATEasy callback procedure should be created as shown below. The only parameter should be of type &lt;b&gt;Val &lt;/b&gt;&lt;b&gt;Variant&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;The procedure &lt;b&gt;VarDimSize &lt;/b&gt;should be called to determine the number of elements contained within the &lt;b&gt;data &lt;/b&gt;parameter.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Procedure MyCallback(data): Void&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;	data: Val Variant&lt;br /&gt;	size: Long&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size = VarDimSize(data, 0)&lt;br /&gt;	&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print "Received " + Format(size, "0") + " bytes"&lt;br /&gt;	&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! fails here since no data in array (index out of bounds)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print "No Data Received"&lt;br /&gt;&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Finally, the .NET class can be instantiated and invoked from ATEasy as follows:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;tester = new ArrayTest.MyClass(MyCallback) &lt;br /&gt;tester.Test()&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Note that &lt;b&gt;tester &lt;/b&gt;is of type ArrayTest.MyClass and &lt;b&gt;MyCallback &lt;/b&gt;is the name of the ATEasy callback procedure.&lt;br /&gt;Calling &lt;b&gt;Test()&lt;/b&gt; will result in an array being filled by the .NET object, and passed to the ATEasy callback procedure.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=211</link><pubDate>2/2/2011</pubDate></item><item><title>Importing Teradyne* DTB files to the Geotest GX5960 Digital Subsystem - Published on 1/24/2011</title><description>Teradyne&lt;sup&gt;TM&lt;/sup&gt;* users who have already developed digital test programs for the Teradyne&lt;sup&gt;TM&lt;/sup&gt;* platform in the form of Digital Test Binary (DTB) files can convert them to XML files and then import them using Geotest's GtDio6x Software Front Panel.&lt;br /&gt;&lt;br /&gt;The process of importing the DTB files consists of the following steps:&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Exporting the DTB files to XML&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;The Teradyne&lt;sup&gt;TM&lt;/sup&gt;* software front panel can be used to export a DTB file to XML format, allowing for a transparent and readable representation of the digital test data. &lt;br /&gt;&lt;/blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Creating a Domain to describe the GX5960 (GX5961/GX5964) Digital Subsystem&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;A Domain is a group of adjacent GX5960 PXI cards that are synchronized across the PXI backplane using a common set of timing signals. Several cards can be added to a domain in order to achieve a pin count that matches or exceeds the pin count requirement by the original .DTB file.&lt;br /&gt;&lt;br /&gt;The GX5960 series is comprised of two individual, stand alone PXI cards, the GX5961 and the GX5964. The GX5961 has 16 I/O channels and additional connectors for auxiliary channels, high voltage pins, and an external probe connection. The GX5964 has 32 I/O channels. More information can be found at: &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX5960+Series'&gt;GX5960&lt;/a&gt;. Depending on the needs of the end user (channel and feature requirements), one or more of these cards can be used to describe the digital subsystem. Using the GtDio6x Software Front Panel, a Domain can be set up in the domain tab as shown here:&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200208\KBDTB1b.BMP" alt="Digital Test Software Front Panel" title="Digital Test Software Front Panel" border='0' &gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Importing and executing the XML file for the Geotest Gx5960 Digital Subsystem&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;The XML file can be imported into the GX5960 Digital Subsystem by way of a C API function call that is part of the Geotest Driver DLL. The function prototype of this function is as follows:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;VOID WINAPI GtDio6xExecuteDigitalTest(SHORT nHandle, LPCSTR szXMLFile, PLONG palPinRemapping, LONG lPinRemappingArraySize, PSHORT pnTestResult, PLONG plStatus)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The array parameter &lt;b&gt;palPinRemapping&lt;/b&gt; allows the end user to create a mapping between the DTB specified channel numbering and the physical channels that make up the Gx5960 Digital Subsystem Domain.&lt;br /&gt;&lt;br /&gt;The indices of the array represent the physical channels of the domain and the values of each element represent the corresponding mapped pins from the DTB derived XML file. The following graphic shows this relationship:&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200208\Gx5960XMLDTB1.JPG" alt="Teradyne DTB File Conversion" title="Teradyne DTB File Conversion" border='0' &gt;&lt;/div&gt;&lt;br /&gt;The &lt;b&gt;GtDio6xExecuteDigitalTest &lt;/b&gt; function will load the digital sub system with the pattern data, timing sets, and channel settings as specified in the DTB derived XML file and execute the digital burst.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Querying the Subsystem for error count and location&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;Once sequencer execution has started, its status can be polled by calling &lt;b&gt;GtDio6xQuerySequencerStatus&lt;/b&gt;. Once execution has finished (or during execution), the user can query the instrument for a real time error count. The instrument also has a 1024 deep real time error memory that stores the pattern location of the first 1024 errors that have occurred. The error memory can be accessed by calling &lt;b&gt;GtDio6xQueryErrorAddress&lt;/b&gt;. Finally, the error record memory can be accessed which stores a per channel and pin pass/fail result that mirrors the pattern data memory. The record memory can be accessed by calling &lt;b&gt;GtDio6xQueryRecordData&lt;/b&gt;.&lt;br /&gt;&lt;/blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Saving configuration to a native Geotest XML file&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;Once the digital subsystem has been loaded with the DTB derived XML file, the configuration can be edited and saved in a Geotest native XML file format for later use by calling &lt;b&gt;GtDio6xFileSaveConfiguration&lt;/b&gt; and &lt;b&gt;GtDio6xFileLoadConfiguration&lt;/b&gt;.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;* Teradyne is trademark of Teradyne, Inc.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=208</link><pubDate>1/24/2011</pubDate></item><item><title>Guidelines for designing a custom GX3500 expansion board - Published on 12/16/2010</title><description>&lt;h2&gt;Introduction&lt;/h2&gt;A unique feature of the GX3500 FPGA card is that it can accommodate an expansion card assembly that can be used to customize the interface to the UUT.&amp;nbsp;&amp;nbsp;This eliminates cumbersome and physically difficult to integrate external boards from the test system.&lt;br /&gt;&lt;br /&gt;The custom expansion interface is contained on a mezzanine board that sits piggyback on the GX3500 FPGA PCB (figure 1).&amp;nbsp;&amp;nbsp;The expansion board provides approximately 105 cm&lt;sup&gt;2&lt;/sup&gt; on each the front and back sides (figure 2), and obtains power from the GX3500.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200212\Assembled GX3500_1.JPG" alt="Disassembled GX3500 and Expansion Mezzanine" title="Disassembled GX3500 and Expansion Mezzanine" border='0' &gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200212\Assembled GX3500_2.JPG" alt="Assembled GX3500 and Expansion Mezzanine" title="Assembled GX3500 and Expansion Mezzanine" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 1:&amp;nbsp;&amp;nbsp;GX3500 with Expansion Board&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200212\Board Area.jpg" alt="GX3500 Expansion Board design area" title="GX3500 Expansion Board design area" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 2:&amp;nbsp;&amp;nbsp;GX3500 Expansion Board Design Area&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Software controlled relays control whether the 160 FPGA signals are routed directly to the GX3500 front panel connectors, or whether the I/O signals are intercepted from the FPGA and routed through the expansion board.&amp;nbsp;&amp;nbsp;The relays can be controlled using the API function &lt;b&gt;GxFpgaSetExpansionBoardBypass()&lt;/b&gt;, or using the GX3500 Soft Panel (figure 3).&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200212\Expansion Bypass.JPG" alt="Expansion board bypass control" title="Expansion board bypass control" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 3:&amp;nbsp;&amp;nbsp;Expansion Board Bypass Control&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;High Speed Terminal Strips, manufactured by Samtec, are use to provide power to the expansion board, and bring the signals on and off the board (figure 4).&amp;nbsp;&amp;nbsp;The middle bar of the connector is used for ground and power connections to the expansion board, while the outer pins provide access to the I/O signals (figure 5).&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200212\Mezzanine.JPG" alt="Expansion connectors" title="Expansion connectors" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 4:&amp;nbsp;&amp;nbsp;Expansion Connectors&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200212\Expansion Power.JPG" alt="Power connections" title="Power connections" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 5:&amp;nbsp;&amp;nbsp;Power Connections&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Design Guidelines&lt;/h2&gt;When designing an expansion interface for the GX3500, consideration must be given to the following:&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Board Area:&lt;/b&gt;&amp;nbsp;&amp;nbsp;Maximum board surface area is about 200 cm&lt;sup&gt;2&lt;/sup&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Component Height:&lt;/b&gt;&amp;nbsp;&amp;nbsp;Maximum component height is 8mm, with some areas on the board reduced to a maximum component height of 5mm.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Power Requirements:&lt;/b&gt;&amp;nbsp;&amp;nbsp;The GX3500 expansion connectors provide multiple power voltages to the expansion board.&amp;nbsp;&amp;nbsp;Provide adequate decoupling and filter capacitors and do not exceed the maximum power budget for the voltages:&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;5V, 4.0A&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;+12V, 0.5A&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;-12V, 0.5A&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;1.2V, 1.0A&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;2.5V, 0.5A&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;3.3V, 4.0A&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Cooling:&lt;/b&gt;&amp;nbsp;&amp;nbsp;Make certain the air flow is not blocked to higher power components.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Termination:&lt;/b&gt;&amp;nbsp;&amp;nbsp;Provide proper trace impedance and, if necessary, termination for high-speed signals and signals with fast edge rates.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;A full GX3500 Expansion Board Design Guide is included in the &lt;a href='http://www.geotestinc.com/GetFile.aspx?fileid=401&amp;type=Manual&amp;refpage=..%2fProduct.aspx%3fmodel%3dGX3500'&gt;GX3500 User Guide&lt;/a&gt;.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=212</link><pubDate>12/16/2010</pubDate></item><item><title>White Paper: An FPGA–Based Solution for Testing Legacy Video Displays - Published on 11/30/2010</title><description>Systems deployed in the last century used CRT monitors to display information to a technician or operator.&amp;nbsp;&amp;nbsp;These monitors were based on analog video transmission standards such RS170, NTSC (National Television Standards Council), PAL (Phase Alternating Line) and other similar standards.&amp;nbsp;&amp;nbsp;Today, with the widespread use of DVI and HDMI digital video, it is rare to find CRT monitors in commercial use.&amp;nbsp;&amp;nbsp;But they are still widely used in older deployed systems.&amp;nbsp;&amp;nbsp;&lt;br /&gt;This paper is a case study based on the requirement for a PXI-based instrument that can generate simple color bar signals in NTSC and PAL formats to support the Mini-Samson/Katlanit Remote Controlled Weapon Station.&amp;nbsp;&amp;nbsp;By integrating an off-the-shelf PXI FPGA card (&lt;a href='http://www.geotestinc.com/Product.aspx?model=GX3500'&gt;GX3500&lt;/a&gt;), with an intellectual property (IP) core available in the public domain and a handful of commercially available support components, a cost effective solution was developed which supports the generation of both analog and digital video signals for testing CRT and LCD monitors.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2010\PXI-FPGA-video-paper_11-18.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the white paper&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=209</link><pubDate>11/30/2010</pubDate></item><item><title>Using Simple Network Management Protocol (SNMP) in ATEasy 8.0 - Published on 11/22/2010</title><description>SNMP (Simple Network Management Protocol) is a networking protocol used to monitor and control network-attached devices such as adapters, routers, switches, workstations, and servers.&amp;nbsp;&amp;nbsp;To use SNMP to communicate with a device, the device must both support SNMP and have SNMP enabled.&amp;nbsp;&amp;nbsp;The primary functions that can be performed through SNMP are device identification, device property querying and device configuration.&amp;nbsp;&amp;nbsp;Since SNMP can be integrated with ATEasy, a technician using ATEasy can automate the testing of SNMP-enabled devices.&lt;br /&gt;&lt;br /&gt;In this guide, we will discuss two ways to utilize SNMP within ATEasy:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Using 3rd party software&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Using the WinSNMP API with the ATEasy SNMP.drv driver&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Using 3rd party software&lt;/h2&gt;There are a few open-source SNMP Managers available to utilize for basic testing.&amp;nbsp;&amp;nbsp;This example will demonstrate using Net-SNMP.&amp;nbsp;&amp;nbsp;When installed, &lt;a href='http://www.net-snmp.org'&gt;Net-SNMP&lt;/a&gt; adds command-line executables such as the SNMPGET, SNMPGETNEXT, and SNMPSET functions for OID querying, SNMPWALK for device location, and SNMPSTATUS and SNMPNETSTAT for device status information.&amp;nbsp;&amp;nbsp;Only a couple of these features will be used in the article for demonstration.&amp;nbsp;&amp;nbsp;The complete list of features is available on the Net-SNMP webpage.&lt;br /&gt;&lt;br /&gt;The example below demonstrates calling the executable SNMPGet to query an OID for information and saving the results to a text file.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Procedure SNMPGet(): Void&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sAgent: String&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sSaveFile: String&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sOID: String&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sCommunity: String&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sCommunity = "public"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sAgent = "127.0.0.1" ! Local Host&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Object Identifier Descriptor for the device we're talking with&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sOID = "sysDescr.0"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sSaveFile = "snmpgetresults.txt"&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Calls device SNMP and saves results to text file&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WinExec("SNMPGET -v 1 -c " + sCommunity + " " + sAgent + " " + sOID + " &gt; " \ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ sSaveFile)	&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! display results&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WinExec("notepad " + sSaveFile) ! Opens text file for viewing the SNMPGET results&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;In the first WinExec command an OID, sysDescr.0, is requested from the local host and saved into "snmpgetresults.txt".&amp;nbsp;&amp;nbsp;The second WinExec command opens that file so the data can be viewed.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200199/snmpgetresults.JPG" alt="Results of SNMPGET: The string information stored at sysDescr.0 on the agent at 127.0.0.1" title="Results of SNMPGET: The string information stored at sysDescr.0 on the agent at 127.0.0.1" border='0' &gt;&lt;br /&gt;&lt;br /&gt;The SNMPGet procedure can be modified to use the other Net-SNMP features, such as SNMPNETSTAT which gives us the assignment of an agent's TCP and UDP ports.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200199/snmpnetstatresults.JPG" alt="Results of SNMPNETSTAT: The first few open TCP ports and their remote hosts." title="Results of SNMPNETSTAT: The first few open TCP ports and their remote hosts." border='0' &gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Using the ATEasy v8.0 WinSNMP Driver&lt;/h2&gt;Another way to communicate with a target agent using SNMP protocol is to directly access the WinSNMP API provided with Microsoft Windows. The implementation is simplified through use of the WinSNMP ATEasy driver, which is available in ATEasy v8.0 and above. The driver also lists the procedure to install and configure the WinSNMP service required when using the Windows driver.&lt;br /&gt;&lt;br /&gt;In the ATEasy implementation of WinSNMP, an SNMPGET call can request and retrieve the value of an Object Identifier in a single command, as shown here:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;! Request the System Contact from the agent&lt;br /&gt;TestResult = SNMP Function Get("1.3.6.1.2.1.1.5.0")&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;With the ATEasy Driver included in the project, the preceding line of code acquires the System Contact octet string and assigns it back to the TestResult variable for use in ATEasy.&lt;br /&gt;&lt;br /&gt;Similarly, the included function "SNMP Function Walk(...)" can be used to traverse a system and returns back all of the nodes between the start and stop OID specified.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt; !Return the data stored at all OIDs between 1.3.6.1.2.1 and 1.3.6.1.2.1.6.0&lt;br /&gt;TestResult = SNMP Function Walk("1.3.6.1.2.1", "1.3.6.1.2.1.1.6.0")&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Example results of an SNMP Walk:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;1.3.6.1.2.1 = NULL: 0&lt;br /&gt;1.3.6.1.2.1.1.1.0 = STRING: Hardware: x86 Family 15 Model 4 Stepping 7 AT/AT COMPATIBLE&lt;br /&gt;1.3.6.1.2.1.1.3.0 = TIMETICKS: 52335668&lt;br /&gt;1.3.6.1.2.1.1.4.0 = STRING: Victor Brode&lt;br /&gt;1.3.6.1.2.1.1.6.0 = STRING: My CTS box&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Summary&lt;/h2&gt;This demonstration of features just barely scratches the surface of the utility that SNMP provides.&amp;nbsp;&amp;nbsp;A complete listing of the WinSNMP ATEasy driver is available in ATEasy v8.0 and above.&amp;nbsp;&amp;nbsp;Hopefully, if your project is required to automate SNMP communication, this article has given you a good idea where to start.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=199</link><pubDate>11/22/2010</pubDate></item><item><title>Capturing channels simultaneously with the GX2472 Digitizer - Published on 11/22/2010</title><description>The GX2472 is a dual differential channel, 14-bit digitizer offering a 70 MS/s ADC and 512K of memory.&amp;nbsp;&amp;nbsp;Each of the GX2472's differential channels has its own amplifier, filters, ADC and capture memory allowing for simultaneous waveform capture.&lt;br /&gt;&lt;br /&gt;The following procedure demonstrates how to achieve simultaneous digitization using psuedocode.&amp;nbsp;&amp;nbsp;For more details, there are example projects at the end of the article.&amp;nbsp;&amp;nbsp;For more information, refer to the Gx2472 User's Guide.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Procedure to Achieve Simultaneous Digitization&lt;/h2&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Setup channel parameters for each channel&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Arm both channels for triggering&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Wait for GX2472 to finish data capture&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Read device memory&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Breakdown of Procedure&lt;/h2&gt;Each channel saves its own parameters independently.&amp;nbsp;&amp;nbsp;The first step is to setup each channel's parameters.&amp;nbsp;&amp;nbsp;This is done by sequentially setting each channel to active, unlocking the channel to allow changes and configuring that channels parameters.&amp;nbsp;&amp;nbsp;In the psuedocode below, both channel's parameters will be identical.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;For ChannelNumber = 1 to 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetActiveChannel(ChannelNumber)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UnlockChannel()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetClockSource(...)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetRange(...)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetTriggerLevel(...)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetDCOffset(...)&lt;br /&gt;Next&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;After parameters have been set, lock the channels to initiate a capture.&amp;nbsp;&amp;nbsp;Each channel has it's own configurable trigger criteria.&amp;nbsp;&amp;nbsp;After a channel is locked, it awaits a trigger to begin data capture.&amp;nbsp;&amp;nbsp;Each channel has it's own trigger settings and can be connected to a different stimulus.&amp;nbsp;&amp;nbsp;Therefore, it is possible for one channel to trigger and begin capture while the other channel does not trigger and simply remains in the armed state.&amp;nbsp;&amp;nbsp;The psuedocode below demonstrates locking both channels to arm for triggering.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;For ChannelNumber = 1 to 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetActiveChannel(ChannelNumber)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LockChannel() ! Locks access to the controller and allows channel to begin capture&lt;br /&gt;Next&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Now, the controller must wait for the channels to complete their data capture.&amp;nbsp;&amp;nbsp;This is done by repeatedly checking the status of the GX2472 to see if both channels have completed.&amp;nbsp;&amp;nbsp;A timeout condition should also exist in case one or both channels do not trigger and thereby never complete their data capture.&amp;nbsp;&amp;nbsp;The pseudocode demonstrates such a loop:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Repeat&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GetTestStatus()&lt;br /&gt;Until (TestComplete or TimeOut)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Finally, each channel must transfer its capture memory back to the controller.&amp;nbsp;&amp;nbsp;Again, we must loop through each channel, reading the memory back sequentially.&amp;nbsp;&amp;nbsp;The psuedocode below shows this:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;For ChannelNumber = 1 to 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetActiveChannel(ChannelNumber)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UnlockChannel() ! Allows memory to be accessed by controller&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReadADCResults(Array[ChannelNumber])&lt;br /&gt;Next&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Sample Projects and Examples&lt;/h2&gt;The sample projects below contain working code that sets both channels for capturing a 50,000 sample waveform:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy example can be downloaded &lt;a href='http://www.geotestinc.com/images/support/Q200206\ATEasy_GX2472_Simultaneous_Sample.zip' target='_blank'&gt;here&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Microsoft Visual C++ 2005 example can be downloaded &lt;a href='http://www.geotestinc.com/images/support/Q200206\GX2472_Simultaneous_Sample.zip' target='_blank'&gt;here&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=206</link><pubDate>11/22/2010</pubDate></item><item><title>Controlling a GX3500 FPGA Design Using Register Reads and Writes - Published on 11/9/2010</title><description>&lt;h2&gt;Introduction&lt;/h2&gt;To understand how to access registers on the GX3500 FPGA instrument, it is necessary to have a design the utilizes registers.&amp;nbsp;&amp;nbsp;This document is segmented into two sections; the first provides an overview of a 128 Channel Static I/O designed for the GX3500.&amp;nbsp;&amp;nbsp;It is assumed that the reader is already familiar with the process of creating designs for the GX3500 using the Altera Quartus II Design tools (refer to chapter 5 of the GX3500 User’s Guide: GXFPGA Tutorial and Examples).&amp;nbsp;&amp;nbsp;The design is implemented as four 32-channel bi-directional ports and is double-buffered to support simultaneous updates on all 128 channel for both writing and reading logic states.&lt;br /&gt;&lt;br /&gt;With a functioning FPGA design, the second section of the document describes how to load the design file into the GX3500 FPGA, how to connect the GX3500 I/O ports, and how to read and write registers within the FPGA design to facilitate operation of the static digital I/O.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Design Overview&lt;/h2&gt;&lt;b&gt;Address Decoding&lt;/b&gt;&lt;br /&gt;The Gx3500 supports two types of PCI bus read and write operations; to registers using PCI Bar 1, and to RAM using PCI BAR 2.&amp;nbsp;&amp;nbsp;The static digital I/O design uses registers to control writing and reading the I/O ports, so will use the PCI BAR1 chip select signal for address decoding – which is synonymous with Chip Select 1 (CS[1]).&amp;nbsp;&amp;nbsp;The BAR 1 signal can access a 1024 byte address range (0x400), and access must be on a 4-byte alignment (256 DWords).&amp;nbsp;&amp;nbsp;Figure 1 shows the address decoding logic, using five address signals (Addr[6..2]), to provide 32 write enable signals (WE[31..0]) and 32 read enable signals(RE[31..0]).&amp;nbsp;&amp;nbsp;These signals are used with latched registers to write to the I/O ports (WE[x]) and read from the I/O ports (RE[x]).&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200205\Decode Logic.JPG" alt="GX3500 Register Address Decoding" title="GX3500 Register Address Decoding" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;div align='center'&gt;Figure 1:&amp;nbsp;&amp;nbsp;Register Address Decoding&lt;/div&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Port Control&lt;/b&gt;&lt;br /&gt;There are four identical I/O ports (Figure 2), one for each 32 channels.&amp;nbsp;&amp;nbsp;Each port supports full bi-directional capability with per-channel direction control.&amp;nbsp;&amp;nbsp;The output registers are double-buffered.&amp;nbsp;&amp;nbsp;This allows for all four ports (128 channels) to be updated simultaneously.&amp;nbsp;&amp;nbsp;The first stage output data is written using the WE_Data signal, and the tristate control will be written using WE_Tristate.&amp;nbsp;&amp;nbsp;These signals will come from the WE[31..0] signals, and are unique for each port.&amp;nbsp;&amp;nbsp;The second output stage is written using the WE_UpdatePort signal.&amp;nbsp;&amp;nbsp;This signal will also come from the WE[31..0] signals, but is common to all ports in order to facilitate the simultaneous update of the I/O ports.&amp;nbsp;&amp;nbsp;There is read access to the data and tristate control registers for both stages of the output registers using RE_Tristatelatch, RE_DataLatch, RE_TristatePort and RE_DataPort.&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200205\Port Logic.JPG" alt="GX3500 Port Control Logic" title="GX3500 Port Control Logic" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;div align='center'&gt;Figure 2:&amp;nbsp;&amp;nbsp;Port Control Logic&lt;/div&gt;&lt;/b&gt;&lt;br /&gt;All channels on all four ports (128 I/O channels) are sampled simultaneously using the RE_SamplePortIO signal, and the sampled data is stored in a latched register for later retrieval using the respective port’s RE_PortIO signal.&amp;nbsp;&amp;nbsp;Since each port tristate control register can be read, you can deduce whether the sampled input state was generated by the GX3500 or the UUT.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Register Mapping&lt;/b&gt;&lt;br /&gt;The following is the read and write register offsets for controlling ports A – D:&lt;br /&gt;&lt;table width='100%' bgcolor=#EBEBEB cellpadding=1 cellspacing=1 border=0 class='reg12'&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;&lt;b&gt;Write Functions:&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt; &lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;Offset&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;(Hex)&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;Function&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;0&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x0)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[0]:&amp;nbsp;&amp;nbsp;Write data to Port A latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;4&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x4)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[1]:&amp;nbsp;&amp;nbsp;Write data to Port B latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;8&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x8)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[2]:&amp;nbsp;&amp;nbsp;Write data to Port C latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;12&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0xC)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[3]:&amp;nbsp;&amp;nbsp;Write data to Port D latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;16&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x10)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[4]:&amp;nbsp;&amp;nbsp;Write tristate control to Port A latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;20&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x14)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[5]:&amp;nbsp;&amp;nbsp;Write tristate control to Port B latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;24&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x18)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[6]:&amp;nbsp;&amp;nbsp;Write tristate control to Port C latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;28&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x1C)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[7]:&amp;nbsp;&amp;nbsp;Write tristate control to Port D latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;80&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x50)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[20]: Simultaneous Update Port A – D&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;&lt;b&gt;Read Functions:&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt; &lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;Offset&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;(Hex)&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;Function&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;0&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x0)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[0]:&amp;nbsp;&amp;nbsp;Read data from Port A latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;4&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x4)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[1]:&amp;nbsp;&amp;nbsp;Read data from Port B latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;8&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x8)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[2]:&amp;nbsp;&amp;nbsp;Read data from Port C latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;12&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0xC)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[3]:&amp;nbsp;&amp;nbsp;Read data from Port D latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;16&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x10)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[4]:&amp;nbsp;&amp;nbsp;Read tristate control from Port A latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;20&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x14)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[5]:&amp;nbsp;&amp;nbsp;Read tristate control from Port B latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;24&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x18)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[6]:&amp;nbsp;&amp;nbsp;Read tristate control from Port C latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;28&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x1C)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[7]:&amp;nbsp;&amp;nbsp;Read tristate control from Port D latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;32&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x20)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[8]:&amp;nbsp;&amp;nbsp;Read data from Port A output&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;36&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x24)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[9]:&amp;nbsp;&amp;nbsp;Read data from Port B output&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;40&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x28)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[10]:&amp;nbsp;&amp;nbsp;Read data from Port C output&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;44&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x2C)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[11]:&amp;nbsp;&amp;nbsp;Read data from Port D output&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;48&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x30)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[12]:&amp;nbsp;&amp;nbsp;Read tristate control from Port A output&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;52&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x34)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[13]:&amp;nbsp;&amp;nbsp;Read tristate control from Port B output&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;56&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x38)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[14]:&amp;nbsp;&amp;nbsp;Read tristate control from Port C output&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;60&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x3C)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[15]:&amp;nbsp;&amp;nbsp;Read tristate control from Port D output&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;64&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x40)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[16]:&amp;nbsp;&amp;nbsp;Read sampled data from Port A input latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;68&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x44)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[17]:&amp;nbsp;&amp;nbsp;Read sampled data from Port B input latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;72&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x48)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[18]:&amp;nbsp;&amp;nbsp;Read sampled data from Port C input latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;76&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x4C)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[19]:&amp;nbsp;&amp;nbsp;Read sampled data from Port D input latch&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;80&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;(0x50)&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;WE[20]: Simultaneous Sample Port A – D to input latch&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200205\Ports A-D.JPG" alt="Read/Write Control for Port A and Port B" title="Read/Write Control for Port A and Port B" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;div align='center'&gt;Figure 3:&amp;nbsp;&amp;nbsp;Read/Write Control for Ports A, B, C and D &lt;/div&gt;&lt;/b&gt;&lt;br /&gt;The GX3500 Static I/O design files and the SVF file can be downloaded from &lt;a href='http://www.geotestinc.com/images/support/Q200205\GX3500 Static IO.zip' target='_blank'&gt;here&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;Software Control&lt;/h2&gt;To control the GX3500 design, you simply initialize the instrument driver, load the Serial Vector File created when the FPGA design was compiled, and write and read the register locations used in the design.&amp;nbsp;&amp;nbsp;The GX3500 API, distributed as a DLL, contains these and other function for accessing memory, enabling or bypassing the expansion board relays and an assortment of other miscellaneous functions.&amp;nbsp;&amp;nbsp;Refer to the GX3500 User’s Guide for a full list of the API functions and their calling convention.&lt;br /&gt;&lt;br /&gt;Code for controlling the GX3500 FPGA Static IO is provided for three different programming environments; ATEasy, “C” and LabView.&amp;nbsp;&amp;nbsp;These examples assume the GX3500 is installed in slot 12 of a PXI chassis, that the SVF file produced using the Altera Quartus II design software is called “Static_IO.svf”, and that the SVF file is located in the same directory that the application program resides in.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ATEasy Example (using the ATEasy GX3500 Driver)&lt;/b&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;dwData:DWord[4] ! Contains output state for 32-bit ports A- D&lt;br /&gt;dwTristate:DWord[4] ! Contains tristate control for 32-bit ports A-D&lt;br /&gt;dwInput:DWord[4] ! Contains data read from four latches A-D&lt;br /&gt;i:Long ! Index counter&lt;br /&gt;&lt;br /&gt;Driver Initialize (12) ! Initialize driver for instrument in slot #12&lt;br /&gt;FPGA Load (".\\Static_IO.svf",TARGET_VOLATILE,MODE_SYNC) ! Load SVF file to volatile FPGA memory&lt;br /&gt;FPGA Set ExpansionBoardBypass(0b1111) ! Set the expansion bypass – signals route from the FPGA to the connectors&lt;br /&gt;For i=0 to 3 ! Repeat for port A - D&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FPGA Write Register(i*4,4,dwData[i]) ! Write to Data Latch WE[i]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FPGA Write Register((i+4)*4,4,dwTristate[i]) ! Write to Tristate Latch WE[i+4]&lt;br /&gt;Next&lt;br /&gt;FPGA Write Register(80,4,0) ! Simultaneous Update all 128 I/O pins (tristate and data)&lt;br /&gt;FPGA Read Register(80,4,dwData) ! Simultaneous Sample all 128 I/O pins&lt;br /&gt;For i=0 to 3 ! Repeat for port A-D&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FPGA Read Register(i*4,4,dwInput[i]) ! Read sampled state from Latch RE[i]&lt;br /&gt;Next&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;“C” Example&lt;/b&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nHandle, nStatus, i;&lt;br /&gt;DWord&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dwData[4], dwTristate[4], dwInput[4];&lt;br /&gt;&lt;br /&gt;GxFpgaInitialize (12, nHandle, nStatus);&amp;nbsp;&amp;nbsp;\\ Initialize driver for instrument in slot #12&lt;br /&gt;GxFpgaLoad (nHandle, 0, "Static_IO.svf" ,0,, pnStatus);&amp;nbsp;&amp;nbsp;\\ Load SVF file to volatile FPGA memory&lt;br /&gt;GxFpgaSetExpansionBoardBypass (nHandle , 0xF, pnStatus);&amp;nbsp;&amp;nbsp;\\ Set the expansion bypass&lt;br /&gt;for(i=0;i&lt;4;i++){&amp;nbsp;&amp;nbsp;\\ Repeat for port A - D&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GxFpgaWriteRegister (nHandle ,i*4, dwData[i], 4, nStatus);&amp;nbsp;&amp;nbsp;\\ Write to Data Latch WE[i]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GxFpgaWriteRegister (nHandle ,(i+4)*4, dwTristate[i], 4, nStatus);&amp;nbsp;&amp;nbsp;\\ Write to Tristate Latch WE[i+4]&lt;br /&gt;}&lt;br /&gt;GxFpgaWriteRegister (nHandle ,80, 0, 4, nStatus);&amp;nbsp;&amp;nbsp;\\ Simultaneous Update all 128 I/O pins (tristate and data)&lt;br /&gt;GxFpgaReadRegister (nHandle, 80, dwInput[0], 4, nStatus);&amp;nbsp;&amp;nbsp;\\ Simultaneous Sample all 128 I/O pins&lt;br /&gt;&lt;br /&gt;for(i=0;i&lt;4;i++){&amp;nbsp;&amp;nbsp;\\ Repeat for port A - D&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GxFpgaReadRegister (nHandle, i*4, dwInput[i], 4, nStatus);&amp;nbsp;&amp;nbsp;\\ Read sampled state from Latch RE[i]&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;br /&gt;&lt;a href='http://www.geotestinc.com/images/support/Q200205\Vi.Zip' target='_blank'&gt;LabView Example&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200205\LV Panel.JPG" alt="ToolTip" title="ToolTip" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 4:&amp;nbsp;&amp;nbsp;LabView Example Control Panel&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200205\LV Frame 0.JPG" alt="LabView Example Frame 0 Diagram" title="LabView Example Frame 0 Diagram" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 5:&amp;nbsp;&amp;nbsp;LabView Example Frame 0 Diagram&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200205\LV Frame 1.JPG" alt="LabView Example Frame 1 Diagram" title="LabView Example Frame 1 Diagram" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 6:&amp;nbsp;&amp;nbsp;LabView Example Frame 1 Diagram&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200205\LV Frame 2.JPG" alt="LabView Example Frame 2 Diagram" title="LabView Example Frame 2 Diagram" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 7:&amp;nbsp;&amp;nbsp;LabView Example Frame 2 Diagram&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200205\LV Frame 3.JPG" alt="LabView Example Frame 3 Diagram" title="LabView Example Frame 3 Diagram" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 8:&amp;nbsp;&amp;nbsp;LabView Example Frame 3 Diagram&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200205\LV Frame 4.JPG" alt="LabView Example Frame 4 Diagram" title="LabView Example Frame 4 Diagram" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 9:&amp;nbsp;&amp;nbsp;LabView Example Frame 4 Diagram&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=205</link><pubDate>11/9/2010</pubDate></item><item><title>White Paper: Implementing a High Performance Digital Subsystem Using the PXI Architecture - Published on 10/14/2010</title><description>&lt;b&gt;Abstract&lt;/b&gt;&lt;br /&gt;High Performance digital subsystems have been developed over the years using a variety of proprietary and industry standard architectures such as GPIB and VXI. With the availability of high performance / high density FPGAs and analog electronics, the implementation of high performance digital functional test subsystems has now become a reality using the PXI architecture. The smaller form factor of PXI, which offers users the ability to down size and deploy very cost effective, performance digital subsystems, has also presented some unique challenges for instrument design teams developing these high performance digital subsystems. This paper discusses some major considerations and challenges when implementing high performance digital instrumentation based on the PXI architecture.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers/2010/PXI-Digital-Subsystems.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=204</link><pubDate>10/14/2010</pubDate></item><item><title>Translating Waveform Generation Language Files (WGL) to Geotest DIO File Format - Published on 10/14/2010</title><description>&lt;h2&gt;Defining WGL&lt;/h2&gt;The Waveform Generation Language (WGL) is a data description language supported by Test Systems Strategies Inc.&amp;nbsp;&amp;nbsp;A WGL file uses an ASCII representation of the digital waveform data, so can be edited using any text editor.&amp;nbsp;&amp;nbsp;WGL is also an intermediate file format used by the semiconductor industry for converting digital test patterns from a logic simulator to tester hardware, and back again.&lt;br /&gt;&lt;br /&gt;Test information is represented in a WGL file using a structured, free form language with small, specialized structural blocks contained within larger, more generalized blocks.&amp;nbsp;&amp;nbsp;A full discussion of the WGL language and syntax is beyond the scope of this article, but can be found in the TDS Languages Guide, Version 2007.1, published by Test Systems Strategies, Inc.&amp;nbsp;&amp;nbsp;The benefit of WGL is that any digital instrument or tester that is capable of reading or writing test patterns using the WGL language, has a link to any simulation tool that also supports WGL, either directly between the simulator and tester hardware, or indirectly through other translators or filters.&lt;br /&gt;&lt;br /&gt;To illustrate the Geotest Digital I/O (DIO) WGL import filter, a &lt;a href='http://www.geotestinc.com/images/support/Q200203\SimpleWGL.zip' target='_blank'&gt;Simple WGL&lt;/a&gt; file was manually generated.&amp;nbsp;&amp;nbsp;Note, this is not a typical WGL file as many of the structural blocks are excluded for clarity.&amp;nbsp;&amp;nbsp;But it does serve as a good primer into the WGL file structure and facilitates demonstrating the process for importing WGL files into the Geotest DIO format.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;A Simple WGL File&lt;/h2&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Waveform Sample&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Signal&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim00&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim01&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim02&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim03&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim04&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim05&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim06&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim07&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim08&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim09&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim10&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim11&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim12&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim13&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim14&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim15&amp;nbsp;&amp;nbsp; : input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp00&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp01&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp02&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp03&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp04&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp05&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp06&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp07&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp08&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp09&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp10&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp11&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp12&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp13&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp14&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp15&amp;nbsp;&amp;nbsp; : output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;End&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Timeplate Match_0 Period 100nS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim00&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim01&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim02&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim03&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim04&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim05&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim06&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim07&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim08&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim09&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim10&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim11&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim12&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim13&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim14&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim15&amp;nbsp;&amp;nbsp; := input[0pS:S];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp00&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp01&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp02&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp03&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp04&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp05&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp06&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp07&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp08&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp09&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp10&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp11&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp12&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp13&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp14&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp15&amp;nbsp;&amp;nbsp; := output[0pS:Q];&lt;br /&gt;&amp;nbsp;&amp;nbsp;End&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Pattern Loopback (Stim00,Stim01,Stim02,Stim03,Stim04,Stim05,Stim06,Stim07,Stim08,Stim09,Stim10,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stim11,Stim12,Stim13,Stim14,Stim15,Resp00,Resp01,Resp02,Resp03,Resp04,Resp05,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Resp06,Resp07,Resp08,Resp09,Resp10,Resp11,Resp12,Resp13,Resp14,Resp15)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{Start Vectors}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Loop 32&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Repeat 4&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{End Vectors}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector(+, Match_0) := [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End&lt;br /&gt;&amp;nbsp;&amp;nbsp;End&lt;br /&gt;End&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The keyword &lt;b&gt;Waveform &lt;/b&gt;denotes the beginning of a waveform block called &lt;b&gt;Sample&lt;/b&gt;.&amp;nbsp;&amp;nbsp;Within the Waveform block are several sub-blocks; the first is a sub-block denoted by the keyword &lt;b&gt;Signal&lt;/b&gt;.&amp;nbsp;&amp;nbsp;This block defines the signal names and types.&amp;nbsp;&amp;nbsp;The point of reference for the signal types is the UUT, meaning that all the I&lt;b&gt;nput&lt;/b&gt; signals (Stim Names) are input to the UUT, and all &lt;b&gt;Output&lt;/b&gt; signals (Resp&amp;nbsp;&amp;nbsp;signal names) are output from the UUT.&amp;nbsp;&amp;nbsp;WGL defines other signal types that are not used in this example.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;Timeplate &lt;/b&gt;keyword defines the beginning of the block structure called &lt;b&gt;Match_0&lt;/b&gt;, where signal timing is defined.&amp;nbsp;&amp;nbsp;It also defines the period of the Match_0 timing set to be 100nS – a 10 MHz data rate.&amp;nbsp;&amp;nbsp;All of the Stim signals are defined as being active at the beginning of the test cycle (0pS), and the driven data pattern will be substituted (:S) by the value in the signals associated bit position within Pattern block (discussed later).&amp;nbsp;&amp;nbsp;All of the Resp signals are defined as being active at the beginning of the test cycle (0pS), and the compare data pattern will be substituted (:Q) by the value in the signals associated bit position within Pattern block.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;Pattern &lt;/b&gt;block called &lt;b&gt;Loopback &lt;/b&gt;first defines the bit ordering for the subsequent data patterns.&amp;nbsp;&amp;nbsp;The ordering is LSB first, so Stim00 is the LSB data position, and the drive state is be represented by the left-most bit value in the vector field.&amp;nbsp;&amp;nbsp;Bit ordering continues with Resp15 being the MSB, with the compare state being represented by the right-most bit value in the vector field.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;Vector &lt;/b&gt;field defines the substitute I/O patterns for the :S and :Q signals defined in the Match_0 Timeplate, and stipulating the Match_0 timeplate specifies the timing parameters to use.&amp;nbsp;&amp;nbsp;In WGL, each vector has the capability of using different timing parameters, although that is not the case in our simple example.&amp;nbsp;&amp;nbsp;The data pattern for the Stimulus pins and Response pins is a Walking 1 pattern from the LSB word to the MSB word, providing a 16-bit loop back pattern (16 LSB Stimulus pins to 16 MSB Response pins).&amp;nbsp;&amp;nbsp;The pattern is entered once, but looped 32 times, as denoted by the &lt;b&gt;Loop &lt;/b&gt;keyword.&amp;nbsp;&amp;nbsp;The final four vectors are a repeat of the last vector, which contains all 0’s for both the Stimulus and Response signals, as indicated by the &lt;b&gt;Repeat &lt;/b&gt;keyword.&lt;br /&gt;&lt;br /&gt;Each sub-block structure is terminated by the &lt;b&gt;End &lt;/b&gt;keyword, and the text contained in the curly-braces {} indicated text labels that are included as labels in the resulting DIO file.&lt;br /&gt;&lt;br /&gt;WGL can represent simple Stimulus/Record digital test patterns, as well as more complex Stimulus/Response patterns that incorporate Real-Time compare functionality.&amp;nbsp;&amp;nbsp;Since several Geotest DIO products support both functions, this article will demonstrate importing the sample WGL file both ways.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Activating DIOEasy-FIT - WGL Import Toolkit&lt;/h2&gt;The Geotest WGL import utility is a licensed product of Geotest, Inc.&amp;nbsp;&amp;nbsp;Once purchased, the &lt;b&gt;File Import Translator&lt;/b&gt; license (FIT) can be activated by entering a unique license string for the system.&amp;nbsp;&amp;nbsp;The license string is based on the &lt;b&gt;Computer ID&lt;/b&gt; of the host system where the license will be installed, and can be found from DIOEasy by clicking on &lt;b&gt;Help\About DIOEasy\Setup License&lt;/b&gt;, and selecting &lt;b&gt;Setup License&lt;/b&gt; (see figure 1).&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200203\License Setup.JPG" alt="License Setup" title="License Setup" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;b&gt;Figure 1:&amp;nbsp;&amp;nbsp;File Import Translator License Setup&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The computer ID is the 10 digit code displayed at the bottom of the DIOEasy License Setup dialog - "&lt;b&gt;XXXX YYYY ZZ&lt;/b&gt;" in figure 2.&amp;nbsp;&amp;nbsp;To obtain the FIT license, open a &lt;b&gt;Magic &lt;/b&gt;incident, request an FIT license, and provide the sales order number of your FIT purchase and the Computer ID.&amp;nbsp;&amp;nbsp;You will receive a license that is unique to the system whose ID you provided.&amp;nbsp;&amp;nbsp;Enter the license string in the "&lt;b&gt;License String/File&lt;/b&gt;" text box and click on "&lt;b&gt;OK&lt;/b&gt;".&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200203\FIT License ID.JPG" alt="Computer ID" title="Computer ID" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 2:&amp;nbsp;&amp;nbsp;Computer ID Code&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The Geotest WGL import utility is supported using DIOEasy, Geotest's interactive digital development tool set, and from GtDio32.dll API, a Dynamic Link Library of DIO software functions.&amp;nbsp;&amp;nbsp;The full list of these DIO functions and their syntax and uses can be found in the "&lt;b&gt;DioSoftwareProgRef.PDF&lt;/b&gt;" document.&amp;nbsp;&amp;nbsp;This document is included with the &lt;b&gt;GtDio.Exe &lt;/b&gt;driver installation package available from the Geotest web page:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;http://www.geotestinc.com/Downloads.aspx?prodId=16&amp;search=package&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;h2&gt;The DioFileImportWgl Function&lt;/h2&gt;One of the functions included in the GtDio32.Dll is DioFileImportWgl().&amp;nbsp;&amp;nbsp;This function is an import utility for reading WGL formated digital test patterns and converting them into a Geotest DIO formatted file.&amp;nbsp;&amp;nbsp;The file can be loaded to the instrument, opened for viewing and editing using DIOEasy, or opened under program control so digital pattern data can be accessed from within a test program.&amp;nbsp;&amp;nbsp;The syntax for this function, and an example of it’s usage are provided below:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DioFileImportWgl (pszSourceWglFile, pszDestDioFile, nConversionMode, nBoardType, pdMaxFrequncy, pdwMaxSteps, pszError, nErrMaxLen, pnStatus)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Parameters:&lt;/b&gt;&lt;table width='100%' bgcolor=#EBEBEB cellpadding=1 cellspacing=1 border=0 class='reg12'&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;Name&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;Type&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;Comments&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;pszSourceWglFile&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;PCSTR&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Source file&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;pszDestDioFile&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;PCSTR&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Target DIO file name&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;nConversionMode&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;SHORT&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Conversion mode:&lt;br /&gt;&amp;nbsp;&amp;nbsp; 0 DIO_FILE_WGL_TO_DIO: Standard DIO file.&lt;br /&gt;&amp;nbsp;&amp;nbsp; 1 DIO_FILE_WGL_TO_DIO_RTC: Real Time Compare DIO file&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;nBoardType&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;SHORT&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Sets the target supported DIO board type:&lt;br /&gt;&amp;nbsp;&amp;nbsp; 0x55 DIO_BOARD_TYPE_GX5055 – Gx5055 DIO board type.&lt;br /&gt;&amp;nbsp;&amp;nbsp; 0x70 DIO_BOARD_TYPE_GX5290 - Gx5290 DIO board type.&lt;br /&gt;&amp;nbsp;&amp;nbsp; 0x75 DIO_BOARD_TYPE_GX5290E - Gc5290 Express DIO board type.&lt;br /&gt;&amp;nbsp;&amp;nbsp; 0x7A DIO_BOARD_TYPE_GX5295 - Gc5295 board type.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;pdMaxFrequncy&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;PDOUBLE &lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0 for the WGL importer to use the best vector clock frequency, otherwise overwrites the vector max frequency.&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;pdwMaxSteps&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;PDWORD&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;The maximum number of steps to convert.&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;pszError&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;PSTR&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Buffer to contain the returned error string.&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;nErrMaxLen&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;SHORT&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Size of the buffer to contain the error string.&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;pnStatus&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;PSHORT&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;Returned status: 0 on success, negative number on failure.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Importing WGL In DIOEasy&lt;/h2&gt;To import a WGL file into a DIOEasy digital file, click on File from the menu bar, and select &lt;b&gt;Import WGL File&lt;/b&gt;.&amp;nbsp;&amp;nbsp;A dialog will pop up prompting you to select the source WGL file, and the destination DIO file (figure 3).&amp;nbsp;&amp;nbsp;In addition to specifying the source and destinations files, you must also select the target DIO instrument from the drop-down list (see the &lt;b&gt;nBoardType&lt;/b&gt; parameter above), and whether to use the default values for the test frequency (data rate) and file size.&amp;nbsp;&amp;nbsp;When importing a WGL file, the import filter will determine the optimal timing to use based on the capabilities of the DIO instrument selected, and set the clock rate accordingly.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200203\WGL Import Dialog.JPG" alt="DIOEasy WGL Import Dialog" title="DIOEasy WGL Import Dialog" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 3:&amp;nbsp;&amp;nbsp;DIOEasy WGL Import Dialog&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;One final selection is whether to translate the WGL patterns for stimulus/record operations with &lt;b&gt;Post Process&lt;/b&gt; compare, or to translate the WGL patterns for &lt;b&gt;Real-Time&lt;/b&gt; compare.&amp;nbsp;&amp;nbsp;Real-Time compare has the advantage of performing a hardware comparison of the UUT response against a pre-loaded expected response.&amp;nbsp;&amp;nbsp;Since the compare process is done in hardware, and at the speed the digital engine is operating at, pass/fail results are instantaneous, whereas, post-process compare requires software to read the recorded information from the DIO hardware, and compare each step against a reference file that contains the expected UUT response.&amp;nbsp;&amp;nbsp;The WGL import filter supports both test methodologies, as do selected Geotest digital instruments.&lt;br /&gt;&lt;br /&gt;Once the import process completes, a new DIO file is created and automatically loaded to DIOEasy.&amp;nbsp;&amp;nbsp;The file can be viewed and edited, the same as any other DIO file, and the test file can be loaded to the DIO hardware for execution.&amp;nbsp;&amp;nbsp;Figure 4 shows a portion of the translated Simple.WGL file.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200203\Small Simple DIO.JPG" alt="Translated Simple.WGL Digital Test Patterns" title="Translated Simple.WGL Digital Test Patterns" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 4:&amp;nbsp;&amp;nbsp;Translated Simple.WGL Digital Test Patterns&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Timing Translation&lt;/h2&gt;A common concern when porting digital test from the simulation environment to hardware is how timing parameters are interpreted.&amp;nbsp;&amp;nbsp;A simulator can generate process with picosecond timing resolution.&amp;nbsp;&amp;nbsp;This is far beyond the capability of the actual hardware test system to implement.&amp;nbsp;&amp;nbsp;The WGL import filter will try to fit the timing parameters into the capabilities of the hardware by adjusting the clock frequency to accommodate the minimum phase resolution between the signals.&amp;nbsp;&amp;nbsp;This is done by dividing the WGL test cycle time by the minimum phase difference between the various signals.&amp;nbsp;&amp;nbsp;For example, if you had a WGL file with a cycle time of 1uS (1 MHz data rate), but there was a setup parameter of 10nS between a clock and data channel, the importer would calculate a new data rate for the hardware that meets both criteria.&amp;nbsp;&amp;nbsp;In this example, the digital hardware would run at 100 MHz, providing the 10nS phase resolution.&amp;nbsp;&amp;nbsp;This translates to more digital test vectors loaded into the hardware than the native WGL file represents.&amp;nbsp;&amp;nbsp;In this case, &lt;b&gt;1uS period / 10nS resolution&lt;/b&gt; results in 10:1 pattern depth on the digital tester.&amp;nbsp;&amp;nbsp;So, if the WGL pattern file were initially 1M vectors, the pattern file loaded to the hardware would be 10M vectors.&lt;br /&gt;&lt;br /&gt;In some cases, the simulated phase resolution exceeds the capability of the tester, so the WGL importer maintains a proportional relationship between the signals.&amp;nbsp;&amp;nbsp;For example, assume the cycle time is 50nS and some of the channels in that cycle change on 5nS phases (200 MHz resolution).&amp;nbsp;&amp;nbsp;The WGL importer determines that one WGL cycle will require ten DIO cycles (50nS period / 5nS resolution).&amp;nbsp;&amp;nbsp;Assuming the hardware is the GX5292, the minimum&amp;nbsp;&amp;nbsp;cycle timing for this instrument is 10nS (100 MHz maximum frequency), so the pattern data rate would be set to 100 MHz, but you would maintain the 10:1 pattern ratio to keep the phase relationships proportional to the original WGL pattern ( (50nS period / 5nS resolution) = (100nS period / 10nS resolution) ).&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=203</link><pubDate>10/14/2010</pubDate></item><item><title>Activating the Multi-User Features of ATEasy's Test Executive - Published on 9/27/2010</title><description>The Test Executive driver included with ATEasy provides a multi-user environment. Within, a user with administrator rights can create user groups and user accounts. User group such as&amp;nbsp;&amp;nbsp;&lt;b&gt;Testers&lt;/b&gt;, &lt;b&gt;Supervisors&lt;/b&gt;, &lt;b&gt;Administrators &lt;/b&gt;can be assigned a customized set of command menus, toolbars, options and different levels of privileges.&amp;nbsp;&amp;nbsp;This article with cover activating these features and configuring user groups within the test executive.&lt;br /&gt;&lt;br /&gt;The TestExec.drv ATEasy software driver includes integrated support for multi-user features which are turned off by default.&amp;nbsp;&amp;nbsp;To activate these features, you only need to enter the location of your users file (.USR) into the TestExec Driver Shortcut parameters page.&amp;nbsp;&amp;nbsp;The parameter &lt;b&gt;UsersFile&lt;/b&gt;, which is empty by default, can be changed to the absolute or relative location of a file i.e. 'C:\Windows\System32\Ateasy.usr'&lt;br /&gt;&lt;br /&gt;Ideally, a Users file would be located on a network drive where it would be accessible by all of the ATEasy developers and testers within an organization, but write access could be controlled and given to project administrators.&amp;nbsp;&amp;nbsp;For the purposes of this demo, which can be done locally, it is sufficient to use a user file that is stored locally.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200201\TestExec_DriverShortcutParameters.PNG" alt="This TestExec Driver Shortcut already has the UserFile parameter set.&amp;nbsp;&amp;nbsp;Multi-user features are enabled." title="This TestExec Driver Shortcut already has the UserFile parameter set.&amp;nbsp;&amp;nbsp;Multi-user features are enabled." border='0' &gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Configuring the user groups within your Test Executive&lt;/h2&gt;Now that the multi-user features have been enabled, you will be prompted with a User Login Dialog when you attempt to start your program.&amp;nbsp;&amp;nbsp;If you are using the multi-user features for the first time, you will need to log in with one of the user file's administrator accounts to configure each user's privileges.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200201\FirstTimeTestExec_NotAdminMsg.PNG" alt="This is the error you will encounter as you try to log in for the first time as a non-administrator." title="This is the error you will encounter as you try to log in for the first time as a non-administrator." border='0' &gt;&lt;br /&gt;&lt;br /&gt;To begin configuring your user groups, log in as an administrator.&amp;nbsp;&amp;nbsp;If you are using the user file located at 'C:\Windows\System32\Ateasy.usr' and you have never changed the password on this file, the default administrator account user name is &lt;b&gt;Administrator&lt;/b&gt;.&amp;nbsp;&amp;nbsp;Leave the password blank and hit &lt;b&gt;OK &lt;/b&gt;to log in.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200201\ATEasyLogin_DefaultAdmin.PNG" alt="The ATEasy Login Dialog with Administrator username included." title="The ATEasy Login Dialog with Administrator username included." border='0' &gt;&lt;br /&gt;&lt;br /&gt;Once logged in as Administrator with multi-user features enabled, you should have a new menu bar item: &lt;b&gt;Tools | Users...&lt;/b&gt;&lt;br /&gt;This is your portal for configuring users groups.&amp;nbsp;&amp;nbsp;Clicking this item will allow you access the Test Executive's &lt;b&gt;Users Dialog&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200201\TestExec_ToolsUsersAdmin.PNG" alt="A new menu item!" title="A new menu item!" border='0' &gt;&lt;br /&gt;&lt;br /&gt;The Users Dialog is where access levels, UI configuration, and Test Executive customization is handled in multi-user mode.&amp;nbsp;&amp;nbsp;Layouts and privileges are differentiated for your users. The User Dialog window has eight pages, all of which are documented in the Test Executive help.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Users Dialog: Groups Page&lt;/h2&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200201\UsersDialog_GroupsPage.PNG" alt="The Groups page is where new User Groups can be created/modified/deleted" title="The Groups page is where new User Groups can be created/modified/deleted" border='0' &gt;&lt;br /&gt;&lt;br /&gt;By default, you are provided with three User Groups with which to organize your ATEasy users.&amp;nbsp;&amp;nbsp;When the Test Executive activates a User file for the first time, it will automatically create three default user groups with their own set of command menus, toolbars, and options.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Administrators &lt;/b&gt;- Has all of the functions available in a Test Executive that is not using the multi-user feature.&amp;nbsp;&amp;nbsp;Also has ability to configure the user file from within the Test Executive.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Supervisors &lt;/b&gt;- Same rights and default layout as the Administrator account, but does not have the ability to access the Users dialog.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Testers &lt;/b&gt;-&amp;nbsp;&amp;nbsp;This user group was designed to allow selection of program / profile, execution of that selection and test log archiving.&lt;br /&gt;&lt;br /&gt;Each individual user must be placed into one of these User Groups before they can access the Test Executive.&amp;nbsp;&amp;nbsp;Alternatively, a custom User Group can be created and assigned to a user.&amp;nbsp;&amp;nbsp;The Groups page is where user groups can be created / modified / deleted.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Users Dialog: Users Page&lt;/h2&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200201\UsersDialog_UsersPage.PNG" alt="The Users Page allows the creation of new users and assignment into user groups." title="The Users Page allows the creation of new users and assignment into user groups." border='0' &gt;&lt;br /&gt;&lt;br /&gt;The Users Page allows the administrator to see all of the users associated with the current USR file.&amp;nbsp;&amp;nbsp;Users can be added and deleted here, passwords can be changed, and users can be assigned to user groups.&amp;nbsp;&amp;nbsp;Also, one user can be selected as a default user, allowing automatic login when the test program is started.&amp;nbsp;&amp;nbsp;The default user account can not have a password, however.&lt;br /&gt;&lt;br /&gt;The rest of the pages in the Users Dialog deal with configuring each user groups layout.&amp;nbsp;&amp;nbsp;The details of these pages are covered in the Test Executive help under the keywords "Users Dialog".&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Example&lt;/h2&gt;The following example will demonstrate using the administrator account to configure the layout of the tester account.&amp;nbsp;&amp;nbsp;The tester account, by default, has only Continuous and Task By Task run conditions available.&amp;nbsp;&amp;nbsp;We will be adding the Test By Test mode.&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Start an ATEasy project and include the TestExec software driver.&amp;nbsp;&amp;nbsp;Make sure the &lt;b&gt;UsersFile &lt;/b&gt;parameter is set to the ATEasy.usr file in your Window's System folder.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Log in to the project as an &lt;b&gt;Administrator&lt;/b&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Open the Users Dialog (&lt;b&gt;Tools | Users...&lt;/b&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Click the &lt;b&gt;Toolbar tab&lt;/b&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Click the drop-down box labeled Group: and change the active user group to &lt;b&gt;Testers&lt;/b&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;In the available commands box, click the plus icon by &lt;b&gt;Conditions...&lt;/b&gt; to expand the list.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Locate and click on the item &lt;b&gt;Test By Test&lt;/b&gt;.&amp;nbsp;&amp;nbsp;Click it and click the &lt;b&gt;Add -&gt;&lt;/b&gt; button to add the item to the active toolbar for Testers.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200201\UsersDialog_AddingToolbar.png" alt="Clicking Add will add the Test by Test option to the Testers user group." title="Clicking Add will add the Test by Test option to the Testers user group." border='0' &gt;&lt;br /&gt;&lt;br /&gt;We have added the button to the toolbar, but it is not enabled yet. &lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Click the Commands tab.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Click the drop-down box labeled &lt;b&gt;User Group:&lt;/b&gt; and change the active user group to &lt;b&gt;Testers&lt;/b&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;In the available commands box, click the plus icon by &lt;b&gt;Conditions...&lt;/b&gt; to expand the list.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Click the item &lt;b&gt;Test By Test&lt;/b&gt; and click the Enable checkbox to enable this item.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Click &lt;b&gt;OK&lt;/b&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200201\UsersDialog_EnablingTestByTest.png" alt="A screenshot taken after the Test By Test option has been enabled for the Tester user group." title="A screenshot taken after the Test By Test option has been enabled for the Tester user group." border='0' &gt;&lt;br /&gt;&lt;br /&gt;If you use&lt;b&gt; Tools | Change User... &lt;/b&gt;to log into your Tester account, you will notice that the&lt;b&gt; Task By Task &lt;/b&gt;option has been added to the toolbar.&amp;nbsp;&amp;nbsp;In this manner, other items can be added and removed from the ToolBar.&amp;nbsp;&amp;nbsp;The process is very similar for menu items as well.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=201</link><pubDate>9/27/2010</pubDate></item><item><title>Executing and communicating with Perl or TCL scripts from ATEasy v8.0 using the Standard I/O Process Driver - Published on 8/12/2010</title><description>ATEasy v8.0 supports calling, controlling and communicating with Windows console applications. This allows test engineers leverage existing script code written in languages such as &lt;b&gt;TCL&lt;/b&gt;, &lt;b&gt;Perl&lt;/b&gt;, &lt;b&gt;PHP&lt;/b&gt; and use the script from their tests. &lt;br /&gt;&lt;br /&gt;This article describes the simple process involved in calling a TCL and Perl script from ATEasy. The example code involves with using the ATEasy Standard I/O Process Driver &lt;b&gt;StdIoProcess.drv&lt;/b&gt;. The example scripts will wait for ATEasy to send data via the standard I/O and then will respond by echoing this data back to ATEasy. Similar techniques can be used to control any Windows command line utilities.&lt;br /&gt;&lt;br /&gt;The ATEasy StdIoProcess driver allows a user to call console based executable, pass arguments,monitor the process’s standard output and send data to the process via its standard input. &lt;br /&gt;&lt;br /&gt;Note that the following software components are required to get started:&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Microsoft .NET Framework&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Installation of an script interpreter&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;A script interpreter executable that can take the filename of the script to be run from its first command line argument.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The first example calls a TCL script. This example is using the &lt;a href='http://www.activestate.com/activetcl/'&gt;ActiveTCL&lt;/a&gt; interpreter which was installed in the C:\tcl folder.&amp;nbsp;&amp;nbsp;The script will accept two numeric values and output the sum of those two values:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;&lt;br /&gt;puts "TCL Script Started"&lt;br /&gt;gets stdin x&lt;br /&gt;gets stdin y&lt;br /&gt;set result "The Sum is: "&lt;br /&gt;append result [expr $x+$y]&lt;br /&gt;puts $result&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Here is the ATEasy code using the StdIoProcess driver. ATEasy pass in two numbers 4 and 5 and read back the result as calculated by the RCL script:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;&lt;br /&gt;sTclPath="C:\\tcl\\bin\\tclsh85.exe"&lt;br /&gt;StdIoProcess Execute(sTclPath, "\""+sExamplePath+"StdIoProcessAdd.tcl\"", "4\r\n5\r\n", True)&lt;br /&gt;s=StdIOProcess Get StdOutput()&lt;br /&gt;if StdIOProcess Get ExitCode()&lt;&gt;0&lt;br /&gt;	TestStatus=FAIL&lt;br /&gt;endif&lt;br /&gt;if val(right(s, 3))&lt;&gt;9&lt;br /&gt;	TestStatus=FAIL&lt;br /&gt;endif&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Similar to the TCL interpreter, the Perl interpreter installed from &lt;a href='http://www.strawberryperl.com'&gt;Strawberry Perl&lt;/a&gt; can be used. In the following example we run StdIoProcessAdd.pl, passing two numbers 45 and 9 and getting back the sum as shown here:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;&lt;br /&gt;! add two numbers using PERL&lt;br /&gt;StdIoProcess Execute(sPerlPath, "\""+sExamplePath+"StdIoProcessAdd.pl\"", , False)&lt;br /&gt;StdIoProcess Write("45")&lt;br /&gt;StdIoProcess Write("9")&lt;br /&gt;StdIoProcess Read(s, True)&lt;br /&gt;TestResult=val(s)&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The contents of the perl script TestScript.pl is the following:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;&lt;br /&gt;print "Perl Script Started";&lt;br /&gt;$x =&amp;nbsp;&amp;nbsp;&lt;STDIN&gt;;&lt;br /&gt;$y =&amp;nbsp;&amp;nbsp;&lt;STDIN&gt;;&lt;br /&gt;print $x+$y;&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The referenced files are included in ATEasy v8.0 and above (see StdIoProcess.prj example). The example also contains example of executing the Windows command prompt (CMD.EXE). Here is the ATEasy form that is provided with the example:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/q200200\q200200-ScriptExample.jpg" alt="TCL Scripting using StdIoProcess" title="TCL Scripting using StdIoProcess" border='0' &gt;&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=200</link><pubDate>8/12/2010</pubDate></item><item><title>Importing non-standard Function Panel (.fp) drivers into ATEasy - Published on 7/8/2010</title><description>&lt;h2&gt;Introduction&lt;/h2&gt;ATEasy allow you to use VXI Plug&amp;Play drivers (sometimes refer to as&amp;nbsp;&amp;nbsp;IVI-C driver) created by instrument vendors. These instrument drivers support various interface types such as GPIB, VXI , Serial, PXI, USB, LXI or PCI based board and more. The function panel driver (FP) has a .fp file extension and can be imported to ATEasy using the Insert, Import FP File (*.fp) command. Once the driver is imported you will need to save it to ATEasy driver (.drv or .drt file). The process of importing the FP driver is described in the ATEasy on-line help (see "Using VXI Plug&amp;Play Function Panel Drivers" topic).&lt;br /&gt;&lt;br /&gt;You can obtain and download a Function Panel driver from the instrument manufacturer web site. Most vendors also register their driver at the IVI Foundation web site &lt;a href='http://www.ivifoundation.org/'&gt;IVI Foundation website&lt;/a&gt; under the Driver Registry section. Some vendor such as Agilent or National Instruments carry also third party instruments drivers. &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Driver Prerequistes:&lt;/h2&gt;The IVI-C driver specification describe a standard for Initialize, and error handling functions which must exist in the FP driver. The ATEasy Import command will search for these functions and generate special ATEasy code to intialize and handle errors in the imported driver. The following functions are searched by the Import command:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Initialize function should have the following format:&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;PREFIX_init(sResourceName, bIDQuery, bResetDevice, m_session)&lt;/b&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Error Message function should have the following format:&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;PREFIX_error_message(m_session, lStatusCode, psMessage)&lt;/b&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The prefix begins with a two-character vendor code, followed by characters that uniquely identify the instrument driver. The following is an example of the Initialize function for the Pickering System 40 PXI cards:&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;pipx40_init(sResourceName, bIDQuery, bResetDevice, m_session)&lt;/b&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;h2&gt;Importing Non-Standard FP Drivers&lt;/h2&gt;The ATEasy Import Wizard will search the FP driver for the required Initialize and Error Message functions. If these functions do not exist in the FP driver, ATEasy will display messages listing the missing function(s) and ask the driver developer to select the appropiate function from the displayed FP function list (see example below).&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200202\Q200202_UnableToFind.JPG" alt`=&amp;quot; border='0' &gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Figure 1: "Unable to find Standard Function" message from the ATEasy Import Wizard&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;If the appropiate function does not exist in the displayed listing, ATEasy will create a function wrapper with no source code so the developer can include the source code at a later time manually. The following are examples of the &lt;b&gt;Initialize &lt;/b&gt;and &lt;b&gt;CheckError &lt;/b&gt;functions after the ATEasy Import process, showing the required FP driver functions implementation:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;&lt;b&gt;Procedure Initialize(sResourceName, bIDQuery, bResetDevice) : Void&lt;/b&gt;&lt;br /&gt;! Create the following variables&lt;br /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sResourceName: [Val] ViRsrc&lt;br /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bIDQuery: [Val] ViBoolean = 0&amp;nbsp;&amp;nbsp;!Specifies if the card is to be queried&lt;br /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;to confirm it's ID when it is opened. This action is implicit in the&lt;br /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;driver's operation so the value of this control is ignored.&lt;br /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bResetDevice: [Val] ViBoolean = 0 ! Specifies if the card is to be reset&lt;br /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;when it is opened. This action is obligatory for all cards so the &lt;br /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value of this control is ignored.&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ArgMissing(sResourceName)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sResourceName=Driver.Parameters("ResourceName")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if sResourceName=""&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error -1001, "Unable to initialize.\nDriver Shortcut parameters must "&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"be configured from its Misc property page"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif&lt;br /&gt;	&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ArgMissing(bIDQuery)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bIDQuery=Driver.Parameters("IdQuery")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif&lt;br /&gt;	&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ArgMissing(bResetDevice)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bResetDevice=Driver.Parameters("ResetOnInit")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Required FP driver function is highlighted below&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CheckError(&lt;b&gt;pipx40_init(sResourceName, bIDQuery, bResetDevice, m_session) &lt;/b&gt;)&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;&lt;b&gt;Procedure CheckError(iStatus) : Void&lt;/b&gt;&lt;br /&gt;!&amp;nbsp;&amp;nbsp; Create the following variables:&lt;br /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iStatus: Val ViStatus&lt;br /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sError: String: 1024 &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_lLastError=iStatus&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if iStatus &lt;&gt; VI_SUCCESS then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! Required FP driver function is highlighted below&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;pipx40_error_message(m_session, iStatus, sError)&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error iStatus, sError	! generate exception&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=202</link><pubDate>7/8/2010</pubDate></item><item><title>White Paper: GX52xx - PXI Digital I/O Cards - Clock and Strobe Delay Operation - Published on 5/20/2010</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;The Gx528x and Gx529x dynamic Digital I/O (DIO) product families have very robust timing features that provide the user with the flexibility to align signals between the DIO and the Unit Under Test (UUT). The clock signal is used to output test vectors, and the strobe signal samples data into the DIO’s record memory. The basic architecture provides six coarse delays in 4 ns steps. In addition, a fine resolution delay (vernier) is available which provides a 0ns to 3ns delay in 250ps steps.&amp;nbsp;&amp;nbsp;Together, these elements provide delays in the range of 0ns to 27ns, with 250ps resolution. Read more...&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2010\GX52xx-ClockAndStrobeDelayOperation.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=198</link><pubDate>5/20/2010</pubDate></item><item><title>How to call ATEasy procedures dynamically based on Test and Task names - Published on 5/19/2010</title><description>Sometimes it is useful to call a procedure with a function pointer. One example would be calling a unique procedure for each Test defined in a Program based on the Test and Task name of the current Test being executed. A procedure pointer can be used instead of hard coding a call to each procedure, thereby simplifying the code and allowing more tests to be added without code modification.&lt;br /&gt;&lt;br /&gt;The following steps should be followed:&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Create procedures for each test defined in the program. In this example, the procedure names must be the Task name followed with the underscore character, appended to the Test name follwed by “_Init”. This naming template can be changed by modifying the first line of code in step 3.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200193\TestTask.JPG" alt="IDE Integrated Development Environment" title="IDE Integrated Development Environment" border='0' &gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Define a variable in the &lt;b&gt;OnInitTest() &lt;/b&gt;event named proc of type Procedure. This will act as the function pointer.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Insert the following code in the &lt;b&gt;OnInitTest()&lt;/b&gt; event.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;proc=Task.Name+"_"+Test.Name+"_Init" !Assign the procedure pointer a procedure&lt;br /&gt;if(proc)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !Check to make sure the procedure actually exists&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Execute procedure&lt;br /&gt;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "proc is not valid!"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !error handling code&lt;br /&gt;endif&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=193</link><pubDate>5/19/2010</pubDate></item><item><title>White Paper: ATEasy - Deployment Across the Organization - Published on 5/19/2010</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;ATEasy’s modular structure lends itself to the distribution of ATEasy development activities among different skills sets, allowing organizations to better control the development and deployment of ATEasy. The modular structure promotes achieving of code reuse, better manageability and increased efficiency.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Because driver files, the test executive (which is an ATEasy driver as well), and the systems files can be reusable components between systems or shared by programs, they should be standardize to achieve better reusability.&amp;nbsp;&amp;nbsp;To achieve standardization, organizations should define and allocate specific job responsibilities to enforce and create a streamlined process of managing the development and deployment. By assigning personnel with responsibilities to the various aspects of ATEasy module development, organizations can achieve much higher efficiency and code reusability.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2010\ATEasy-DeploymentAcrossTheOrganization.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=197</link><pubDate>5/19/2010</pubDate></item><item><title>Using the Winsock (TCP/IP) ATEasy Driver Interface - Published on 5/19/2010</title><description>The following walkthrough demonstrates the creation and configuration of an WinSock interface based ATEasy driver for sending/receiving TCP/IP messages to a remote server. Typically the Winsock interface is used to control LXI instruments however in this article you will be connecting to a mail server and sending email messages to the server following the SMTP protocol to send an email.&lt;br /&gt;&lt;br /&gt;It should be noted that there are easier ways to send an email programmatically than by using Winsock.&amp;nbsp;&amp;nbsp;This walkthrough is meant to demonstrate the use of ATEasy to perform the functions of a Telnet terminal automatically.&amp;nbsp;&amp;nbsp;For a simplier way to send an email through ATEasy, please look into using the .NET framework's System.Net.Mail namespace to send emails (DotNet.prj example).&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;This walkthrough mirrors a task that would normally be executed using a Telnet terminal (telnet.exe), as shown in the image below.&amp;nbsp;&amp;nbsp;Using ATEasy, you are able to simplify and automate Telnet communication.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200195\TelnetWindow.JPG" alt="Using the ATEasy to create a WinSock interface, we can avoid having to use Telnet" title="Using the ATEasy to create a WinSock interface, we can avoid having to use Telnet" border='0' &gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Step by Step Walkthrough&lt;/h2&gt;1. Create a new ATEasy application&lt;br /&gt;2. Create New Driver and name it EMAIL&lt;br /&gt;3. Open the properties editor and examine the Driver properties for EMAIL.&amp;nbsp;&amp;nbsp;Check the WinSock interface to enable it.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200195\EmailDriverProperties.JPG" alt="Screenshot: Enabling the WinSock interface for your EMAIL driver." title="Screenshot: Enabling the WinSock interface for your EMAIL driver." border='0' &gt;&lt;br /&gt;&lt;br /&gt;4. Click the Driver shortcut.&amp;nbsp;&amp;nbsp;Change the interface to WinSock and configure it to the target mail server.&amp;nbsp;&amp;nbsp;For this example, we will deliver the message through the domain GEOMAILSERVER on SMTP port 25.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200195\EmailDriverShortcut.JPG" alt="Screenshot: The proper settings for contacting GEOMAILSERVER of the e-mail port 25" title="Screenshot: The proper settings for contacting GEOMAILSERVER of the e-mail port 25" border='0' &gt;&lt;br /&gt;&lt;br /&gt;5. We must now create several IOTables to handle the communication between your computer and the mail server:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Create the Hello IOTable as shown below.&amp;nbsp;&amp;nbsp;The Hello IOTable receives the server’s greeting message and initiates a dialog by introducing itself to the server.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200195\HelloIOTable.JPG" alt="Screenshot: The completed and commented Hello IOTable" title="Screenshot: The completed and commented Hello IOTable" border='0' &gt;&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Create the MailFrom IOTable as shown below.&amp;nbsp;&amp;nbsp;The MailFrom IOTable sends the email address of the sender of the email to the server.&amp;nbsp;&amp;nbsp;After receiving this, the server sends back an acknowledgement message. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200195\MailFromIOTable.JPG" alt="Screenshot: The completed and commented MailFrom IOTable" title="Screenshot: The completed and commented MailFrom IOTable" border='0' &gt;&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Create the RcptTo IOTable as shown below.&amp;nbsp;&amp;nbsp;The RcptTo IOTable sends the email address of the intended recipient of the email to the server.&amp;nbsp;&amp;nbsp;After receiving this, the server sends back an acknowledgement.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200195\RcptToIOTable.JPG" alt="Screenshot: The completed and commented RcptTo IOTable" title="Screenshot: The completed and commented RcptTo IOTable" border='0' &gt;&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Create the DataSend IOTable as shown below.&amp;nbsp;&amp;nbsp;The DataSend IOTable informs the server that you are ready to transfer a message and sends the email subject, header and body.&amp;nbsp;&amp;nbsp;Upon completion of transmission, the server sends back an acknowledgement that the message has been received and will be delivered.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200195\DataSendIOTable.JPG" alt="Screenshot: The completed and commented DataSend IOTable" title="Screenshot: The completed and commented DataSend IOTable" border='0' &gt;&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Create the Disconnect IOTable as shown below.&amp;nbsp;&amp;nbsp;The Disconnect IOTable informs the server that you have finished and waits for the server to close the connection.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200195\DisconnectIOTable.JPG" alt="Screenshot: The completed and commented Disconnect IOTable" title="Screenshot: The completed and commented Disconnect IOTable" border='0' &gt;&lt;br /&gt;&lt;br /&gt;6. Once all the IOTables have been created, we want to create a procedure within the EMAIL driver to call all of our IOTables.&amp;nbsp;&amp;nbsp;The procedure SendEmail is shown below.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200195\SendEmailProcedure.JPG" alt="Screenshot: The completed SendEmail procedure." title="Screenshot: The completed SendEmail procedure." border='0' &gt;&lt;br /&gt;&lt;br /&gt;7.&amp;nbsp;&amp;nbsp;The final modification to the EMAIL driver will be the creation of a command for use in the other modules of your ATEASY project.&amp;nbsp;&amp;nbsp;Insert a new command, rename it to Send and attach it to the EmailSend procedure.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200195\EmailSendCommand.JPG" alt="Screenshot: The Send() command." title="Screenshot: The Send() command." border='0' &gt;&lt;br /&gt;&lt;br /&gt;Now that the driver is completed, we can use the Send() command in our Program module to send tests.&amp;nbsp;&amp;nbsp;But we will need to open the Monitor window to observe the messages that are sent and received.&amp;nbsp;&amp;nbsp;If it is not already open, hit the keyboard shortcut ALT+6 or use the menu bar &lt;b&gt;View | Monitor&lt;/b&gt; to open it.&amp;nbsp;&amp;nbsp;With the monitor window open, you are ready to send your email.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;The parameters of the command are (Sender, Recipient, Subject, Message) so a proper command could be:&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Email Send("ATE@awesome.com","victorb@geotestinc.com","EMAIL Driver Test", "This message was sent courtesy of ATEasy!")&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The ATEasy Monitor Window shows the messages that are being sent and received:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200195\MonitorWindow.JPG" alt="Screenshot: The monitor window after the email has been sent." title="Screenshot: The monitor window after the email has been sent." border='0' &gt;&lt;br /&gt;&lt;br /&gt;And, of course, the final product (Microsoft Outlook):&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200195\ReceivedMessage.JPG" alt="Screenshot: Received message from Outlook." title="Screenshot: Received message from Outlook." border='0' &gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=195</link><pubDate>5/19/2010</pubDate></item><item><title>Proper Termination of High-Speed Digital Signals - Published on 5/19/2010</title><description>When interfacing to any digital logic source, it is important to provide quality signals to the device under test (DUT).&amp;nbsp;&amp;nbsp;And the key to providing quality signals is to treat the interconnecting cables between the digital source and the digital receiver as a transmission line requiring proper termination.&amp;nbsp;&amp;nbsp;This termination can take the form of impedance matching and Impedance bridging.&lt;br /&gt;&lt;br /&gt;Impedance matching is the design practice of setting the input impedance (Z&lt;sub&gt;L&lt;/sub&gt;) of an electrical load equal to the fixed output impedance (Z&lt;sub&gt;S&lt;/sub&gt;) of the signal source to which it is connected, usually in order to maximize the power transfer and minimize reflections from the load&lt;sup&gt;1&lt;/sup&gt;, while Impedance Bridging maximizes transfer of a voltage signal to the load&lt;sup&gt;2&lt;/sup&gt;.&amp;nbsp;&amp;nbsp;When the output impedance of a device is connected to the input impedance of another device, it is a bridging connection if the second device does not appreciably load the previous device&lt;sup&gt;2&lt;/sup&gt;.&lt;br /&gt;&lt;br /&gt;For many electrical systems, simple wires and cables are adequate connection schemes, but for high-speed digital signals, this is not the case.&amp;nbsp;&amp;nbsp;The fast edge rates of these signals contain frequency components that are much faster that the data rate of the signals.&amp;nbsp;&amp;nbsp;And it is edge speed, not data rate or clock frequency that is the critical parameter.&amp;nbsp;&amp;nbsp;As the edge rate of the signal approaches the round-trip propagation delay of the signal through the cable, the cable begins to behave as a transmission line.&amp;nbsp;&amp;nbsp;A good rule-of-thumb in determining the propagation delay of a cable is to use 1nS per foot cable length.&amp;nbsp;&amp;nbsp;In figure 1, if the cable length (L) were 1 foot, then a digital signal with a 2nS edge rate would require that the cable be terminated with a load of Z ohms.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200196\Fig1.JPG" alt="Unterminated Transmission Line" title="Unterminated Transmission Line" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 1 – Unterminated Transmission Line&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;There are many methods for terminating a transmission line.&amp;nbsp;&amp;nbsp;While some use active components, like diodes, this article will focus on the more common method of using resistors.&amp;nbsp;&amp;nbsp;For instance, a common TTL transmission environment is 100 ohms.&amp;nbsp;&amp;nbsp;Impedances of 50-75 ohms are also used, but have a disadvantage that the termination resistors would place a large load on the digital driver.&amp;nbsp;&amp;nbsp;This is best to avoid, especially for "weak" drive devices.&amp;nbsp;&amp;nbsp;The simplest way to terminate a 100 ohm transmission line would be to place a resistor at the end or the cable (Figure 2) where R&lt;sub&gt;L&lt;/sub&gt; is equal to Z Ohms.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200196\Fig2.JPG" alt="Terminated Transmission Line" title="Terminated Transmission Line" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 2 – Terminated Transmission Line&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This termination scheme, while simple, places an added load on the driver.&amp;nbsp;&amp;nbsp;In keeping with the above example, if the drive voltage were 5V, and R&lt;sub&gt;L&lt;/sub&gt; is 100 ohms, then the termination load is 5Volts/100Ohms=50mA.&amp;nbsp;&amp;nbsp;This is beyond what many TTL devices can accommodate.&amp;nbsp;&amp;nbsp;One way to address this loading is to use a higher impedance cable.&amp;nbsp;&amp;nbsp;Simply changing your transmission environment to 125 ohms would lower the termination loading to 40mA – still high, but lower than the previous example.&amp;nbsp;&amp;nbsp;An advantage of this method of termination is the ability to handle multiple fanouts.&amp;nbsp;&amp;nbsp;Each fanout stub would have their own termination resistors, but the fanout network would multiply the termination loading.&lt;br /&gt;&lt;br /&gt;To address the loading drawback, parallel termination can be used.&amp;nbsp;&amp;nbsp;Terminating the transmission line requires that the termination load be referenced to a power plane.&amp;nbsp;&amp;nbsp;While the ground plane is typically considered the termination reference, the V&lt;sub&gt;CC&lt;/sub&gt; power plane can also be used (Figure 3).&amp;nbsp;&amp;nbsp;The resistors R&lt;sub&gt;PU&lt;/sub&gt; (Pull-Up) and R&lt;sub&gt;PD&lt;/sub&gt; (Pull-Down), while technically not in parallel, for the purposes of transmission line termination, are in parallel with each other.&amp;nbsp;&amp;nbsp;The resulting termination value is calculated using Ohms Law:&amp;nbsp;&amp;nbsp;R&lt;sub&gt;L&lt;/sub&gt;=(R&lt;sub&gt;PU&lt;/sub&gt; x R&lt;sub&gt;PD&lt;/sub&gt;) / (R&lt;sub&gt;PU&lt;/sub&gt; + R&lt;sub&gt;PD&lt;/sub&gt;).&amp;nbsp;&amp;nbsp;If Z were 125 ohms, then using R&lt;sub&gt;PU&lt;/sub&gt; and R&lt;sub&gt;PD&lt;/sub&gt; with values of 180 ohms and 390 ohms, respectively, would result in a Thévenin equivalent termination of 123 ohms.&amp;nbsp;&amp;nbsp;The load on the driver, when outputting a 4V logic “1”, would only be around 10mA – well within the range of most TTL devices.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200196\Fig3.JPG" alt="Parallel Termination" title="Parallel Termination" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 3 – Parallel Terminated Transmission Line&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;GX5292 &lt;/b&gt;has 330/390 parallel termination built in and are user selectable in groups of eight channels using on-board relays.&amp;nbsp;&amp;nbsp;This termination is intended to provide proper termination of UUT driven signals, but has minimal affect of signals driver by the &lt;b&gt;GX5292&lt;/b&gt;.&amp;nbsp;&amp;nbsp;The termination can be enabled programatically, or using the &lt;b&gt;Group Termination &lt;/b&gt;controls on the &lt;b&gt;DioEasy Panel's I/O Channel Settings &lt;/b&gt;tab.&amp;nbsp;&amp;nbsp;The &lt;b&gt;GX5055 &lt;/b&gt;and &lt;b&gt;GX5960 &lt;/b&gt;also provide on-board termination, however, they are controlled per pin, and includes the ability to source and sink current.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200196\Fig4.JPG" alt="DioEasy Panel" title="DioEasy Panel" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 4 – DioEasy Panel - Group Termination Controls&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A little overshoot is not harmful to your system.&amp;nbsp;&amp;nbsp;In fact, many designs under-terminate a signal on purpose to achieve some overshoot and undershoot.&amp;nbsp;&amp;nbsp;This guarantees a clean transition through the UUT input thresholds so you don't linger in the hysteresis range of the receiver.&amp;nbsp;&amp;nbsp;It will also reduce termination loading further.&amp;nbsp;&amp;nbsp;Under-termination produces some ringing in the signal at the receiver (figure 4), but so long as the negative "bounce" does not drop below the input-high threshold of your receiver (Vih), there is no negative affect.&amp;nbsp;&amp;nbsp;As a general rule, if the ringing is not affecting your UUT's operation, then it may not be a problem and you can ignore it.&amp;nbsp;&amp;nbsp;A 220/330 ohm termination network would provide 132 ohm termination; slightly under-terminating a 125 ohm transmission line and producing minor ringing on the signal.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200196\Fig5.JPG" alt="Minor ringing" title="Minor ringing" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 5 – Minor ringing in a digital signal&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Digital signal are often part of a bi-directional bus, and it is typically a requirement that when a bi-directional line is tristated, the bus will “float” to a known level.&amp;nbsp;&amp;nbsp;A 125 ohm termination resistor to ground or V&lt;sub&gt;CC&lt;/sub&gt; will guarantee that a tristated bus would be pulled to ground or to V&lt;sub&gt;CC&lt;/sub&gt;, respectively.&amp;nbsp;&amp;nbsp;Parallel termination can allow a bus that is in an undriven state to float to a predetermined value.&amp;nbsp;&amp;nbsp;For example, 180/390 ohm parallel termination will force a tristated signal to about 46% of V&lt;sub&gt;CC&lt;/sub&gt;, or about 2.3V for V&lt;sub&gt;CC&lt;/sub&gt; equal to 5V.&lt;br /&gt;&lt;br /&gt;Source termination is an example of &lt;b&gt;Impedance Bridging&lt;/b&gt; termination.&amp;nbsp;&amp;nbsp;As mentioned previously, impedance bridging maximizes transfer of a voltage signal to the load.&amp;nbsp;&amp;nbsp;Since most IC’s have a very high input impedance, large drive currents are not required to transmit a signal, so long as the voltage levels comply with the V&lt;sub&gt;IL&lt;/sub&gt; and V&lt;sub&gt;IH&lt;/sub&gt; parameters.&amp;nbsp;&amp;nbsp;Source termination places a resistor in series with the driver, with the source resistance value (R&lt;sub&gt;S&lt;/sub&gt;) equal to the characteristic impedance of the transmission line (Figure 5).&amp;nbsp;&amp;nbsp;The resistor (R&lt;sub&gt;S&lt;/sub&gt; Ohms), in series with the transmission line (Z Ohms) will appear as a voltage divider.&amp;nbsp;&amp;nbsp;When R&lt;sub&gt;S&lt;/sub&gt; Ohms equals Z Ohms, the instantaneous voltage on the transmission line will be 50% of the voltage provided by the driver.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200196\Fig6.JPG" alt="Source Termination" title="Source Termination" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 6 – Impedance Bridging Source Termination&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The 50% amplitude wave propagates down the transmission line until it sees the large mismatch at the unterminated receiver.&amp;nbsp;&amp;nbsp;Source termination relies on the large mismatch to reflect 100% (ideally) of the signal back into the transmission line – in effect, instantly doubling the voltage at the receiver from 50% of the drive voltage to 100%.&amp;nbsp;&amp;nbsp;Since there is very little power transferred to the receiver - remember, source termination is impedance bridging, not impedance matching, the voltage level remains nearly equal to the drive voltage.&amp;nbsp;&amp;nbsp;The reflected wave propagates back down the transmission line, where the source termination resistor absorbs it.&lt;br /&gt;&lt;br /&gt;There are a couple of caveats to using this termination scheme.&amp;nbsp;&amp;nbsp;First, if you were to look at the signal on the transmission line side of the source termination resistor, you would see a very poor digital signal.&amp;nbsp;&amp;nbsp;The signal would rise to 50% of the driver voltage, remain at this level for 2x the propagation delay of the cable (approximately 1nS/ft), and then complete the transition to 100% of the drive voltage, producing a stair-step transition.&amp;nbsp;&amp;nbsp;However, we are not concerned with the signal integrity at the source.&amp;nbsp;&amp;nbsp;The receiver sees a clean 100% signal transition, which is what is important in digital signal transmission.&lt;br /&gt;&lt;br /&gt;The other disadvantage of source termination is that it works best for a single receiver.&amp;nbsp;&amp;nbsp;Additional receivers on the bus will be unterminated stubs.&amp;nbsp;&amp;nbsp;When the source terminated signal reaches a stub, the 50% amplitude signal is divided in half again, producing a 25% amplitude signal (assuming the stub matches the impedance of the transmission line).&amp;nbsp;&amp;nbsp;Now the 100% reflection at the receiver produces a 50% amplitude transition (assuming a single stub), and the reflected wave when it reaches the transmission line will be split between propagating back down the transmission line, and propagating to the other stub.&amp;nbsp;&amp;nbsp;With multiple receivers on a source terminated transmission line, instead of seeing clean transitions at the receiver, you get a transition with steps and added ringing caused by multiple reflections bouncing every which-way.&amp;nbsp;&amp;nbsp;If the length of all of the stubs is very short, then the perturbations in the edge transitions will be minimal, and the signal quality might be adequate.&amp;nbsp;&amp;nbsp;But with source termination, as the unterminated stub lengths increase, edge transition quality for all receivers decreases.&lt;br /&gt;&lt;br /&gt;One final caution about using source termination.&amp;nbsp;&amp;nbsp;Providing both source and load termination on the same signal, while resulting in a very reliable signal, will also limit the amplitude to half of what it would otherwise be.&amp;nbsp;&amp;nbsp;As illustrated in figure 6, double termination creates a voltage divider at the receiver.&amp;nbsp;&amp;nbsp;The current across R&lt;sub&gt;S&lt;/sub&gt; and R&lt;sub&gt;L&lt;/sub&gt; is equal, and assuming the values of R&lt;sub&gt;S&lt;/sub&gt; and R&lt;sub&gt;L&lt;/sub&gt; are equal, the voltage at the receiver is 50% of the source voltage, rather than the full source voltage.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200196\Fig7a.JPG" alt="Source Termination" title="Source Termination" border='0' &gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200196\Fig7b.JPG" alt="Source Termination" title="Source Termination" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 7 – Double Terminated Signal&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The voltage drop from double termination can be compensated for if the source driver has programmable outputs with a range at least double the desired logic level.&amp;nbsp;&amp;nbsp;The GX528x and GX529x series digital instruments available from Geotest (excepth the GX5295) all have programmable output levels in the range of 0V to 3.6V.&amp;nbsp;&amp;nbsp;The GX5295 has a programmable range of -2V to +7V and the GX5055 and GX5960 have programmable output levels in the range of –10V to +15V.&lt;br /&gt;&lt;br /&gt;Terminating a Differential transmission line requires placing a resistor of the same value as the characteristic impedance of the cable, across the differential signals (figure 8).&amp;nbsp;&amp;nbsp;The termination can be on either or both ends of the transmission line, depending on the application requirements.&amp;nbsp;&amp;nbsp;Cables are generally rated for their characteristic impedance based on the type of cable.&amp;nbsp;&amp;nbsp;For example, the &lt;b&gt;GT95022 &lt;/b&gt;cable supplied with Geotest DIO instruments is a SCSI Fast cable, and as SCSI is a differential transmission standard, the cable impedance is specified as a differential Impedance of 124 ohms, ± 10 Ohms.&amp;nbsp;&amp;nbsp;When used in a single-ended application, then the impedance is half the rated differential impedance.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200196\Fig8.JPG" alt="Differential Termination" title="Differential Termination" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 8 – Differential Termination&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;To facilitate easy connection of Geotest dynamic digital instruments, Geotest has optional breakout adapters, the &lt;b&gt;GT95014 &lt;/b&gt;and &lt;b&gt;GT95015&lt;/b&gt;, which provide 34 x 2 rows of male pins on a 0.1” spacing.&amp;nbsp;&amp;nbsp;This is compatible with a 68-pin IDC type connector.&amp;nbsp;&amp;nbsp;These adapters accommodate single-ended or differential signals, respectively, and provide sockets for termination resistors on the board.&amp;nbsp;&amp;nbsp;Documentation for these adapters can be found here (&lt;a href='http://www.geotestinc.com/images/support/Q200196\GT95014.pdf' target='_blank'&gt;GT95014&lt;/a&gt;) and here (&lt;a href='http://www.geotestinc.com/images/support/Q200196\GT95015.pdf' target='_blank'&gt;GT95015&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200196\GT95014.JPG" alt="GT95014" title="GT95014" border='0' &gt;&lt;img src="http://www.geotestinc.com/images/support/Q200196\GT95015.JPG" alt="GT95015" title="GT95015" border='0' &gt;&lt;br /&gt;&lt;b&gt;Figure 9 - GT95014 &amp; GT95015 Breakout Adapters&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In summary, to guarantee good signal quality in a digital environment, it is important to understand when termination is required (as the edge speed of the signal transition approaches the round-trip delay time of the signal through the interface cable), the different methods of terminating a transmission line (source termination, single load termination and parallel load termination), and the advantages and disadvantages of each.&lt;br /&gt;&lt;br /&gt;&lt;sup&gt;1.	Wikipedia - http://en.wikipedia.org/wiki/Impedance_matching&lt;br /&gt;2.	Wikipedia - http://en.wikipedia.org/wiki/Impedance_bridging&lt;/sup&gt;&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=196</link><pubDate>5/19/2010</pubDate></item><item><title>PXI Express Standard - Published on 4/30/2010</title><description>&lt;b&gt;What is PXI Express?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The PXI Express (PXI-5) standard was created by the &lt;a href='http://www.pxisa.org'&gt;PXI Systems Alliance&lt;/a&gt; to integrate PCI Express advances into the PXI standard to improve performance attainable in modular instrumentation and automation systems such as those utilized by automated test developers and technicians.&amp;nbsp;&amp;nbsp;The PXI-Express standard brings with it several improvements but still provides a high degree of compatibility with the PXI-1 standard and compatibility with industry-standard software and operating systems.&amp;nbsp;&amp;nbsp;For more information on the PXI-1 standard, please follow the link to this article: &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=189'&gt;What is PXI?&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Instead of a shared parallel bus, PXI Express uses multiple point-to-point serial connections (“lanes”) for instrument communication.&amp;nbsp;&amp;nbsp;Each lane consists of a pair of lines:&amp;nbsp;&amp;nbsp;one transmitting and one receiving, each able to transfer data independently allowing unimpeded bidirectional communication.&amp;nbsp;&amp;nbsp;A single-lane connection (‘x1’ or ‘by 1') has a bandwidth of 250 Mbytes/sec/direction.&amp;nbsp;&amp;nbsp;The lanes are assigned to the instruments by a matrix switch and can routed to provide one or more instruments with additional bandwidth.&amp;nbsp;&amp;nbsp;In this manner, devices with a higher bandwidth requirement can be allocated more resources.&amp;nbsp;&amp;nbsp; The PXI Express standard also incorporates a 100 MHz differential system clock that is phase-aligned with the existing 10 MHz PXI system clock and can work in conjunction with the 33MHz PCI system clock.&amp;nbsp;&amp;nbsp;Additional features include signaling to ensure that modules using system clocks or clock divisions are synchronized and point-to-point differential triggering.&amp;nbsp;&amp;nbsp;A PXI Express controller utilizes the same operating system and driver model as PXI.&amp;nbsp;&amp;nbsp;This ensures that the test designer can reuse existing code and software with the newer PXI Express system.&lt;br /&gt;&lt;br /&gt; &lt;img src="http://www.geotestinc.com/images/support/Q200190\slots.JPG" alt="A Geotest PXI Express chassis’ slot layout." title="A Geotest PXI Express chassis’ slot layout." border='0' &gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Slots&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A PXI Express chassis can have five slot types:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;PXI Express System Slot&lt;/b&gt;: slot 1 shown above&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;PXI Express Peripheral Slot&lt;/b&gt;: slot 5 shown above&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;PXI Express System Timing Slot&lt;/b&gt;: slot 4 shown above&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;PXI Peripheral (PXI-1) Slot&lt;/b&gt;: slots 2 and 6 through 9 shown above&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;PXI Hybrid Slot&lt;/b&gt;: slot 3 shown above&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The &lt;b&gt;PXI Express System Slot &lt;/b&gt;is the leftmost PXI slot, designated by a filled triangle labeled '1'.&amp;nbsp;&amp;nbsp;This slot will accept a system module in the form of an embedded controller or a PXI Express Bus Expander.&amp;nbsp;&amp;nbsp;An embedded controller is a single-board computer which comes with traditional components such as processor, memory, network and video cards, and I/O ports such as keyboard, mouse, and USB.&amp;nbsp;&amp;nbsp;A PXI Express Bus Expander kit allows remote control of the PXI Chassis and its hardware by another computer.&amp;nbsp;&amp;nbsp;The kit consists of a PXI-Express interface card which goes in the System Slot, a PCI-Express card which is installed into the desktop or plugged into the laptop, and an interface cable.&amp;nbsp;&amp;nbsp;If the System Module's functionality is integrated into the chassis and none is required, then the PXI System Slot will not be present on the chassis and the peripheral slot numbering will begin with '2'.&amp;nbsp;&amp;nbsp;Additionally, if a system module does not fit into a single slot, the PXI Express standard requires that the System Module expand to the left in slot-wide increments defined as controller expansion slots.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;System Timing Slot &lt;/b&gt;is intended to be used by a PXI Express System Timing Module.&amp;nbsp;&amp;nbsp;A System Timing Module provides individual triggers to all other PXI Express Peripheral modules and allows replacement of the system reference clock.&amp;nbsp;&amp;nbsp;The System Timing Module replaces the Star Trigger Module as the timing and synchronization provider for the rest of the peripheral modules. The star trigger connection points defined in PXI-1 are still retained as well as the ability to replace the system reference clock with it's own, more accurate reference clock.&amp;nbsp;&amp;nbsp;If a system timing module is not required, the system timing slot can be used can by a PXI Express Peripheral.&lt;br /&gt;&lt;br /&gt;The PXI Express standard specifies that there may be slots that support PXI board as defined by the PXI Hardware Specification.&amp;nbsp;&amp;nbsp;These peripheral slots are referred to as PXI-1 slots.&amp;nbsp;&amp;nbsp;Communication with the controller is supported via an included, shared PCI bus.&lt;br /&gt;&lt;br /&gt;Finally, there are two hybrid slots that can be used with PXI Express instruments or with legacy PXI instruments that are hybrid slot compatible.&lt;br /&gt;&lt;br /&gt; &lt;img src="http://www.geotestinc.com/images/support/Q200190\hybrid_slot_compatibility.JPG" alt="The hybrid slot can accept different types of instrument interfaces." title="The hybrid slot can accept different types of instrument interfaces." border='0' &gt;&lt;br /&gt;&lt;br /&gt;PXI-1 peripheral modules have a J1 and J2 interface to connect to the backplane.&amp;nbsp;&amp;nbsp;To make these instruments hybrid slot compatible, the card’s J2 interface must be removed and replaced with an XJ4 interface.&amp;nbsp;&amp;nbsp;The resulting interface is compatible with PXI Express chassis hybrid slots but will still work in traditional PXI-1 slots.&amp;nbsp;&amp;nbsp;Since removing the lower portion of the J2 interface will remove the access to the local bus, this modification should not be done on some instruments.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.geotestinc.com/images/support/Q200190\pxi1_to_hybrid_compatible.JPG" alt="Before and after making a card hybrid slot compatible." title="Before and after making a card hybrid slot compatible." border='0' &gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=190</link><pubDate>4/30/2010</pubDate></item><item><title>How to set up and control an LXI instrument from ATEasy - Published on 4/27/2010</title><description>ATEasy can interface with a wide variety of software and hardware, allowing users to leverage a plethora of instrumentation and driver implementations from within their ATEasy applications.&lt;br /&gt;&lt;br /&gt;One such interface is &lt;b&gt;LXI &lt;/b&gt;which takes advantage of the speed, flexibility, and standardization of the Local Area Network and the TCP/IP protocol. ATEasy can communicate with network enabled instrumentation in one of the following ways: &lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Natively through&lt;b&gt; IOTable &lt;/b&gt;based ATEasy drivers - An ATEasy driver can be created and its interface property set to WinSocket. This allows IOTable communication to be routed to the Local Area Netork via TCP/IP protocol.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;By way of importing &lt;b&gt; IVI-C&lt;/b&gt; .FP Function Panel files to automatically generate a fully featured ATEasy driver which calls a vendor supplied DLL&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Using other type of software component (.NET, ActiveX, DLL, LabView, etc.)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;This article will discuss the second option.&lt;br /&gt;&lt;br /&gt;ATEasy can communicate with LXI (and other interfaces such as VXI, GPIB, etc.) instrumentation through the use of IVI-C drivers and the IVI/VISA hardware abstraction layer. The following steps will allow a user to automatically create an ATEasy driver for a particular LXI instrument, install all applicable libraries for IVI/VISA, configure VISA to recognize the LXI instrument, and finally to configure the ATEasy driver to interface with VISA.&lt;br /&gt;&lt;br /&gt;Use the following procedure:&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Ensure that the VISA layer along with the IVI shared components (1.5+) are installed. The IVI shared components can be found at: &lt;a href='http://www.ivifoundation.org/shared_components/Default.aspx'&gt;IVI Foundation Shared Components&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Find and install the LXI compliant IVI-C driver package. This is usually available on the vendor’s website. Alternatively, the IVI Foundation Driver Registry can be searched at &lt;a href='http://www.ivifoundation.org/registered_drivers/driver_registry.aspx'&gt;IVI Driver Registry&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Import the .FP file from the IVI-C driver package into ATEasy. From the ATEasy menu, select &lt;b&gt;Insert &lt;/b&gt; | &lt;b&gt;Import .FP file (.fp)&lt;/b&gt;. Enter a &lt;b&gt;default name &lt;/b&gt;for the driver and then click the &lt;b&gt;Browse&lt;/b&gt; button to browse for the .fp file. The .fp file is usually located in the instrument specific folder located in C:\Program Files\IVI Foundation\IVI\Drivers\&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You can specify %VXIPNPPATH% in the path field before cllicking on the browse button to use the IVI-C path variable. Also make sure to mark the &lt;b&gt;Convert VISA Basic Types to ATEasy Types&lt;/b&gt; checkbox. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200194\InsertFP.JPG" alt="IVI-C driver insert" title="IVI-C driver insert" border='0' &gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200194\InsertFP2.JPG" alt="IVI-C driver browse" title="IVI-C driver browse" border='0' &gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Make sure the new driver is inserted in the driver folder of the &lt;b&gt;system &lt;/b&gt;module as shown below.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200194\InsertFP3.JPG" alt="Integrated Development Environment ATEasy Driver" title="Integrated Development Environment ATEasy Driver" border='0' &gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Start NI-MAX (Measurement &amp; Automation Explorer) in order add the LXI instrument to the database.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Right click on &lt;b&gt;Devices and Interfaces&lt;/b&gt; and select &lt;b&gt;Create New…&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Select &lt;b&gt;VISA TCP/IP Resource&lt;/b&gt; and click Next.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200194\InsertFP4.JPG" alt="TCP/IP Resource" title="TCP/IP Resource" border='0' &gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Select &lt;b&gt;Auto-Detect of LAN Instrument&lt;/b&gt; and click Next.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Select the LXI instrument from the list of scanned network devices and click Next.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200194\InsertFP5.JPG" alt="LXI Instrument list" title="LXI Instrument list" border='0' &gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Enter a descriptive alias. This alias will later be used in the ATEasy driver to address this particular instrument. Click Finish&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200194\InsertFP6.JPG" alt="VISA Alias" title="VISA Alias" border='0' &gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The LXI device will now appear in NI-MAX under Devices and Interfaces. Device specific information will be shown including the IP Address and hostname.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;In ATEasy, right click on the driver shortcut and select &lt;b&gt;properties&lt;/b&gt;. Click on the &lt;b&gt;Misc&lt;/b&gt; tab and enter the LXI instrument’s alias into the &lt;b&gt;ResourceName &lt;/b&gt;field (the Change button must be clicked to store the value).&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200194\InsertFP7.JPG" alt="Programming Properties" title="Programming Properties" border='0' &gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The new ATEasy driver can now be used to control the LXI instrument.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200194\InsertFP8.JPG" alt="Test Development IDE" title="Test Development IDE" border='0' &gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=194</link><pubDate>4/27/2010</pubDate></item><item><title>GT95014 Digital I/O Single-ended Beakout Adapter Board Product Information - Published on 4/27/2010</title><description>The GT95014 is a breakout adapter for all Geotest Digital I/O products with single-ended I/O signals. The GT95014 provides an interface between the 68-pin SCSI-2 connectors used on the Geotest DIO cards and 100 mil spaced pins. In addition, the GT95014 provides the option of terminating all of the I/O signals to match the impedance requirements of the UUT and the DIO instrument.&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200133\GT95014.JPG" alt`=&amp;quot; border='0' /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Cabling&lt;/b&gt;&lt;br /&gt;The basic connection between the GT95014 and the DIO card is accomplished using a SCSI-2 cable with 68-pin connectors on each end. The cable can be of any practical length as determined by the systems needs, however, consideration should be given to how signal or system timing might be affected as cable lengths are increased. The best approach would be to use the shortest cable practical.&lt;br /&gt;The GT95014 is connected to the UUT via a 68-pin, 100 mil pin grid. Cables connecting to the 100 mil pins may be individual wires, mass terminated connectors, or combinations thereof. Care should be taken to provide adequate ground returns for the signals used, again, giving consideration to how UUT loading, signal quality or system timing might be affected as cable lengths are increased.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Configuration&lt;/b&gt;&lt;br /&gt;The GT95014 supports two basic termination configurations, unterminated and parallel termination, using SIP resistor packs in the locations UR1, UR2, UR3 and UR4. Refer to Figure 1 and Figure 2.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Parallel Termination&lt;/b&gt;&lt;br /&gt;Parallel termination places termination resistors in parallel from VCC and GND to the I/O signal using a ten pin single inline resistor package (SIP). The value of the SIP resistors are selected to match the characteristic impedance of the logic device and the cable, with each SIP providing eight pairs of resistors connected to eight separate signals (see Figure 2, UR1 – UR4). For example, if LVTTL signals are being used to drive a 100 ohm cable, then the SIP’s should provide the Thevenin-equivalent of 100 ohm termination resistors. Be careful to orient the SIP’s so that pin 1 of the SIP is matched to pin 1 on the GT95014.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200133\GT95014 Layout.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;div align='center'&gt;&lt;b&gt;Figure 1: GT95014 Single-Ended DIO Adapter&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;The VCC termination voltage is provided via pins 33 and 67 on connector J1, and pins 65 and 67 on connector J2. This allows either the DIO instrument or the UUT to provide the termination voltage to the GT95014. However, caution should be exercised so that termination voltages are not applied to both the J1 and J2 pins simultaneously – especially if the voltages are of different values, as damage may result to the GT95104, the DIO instrument, the UUT or all of the above.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200133\GT95014 schematic.JPG" alt`=&amp;quot; border='0' /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;b&gt;Figure 2: GT95014 Single-Ended DIO Adapter Schematic&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=133</link><pubDate>4/27/2010</pubDate></item><item><title>GT95015 Differential Digital I/O Beakout Adapter Board Product Information - Published on 4/27/2010</title><description>The GT95015 is a breakout adapter that can be used with all Geotest Digital I/O products that provide differential I/O signals. For ease of access to the digital signals, the GT95015 breaks out the 68-pin SCSI-2 connector (J1) pins to a dual row connector with 100 mil spaced pins, designated J2 on the board. In addition, the GT95015 provides three methods of terminating all of the I/O signals in order to best match the requirements of the UUT and the DIO instrument.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200135\GT95015.JPG" alt`=&amp;quot; border='0' /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The basic connection between the GT95015 and the DIO instrument is accomplished using a SCSI-2 cable with 68-pin connectors on each end. The cable can be of any practical length as determined by the systems needs, however, consideration should be given to how signal or system timing might be affected as cable lengths are increased. The best approach would be to use the shortest cable practical (Geotest part numbers for various length SCSI-2 cables are provided at the end of this document). &lt;br /&gt;Cables connecting to the J2 100 mil pins may be individual wires, mass terminated connectors, or combinations thereof. Care should be taken to provide adequate ground returns for the signals used, again, giving consideration to how UUT loading, signal quality or system timing might be affected as cable lengths are increased.&lt;br /&gt;&lt;br /&gt;The GT95015 supports three basic termination configurations; unterminated, bus termination and isolated termination, using SIP resistor packs in the locations provided. Refer to Figure 1 and Figure 2. Locations UR1, UR2, UR3, UR4, UR9, UR10, UR11 and UR12 are used for bus termination, along with jumpers JP1 – JP6. Locations UR5, UR6, UR7, UR8, UR13, UR14, UR15 and UR16 are used for isolated termination.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200135\GT95015 Layout.JPG" alt`=&amp;quot; border='0' /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;b&gt;Figure 1: GT95015 Differential DIO Adapter&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Isolated Termination&lt;/b&gt;&lt;br /&gt;Isolated termination places a termination resistor across the differential signals using an eight pin single inline resistor package (SIP). The value of the SIP resistors is selected to match the characteristic impedance of the logic device and the cable and each SIP provides four resistors connected across four differential signals(see figure 2, UR5 – UR8 and UR13 – UR16). For example, if LVDS is being used, then the SIP’s should provide 100 ohm resistors. Care should be taken to orient the SIP’s so that pin 1 of the SIP is matched to pin 1 on the GT95015.&lt;br /&gt;&lt;b&gt;Bus Termination&lt;/b&gt;&lt;br /&gt;Bus termination places a termination resistor from each of the differential signals to a reference termination voltage (see figure 2, UR1 – UR4 and UR9 – UR12), as determined by jumpers JP1 to JP6. The SIP’s used in the bus termination scheme are ten pin devices and provide nine resistors (one is unused) connected to a reference termination voltage. Care should be taken to orient the SIP’s correctly so that pin 1 of the SIP is matched to pin 1 on the GT95015.&lt;br /&gt;The termination voltage is selected using jumpers JP1 to JP6 and can be configured to provide a single reference voltage for all signals, or split into two sixteen pin groups each with their own single or dual voltage references. Termination voltages can be applied to Connector J1 pins 33, 34, 67 and 68 or to connector J2 pins 65, 66, 67 and 68. This allows either the DIO instrument or the UUT to provide the termination voltage to the GT95015. However, caution should be exercised that termination voltages are not applied to both J1 and J2 pins simultaneously – especially if the voltages are of different levels or polarities, as damage may result to the GT95105, the DIO instrument, the UUT or all three.&lt;br /&gt;Care should also be taken that if V+1 and V-1 are used, that JP5 is removed if they are different values or different polarities. Similar care should be taken that if V+2 and V-2 are used, that JP6 is removed if they are different values or different polarities&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200135\GT95015 Schematic.JPG" alt`=&amp;quot; border='0' /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;b&gt;Figure 2: GT95015 Schematic&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Geotest SCSI-2 Cable Part Numbers&lt;/b&gt;. &lt;br /&gt;GT95021&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2' shielded cable for GT5xxx/GX5xxx/GC5xxx (68pin SCSI-2 connectors on both ends)&lt;br /&gt;GT95022&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3' shielded cable for GT5xxx/GX5xxx/GC5xxx (68pin SCSI-2 connectors on both ends) &lt;br /&gt;GT95028&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10' shielded cable for GT5xxx/GX5xxx/GC5xxx (68pin SCSI-2 connectors on both ends)&lt;br /&gt;GT95031&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6' shielded cable for GT5xxx/GX5xxx/GC5xxx (68pin SCSI-2 connectors on both ends)&lt;br /&gt;GT95032&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6" shielded cable for GT5xxx/GX5xxx/GC5xxx (68pin SCSI-2 connectors on both ends)&lt;br /&gt;GT95032-8 8" shielded cable for GT5xxx/GX5xxx/GC5xxx (68pin SCSI-2 connectors on both ends)&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=135</link><pubDate>4/27/2010</pubDate></item><item><title>What is the Geotest HW driver? - Published on 3/31/2010</title><description>The &lt;b&gt;HW &lt;/b&gt;package - Geotest's Hardware Access Driver, is used by all Geotest instrument drivers and &lt;b&gt;ATEasy&lt;/b&gt; to access to the PC resources (memory, IO ports, DMA etc), PCI/PXI configuration and more.&amp;nbsp;&amp;nbsp;The &lt;b&gt;HW &lt;/b&gt;package includes libraries used to program and create instrument drivers for PC/PCI/PXI based instruments. A &lt;b&gt;PXI/PCI Explorer &lt;/b&gt;utility to configure and display PXI/PC based systems is also included.&amp;nbsp;&amp;nbsp;The utility includes a VISA configuration utility for PXI and PXI express instruments (similar to NI-MAX) and support for Geotest and other vendors PXI chassis, controllers and expanders. &lt;br /&gt;&lt;br /&gt;The HW driver supports running on Windows 9x-Windows 7 and support 16, 32 and 64 bit Windows applications.&lt;br /&gt;&lt;br /&gt;The following files are installed when running the &lt;b&gt;HwSetup.exe&lt;/b&gt; setup for HW:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' bgcolor=#999999 border=0 cellpadding=1 cellspacing=1&gt;&lt;tr&gt;&lt;td valign=top bgcolor=#F5F4EA class=reg12&gt;&lt;br /&gt;&lt;b&gt;HwSetup.exe&lt;/b&gt; - A command line utility to install, uninstall and check the status of the HW driver.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HwTest.exe&lt;/b&gt; - A program to test the HW driver and to read/write to I/O ports, memory and to display PCI resources.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hw.sys and Hw64.sys&lt;/b&gt; - Windows kernel mode device drivers, provides access to I/O ports, memory and PCI resources, installed to the Windows System Drivers directory.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HwDevice.sys and HwDevice64.sys&lt;/b&gt; - Windows kernel mode device driver for HW.INF boards, installed to the Windows System Drivers directory.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HwPxiExpress.dll&lt;/b&gt; - Provides information to Geotest Chassis, Controller and Peripheral PXIe devices, installed to the Windows System directory.&lt;br /&gt;	&lt;br /&gt;&lt;b&gt;Hw.vxd&lt;/b&gt; - Windows 9x/Me virtual device driver provides access for memory and PCI resources, installed to the Windows System directory.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HwCIns16.dll&lt;/b&gt; - Windows 9x/Me Class Installer for HW.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HwCIns32.dll and HwClins64.dll&lt;/b&gt; - Windows Class Installer for HwDevice.sys and HwDevice64.sys.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HwVdd.dll&lt;/b&gt; - VDD for 16 app running on 2000-Vista, installed to the Windows System directory.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hw.inf&lt;/b&gt; - Driver information files for Geotest's PXI/PCI boards.&amp;nbsp;&amp;nbsp;Installed to the Windows System\INF directory.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HwPciExplorer.cpl and HwPciExplorer64.cpl&lt;/b&gt; - PXI/PCI Explorer - Windows Ccontrol Panel applet to display the current PXI/PCI devices and to assign slot numbers to device resources. Slots numbers are required to identify a PCI/PXI board when using Geotest board driver. Installed to the Windows System directory.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hw.dll and Hw64.Dll&lt;/b&gt; -&amp;nbsp;&amp;nbsp;Library with API defined in hw.h, installed in Windows System folder.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hw.h&lt;/b&gt; -&amp;nbsp;&amp;nbsp;Include file, to include in your C/C++ project provides functions prototypes to Hw.dll&amp;nbsp;&amp;nbsp;and Hw64.dll files.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hw.lib and Hw64.lib&lt;/b&gt; -&amp;nbsp;&amp;nbsp;import library for C/C++ application using the HW.dll and Hw64.dll.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ReadMe.txt&lt;/b&gt; - Contains the latest release information about the HW package.&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;There are many functions within the &lt;b&gt;HW&lt;/b&gt; library that are useful for determining the system configuration.&amp;nbsp;&amp;nbsp;This article discusses the most important procedures, the &lt;b&gt;structHWPCIDEVICE&lt;/b&gt; data structure, and provides an example of using the objects listed below for querying the PXI system resources:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Initialize()&lt;/b&gt;:&lt;br /&gt;Initializes the HW library&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PciGetSlotNumbers([Val] Word wVendorId, [Val] Word wDeviceId, Var Short panSlotNumbers[], Var Word pwDevicesFound)&lt;/b&gt;:&lt;br /&gt;Returns an array of slot number(s) for the devices with the specified Vendor ID and specified Device ID.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PciGetSlotDevice(Val Long lSlot, Var structHWPCIDEVICE pstPciDev)&lt;/b&gt;:&lt;br /&gt;Returns the device information for the instrument in the specified slot.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Struct structHWPCIDEVICE&lt;/b&gt;:&lt;br /&gt;A data type structure that contains information about devices (instruments) installed in a PXI system.&amp;nbsp;&amp;nbsp;While the procedures above are used to obtain information about a PXI device, it is the &lt;b&gt;structHWPCIDEVICE&lt;/b&gt; data structure where that information is stored.&amp;nbsp;&amp;nbsp;So knowing the structure of the data type is key to fully utilizing the &lt;b&gt;HW&lt;/b&gt; driver.&amp;nbsp;&amp;nbsp;The full structure is provided in the &lt;b&gt;ATEasy&lt;/b&gt; HW driver, and provided below for review:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Struct structHWPCIDEVICE&lt;br /&gt;&amp;nbsp;&amp;nbsp;Dword dwVendorId&lt;br /&gt;&amp;nbsp;&amp;nbsp;Dword dwDeviceId&lt;br /&gt;&amp;nbsp;&amp;nbsp;Dword dwBus&lt;br /&gt;&amp;nbsp;&amp;nbsp;Struct structPciSlotNumber stPciSn&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dword dwAsUlong&lt;br /&gt;&amp;nbsp;&amp;nbsp;Struct strictPciCommonConfig stPciCfg&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Word wVendorId&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Word wDeviceId&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Word wCommand&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Word wStatus&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucRevisionId&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucProgIf&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucSubClass&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucBaseClass&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucCacheLineSize&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucLatencyTimer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucHeaderType&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucBIST&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Struct structPciHeaderType0 stType0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dword adwBaseAddresses[6]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dword dwSubSystem&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dword dwSubVendorID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dword dwROMBaseAddress&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dword adwReserved2[2]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucInterruptLine&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucInterruptPin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucInterruptPin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucMinimumGrant&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucMaxinumLatency&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte dwDeviceSpecific[192]&lt;br /&gt;&amp;nbsp;&amp;nbsp;Struct structCmPartialResourceDescriptor&amp;nbsp;&amp;nbsp;aResDesc[8]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucType&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Byte ucShareDisposition&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Word wFlags&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWord Address1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWord Address2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWord Address3&lt;br /&gt;&amp;nbsp;&amp;nbsp;Struct structHwMemoryDesc aMemDesc[8]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWord dwPhAddrLow&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Long lPhAddrHigh&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWord dwLength&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWord pvVirtualAddress&lt;br /&gt;&amp;nbsp;&amp;nbsp;Char szId[256]&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;To demonstrate the utility of the &lt;b&gt;HW&lt;/b&gt; driver, let's review a common task confronting anyone writing a program to control PXI test instruments.&amp;nbsp;&amp;nbsp;When writing a test program, the programmer is always faced with having to identify what instruments are installed in the PXI chassis.&amp;nbsp;&amp;nbsp;This information is essential to the test program so it knows how to establish a communication link between the host computer (i.e., the test program) and the instruments.&amp;nbsp;&amp;nbsp;Instrument identification can take one of several forms; slot numbers can identify instruments, instruments can be identified by a resource descriptor (VISA) and board numbers can be used - these are the most common means of identification.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;HW&lt;/b&gt; library also supports a simplified means of referencing a device; by it's &lt;b&gt;Alias&lt;/b&gt;.&amp;nbsp;&amp;nbsp;An alias is a text name that can be assigned to any instrument in a PXI chassis using &lt;b&gt;PXI/PCI Explorer&lt;/b&gt;, a PXI resource utility that is installed with the &lt;b&gt;HW&lt;/b&gt; package.&amp;nbsp;&amp;nbsp;A detailed explanation of how to do this is discussed in Knowledge Base article &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=187'&gt;#Q200187&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200187\PXI Explorer Alias.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 1:&amp;nbsp;&amp;nbsp;Using PXI/PCI Explorer to assign an instrument Alias&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The typical process for establishing communication with an instrument is to “Initialize” the instrument by passing the iappropriate dentification parameter into an initialization procedure, typically contained in the instrument drivers, and having the procedure return a “handle” that is used as a reference for future communication with the instrument.&amp;nbsp;&amp;nbsp;This process is very similar to that of opening a file, and using the returned “file handle” for subsequent reading or writing to the file.&lt;br /&gt;&lt;br /&gt;Identification of instruments can be done at program design time by hard-coding the instrument identification into the test program, or at runtime by querying the system resources and dynamically initializing instruments using the information returned by the system query.&amp;nbsp;&amp;nbsp;To use procedures contained in &lt;b&gt;HW.DLL&lt;/b&gt; to query the system resources and identify installed instruments at runtime, the HW &lt;b&gt;Initialize()&lt;/b&gt; procedure must be called prior to calling any of the other procedures in the &lt;b&gt;HW&lt;/b&gt; driver.&lt;br /&gt;&lt;br /&gt;Once initialized, the &lt;b&gt;PciGetSlotNumbers()&lt;/b&gt; procedure will return an array of PXI slot numbers that contain instruments matching the search criteria – often the Vendor ID and Device ID.&amp;nbsp;&amp;nbsp;The &lt;b&gt;PciGetSlotDevice()&lt;/b&gt; procedure returns the device information for the instrument in the specified slot.&amp;nbsp;&amp;nbsp;The device information is contained in the structure &lt;b&gt;structHWPCIDEVICE&lt;/b&gt; (listed above).&amp;nbsp;&amp;nbsp;If, for example, you wanted to know how many &lt;b&gt;GX5290&lt;/b&gt; dynamic digital instruments were installed in a PXI chassis, what are their slot numbers, and the firmware revision of each of those instruments, you could use the following code:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Word wVendorId=0x16E2 ! Geotest Vendor ID&lt;br /&gt;Word wDeviceId=0x5290 ! GX5290 Device ID&lt;br /&gt;Short panSlotNumbers[32] ! Array of slot numbers found&lt;br /&gt;Word pwDevicesFound ! Number of slots matching the Vendor and Device ID’s&lt;br /&gt;structHWPCIDEVICE pstPciDev&lt;br /&gt;String sDeviceInfo&lt;br /&gt;Long i&lt;br /&gt;&lt;br /&gt;Initialize()&lt;br /&gt;PciGetSlotNumbers(wVendorId, wDeviceId, panSlotNumbers, pwDevicesFound)&lt;br /&gt;If pwDevicesFound&lt;&gt;0&lt;br /&gt;&amp;nbsp;&amp;nbsp;For i=0 to pwDevicesFound-1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PciGetSlotDevice(panSlotNumbers[i], pstPciDev)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sDeviceInfo= pstPciDev.szId&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Print "Slot "+Format(panSlotNumbers[i],"00")+" Firmware: "+Mid(sDeviceInfo,Pos("SUBSYS_",sDeviceInfo)+7,4)&lt;br /&gt;&amp;nbsp;&amp;nbsp;Next&lt;br /&gt;EndIf&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Once the slot number for an instrument is obtained, it would be a simple matter to initialize the instrument by calling the instrument's Initialize() procedure and passing the slot number obtained by scanning the PXI system using the example above.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;For additional information about how to use the &lt;b&gt;HW&lt;/b&gt; driver, review the HW programming example installed with &lt;b&gt;ATEasy&lt;/b&gt; (Hw.prj) and the HW files installed the Program Files\Geotest\HW. More informatiion is also avilable in the folowing knowledge base articles: &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=182'&gt;Q182&lt;/a&gt;, &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=187'&gt;Q187&lt;/a&gt;.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=192</link><pubDate>3/31/2010</pubDate></item><item><title>What is PXI? - Published on 3/30/2010</title><description>&lt;h2&gt;The PXI Standard&lt;/h2&gt;The PXI standard is defined by the &lt;a href='http://www.pxisa.org'&gt;PXI Systems Alliance&lt;/a&gt; and was developed in response to the needs of test systems developers and users who required a new platform that is high-performance, functional, reliable, compact, yet easy to integrate and use. By leveraging off of the PCI, CompactPCI and VXI standards, PXI brings together the right technologies for PC-based test and measurement, instrumentation, and industrial automation. Further, since PXI is a PC-based platform, it maintains software compatibility with industry-standard personal computers, as well as all PC-based operating systems, software tools, and instrument drivers. Not only is PXI fully compatible with existing operating systems and software, it is fully compatible with the Virtual Instrument Software Architecture (VISA) standard that was created by the &lt;a href='http://www.vxi.org'&gt;VXIplug&amp;play Systems Alliance&lt;/a&gt;. VISA is used to locate PXI resources as well as communicate with PXI, serial interface, VXI, and GPIB peripheral modules and is supported by test development software packages such as ATEasy™, LabVIEW™, LabWindows/CVI™ and Agilent VEE™. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The PCI bus is a 33/66MHz 32/64bit bus that offers peak data transfer rates of 132 Mbytes/s (32-bit, 33MHz) and 528 Mbytes/s (64-bit, 66 MHz). PXI expands upon the PCI bus by using the rugged form factor of CPCI and then adding triggering, local buses and system clock capabilities. The result is a standard that incorporates all of the benefits of PCI and cPCI in an architecture that supports these standards’ mechanical, electrical and software features. Also because interoperability between CompactPCI and PXI is a feature of the PXI Standard, both instrument types can reside in the same PXI system without any conflict - offering users a broad selection of both 3U and 6U cPCI modules in addition to the PXI instrument offerings.&lt;br /&gt;&lt;br /&gt;PXI Express leverages the electrical features defined by the widely adopted PCI Express specification for data movement. All PXI Express modules comply with the CompactPCI Express specification, which combines the PCI Express electrical specification with rugged euro card mechanical packaging and high performance differential connectors. This allows measurement and automation Systems based on PXI Express to have a data throughput of up to 4 GBytes/sec in each direction. PXI Express also offers two-way interoperability with CompactPCI Express products. For more information on PXI Express go to the following article on the &lt;a href='http://http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=190'&gt;PXI Express Standard&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;PXI Instrument architecture:&lt;/h2&gt;PXI instruments are available in two form factors: 3U (100 by 160 mm, or 3.94 by 6.3 in.) and 6U (233.35 by 160 mm, or 9.19 by 6.3 in.). These two form factors are shown below.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200189\3U_6U Cards.JPG" alt="PXI 3U/6U Instrument Form Factors" title="PXI 3U/6U Instrument Form Factors" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;Figure 1: PXI 3U/6U Instrument Form Factors&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;3U PXI instruments have two rear connectors named J1 and J2. J1 is used to carry the 32-bit PCI local bus signals. J2 is used to carry the signals for 64-bit PCI transfers and the PXI signals for implementing the local bus, star trigger signals and trigger bus signals. These signals are described later in this article. Connectors J3/J4/and J5 are undefined for 6U PXI modules but may be used for special applications.&lt;br /&gt;6U system controller modules and system slots may use P3/J3, P4/J4, P5/J5 for rear I/O purposes. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; 3U instruments can reside in 6U slots when used with a 3U-to-6U Panel adapter similar to the Geotest &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX97005'&gt;GX97005&lt;/a&gt; panel adapter shown below.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200189\3U_6U Adapter.JPG" alt="PXI 3U to 6U Panel Adapter (GX97005)" title="PXI 3U to 6U Panel Adapter (GX97005)" border='0' &gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;div align='center'&gt;Figure 2: Geotest &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX97005'&gt;GX97005&lt;/a&gt; PXI 3U-to-6U Panel Adapter mounted on a 3U PXI/cPCI instrument&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;PXI Hardware Architecture Overview&lt;/h2&gt;A PXI system consists of three main components:&lt;br /&gt;&amp;nbsp;&amp;nbsp;1) The chassis&lt;br /&gt;&amp;nbsp;&amp;nbsp;2) The system controller&lt;br /&gt;&amp;nbsp;&amp;nbsp;3) Peripheral instrumentation&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200189\3U PXI Chassis.JPG" alt="3U PXI Chassis (Geotest 3U GX7300 20-slot PXI Chassis)" title="3U PXI Chassis (Geotest 3U GX7300 20-slot PXI Chassis)" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;Figure 3: &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7300+Series'&gt;GX7300&lt;/a&gt; 20-slot 3U PXI chassis&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;PXI Chassis and Backplane Information:&lt;/h2&gt;The main components of a PXI chassis are:&lt;br /&gt;&amp;nbsp;&amp;nbsp;1) The System Controller&lt;br /&gt;&amp;nbsp;&amp;nbsp;2) The Star Trigger Controller&lt;br /&gt;&amp;nbsp;&amp;nbsp;3) The Chassis Backplane&lt;br /&gt;&lt;br /&gt;Per the PXI Standard, the System controller will always reside in Slot 1 and the Star Trigger Controller, if required, is always located in Slot 2. The chassis backplane contains the PCI Bus, the Star Trigger Bus, a PXI Trigger Bus, PCI-PCI Bridge devices and the 10MHz System Reference Clock. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; In a typical 20-Slot PXI chassis layout, slot number 1 is dedicated for an embedded or remote controller. Slot 2 can be used by a PXI Star Trigger Controller or by a PXI/cPCI instrument. Slots 3 through 15 supports the PXI Star Trigger and Slots 16-20 accommodate PXI or cPCI instruments without the Star Trigger. &lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200189\PXI Chassis Components.JPG" alt="PXI Chassis architecture" title="PXI Chassis architecture" border='0' &gt; &lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;div align='center'&gt;Figure 4: PXI Chassis architecture&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200189\6U Chassis.JPG" alt="6U PXI Chassis (20-slot GX7000A PXI Chassis)" title="6U PXI Chassis (20-slot GX7000A PXI Chassis)" border='0' &gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;div align='center'&gt;Figure 5: &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7000A+Series'&gt; GX7000A&lt;/a&gt; 20-slot 6U PXI chassis&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;System Controllers&lt;/h2&gt;The System Controller is always located in the first slot on the left-hand side of the chassis and is available in two configurations: &lt;b&gt;Embedded controllers&lt;/b&gt; and &lt;b&gt;Remote Controller Interface Kits&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Embedded controllers&lt;/b&gt; are basically a PC on a card and can run on a number of different Operating Systems, for example Windows and Linux. As they remove the need for any external control they are ideal for portable applications and applications that require “single box” solutions. In cases where the embedded controller requires more than one slot the PXI Standard allows for additional controller expansion slots to the left of the controller slot. In this way instrument slots are not used by the controller.&lt;br /&gt;&lt;br /&gt;Embedded controllers come in two form factor, &lt;b&gt;Single slot controllers &lt;/b&gt;and&lt;b&gt; Multi-slot controllers&lt;/b&gt;:&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Single-slot embedded controllers &lt;/b&gt;are one PXI slot wide and do not require any controller expansion slots. They support multiple peripherals and I/O interfaces through the controller’s front panel and the chassis rear I/O panel. Connection to the DVD-RW drive, hard drive and chassis rear I/O connectors is via the controller’s internal I/O interface. As some of these controller cards have a flash drive port option, where the flash-drive port is built onto the controller card, they can be operated from a flash-drive without the need for a hard drive. All Geotest embedded system controllers adhere to the PXI and cPCI specifications and are PICMG 2.0 Rev. 3.0 compliant.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200189\3U 6U Controllers.JPG" alt="3U/6U PXI Single-slot embedded controllers" title="3U/6U PXI Single-slot embedded controllers" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;Figure 6: &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7924'&gt;GX7924&lt;/a&gt; 6U and &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7934'&gt;GX7934&lt;/a&gt; 3U PXI Single-Slot Embedded Controllers&lt;/div&gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Multi-slot embedded controllers &lt;/b&gt;operate the same as single-slot controllers but differ in that all the PC components, for example the hard-drive, are built onto the controller card and all the external connectors, for example Ethernet, USB, etc.., are available on the front faceplate. As these components and connectors require extra space, these controllers can occupy up to three slots (a system slot plus two controller expansion slots). &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200189\Multi-slot Embedded Controller.JPG" alt="PXI Multi-slot embedded controller" title="PXI Multi-slot embedded controller" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;Figure 7: Typical Multi-Slot Embedded Controller&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Remote Controller&lt;/b&gt; Interface Kits (also referred to as Bus Expansion Kits) are used in cases where the user wants to control a slave PXI chassis using an external PC, laptop or a Master PXI chassis. The interface kit consists of a pair of cards, one that plugs into the PC/Laptop or the Master PXI Chassis and another that goes in the system slot of the slave PXI chassis. The cards are then linked via copper or fiber-optic cable. For more information on the various PXI bus expansion options please see the following article on &lt;a href='http://http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=168'&gt;PXI Bus expander configurations&lt;/a&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200189\External PC Remote Controller.JPG" alt="Controlling a PXI Chassis using an external PC/Laptop" title="Controlling a PXI Chassis using an external PC/Laptop" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;Figure 8: External PC controlling a slave PXI chassis with a &lt;a href='http://www.geotestinc.com/Product.aspx?model=MXI-4+Series'&gt;MXI-4&lt;/a&gt; Remote Controller Kit&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200189\Master PXI chassis Remote Controller.JPG" alt="Master PXI chassis controlling a Slave PXI chassis" title="Master PXI chassis controlling a Slave PXI chassis" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;Figure 9: Master PXI chassis controlling a Slave PXI chassis&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Star Trigger Controller&lt;/h2&gt;The Star Trigger (ST) Controller, if required, will always reside in Slot 2. This slot has dedicated trigger lines that can be used to synchronize up to 13 Peripheral PXI instruments that reside in the 13 consecutive slots to the right of the controller. It does this by utilizing backplane traces that are of equal length, providing for a skew of less than 1nSec between slots. If a Star Trigger Controller is not required, any PXI or cPCI instrument can be used in this slot. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For example, in the Geotest GX73xx and GX70xx 20-slot chassis’s Slots 2 through 15 support the Star Trigger while slots 16 through 20 accommodate PXI or cPCI instruments without the Star Trigger.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;PXI Bus Segments&lt;/b&gt;&lt;/h2&gt;The PXI Standard allows for up to eight slots per 33MHz segment (one system slot and seven peripheral slots). Multiple segments can be connected together using a PCI-PCI bridge device. The PCI-PCI bridge presents one PCI load on each of the bus segments that it links together.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A typical 20-slot PXI chassis is divided to three bus segments (see Figure 8 below), each connected by a PCI-PCI Bridge device. The left bus segment supports the System Slot, the Star Trigger Slot and 5 more peripheral slots (Slot 3 to 7). The second segment supports slots 8 to 13. The third segment supports slots 14 to 20. &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;PXI Local Bus&lt;/h2&gt;The PXI local bus is a daisy-chained bus connecting peripheral slots in the same bus segment. Each local bus consists of 13 user-defined lines that can be used to pass analog or digital signals between two adjacent modules or provide a high-speed side-band digital communication path that does not affect the PXI bandwidth. Local bus signals can support voltages from 0 to 42V DC and up to 200 mA DC current for any local bus line. The local bus lines for the leftmost peripheral slot of a PXI back plane (slot 2) are used for the star trigger facilities. Figure 8 schematically shows a complete PXI system including the local buses.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200189\PXI Local Bus.JPG" alt="PXI Local Bus Segments" title="PXI Local Bus Segments" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;Figure 10: PXI Local Bus Segments&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;PXI Trigger Bus&lt;/h2&gt;The eight PXI bused trigger lines can be used in a variety of ways. For example, triggers can be used to synchronize the operation of several different PXI peripheral modules. In other applications, one module can control carefully timed sequences of operations performed by other modules in the system. Triggers may be passed from one module to another, allowing precisely timed responses to asynchronous external events that are being monitored or controlled. The number of triggers that a particular application requires varies with the complexity and number of events involved.&lt;br /&gt;The PXI trigger bus provides connectivity only within a single bus segment.which maintains the high performance characteristics of the trigger bus and allows the partitioning of instruments into logical groups as show in Figure 9. However, logical connections between bridge segment for the trigger bus are permitted, allowing communication between bridge segments. For example, all of Geotest’s PXI chassis can be configured programmatically to enable any of the trigger lines between adjacent segments as well as set direction.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200189\PXI Trigger Bus.JPG" alt="PXI Trigger Bus Segments" title="PXI Trigger Bus Segments" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;Figure 11: PXI Trigger Bus Segments&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;System Reference Clock&lt;/h2&gt;The PXI 10 MHz system clock (PXI_CLK10) is also part of the PXI standard. It resides on the PXI backplane and is distributed to all peripheral slots. This common reference clock can be used for synchronization of multiple instruments or as a time base reference for measurement instrumentation. In cases where a more accurate 10MHz reference is required, the PXI clock can be sourced via the Star Trigger module. If the presence of this Star Trigger clock is detected, circuitry on the PXI backplane will automatically disconnect the backplane reference and connect the 10 MHz system clock lines to the Star Trigger module’s 10 MHz reference. &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;PXI Chassis Power Supply specifications&lt;/h2&gt;The PXI Standard also specifies the minimum power supply requirements for each slot of the PXI chassis regardless of the number of slots or the instrument form factor (3U or 6U). The PXI chassis supplies +5VDC, +3.3VDC, +12VDC and -12VDC to each slot. Figure 12 below shows the minimum power requirements for each slot in the chassis.&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; All Geotest PXI chassis form factors meet and/or exceed these specifications.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200189\PXI Power Supply Specs.JPG" alt="PXI Chassis Minimum Power Supply Specifications" title="PXI Chassis Minimum Power Supply Specifications" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;div align='center'&gt;Figure 12: PXI Chassis Minimum Power Supply Specifications&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Summary&lt;/h2&gt;The PXI specification provides a very well defined and robust architecture for building high performance functional test systems. With over 1500 modules available today and over 60 PXI suppliers, the user can select from a broad range of products and vendors. The standard is over 10 years old which offers further proof to the longevity and acceptance of PXI as the primary card modular standard for the test and measurement industry. &lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=189</link><pubDate>3/30/2010</pubDate></item><item><title>Calling Geotest DLL functions from a C# Visual Studio .NET Project - Published on 3/22/2010</title><description>All Geotest driver packages such as GxPS, GxSW, etc. come with a Windows DLL that can be called from a user created Windows application. Each driver package also includes examples and interface files (.vb and .h) for Visual Basic and C/C++ projects. &lt;br /&gt;&lt;br /&gt;Before referencing such a DLL in a C# .NET project, a few steps must be taken to bridge the gap between the Unmanaged code in the DLL and the Managed code in the .NET project.&lt;br /&gt;&lt;br /&gt;This can be accomplished by using a concept called Marshalling where unmanaged data types are converted to managed .NET CLR (Common Language Runtime) data types. Each .NET datatype has a default unmanaged data type that the CLR will use to marshall data back and forth between managed code and a unmanaged function. As an example, the C# data type string has a default unamnaged data type of LPTSTR. Note that the default mashalled datatype can be changed in the C# code. The figure below illustrates the relationship between the .NET classes and the Geotest DLL. Generally, the application class will reference function prototypes that are defined in a marshalling class which actually links to the DLL functions.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200191\unmanagedSmall.JPG" alt="PXI .NET Driver" title="PXI .NET Driver" border='0' &gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Follow these steps to use the DLL from C#:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Create a new .cs file&lt;/b&gt; (GxFpga.cs in this example) to contain a class that will import and define all the functions and constants in a Geotest DLL. This class should be contained in a namespace that will later be referenced in your main program with a "using" statement.&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Use the DllImport attritube within your C# code, to specify the name of the DLL that needs to be loaded.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Use the static and extern C# keywords to delcare a function prototype and name for the imported DLL function along with the correct parameter datatypes. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Use the &lt;b&gt;ref &lt;/b&gt;keyword to delcare pointer parameters (data passed by reference) and the MarshalAs keyword to change the default marshalled datatype.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;In this example the &lt;b&gt;GxFpgaInitialize&lt;/b&gt;, &lt;b&gt;GxFpgaGetDriverSummary &lt;/b&gt;and &lt;b&gt;GxFpgaWriteMemory &lt;/b&gt;C functions along with some contants, will be imported into a C# .NET project:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;&lt;br /&gt;GxFpgaInitialize (SHORT nSlot, PSHORT pnHandle, PSHORT pnStatus);&lt;br /&gt;GxFpgaGetDriverSummary (PSTR pszSummary , SHORT nSummaryMaxLen, PDWORD pdwVersion, PSHORT pnStatus);&lt;br /&gt;GxFpgaWriteMemory(SHORT nHandle, DWORD dwOffset, PVOID pvData, DWORD dwSize, PSHORT pnStatus);&lt;br /&gt;&lt;br /&gt;#define GXFPGA_LOAD_TARGET_VOLATILE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;#define GXFPGA_LOAD_TARGET_EEPROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The following is an example of the above header file converted to c# declaration:&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;&lt;br /&gt;&lt;b&gt;//GxFpga.cs&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;namespace GxFpgaNamspace&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class GxFpga&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[DllImport("GxFpga.dll")]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static extern void GxFpgaInitialize(short nSlot, ref short pnHandle, ref short pnStatus);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[DllImport("GxFpga.dll")]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static extern void GxFpgaGetDriverSummary([MarshalAs(UnmanagedType.LPStr)] StringBuilder sSummary, short nMaxLength, ref long pdwVersion, ref short pnStatus);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[DllImport("GxFpga.dll")]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static extern void GxFpgaWriteMemory(short nHandle, UInt32 dwOffset, UInt32[] pvData, UInt32 dwSize, ref short pnStatus);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[DllImport("GxFpga.dll")]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static extern void GxFpgaReadMemory(short nHandle, UInt32 dwOffset, UInt32[] pvData, UInt32 dwSize, ref short pnStatus);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[DllImport("GxFpga.dll")]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static extern void GxFpgaReset(short nHandle, ref short pnStatus);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // … more functions and definitions here&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public const short GXFPGA_LOAD_TARGET_VOLATILE = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public const short GXFPGA_LOAD_TARGET_EEPROM = 1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// … more definitions here&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Note that in the example above,&amp;nbsp;&amp;nbsp;[MarshalAs(UnmanagedType.LPStr)]&amp;nbsp;&amp;nbsp;was used to override the default marshalled datatype of LPTSTR (unicode). The default marshalled dataytpe for the .NET data types short and long work correctly and do not need to be modified. The StringBuilder class should be used for passing strings by reference as shown in the &lt;b&gt;GxFpgaGetDriverSummary &lt;/b&gt; function prototype above.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Add the .cs file&lt;/b&gt; created above to your C# .NET Project.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200191\CSharpProject.JPG" alt="C# Project" title="C# Project" border='0' &gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Include the marshalling class&lt;/b&gt; created in step 1, within your main project code with a "using" statement. Then call the imported DLL functions.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;&lt;br /&gt;&lt;b&gt;//Program.cs&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;using System.Text;&lt;br /&gt;using GxFpgaNamspace;&lt;br /&gt;&lt;br /&gt;class GxFpgaExample&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;static void Main(string[] args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;short nHandle = 0, nStatus = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long dwVersion = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UInt32[] adwReadData;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UInt32[] adwWriteData;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UInt32 i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringBuilder sSummary = new StringBuilder(256);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;adwReadData = new UInt32[10];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;adwWriteData = new UInt32[10];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(i=0; i&lt;10; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;adwWriteData[i] = i+2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GxFpga.GxFpgaInitialize(35, ref nHandle, ref nStatus);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GxFpga.GxFpgaGetDriverSummary(sSummary, 256, ref dwVersion, ref nStatus);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GxFpga.GxFpgaReset(nHandle, ref nStatus);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GxFpga.GxFpgaWriteMemory(nHandle, 0, adwWriteData, 4*10, ref nStatus);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GxFpga.GxFpgaReadMemory(nHandle, 0, adwReadData, 4*10, ref nStatus);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Note that the ref keyword is also used when passing non-string parameters by reference. The StringBuilder class is used so that the buffer can be allocated before passing it to the &lt;b&gt;GxFpgaGetDriverSummary&lt;/b&gt;. String would not work in this case because it is immutable.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=191</link><pubDate>3/22/2010</pubDate></item><item><title>ATEasy Forms Z-Order and Tab Order - Published on 3/18/2010</title><description>ATEasy forms consist of controls such as Buttons, Text Boxes, and Charts (&lt;b&gt;AForm.Controls &lt;/b&gt;property).&amp;nbsp;&amp;nbsp;Each individual control is a distinct object created at design time (also at run-time)&amp;nbsp;&amp;nbsp;within the form editor. This article discusses the order of drawing of the control on the form and TAB key sequence when navigating between the controls using the Tab key.&lt;br /&gt;&lt;br /&gt;The tab order is the order in which focus moves from one control to another by pressing the TAB key.&amp;nbsp;&amp;nbsp;The order in which these controls are placed on the form determines their Tab Order.&amp;nbsp;&amp;nbsp;By default, the first control placed on a form will have tab order #0, the second control that &lt;b&gt;accepts keyboard input&lt;/b&gt; will have tab order #1 and so on. &lt;br /&gt;&lt;br /&gt;The Z-Order is the order in which the controls are stacked on a form and are drawn by ATEasy when the area on the form that they occupy require redraw.&amp;nbsp;&amp;nbsp;A control on the bottom of the Z-Order will be drawn on the form first and a control on the top of the Z-Order will be drawn on the form last.&amp;nbsp;&amp;nbsp;If two controls occupy the same space on the form, the control at the top of the Z-Order will overlap the control at the bottom of the Z-Order, partially or completely hiding it.&lt;br /&gt;&lt;br /&gt;When you set the Tab-Order of your controls, you are also setting the order that the controls will be placed on the form.&amp;nbsp;&amp;nbsp;The first control in the Tab-Order is placed at the bottom of the Z-Order.&amp;nbsp;&amp;nbsp;Subsequent controls in the Tab-Order are stacked on top of the first control, obscuring it if they overlap.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.geotestinc.com/images/support/Q200184\figure1.JPG" alt="Form in Tab Order Mode" title="Form in Tab Order Mode" border='0' &gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;Figure 1 - The button with Tab-Order #0 is at the bottom of the Z-Order, so other buttons overlap it.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Making changes to the order of controls:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;At design time ATEasy allows you to change the order of controls using the &lt;b&gt;Edit&lt;/b&gt;, &lt;b&gt;Arrange&lt;/b&gt;, &lt;b&gt;Tab Order &lt;/b&gt;command or by pressing on the Tab-Order button from the Form Design Toolbar as shown in Figure 1. &lt;br /&gt;&lt;br /&gt;At run time you can change the order of controls in the AForm.Controls using the &lt;b&gt;AControl.ZOrder&lt;/b&gt; property. &lt;br /&gt;&lt;br /&gt;For example, the command:&lt;br /&gt; &lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;tbMyControl.ZOrder=aWindowZOrderTop&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;will bring the control named &lt;b&gt;tbMyControl &lt;/b&gt;to the top of the ZOrder and the top of the layers of controls.&amp;nbsp;&amp;nbsp;Conversely, the command: &lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;tbMyControl.ZOrder=aWindowZOrderBottom&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;will place the control at the bottom of the layer.&lt;br /&gt;&lt;br /&gt;The following code was added to the &lt;b&gt;AForm.OnLoad&lt;/b&gt; event for the form from Figure 1, resulting in btn1 now overlapping button2: &lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;btn1.ZOrder=aWindowZOrderTop&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img src="http://www.geotestinc.com/images/support/Q200184\figure2.JPG" alt="Form after Changing the Z-Order" title="Form after Changing the Z-Order" border='0' &gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;Figure 2 - After running the code, btn1 now overlaps btn2 but retains it’s position in Tab-Order&lt;/b&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=184</link><pubDate>3/18/2010</pubDate></item><item><title>National Instruments BIOS Compatibility software and MXI-Express - Published on 3/18/2010</title><description>When using the National Instruments (NI) MXI Express interface (PCIe or ExpressCard) with a PXI or PXIe chassis, you may encounter problems with recognizing PXI/PXIe devices installed in the chassis (code 12 or 31 in Device Manager), with your computer locking up at boot, or with Windows crashes (blue screen). This is caused by the controller's (either a Desktop or Laptop) inability to enumerate these devices and allocate the appropriate resources through the MXI Express interface. &lt;br /&gt;&lt;br /&gt;The following figure shows an example of the code 12 error in Device Manager.&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q2000132-Code12.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;Installing the NI BIOS Compatibility software and configuring your PCIe MXI Express card for compatibility mode, will force the BIOS not to allocate resources upon boot up. Resource allocation is done strictly through software.&lt;br /&gt;&lt;br /&gt;Verify that your MXI Express PCIe board is supported in BIOS compatibility mode. Note that only the newer board revisions are capable of this. You can find a list of the supported part and revision values at &lt;a href='http://digital.ni.com/public.nsf/allkb/87154113AD441BE6862575FC0077D854'&gt;Supported Boards&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To resolve the issue, follow these steps:&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Download and install the NI BIOS Compatibility software for Windows XP/Vista available at &lt;a href='http://joule.ni.com/nidu/cds/view/p/id/1422/lang/en'&gt;NI Compatibility Download&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Once the software has been installed, shut down the computer and chassis.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Physically set the MXI PCIe card to compatibilty mode by setting the correct jumper.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;You can find instructions on how to switch your MXI PCIe card to compatibility mode at &lt;a href='http://ftp.ni.com/support/softlib/PXI/MXIe%20Compatibility%20Software/readme.html'&gt;Switching MXIe Modes&lt;/a&gt;&lt;br /&gt;Note that the laptop ExpressCard does not have any physical jumpers. Instead, it is switched through software control as per the instructions in the above link.&lt;br /&gt;&lt;/blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Start the chassis first, and then the computer. Any PXI/PXIe devices should now be found by Windows without errors.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=185</link><pubDate>3/18/2010</pubDate></item><item><title>Real-Time Digital IO Compare Example - Published on 3/18/2010</title><description>In this tutorial, we will be running a PXI Digital IO GX5292 board in real-time compare mode through DIOEasy and examining some of its functionality.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Create the pattern we will use in DIOEasy as follows:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1. Open DIOEasy.&lt;br /&gt;&lt;br /&gt;2. Create a new file with the following settings:&lt;br /&gt;&lt;blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;File Type: DIO (DIOEasy File Menu)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Board Type: GX5290 (DIOEasy File Properties - General tab)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Num. Of Boards: 1 (DIOEasy File Properties - General tab)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Num. Of Steps: 1024 (DIOEasy File Properties - General tab)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Operating Mode: Real Time Compare (DIOEasy File Properties - General tab)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Clock Delay (ns): 0.00 (DIOEasy File Properties - Setup tab)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Strobe Delay (ns): 0.00 (DIOEasy File Properties - Setup tab)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;3. Set Channels 0 through 15 to output&lt;br /&gt;&lt;blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Select Channel 0 through Channel 15&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;From the menu bar, select Fill -&gt; Direction…&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Click Output&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;4. Fill Channels 0 through 15 with a walking one pattern&lt;br /&gt;&lt;blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;While Channels 0 through 15 are still highlighted, select Fill -&gt; Shift / Rotate…&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;In the dialog that pops up, change the Type from ‘Shift’ to ‘Rotate’&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Click Overwrite!&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;5. Create the expected pattern for Channel 16 through 31&lt;br /&gt;&lt;blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Select Channel 16 through 31.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;From the menu bar, select Fill -&gt; Shift / Rotate…&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;In the dialog that pops up, change the Type from ‘Shift’ to ‘Rotate’&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Click Overwrite!&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;6. Add HALT command to the end of the pattern&lt;br /&gt;&lt;blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Click on the last step of your pattern (step 1023)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Hit Alt+Enter to open the command properties window.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Change the command for this step from NOP to HALT&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;7. Insert error in Channel 0&lt;br /&gt;&lt;blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Click Channel 0 to highlight the entire channel&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;From the menu bar, select Fill -&gt; Value…&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Select to fill the channel with all 0s and click Overwrite!&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;8. Save this file as “&lt;a href='http://www.geotestinc.com/images/support/Q200186\RTCError.zip' target='_blank'&gt;RTCError.dio&lt;/a&gt;”&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200186\image1.JPG" alt="Digital IO Pattern using DIOEasy" title="Digital IO Pattern using DIOEasy" border='0' &gt;&lt;br /&gt;&lt;br /&gt;The image above depicts the DIO file created.&amp;nbsp;&amp;nbsp;When executed, it will output a walking one pattern on J1 channels 0 through 15 while reading J1 channels 16 through 31 as input.&amp;nbsp;&amp;nbsp;Externally, the first sixteen channels will need to be wired to the second sixteen channels (channel 0 wired to channel 16, channel 1 wired to channel 17, and so on) to achieve a loopback.&amp;nbsp;&amp;nbsp;We are expecting to see the same walking one pattern on channels 16 through 31 as we output on channels 0 through 15.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Since we want to observe some errors, we have intentionally set all steps in channel 0 to LOW.&amp;nbsp;&amp;nbsp;This will generate 64 errors (1 error every 16 steps).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Run the Pattern using GTDIO Panel:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1. Launch the GTDIO Panel from DIOEasy using the shortcut (F10).&lt;br /&gt;&lt;br /&gt;2. Initialize the driver for the board.&lt;br /&gt;&lt;br /&gt;3. Load and run the RTCError.dio pattern&lt;br /&gt;&lt;blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Change the vector from 'File' to 'Window' and click 'Execute'&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;After the pattern is loaded to the DIO, click 'Arm!', then click 'Trig!'&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;4. View the resultant pattern.&lt;br /&gt;&lt;blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Change the vector from 'Load' to 'Show' and click 'Execute'&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;In the dialog box that pops up, select the option 'Load into New Window'&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;&lt;br /&gt;A result pattern will be loaded into DIOEasy.&amp;nbsp;&amp;nbsp;Whenever discrepancies are found between the expected results and the actual results, the column containing the error will be shaded as shown below:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200186\image2.JPG" alt="Digital IO Pattern Compare using DIOEasy" title="Digital IO Pattern Compare using DIOEasy" border='0' &gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Masking / Unmasking:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;If there is a channel or number of steps that you do not want to check for errors, the real time compare input mask can be used to enable/disable the compare engine.&lt;br /&gt;&lt;br /&gt;1. Mask steps 0 through 15&lt;br /&gt;&lt;blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Highlight steps 0 through 15.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;From the menu bar, select Fill -&gt; Real Time Compare Input Mask&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Click Mask On&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;2. Run the Pattern using the GTDIO Panel&lt;br /&gt;&lt;br /&gt;In the result pattern below, you can see that the error that was masked does not appear shaded because it was not analyzed.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200186\image4.JPG" alt="Digital IO Pattern Compare using DIOEasy" title="Digital IO Pattern Compare using DIOEasy" border='0' &gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Real Time Compare Error Logging Modes&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When your DIO is operating in Real Time Compare mode, you can set stop conditions.&amp;nbsp;&amp;nbsp;In DIOEasy, hit CTRL+R or use the menu bar to open the File-&gt; Properties dialog window.&amp;nbsp;&amp;nbsp;Click on the Real Time Compare tab.&amp;nbsp;&amp;nbsp;By default, it is set up to not stop for any special condition.&amp;nbsp;&amp;nbsp;By changing the 'Failures count:' to 10 and clicking Set, we indicate that the pattern should stop running if ten errors are encountered during execution.&amp;nbsp;&amp;nbsp;You can use this properties window to set the DIO to stop execution if a certain data value is encountered or when the program counter reaches a specified value.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200186\image3.JPG" alt="Digital IO Real Time Compare Settings" title="Digital IO Real Time Compare Settings" border='0' &gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=186</link><pubDate>3/18/2010</pubDate></item><item><title>How to modify the ATEasy Log output - Published on 2/8/2010</title><description>This article covers the following Log file subjects:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;How to set the Log format to HTML or Text&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;How to modify the ATEasy Log strings&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;How to change the TestLog Company Logo&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;How to change the position of the TestLog Company Logo&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;How to add additional information to the TestLog&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Note:&lt;br /&gt;An ATEasy application (Q200188.zip) that demonstrates how to adjust the various TestLog settings, shown here, can be downloaded by clicking on this link &lt;a href='http://www.geotestinc.com/images/support/Q200188.zip' target='_blank'&gt;Q200188.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Setting the ATEasy Log Format&lt;/h2&gt;The ATEasy Log format can be set to either HTML or Text as follows:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;In the ATEasy Menu go to the Tools..Options. In the Log tab check the "Use the HTML format as default" box to set the output to HTML. If the box is not checked the output will be Text mode.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;In the Test Executive similar example exist in the Options, Customize or Users forms.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The format can also be changed at runtime by setting the PlainText property of the internal variable &lt;b&gt;Log&lt;/b&gt;. The PlainText property can be used to set a value that determines whether the log file will be displayed and opened as either text or HTML. It can also be used to check if the log file is set to HTML or Text mode. See ALog control, PlainText and "Log Window, Using the Log, TestLog, and DebugLog Internal Variables" in ATEasy Help for more information:&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;b&gt;Example&lt;/b&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;!Adding the following statement to the System.OnInitSystem() event &lt;br /&gt;!sets the log format to plain text&lt;br /&gt;Log.PlainText=True&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;How to modify ATEasy Log strings&lt;/h2&gt;The following example shows how to remove the Signature line from the ATEasy TestLog output. Similiar approaches can be used to modify/remove other log string components. Note: The code shown in this example is given in the ModifyTestLogFooter() System procedure in the accompanying ATEasy application.&lt;br /&gt;&lt;br /&gt;The following example is written around three ATEasy procedures&lt;br /&gt;1) GetLogString()&lt;br /&gt;2) Replace()&lt;br /&gt;3) SetLogString()&lt;br /&gt;&lt;br /&gt;1) GetLogString(): While ATEasy is executing Event procedures GetLogString() retrieves the current Log string. The contents of the Log string for the different Event procedures are shown below. See ATEasy Help for more information.&lt;table width='100%' bgcolor=#EBEBEB cellpadding=1 cellspacing=1 border=0 class='reg12'&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;Module Event&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;GetLogString() returns&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;OnInitSystem&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;The application top header includes the company logo &lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;OnInitProgram / Program.OnInit&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;The serial number and the start time.&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;OnInitTask&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt; The task header.&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;OnEndTest&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;The test log line (MIN/MAX, RESULT, etc.), including the test table header if required.&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;OnEndProgram / Program.OnEnd&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;The stopped time, elapsed time, UUT status, Signature&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;2) Replace(): Replace() returns a string in which a specified substring has been replaced with another substring. See ATEasy Help for more information.&lt;br /&gt;&lt;br /&gt;3) SetLogString(): This procedure is used to set the next log string used by ATEasy. Setting the log string inside a test will cause ATEasy to output the string after the OnEndTest event is called. See ATEasy Help for more information.&lt;br /&gt;&lt;br /&gt;As you can see from Item1 above, to modify the Signature line the following code will need to be added to the System.OnEndProgram() event or if the Test Excutive driver is being used it will need to be added to the beginning of the TestExec.OnEndProgram() event:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example&lt;/b&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;s:string! String used to store the Log string&lt;br /&gt;sSub:string! String used to store the line to be removed &lt;br /&gt;&lt;br /&gt;s=GetLogString()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Get the current log string&lt;br /&gt;if Log.PlainText=TRUE then&amp;nbsp;&amp;nbsp;! Check to see which log format is being used&lt;br /&gt;&amp;nbsp;&amp;nbsp; !If the log format is Plain Text then remove this line&lt;br /&gt;&amp;nbsp;&amp;nbsp; sSub="Signature&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: ...................."&lt;br /&gt;else&lt;br /&gt;&amp;nbsp;&amp;nbsp; !If the log format is HTML then remove this line&lt;br /&gt;&amp;nbsp;&amp;nbsp; sSub="&lt;TR&gt;&lt;TD width=15% align=left&gt;Signature&lt;TD width=85% "&amp;nbsp;&amp;nbsp;\&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "align=left&gt;: __________________________________"&lt;br /&gt;endif&lt;br /&gt;s=Replace(s, sSub,"",,,True)! Remove the string sSub from the original log string &lt;br /&gt;SetLogString(s)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! Set the new log string&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;How to change the TestLog Company Logo&lt;/h2&gt;Note: See ChangeCompanyLogo() System procedure in the accompanying ATEasy application&lt;br /&gt;&lt;br /&gt;There are two ways of replacing the company logo:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The quick solution is to save your company logo to the same size as the built in image (103x44) and copy it to C:\Program Files\ATEasy\CompanyLogo.gif.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Alternatively, you can change the default Company Logo file location. To do this you will need to change the HTML header that is output to the test log after OnInitSystem is called. You can do that by calling GetLogString(), modifying the return string with your own file location and then calling SetLogString().&lt;br /&gt;To view the original string you can right click on your log window and select View Source. Then look for CompanyLogo.gif, you will need to modify the table around it.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;br /&gt;Notes:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;1) If your company logo file is larger than 103x44 you will have to change the Right and Left Width values to adjust the location of the logo&lt;br /&gt;2) If you are using the Test Exec you will need to use the following command to set the string (instead of Get/SetLogString):&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;TestExec Log Set InitialString()&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Example&lt;/b&gt;: &lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:string&amp;nbsp;&amp;nbsp;! String used to store the Log string&lt;br /&gt;sSub&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :string&amp;nbsp;&amp;nbsp;! String used to store the line to be removed &lt;br /&gt;sFileLoc&amp;nbsp;&amp;nbsp;:string&amp;nbsp;&amp;nbsp;! String used to store new Logo image file location&lt;br /&gt;&lt;br /&gt;s=GetLogString()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Get the current log string&lt;br /&gt;sSub="C:\\Program Files\\ATEasy\\CompanyLogo.gif" !This is the default Logo image file location&lt;br /&gt;s=Replace(s, sSub,sFileLoc,,,True)&amp;nbsp;&amp;nbsp; ! Add in the new Logo location &lt;br /&gt;SetLogString(s)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! Set the new log string&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;How to change the position of the TestLog Company Logo&lt;/h2&gt;Note: See ChangeCompanyLogo() System procedure in the accompanying ATEasy application.&lt;br /&gt;As before you will need to change the HTML header that is output to the test log after OnInitSystem is called. You can do that by calling GetLogString(), modifying the return string with your new settings and then calling SetLogString(). To view the original string you can right click on your log window and select View Source. Then look for your company logo image filename, you will need to modify the table arround it.&lt;br /&gt;The logo can be shifted horizontally adjusting the LEFT and RIGHT Width settings and by using the HSPACE attribute.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example&lt;/b&gt;: &lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :string&amp;nbsp;&amp;nbsp;! String used to store the Log string&lt;br /&gt;sSub&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:string&amp;nbsp;&amp;nbsp;! String used to store the line to be removed &lt;br /&gt;sNewStr:string&amp;nbsp;&amp;nbsp;! String used to store new Logo position&lt;br /&gt;&lt;br /&gt;s=GetLogString()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Get the current log string&lt;br /&gt;sSub="&lt;TD Width=65% ALIGN=LEFT&gt;: &lt;TD ALIGN=RIGHT WIDTH=20% ROWSPAN=4&gt; " \ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;IMG SRC=\"File:C:\\Program Files\\ATEasy\\CompanyLogo.gif\"&gt;"&lt;br /&gt;sNewStr="&lt;TD Width=20%ALIGN=LEFT&gt;:&lt;TD ALIGN=RIGHT WIDTH=40%ROWSPAN=4&gt;"&amp;nbsp;&amp;nbsp;\&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;IMG SRC=\"File:C:\\Program Files\\ATEasy\\CompanyLogo.gif\"HSPACE=100&gt;"&lt;br /&gt;s=Replace(s, sSub,sNewStr,,,True)! Add in the new Logo position in the Test Log&lt;br /&gt;SetLogString(s)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! Set the new log string&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;How to insert additional information to the TestLog&lt;/h2&gt;Additional information can be added to the TestLog by using the Append() procedure. This statement appends a message to the log string that ATEasy generates. For example, running an Append statement from a test will print its message after test results instead of ahead of them. See ATEasy Help for more information. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example&lt;/b&gt;:&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;DMM Measure (TestResult)&lt;br /&gt;if (TestResult&lt;Test.min)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Append "Result too low - check circuit X"&lt;br /&gt;elseif (TestResult&gt;Test.max)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Append "Result too high - check circuit Y"&lt;br /&gt;endif&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=188</link><pubDate>2/8/2010</pubDate></item><item><title>Using an Alias to address PXI instruments - Published on 2/4/2010</title><description>When writing a test program, often you must &lt;b&gt;"hard code"&lt;/b&gt; the configuration of the test system into your application; for example, the PXI slot numbers of the instruments.&amp;nbsp;&amp;nbsp;If a future system upgrade necessitates reordering the instrument slot numbers, you would need to modify the test program code to accommodate those changes - often requiring recertification of the test program before it can be released for use.&lt;br /&gt;&lt;br /&gt;A more flexible approach, and one that avoids code recertification, is to use &lt;b&gt;PXI/PCI Explorer&lt;/b&gt; to assign a text &lt;b&gt;Alias &lt;/b&gt;in place of the instrument slot number, and reference the alias in your system configuration code.&amp;nbsp;&amp;nbsp;The alias can remain the same regardless of which slot the instrument is installed in, so reordering instrument slots will not affect the test program code.&amp;nbsp;&amp;nbsp;The following example illustrates this concept.&lt;br /&gt;&lt;br /&gt;Assume you have two &lt;b&gt;GX5282 Dynamic Digital I/O&lt;/b&gt; modules installed in slots 15 and 17 of your &lt;b&gt;GX7000A&lt;/b&gt; system.&amp;nbsp;&amp;nbsp;And assume that the GX5282 installed in slot 15 is going to be used for providing 32 channels of digital stimulus patterns to the UUT, and that the GX5282 installed in slot 17 will be used to capture 32 channels of digital response patterns from the UUT.&amp;nbsp;&amp;nbsp;Using ATEasy to write your test program, you could initialize these instrument using the &lt;b&gt;Driver Shortcut &lt;/b&gt;slot settings (figure 1), or by directly calling the initialization driver procedure, as shown below:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;nMaster1:&amp;nbsp;&amp;nbsp;Short=1&lt;br /&gt;nMaster2:&amp;nbsp;&amp;nbsp;Short=2&lt;br /&gt;nSlot1:&amp;nbsp;&amp;nbsp;Short=15&lt;br /&gt;nSlot2:&amp;nbsp;&amp;nbsp;Short=17&lt;br /&gt;&lt;br /&gt;InitializeMaster(nMaster1,nSlot)&lt;br /&gt;InitializeMaster(nMaster2,nSlot)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200187\Driver Shortcut.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 1:&amp;nbsp;&amp;nbsp;Setting the GX5282 Driver Shortcut slot number parameter&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In both cases, if later the instrument slot positions were changed, the test program would need to be modified, recompiled and possibly recertified before the new program can be released.&lt;br /&gt;&lt;br /&gt;However, if each instrument were assigned an alias text name, and the text name were used to initialize the instrument, instead of it's slot position, then the test program operation is independent of the instrument slot positions.&amp;nbsp;&amp;nbsp;To assign an alias for these two instruments, open the &lt;b&gt;PXI/PCI Explorer&lt;/b&gt; application that is installed with any &lt;b&gt;Geotest &lt;/b&gt;product.&amp;nbsp;&amp;nbsp;Expand the slot parameter for the GX5282 installed in slots 15 and 17.&amp;nbsp;&amp;nbsp;Assign the alias for the GX5282 in slot 15 to &lt;b&gt;"Stimulus"&lt;/b&gt;, and the alias for the GX5282 in slot 17 to &lt;b&gt;"Response"&lt;/b&gt; (figure 2).&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200187\PXI Explorer Alias.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 2:&amp;nbsp;&amp;nbsp;Assigning the "Stimulus" and "Response" alias to the GX5282's&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;To initialize the instrument based on its assigned alias, use the HW function &lt;b&gt;Long HwPciGetAliasChassisSlot(String sAlias)&lt;/b&gt;.&amp;nbsp;&amp;nbsp;The &lt;b&gt;HW Device Driver&lt;/b&gt; installed with Geotest products provides low-level access and information about resources installed in a test system.&amp;nbsp;&amp;nbsp;Insert the &lt;b&gt;HW.DRV&lt;/b&gt; driver into your ATEasy System.&amp;nbsp;&amp;nbsp;The HW.DRV &lt;b&gt;HwPciGetAliasChassisSlot()&lt;/b&gt; function returns the slot position of the instrument matching the text string contained in the &lt;b&gt;sAlias &lt;/b&gt;parameter, which can be used to initialize the instrument.&amp;nbsp;&amp;nbsp;Additional information about the HW device driver can be found &lt;b&gt;here&lt;/b&gt;.&amp;nbsp;&amp;nbsp;The ATEasy code to initialize the GX5282's using their alias is:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;gxStimulus:&amp;nbsp;&amp;nbsp;Long&lt;br /&gt;gxResponse:&amp;nbsp;&amp;nbsp;Long&lt;br /&gt;&lt;br /&gt;HW Initialize()&lt;br /&gt;&lt;br /&gt;gxStimulus=HW Pci Get AliasLegacySlot("Stimulus")&lt;br /&gt;DIO Initialize Master(1,gxStimulus)&lt;br /&gt;&lt;br /&gt;gxResponse=HW Pci Get AliasLegacySlot("Response")&lt;br /&gt;DIO1 Initialize Master(2,gxResponse)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;In summary, using an alias in place of an instrument slot number provides many benefits, the most important being decoupling the instrument slot position from your test code and providing configuration independent operation of your test program.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=187</link><pubDate>2/4/2010</pubDate></item><item><title>Scanning a PXI system to learn about system resources. - Published on 2/4/2010</title><description>When writing test programs, the test engineer is often faced with the task of obtaining information about the instruments installed in a chassis.&amp;nbsp;&amp;nbsp;This information may be essential to the ATE program, or to determine how to establish a communication link between the test program and the test resources.&amp;nbsp;&amp;nbsp;The HW instrument driver can be used to query a PCI-type instrument (PCI, cPCI, PXI, PCIe, or PXIe) and return information about those resources.&amp;nbsp;&amp;nbsp;This article focuses on the how to use the &lt;b&gt;HW &lt;/b&gt;device driver for querying the PCI system resources.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;HW &lt;/b&gt;driver is a &lt;b&gt;Device Driver &lt;/b&gt;that is installed with any Geotest product (PXI Instrument, PCI Instruments, ATEasy, DIOEasy, WAVEasy…).&amp;nbsp;&amp;nbsp;There are many procedures within the &lt;b&gt;HW &lt;/b&gt;driver that are useful for determining the system configuration.&amp;nbsp;&amp;nbsp;The HW driver is installed in your machine under &lt;b&gt;Program Files\Geotest\HW&lt;/b&gt;. This article will focus on just a couple of them, for more information see the HW folder,&lt;b&gt; HW.h&lt;/b&gt; for function definition, and the &lt;b&gt;HW.drv&lt;/b&gt; ATEasy driver:&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Initialize()&lt;/h2&gt;The &lt;b&gt;Initialize&lt;/b&gt;() procedure Initializes the HW driver and must be called prior to calling any of the other procedures in the HW library.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;PciGetSlotNumbers([Val] Word wVendorId, [Val] Word wDeviceId, Var Short panSlotNumbers[], Var Word pwDevicesFound)&lt;/h2&gt;The &lt;b&gt;PciGetSlotNumbers&lt;/b&gt;() procedure will return an array of slot number(s) for all devices matching the specified Vendor ID and Device ID.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;PciGetSlotDevice(Val Long lSlot, Var structHWPCIDEVICE pstPciDev)&lt;/h2&gt;The &lt;b&gt;PciGetSlotDevice&lt;/b&gt;() procedure returns device information for the instrument installed in the specified slot.&amp;nbsp;&amp;nbsp;The device information is contained in the structure &lt;b&gt;structHWPCIDEVICE&lt;/b&gt;.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;The structure of the &lt;b&gt;structHWPCIDEVICE&lt;/b&gt; data type is shown below:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;&lt;br /&gt;structHWPCIDEVICE: Struct Public&lt;br /&gt;{&lt;br /&gt;&lt;blockquote&gt;	dwVendorId: DWord&lt;br /&gt;	dwDeviceId: DWord&lt;br /&gt;	dwBus: DWord&lt;br /&gt;	stPciSn: structPciSlotNumber&amp;nbsp;&amp;nbsp; !PCI/PXI slot number&amp;nbsp;&amp;nbsp;\&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(5 low bit: device #, 3 bits: function #, \ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8 bits: Lgacy slot, 16 chassis/slot : 0x203)&lt;br /&gt;	stPciCfg: strictPciCommonConfig&lt;br /&gt;	aResDesc: structCmPartialResourceDescriptor[8]&lt;br /&gt;	aMemDesc: structHwMemoryDesc[8]&lt;br /&gt;	szId: Char[256]&lt;br /&gt;&lt;/blockquote&gt;}&lt;br /&gt;&lt;br /&gt;structPciSlotNumber: Struct Public&lt;br /&gt;{&lt;br /&gt;&lt;blockquote&gt;	dwAsUlong: DWord&lt;/blockquote&gt;}&lt;br /&gt;&lt;br /&gt;structPciCommonConfig: Struct Public&lt;br /&gt;{&lt;br /&gt;&lt;blockquote&gt;	wVendorId: Word&lt;br /&gt;	wDeviceId: Word&lt;br /&gt;	wCommand: Word&lt;br /&gt;	wStatus: Word&lt;br /&gt;	ucRevisionId: Byte&lt;br /&gt;	ucProgIf: Byte&lt;br /&gt;	ucSubClass: Byte&lt;br /&gt;	ucBaseClass: Byte&lt;br /&gt;	ucCacheLineSize: Byte&lt;br /&gt;	ucLatencyTimer: Byte&lt;br /&gt;	ucHeaderType: Byte&lt;br /&gt;	ucBIST: Byte&lt;br /&gt;	stType0: structPciHeaderType0&lt;br /&gt;	dwDeviceSpecific: Byte[192]&lt;br /&gt;&lt;/blockquote&gt;}&lt;br /&gt;&lt;br /&gt;structPciHeaderType0: Struct Public&lt;br /&gt;{&lt;br /&gt;&lt;blockquote&gt;	adwBaseAddresses: DWord[6] &lt;br /&gt;	dwSubSystem: DWord&lt;br /&gt;	dwSubVendorID: DWord&lt;br /&gt;	dwROMBaseAddress: DWord&lt;br /&gt;	adwReserved2: DWord[2]&lt;br /&gt;	ucInterruptLine: Byte&lt;br /&gt;	ucInterruptPin: Byte&lt;br /&gt;	ucMinimumGrant: Byte&lt;br /&gt;	ucMaxinumLatency: Byte&lt;br /&gt;&lt;/blockquote&gt;}&lt;br /&gt;&lt;br /&gt;structPxiChassisInfo: Struct Public&lt;br /&gt;{&lt;blockquote&gt;	dwSize: Long&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !Fill with sizeof (PXIChassisInfo)&lt;br /&gt;	apcidevBridges: structHWPCIDEVICE[4]	! Bridges in the chassis&lt;br /&gt;	wChassisModel: Word&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Chassis model # : i.e. 7010&lt;br /&gt;	wChassisRevision: Word&lt;br /&gt;	dwChassisSerial: DWord&lt;br /&gt;	acUserDefinedData: Char[64]&lt;br /&gt;	wNumberOfSlots: Word&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !Total number of slots in the chassis&lt;/blockquote&gt;}&lt;br /&gt;&lt;br /&gt;structCmPartialResourceDescriptor: Struct Public&lt;br /&gt;{&lt;blockquote&gt;	ucType: Byte&lt;br /&gt;	ucShareDisposition: Byte&lt;br /&gt;	wFlags: Word&lt;br /&gt;	Address1: DWord&lt;br /&gt;	Address2: DWord&lt;br /&gt;	Address3: DWord&lt;/blockquote&gt;}&lt;br /&gt;&lt;br /&gt;structHwMemoryDesc: Struct Public&lt;br /&gt;{&lt;br /&gt;&lt;blockquote&gt;	dwPhAddrLow: DWord&lt;br /&gt;	lPhAddrHigh: Long&lt;br /&gt;	dwLength: DWord&lt;br /&gt;	pvVirtualAddress: DWord&lt;br /&gt;&lt;/blockquote&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;With these three procedures, you can perform many useful queries that will return information about the hardware residing on your PCI bus, although we are most interested in just the test instreuments.&amp;nbsp;&amp;nbsp;If, for example, you wanted to know how many GX5290 instruments were installed in a PXI chassis, their slot numbers, and the firmware revision of those instruments, you could use the following code:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;wVendorId: Word =0x16E2 ! Geotest Vendor ID&lt;br /&gt;wDeviceId:Word=0x5290 ! GX5290 Device ID&lt;br /&gt;anSlotNumbers: Short[32] ! Array of slot numbers found&lt;br /&gt;wDevicesFound:Word ! Number of slots matching the Vendor and Device ID’s&lt;br /&gt;stPciDev: structHWPCIDEVICE &lt;br /&gt;sDeviceInfo: String&lt;br /&gt;i: Long: &lt;br /&gt;&lt;br /&gt;Initialize()&lt;br /&gt;PciGetSlotNumbers(wVendorId, wDeviceId, anSlotNumbers, wDevicesFound)&lt;br /&gt;If wDevicesFound&lt;&gt;0&lt;br /&gt;&amp;nbsp;&amp;nbsp;For i=0 to wDevicesFound-1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PciGetSlotDevice(panSlotNumbers[i], stPciDev)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sDeviceInfo= stPciDev.szId&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Print "Slot "+Format(anSlotNumbers[i],"00")+" Firmware: "+Mid(sDeviceInfo, \ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Pos("SUBSYS_",sDeviceInfo)+7,4)&lt;br /&gt;&amp;nbsp;&amp;nbsp;Next&lt;br /&gt;EndIf&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Once the slot number for an instrument is obtained, it would be a simple matter to initialize the instrument using the slot number(s).&amp;nbsp;&amp;nbsp;In the code below, each GX5290 instrument found in the system scan performed above, is initialized as a DIO Master.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;nMasterHandle: Short =0&lt;br /&gt;nBrdNum: Short &lt;br /&gt;wSlot: Word &lt;br /&gt;nDensity:Short &lt;br /&gt;nBanks: Short &lt;br /&gt;anHandle:Short[1] &lt;br /&gt;nStatus:Short &lt;br /&gt;&lt;br /&gt;If wDevicesFound&lt;&gt;0&lt;br /&gt;&amp;nbsp;&amp;nbsp;Redim anHandle[wDevicesFound]&lt;br /&gt;&amp;nbsp;&amp;nbsp;For nBrdNum=0 to wDevicesFound-1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wSlot=anSlotNumbers[nBrdNum]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DioSetupInitialization(nMasterHandle, nBrdNum, wSlot, nDensity, \ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nBanks, anHandle[nBrdNum], nStatus)&lt;br /&gt;&amp;nbsp;&amp;nbsp;Next&lt;br /&gt;EndIf&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;For additional information, review the HW programming example installed with ATEasy (HW.PRJ).&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=182</link><pubDate>2/4/2010</pubDate></item><item><title>White Paper: Using PXI Digital Instrumentation for Video Test Applications - Published on 2/1/2010</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;The use of video imaging and high performance displays has become common-place on virtually all Mil-Aero airframes and weapons systems.&lt;br /&gt;This in turn, has placed new demands on the test systems and instrumentation that are used to test and support these complex systems. In the past, test systems have relied upon “box” video generators to evaluate monitors and displays that might be part of a flight deck’s avionics package. However, with the advent of sophisticated imaging sensors and processors and high-definition video, more advanced techniques and instrumentation are needed. &lt;br /&gt;Today’s test techniques are incorporating high performance digital instrumentation in conjunction with software and specialized “video adaptation” hardware to support the generation and analysis of high definition video signals.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2008\Using_PXI_Digital_Instrumentation_for_Video_Test_Applications.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=156</link><pubDate>2/1/2010</pubDate></item><item><title>How to Repeat a test multiple times - Published on 2/1/2010</title><description>In &lt;b&gt;ATEasy&lt;/b&gt;, there are many ways to display the results of tests.&amp;nbsp;&amp;nbsp;The following example demonstrates how to measure and display the results of similar measurements in a single test loop rather than several individual tests. For example, we already have a test that calls an instrument to make a measurement.&amp;nbsp;&amp;nbsp;We want to measure and display the results eight times.&lt;br /&gt;&lt;br /&gt;To achieve this goal, we are going to create a test to make a measurement.&amp;nbsp;&amp;nbsp;After we take a measuremet we call the &lt;b&gt;RepeatTest()&lt;/b&gt; procedure to repeat the test times as required. Finally, we will create a variable to track the number of iterations in a driver public variable &lt;b&gt;m_nTestIteration&lt;/b&gt; (initialized to -1).&lt;br /&gt;&lt;br /&gt;The test to repeat and make the measurements will be:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;&lt;br /&gt;&lt;br /&gt;DMM Measure(TestResult)&lt;br /&gt;RepeatTest(8) ! add this line at the end of every test that need to be repeated&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The procedure to loop would be:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Procedure RepeatTest(nNumberOfIterations) : Void&lt;br /&gt;nNumberOfIterations: Val Short&lt;br /&gt;{&lt;br /&gt;if m_nTestIteration=-1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_nTestIteration=nNumberOfIterations! start count&lt;br /&gt;endif&lt;br /&gt;&lt;br /&gt;m_nTestIteration=m_nTestIteration-1&lt;br /&gt;&lt;br /&gt;if m_nCurrentTest=0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! we are done&lt;br /&gt;endif&lt;br /&gt;&lt;br /&gt;Test EndEvents Test ! repeat this test&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Create the module variable:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;m_nTestIteration: Short = -1&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The result shows that the test 1.1 ran 8 times, taking different measurements each time.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200181\kb_loop1.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;From the picture, we can see that the tests numbers were all identical: “001, no matter what iteration was it.&amp;nbsp;&amp;nbsp;Another problem is that if the last iteration of the test has a PASS status, the program status will show as PASS no matter if one of the test iteration failed. We can add code to include the test iteration in the test number by revising the &lt;b&gt;RepeatTest &lt;/b&gt;procedure:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Procedure RepeatTest(nNumberOfIterations) : Void&lt;br /&gt;nNumberOfIterations: Val Short&lt;br /&gt;s: String&lt;br /&gt;i: Short&lt;br /&gt;{&lt;br /&gt;if m_nTestIteration=-1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_nTestIteration=nNumberOfIterations! start count&lt;br /&gt;endif&lt;br /&gt;&lt;br /&gt;m_nTestIteration=m_nTestIteration-1&lt;br /&gt;&lt;br /&gt;! display test number - test iteration to the log&lt;br /&gt;s=GetLogString(aLogStringCalcTestStatus)&lt;br /&gt;i=pos(Format(test.Index+1, "000"), s)&lt;br /&gt;SetLogString(Left(s, i)+Format(test.Index+1,"000") + "." + str(nNumberOfIterations-m_nTestIteration) + mid(s, i+len(Format(test.Index+1, "000"))))&lt;br /&gt;&lt;br /&gt;! if one test failed fail the program&lt;br /&gt;if TestStatus=FAIL&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;program.Status=FAIL&lt;br /&gt;endif&lt;br /&gt;&lt;br /&gt;if m_nTestIteration=0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! we are done&lt;br /&gt;endif&lt;br /&gt;&lt;br /&gt;Test EndEvents Test ! repeat this test&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200181\kb_loop2.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;The ATEasy driver which contains the &lt;b&gt;RepeatTest &lt;/b&gt;procedure can be downloaded &lt;a href='http://www.geotestinc.com/images/support/Q200181\Q200181.zip' target='_blank'&gt;here&lt;/a&gt;.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=181</link><pubDate>2/1/2010</pubDate></item><item><title>Comparing Structurers in ATEasy - Published on 2/1/2010</title><description>Programming languages typically do not support structure comparison directly.&amp;nbsp;&amp;nbsp;In ATEasy, structures can be compared by converting them to a Variant and then comparing the variants.&amp;nbsp;&amp;nbsp;In ATEasy, when a structure is assigned to a variant, the structure is converted to an array of variant data types, where each field of the structure becomes an element in the array.&lt;br /&gt;&lt;br /&gt;A generic structure comparison procedure can be coded as follows:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Procedure CompareStructs(vrStruct1, vrStruct2): Bool&lt;br /&gt;! Compare structs of the same type, return TRUE if equal, FALSE otherwise&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;vrStruct1: Val Variant&lt;br /&gt;vrStruct2: Val Variant&lt;br /&gt;i: Long&lt;br /&gt;{&lt;br /&gt;! Must have the same number of fields&lt;br /&gt;If VarDimSize(vrStruct1, 0)&lt;&gt; VarDimSize(vrStruct2, 0) Then Return FALSE&lt;br /&gt;&lt;br /&gt;! Compare each element/field&lt;br /&gt;For i=0 To VarDimSize(vrStruct1, 0)-1&lt;br /&gt;&amp;nbsp;&amp;nbsp; ! Test if element is another array/structure&lt;br /&gt;&amp;nbsp;&amp;nbsp; If VarDimSize(vrStruct1[i], 0) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Re-call CompareStructs() procedure&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return CompareStructs(vrStruct1[i],vrStruct2[i]) &lt;br /&gt;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Test for same data type&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If VarType(vrStruct1[i])&lt;&gt;VarType(vrStruct2[i]) Then Return FALSE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Test for same value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If vrStruct1[i]&lt;&gt;vrStruct2[i] Then Return FALSE &lt;br /&gt;&amp;nbsp;&amp;nbsp;EndIf&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;! structs are equal&lt;br /&gt;Return TRUE&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Following are example tests to compare two structs of the same type with both Pass and Fail results, and two nested structures with both Pass and Fail results:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Types&lt;br /&gt;================================================================================&lt;br /&gt;strTest: Struct&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Field1: Long&lt;br /&gt;&amp;nbsp;&amp;nbsp;Field2: Long&lt;br /&gt;&amp;nbsp;&amp;nbsp;Field3: String&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;strTest2: Struct&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Field1: String&lt;br /&gt;&amp;nbsp;&amp;nbsp;Field2: strTest&lt;br /&gt;}&lt;br /&gt;================================================================================&lt;br /&gt;&lt;br /&gt;Variables&lt;br /&gt;================================================================================&lt;br /&gt;&amp;nbsp;&amp;nbsp;st1: strTest&lt;br /&gt;&amp;nbsp;&amp;nbsp;st2: strTest&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst1: strTest2&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst2: strTest2&lt;br /&gt;================================================================================&lt;br /&gt;&lt;br /&gt;Tests&lt;br /&gt;================================================================================&lt;br /&gt;Task 1 : "Test Compare Structs"&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Test 1.1 : "Struct Compare"&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;Type = Precise&lt;br /&gt;Value = -1&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;st1.Field1=1&lt;br /&gt;&amp;nbsp;&amp;nbsp;st1.Field2=2&lt;br /&gt;&amp;nbsp;&amp;nbsp;st1.Field3="123"&lt;br /&gt;	&lt;br /&gt;&amp;nbsp;&amp;nbsp;st2.Field1=1&lt;br /&gt;&amp;nbsp;&amp;nbsp;st2.Field2=2&lt;br /&gt;&amp;nbsp;&amp;nbsp;st2.Field3="123"&lt;br /&gt;	&lt;br /&gt;&amp;nbsp;&amp;nbsp;TestResult=CompareStructs(st1,st2)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Test 1.2 : "Struct Not Compare"&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;Type = Precise&lt;br /&gt;Value = -1&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;st1.Field1=1&lt;br /&gt;&amp;nbsp;&amp;nbsp;st1.Field2=2&lt;br /&gt;&amp;nbsp;&amp;nbsp;st1.Field3="123"&lt;br /&gt;	&lt;br /&gt;&amp;nbsp;&amp;nbsp;st2.Field1=1&lt;br /&gt;&amp;nbsp;&amp;nbsp;st2.Field2=2&lt;br /&gt;&amp;nbsp;&amp;nbsp;st2.Field3="132"&lt;br /&gt;	&lt;br /&gt;&amp;nbsp;&amp;nbsp;TestResult=CompareStructs(st1,st2)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Task 2 : "Test Compare Nested Structs"&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Test 2.1 : "Struct Compare"&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;Type = Precise&lt;br /&gt;Value = -1&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst1.Field1="Test"&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst1.Field2.Field1=1&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst1.Field2.Field2=2&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst1.Field2.Field3="123"&lt;br /&gt;	&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst2.Field1="Test"&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst2.Field2.Field1=1&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst2.Field2.Field2=2&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst2.Field2.Field3="123"&lt;br /&gt;	&lt;br /&gt;&amp;nbsp;&amp;nbsp;TestResult=CompareStructs(nst1,nst2)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Test 2.2 : "Struct Not Compare"&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;Type = Precise&lt;br /&gt;Value = -1&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst1.Field1="Test"&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst1.Field2.Field1=1&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst1.Field2.Field2=2&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst1.Field2.Field3="123"&lt;br /&gt;	&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst2.Field1="Test"&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst2.Field2.Field1=1&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst2.Field2.Field2=2&lt;br /&gt;&amp;nbsp;&amp;nbsp;nst2.Field2.Field3="132"&lt;br /&gt;	&lt;br /&gt;&amp;nbsp;&amp;nbsp;TestResult=CompareStructs(nst1,nst2)&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Running the Task/Test programs produces the following results:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Test Log Results:&lt;/b&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Task 1 : Test Compare Structs&lt;br /&gt;------------------------------------------&lt;br /&gt;&lt;br /&gt;#&amp;nbsp;&amp;nbsp; Test Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Pin&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Unit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Result&amp;nbsp;&amp;nbsp; Status&lt;br /&gt;--- ------------------ ------ ------ ---------- ---------- ------&lt;br /&gt;001 Struct Compare&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1.0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-1.0000 Pass&lt;br /&gt;002 Struct Not Compare -&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1.0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+0.0000 Fail*&lt;br /&gt;&lt;br /&gt;Task 2 : Test Compare Structs&lt;br /&gt;------------------------------------------&lt;br /&gt;&lt;br /&gt;#&amp;nbsp;&amp;nbsp; Test Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Pin&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Unit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Result&amp;nbsp;&amp;nbsp; Status&lt;br /&gt;--- ------------------ ------ ------ ---------- ---------- ------&lt;br /&gt;001 Struct Compare&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1.0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-1.0000 Pass&lt;br /&gt;002 Struct Not Compare -&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1.0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+0.0000 Fail*&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=172</link><pubDate>2/1/2010</pubDate></item><item><title>White Paper: Addressing Instrument Obsolescence - Published on 2/1/2010</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;Many projects and programs rely upon test systems that were designed at the beginning of a program for on-going system support and maintenance. However, as pro-grams are extended beyond their original life term, the equipment, including test systems, must undergo a modernization phase every few years in order to ensure continued sup-port and maintenance of the system and its sub-assemblies. One of the major issues typically addressed by this upgrade phase is equipment obsolescence. As technology evolves, even programs (and test systems) that were originally designed for a long life term can face obsolescence issues. This paper reviews and compares the options available to program managers and test engineers facing test instrument obsolescence problems. Various options and tradeoffs are discussed including stocking of spare instruments, on-going maintenance &amp; repair of cur-rent instrumentation, replacement through the used market, migration of existing Test Pro-gram Sets (TPSs) to fit a new test system, re-placement using similar products with software or hardware adapters, and replacement using same Form-Fit-Function instrumentation.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2006\Addressing_Instrument_Obsolescence_David_Manor.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=151</link><pubDate>2/1/2010</pubDate></item><item><title>White Paper: Designing PXI-Based Systems for Field and Flight-Line Applications - Published on 2/1/2010</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;PXI has become a mainstream test and data acquisition platform in the MIL/Aero market. Numerous programs addressing Depot and Intermediate-level test requirementsnow use PXI as the core of the product.&lt;br /&gt;While the Mil/Aero market and specifically the military would prefer the use of PXI based systems for field and flight-line test applications due to its small size, weight, and cost, the question of suitability needs to be addressed. Is PXI suitable as a platform for field and flight-line applications? Can PXI be used in harsh environments?&lt;br /&gt;This paper addresses these issues and demonstrates how PXI can be used in harsh environments, and how Commercial Off The Shelf (COTS) solutions can replace the once traditional solutions of custom test equipment.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2006\Designing_PXI-Based_Systems_for_Field_and_Flight-Line_Applications_Loofie_Gutterman.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=152</link><pubDate>2/1/2010</pubDate></item><item><title>White Paper: A Common Core PXI Test Platform for Factory and Depot Applications - Published on 2/1/2010</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;The test requirements for the manufacturing and maintenance of military - aerospace components, subsystems, and systems should ideally be addressed by a common test platform. The ability to leverage test programs, fixturing, test resources and even product knowledge all points to the use of a common core platform. However, more often than not, the requirements for supporting and maintaining these assemblies results in specifying and developing completely different test solutions- resulting in higher capital and maintenance expenditures for deployed systems and components. This paper reviews how one can successfully address the test needs associated with both the manufacture and maintenance of systems and components - based on a common core&lt;br /&gt;solution and built around the PXI architecture, which can successfully address both the performance and economics aspects of test. The paper also presents a real world example of how this strategy has been successfully implemented on a current weapons system program.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2006\A_Common_Core_PXI_Test_Platform_for_Factory_and_Depot_Applications_Lowell_Parsons_and_Mike_Dewey.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=150</link><pubDate>2/1/2010</pubDate></item><item><title>White Paper: New Ruggedized COTS field tester is an attractive and economic alternative - Published on 2/1/2010</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;While COTS Test Systems are becoming more widely used in Depot and Second-Level Test Sets, Field-Level COTS Testers are beginning to gain acceptance by Military customers and OEM suppliers. Ruggedized lightweight housings with general purpose COTS cards and backplanes are now serving roles once reserved exclusively for custom dedicated designs. COTS PXI instrument-on-a-card manufacturers are learning how to migrate commercial designs to meet the challenges of first-line testing. These ruggedized COTS testers, offering a wide range of capabilities, are more easily upgradeable and re-configurable than their dedicated counter-parts. They also cost substantially less, making them a technically attractive and economic alternative.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2005\New_Ruggedized_COTS_field_tester_is_an_attractive_and_economic_alternative_Thomas_M.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=149</link><pubDate>2/1/2010</pubDate></item><item><title>White Paper: Integration of Software Technologies into a Test System - Published on 2/1/2010</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;Test applications often require integration of many software technologies. The white paper describes the benefits and the ways to integrate software technologies into an application. Several samples are provided:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;A specific instrument driver is available only in a particular technology. Re-using or integrating the driver requires using that technology.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The application requires use of external software components to provide additional functionality such as databases to store test results or test requirement, user interface (i.e., ActiveX controls), spreadsheet, test log generation (HTML/XML), data analysis libraries, communication protocols, and more.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Existing or legacy code can be integrated into the current application.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Integration of these technologies will maximize code reuse and will allow faster completion of the test system application. The use of intuitive software can minimize coding, making integration of these technologies possible.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2005\Integration_of_Software_Technologies_into_a_Test_System_Ron_Yazma.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=148</link><pubDate>2/1/2010</pubDate></item><item><title>White Paper: Independent Integrator Consolidates Resources - Published on 2/1/2010</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;Support equipment capability and availability are frequently not primary issues facing recipients of new Military Systems - but they should be! Such support equipment is invariably provided as a part of the Military System field deployment - support equipment whose objective is narrowly defined, and sometimes exclusively focused on the one system, subsystem, or device. Unlike the Prime Contractor (who is motivated to support only their own products), an independent PXI Systems Integrator is sometimes able to consolidate test resources by broadening the mission of the support equipment. Utilizing COTS PXI technology, an Independent Integrator could expand the mission of a Bench-Top Maintenance Tester to include a family of applications, often including UUTs from multiple OEM suppliers, and ultimately save ground support and depot support organizations millions of dollars.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2005\Independent_Integrator_Consolidates_Resources_Thomas_M.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=147</link><pubDate>2/1/2010</pubDate></item><item><title>White Paper: Obsolescence Replacement—Applied Technology - Published on 2/1/2010</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;Equipment obsolescence is a growing concern for both military and commercial test equipment users. Many critical test systems currently in use were designed to remain in service for many years - sometimes even decades - using the most innovative technology at the time. However, as technology constantly evolves, newer, more advanced systems have since taken the place of these legacy systems. In fact, many of the older technologies are no longer in production so when instruments fail, the replacement components may not be available and the instruments become nonmaintainable.&lt;br /&gt;This paper covers the options available to test engineers and program managers facing test equipment obsolescence problems. These include on-going maintenance &amp; repair, replacement through a secondary (used) market, replacement using similar products and software or hardware adapters, re-hosting all existing Test Program Sets (TPSs) to a new target system, and replacement using 100% form-fitfunctioninstrumentation.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2004\Obsolescence_Replacement—Applied_Technology_Thomas_M.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=146</link><pubDate>2/1/2010</pubDate></item><item><title>Running a batch file or command prompt from ATEasy - Published on 12/23/2009</title><description>The procedure we will be using for calling our batch files is the ATEasy internal function &lt;b&gt;WinExec&lt;/b&gt;.&amp;nbsp;&amp;nbsp;Using WinExec causes ATEasy to run a batch file or an executable as an independant child process.&lt;br /&gt;&lt;br /&gt;To run a batch file, simply reference it in the WinExec procedure call.&amp;nbsp;&amp;nbsp;The batch file is looked for in several places including the directory in which the project resides.&amp;nbsp;&amp;nbsp;The list of locations and their priorities is located in the ATEasy help files.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt; ! default directory is the directory of execution&lt;br /&gt;WinExec("test.bat") &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;To clear up any filename ambiguity, you can reference a specific location for the batch file.&amp;nbsp;&amp;nbsp;You can enter the full directory location, but since you are writing a string, you must use escape characters where appropriate (e.g C:\test.bat becomes "C:\\test.bat")&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt; ! run batch file in non-default directory&lt;br /&gt;WinExec("C:\\test.bat") &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;When specifying a location, directories with spaces require quotes around them (e.g. C:\My Documents\test.bat becomes "\"C:\\My Documents\\test.bat\"")&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt; ! run batch file in non-default directory (spaces in folder name)&lt;br /&gt;WinExec("\"C:\\My Documents\\test.bat\"") &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;In these last examples your batch files appeared on the screen while they ran.&amp;nbsp;&amp;nbsp;To get the files to execute in the background, you must pass an optional parameter into your procedure call.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt; ! batch file runs in background&lt;br /&gt;WinExec("test.bat", aformShowHide) &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;So far we have run the batch files directly.&amp;nbsp;&amp;nbsp;For your purposes, you may want to run your executables through the command prompt.&amp;nbsp;&amp;nbsp;Running the following command opens the command prompt.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt; ! call cmd prompt&lt;br /&gt;WinExec("cmd") &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Or, to add some more functionality.&amp;nbsp;&amp;nbsp;We will open the command prompt and run our batch file.&amp;nbsp;&amp;nbsp;Using the&lt;b&gt; /k&lt;/b&gt; modifier with cmd.exe causes the window to stay open after completing it's task.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt; ! call cmd prompt to run a batch file and remain open&lt;br /&gt;WinExec("cmd /k test.bat") &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Alternately, we can use the cmd.exe modifier&lt;b&gt; /c&lt;/b&gt; to have the command prompt close after execution and the ATEasy parameter aFormShowHide to have it run in the background.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt; ! call cmd prompt to run a batch file silently and close itself.&lt;br /&gt;WinExec("cmd /c test.bat", aformShowHide) &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Finally, to allow a bit of end-user interaction, we could create a form with a textbox and allow the user to enter the name of the file that needs to be run and any additional parameters.&amp;nbsp;&amp;nbsp;In this example, the name of the textbox would be changed to tbUserInput.&amp;nbsp;&amp;nbsp;On a button click, the user input would be inserted into the WinExec command call as follows.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt; ! call a cmd prompt to run a file based on user input&lt;br /&gt;WinExec("cmd.exe /k " + tbUserInput.Text) &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The WinExec function launches the command console as a child process and continues the execution of the ATEasy program in parallel with the command console.&amp;nbsp;&amp;nbsp;If you wish for your program to pause and wait until the command console is close, the following example can be used:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Procedure CommandTest() : Void&lt;br /&gt;h : AHandle&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! assign the window to the AHandle variable&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h=WinExec("cmd")&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! wait for the window to close&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WaitForSingleObject(h)&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=173</link><pubDate>12/23/2009</pubDate></item><item><title>PXI Bus expander configuration - Published on 12/22/2009</title><description>It is often necessary to join two or more PXI busses, or a PXI and a PCI bus together in order to control more than one chassis concurrently. This can be accomplished by the use of a PXI bus expander that introduces a PCI to PCI bridge between the two ajoining systems (either PC to Chassis, Laptop to Chassis, or Chassis to Chassis) . Several vendors offer solutions with a diverse set of configurations. This article will list the devices that Geotest offers, along with their respective configurations.&lt;br /&gt;&lt;br /&gt;When choosing the PXI Bus Expander that is right for your application, make note of the configuration type and the bus types that will be bridged.&lt;br /&gt;&lt;br /&gt;The following is a list of possible configurations and solutions that Geotest offers:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Desktop PC to Chassis&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;For example Desktop to &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7600+Series'&gt;GX7600&lt;/a&gt; PXI Express Chassis&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200168\DesktopToChassis.bmp" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;PCI to PXI (&lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7000A+Series'&gt;GX7000A&lt;/a&gt; , &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7100A+Series'&gt;GX7100A&lt;/a&gt;, and &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7300+Series'&gt;GX7300&lt;/a&gt; chassis's only)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;A href='http://www.geotestinc.com/Product.aspx?model=GX7990+Series' target='_blank'&gt;GX7990&lt;/A&gt;&amp;nbsp;&amp;nbsp;- 132 MB/s with a copper parallel type connector&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7990+Series'&gt;GX7992&lt;/a&gt; - Star Fabric type connector&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;a href='http://www.geotestinc.com/Product.aspx?model=MXI-4+Series'&gt;MXI-4-C&lt;/a&gt; - 132 MB/s with copper serial type connector&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;a href='http://www.geotestinc.com/Product.aspx?model=MXI-4+Series'&gt;MXI-4-F&lt;/a&gt;&amp;nbsp;&amp;nbsp;- 132 MB/s with fiber optic connection allowing a long cable length up to 200 meters&lt;br /&gt;&lt;/blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;PCI Express to PXI (&lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7000A+Series'&gt;GX7000A&lt;/a&gt; , &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7100A+Series'&gt;GX7100A&lt;/a&gt;, and &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7300+Series'&gt;GX7300&lt;/a&gt; chassis's only)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;&lt;a href='http://www.geotestinc.com/Product.aspx?model=MXIe-Express+Series'&gt;MXI-EXPRESS&lt;/a&gt; - x1 lane, single port (one chassis)&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;a href='http://www.geotestinc.com/Product.aspx?model=MXIe-Express+Series'&gt;MXI-EXPRESS&lt;/a&gt; - x1 lane, dual port (two chassis')&lt;br /&gt;&lt;/blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;PCI Express to PXI Express&amp;nbsp;&amp;nbsp;&lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7600+Series'&gt;GX7600&lt;/a&gt; Chassis only&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href='http://www.geotestinc.com/Product.aspx?model=MXIe-Express+Series'&gt;MXIe1-EXPRESS&lt;/a&gt; - 192 MB/s Express x1 connection&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;a href='http://www.geotestinc.com/Product.aspx?model=MXIe-Express+Series'&gt;MXIe4-EXPRESS&lt;/a&gt; - 798 MB/s Express x4 connection&lt;br /&gt;&lt;/blockquote&gt;&lt;b&gt;Laptop to Chassis&lt;/b&gt;&lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;PCMCIA to PXI (&lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7000A+Series'&gt;GX7000A&lt;/a&gt; , &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7100A+Series'&gt;GX7100A&lt;/a&gt;, and &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7300+Series'&gt;GX7300&lt;/a&gt; chassis's only)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;&lt;a href='http://www.geotestinc.com/Product.aspx?model=MXIe-Express+Series'&gt;MXI-PXI-L&lt;/a&gt; - Star Fabric type connector&lt;br /&gt;&lt;/blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ExpressCard to PXI (&lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7000A+Series'&gt;GX7000A&lt;/a&gt; , &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7100A+Series'&gt;GX7100A&lt;/a&gt;, and &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7300+Series'&gt;GX7300&lt;/a&gt; chassis's only)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;&lt;a href='http://www.geotestinc.com/Product.aspx?model=MXIe-Express+Series'&gt;MXIe1-PXI-L&lt;/a&gt; - ExpressCard Laptop Interface&lt;br /&gt;&lt;/blockquote&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ExpressCard to PXI Express&amp;nbsp;&amp;nbsp;&lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7600+Series'&gt;GX7600&lt;/a&gt; Chassis only&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;&lt;a href='http://www.geotestinc.com/Product.aspx?model=MXIe-Express+Series'&gt;MXIe1-EXPRESS-L&lt;/a&gt; - ExpressCard Laptop Interface&lt;br /&gt;&lt;/blockquote&gt;&lt;b&gt;Chassis to Chassis&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200168\ChassisToChassis.bmp" alt`=&amp;quot; border='0' /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;PXI to PXI (All chassis's &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7000A+Series'&gt;GX7000A&lt;/a&gt; , &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7100A+Series'&gt;GX7100A&lt;/a&gt;, &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7300+Series'&gt;GX7300&lt;/a&gt;, and &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7600+Series'&gt;GX7600&lt;/a&gt; )&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7990+Series'&gt;GX7990-1&lt;/a&gt; - 132 MB/s with a copper parallel type connector&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;a href='http://www.geotestinc.com/Product.aspx?model=GX7990+Series'&gt;GX7992-1&lt;/a&gt;&amp;nbsp;&amp;nbsp;- Star Fabric type connector&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;a href='http://www.geotestinc.com/Product.aspx?model=MXI-4+Series'&gt;MXI-4-C&lt;/a&gt; - 132 MB/s with copper serial type connector&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;a href='http://www.geotestinc.com/Product.aspx?model=MXI-4+Series'&gt;MXI-4-F&lt;/a&gt; -132 MB/s with fiber optic connection allowing a long cable length up to 200 meters&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The above mentioned part numbers represent a kit, that includes two devices, each attached to its respective bus, and a cable that connects them. Each part in this kit can also be ordered seperately upon request.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=168</link><pubDate>12/22/2009</pubDate></item><item><title>How the GTX2200/GC2200 Series Timer Counter Gate works - Published on 12/22/2009</title><description>The GTX2200 and GC2200 series timer/counter allows the user to set a gate time through either the software front panel or through a API call &lt;b&gt;GxCntSetGateTime()&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;The gate will stay open until one full period of the input signal has completed. &lt;br /&gt;&lt;br /&gt;If the gate time is set to a value that is less than one period of the input signal, then the gate will actually remain open until one signal period has completed. This is why a valid measurement is obtained when the gate time is set to a value less than the input signal period.&lt;br /&gt;&lt;br /&gt;This behavior also explains the "plus up to one signal period" in the gate time specification (GTX2200 Datasheet). If the gate time expires in between a period of the input signal, the gate will remain open until that cycle (period) completes.&lt;br /&gt;&lt;br /&gt;An example of this is as follows:&lt;br /&gt;If the gate time is set to 500 uS, and the input signal's period is 200 uS, the gate will actually close at 600 uS, after the 3rd cycle has completed (it will not close mid-cycle at 500 uS).&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200170\GateTimePlotd.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;Therefore the function of the gatetime is to allow the user to force the instrument to oversample an input signal. The instrument does not allow the user to select a gate time that will result in a closure part way through a cycle of the measured signal.&lt;br /&gt;&lt;br /&gt;The Measurement Timeout can be set by using the API function call &lt;b&gt;GxCntSetMeasurementTimeout()&lt;/b&gt; to make sure that a very slow signal will not cause unnecessary delays in your program.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=170</link><pubDate>12/22/2009</pubDate></item><item><title>Calling DLL functions with CDECL callback function parameters - Published on 12/21/2009</title><description>ATEasy can interface with DLL functions that accept call back function pointers as parameters.&lt;br /&gt;When dealing with function pointers, you should keep in mind that there are two types of x86 calling convention, CDECL and STDCALL.&lt;br /&gt;&lt;br /&gt;CDECL –The caller will clean up the stack when the function returns.&lt;br /&gt;STDCALL – The called function will clean up the stack when it returns.&lt;br /&gt;&lt;br /&gt;If the two calling conventions are missmatched (between the DLL’s function pointer parameter declaration and the passed in parameter’s function declaration), the stack could become corrupted resulting in an ATEasy run-time error.&lt;br /&gt;&lt;br /&gt;By default ATEasy will pass in a STDCALL function pointer that wraps around the native ATEasy procedure. This behavior can be changed to CDECL by changing certain options in the procedure’s properties page. &lt;br /&gt;&lt;br /&gt;First, you must create the procedure in either the System module or in a Driver module. &lt;br /&gt;&lt;br /&gt;Then you must set the procedure’s properties such that the export checkbox is set and CDECL is selected from the drop down menu. Once these properties have been set, the procedure can be passed into the DLL function.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200179.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;Note: Make sure your procedure's prototype is equivalent to the function pointer prototype of the DLL function's callback parameter.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=179</link><pubDate>12/21/2009</pubDate></item><item><title>How to print a HTML or TEXT file from within an ATEasy application - Published on 12/15/2009</title><description>One method of printing a HTML file from within an ATEasy application is to use the ALog control. This can be done as follows:&lt;br /&gt;&lt;br /&gt;1. Create a form and uncheck the form &lt;b&gt;Visible &lt;/b&gt;property. &lt;br /&gt;2. Place an &lt;b&gt;ALog &lt;/b&gt;control in the form and set it's &lt;b&gt;PlainText &lt;/b&gt;property to False for HTML or True for text file printing.&lt;br /&gt;3. Create a public procedure with one parameter that contains the location and name of the HTML file to be printed.&lt;br /&gt;4. The procedure should load the form in Modeless mode, set the logPrint.LocationURL to the HTML file location, call logPrint.PrintLog and then return.&lt;br /&gt;&lt;br /&gt;The example that accompanies this KB article is called &lt;a href='http://www.geotestinc.com/images/support/Q200180.zip' target='_blank'&gt;Q200180.zip&lt;/a&gt;. In the example the form used to print the HTML file is called PrintHTMLForm. The public procedure used to call the form and print the file is called PrintHTML(). The same code can be used to print TEXT (log) files. The procedure code is as follows:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;PrintHTML(sFile)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;blockquote&gt;! Declare a PrintHTMLForm form variable called frmPrintHTML&lt;br /&gt;&lt;br /&gt;Load frmPrintHTML, False, 0&amp;nbsp;&amp;nbsp;!Load the PrintHTML form&lt;br /&gt;DoEvents()&amp;nbsp;&amp;nbsp; !Process all pending operations&lt;br /&gt;frmPrintHTML.logPrint.LocationURL=sFile&amp;nbsp;&amp;nbsp;!Set the URL of the file to be printed&lt;br /&gt;&lt;br /&gt;!Wait for the file to be loaded&lt;br /&gt;while frmPrintHTML.logPrint.ReadyState &lt;&gt; alogReadyStateComplete&lt;br /&gt;&amp;nbsp;&amp;nbsp;DoEvents()&lt;br /&gt;endwhile&lt;br /&gt;&lt;br /&gt;frmPrintHTML.logPrint.PrintLog()&amp;nbsp;&amp;nbsp;!Print the file&lt;br /&gt;Unload frmPrintHTML&lt;br /&gt;frmPrintHTML= Nothing&lt;br /&gt;&lt;/blockquote&gt;&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;For more information about how to select a printer for printing refrer to &lt;a href='/knowledgebase/kbarticle.aspx?id=90'&gt;Q000090&lt;/a&gt; &lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=180</link><pubDate>12/15/2009</pubDate></item><item><title>White Paper: DTIF (IEEE-1445) - Based Digital Test Solution - Published on 10/1/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;The digital test interchange format (DTIF) is defined by the IEEE-1445 specification and provides a standardized digital data interchange format that can be used with various digital test environments. This standardized format, when used in conjunction with tools for post-processing of DTIF files and appropriate functional test digital hardware, offers a cost effective and viable solution for migrating legacy TPS’s to a modern digital test system platform.&lt;br /&gt;&lt;br /&gt;This paper provides an overview of how DTIF files generated by simulator tools such as Teradyne’s LASAR simulator can be used in conjunction with modern digital test post-processing tools and hardware to provide a robust TPS migration strategy for legacy digital test applications including support for Go / No-Go tests, guided probe and fault dictionary functionality. All of these capabilities are supported by the DtifEasy software tool set which can be used with the GX5292 or GX5055 digital instrumentation to re-host legacy applications developed on GenRad, Teradyne, Hewlett-Packard, or Schlumberger functional test systems. &lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2009\DTIF-BasedDigitalTest.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=175</link><pubDate>10/1/2009</pubDate></item><item><title>White Paper: Integration of Software Technologies into a Test System - Published on 10/1/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;Test applications often require the integration of many different software technologies. This paper provides an overview of how several Windows-based technologies can be incorporated into a single application by employing ATEasy's common software framework and architecture. Technologies discussed are DLL, ActiveX/COM, .NET, Function Panel drivers (.fp, VXI Plug&amp;Play drivers), IVI-C and IVI-COM. ATEasy is used to demonstrates several of these technologies.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2009\IntegrationOfSoftwareTechnologiesIntoATestSystem.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=174</link><pubDate>10/1/2009</pubDate></item><item><title>White Paper: Implementing Serial Bus Interfaces with General Purpose Digital Instrumentation - Published on 10/1/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;The use of generic digital test instruments for emulating common serial bus protocols can provide benefits over dedicated bus test products, and often presents a trade-off between functionality, flexibility and cost. For example, a dedicated test instrument solution can offer more extensive test capabilities such as protocol support for controlling and analyzing traffic between a bus controller and a device under test.&amp;nbsp;&amp;nbsp;However, a more general-purpose solution that utilizes a digital test instrument can offer the flexibility to adapt to non-standard line rates and timing as well as supporting other digital test needs. This paper presents an overview of how a general-purpose digital I/O instrument such as the PXI GX5290 series of DIO cards can used to support three widely used serial bus interfaces. By using a general-purpose digital I/O solution, users can potentially realize a lower cost test solution, a more compact test system footprint, multi-site test capability, a common user control interface and expandability for future requirements.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2009\ImplementingSerialBusInterfaces.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=178</link><pubDate>10/1/2009</pubDate></item><item><title>White Paper: Consolidating Test Resources for Avionics Production Test – Requirements and Applications - Published on 9/24/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;The manufacturing and test of avionics products for military and commercial aircraft presents a unique set of requirements and challenges. Historically, the development and deployment of production test systems for avionics products such as aircraft data acquisition and recording systems, navigation and communication products, and aircraft network systems have been addressed on a product specific basis – resulting in a variety of test platforms and solutions with little test system commonality and technology. &lt;br /&gt;&lt;br /&gt;Additionally, this lack of test system commonality and the requirement to maintain legacy products with long product life cycles results in increased maintenance and logistics costs for manufacturing and support test. The adoption of a common test platform can offer producers of avionics products lower test costs, improved test resource utilization, and the flexibility to support both new and legacy products.&amp;nbsp;&amp;nbsp;This paper reviews the requirements and the implementation of a common test platform and environment based on the GX7100A PXI 6U/3U chassis and ATEasy. The resulting solution offers a high level of efficiency, supports the implementation of routine test processes, offers reusability, and allows the consolidation of test resources to facilitate the collection of reliability data and test results.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2009\ConsolidatingTSTResources.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=176</link><pubDate>9/24/2009</pubDate></item><item><title>White Paper: PXI Based Flight-Line Test Sets - Published on 9/24/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;In the past decade, PXI has proven to be a powerful and robust standard that is suitable for most Mil-Aero test applications. PXI-based testers are widely used today in engineering test stations, as production acceptance testers, environmental stress screening testers, as well as full-fledged Intermediate-Level and Depot-Level testers. A lesser known fact is the success of PXI for field and flight-line test applications. This paper discusses several flight-line and back-shop test applications based on Commercial-Off-The-Shelf (COTS) PXI products. The applications include a Field Test Set for the Maverick missile system, a back-shop test set for the Alternate Mission Equipment (AME) for the F-35 Joint Strike Fighter (JSF), a back-shop armament test set for the TA-50 and FA-50 aircraft, and a portable test set for the C-130. These four testers are all based on an ultra-rugged COTS PXI platform - the MTS- 206 / 207 which has been successfully deployed since 2004 and has demonstrated the ability to operate reliably in any operational theater. The four testers demonstrate PXI’s viability as an ultra-rugged field and flight-line platform&amp;nbsp;&amp;nbsp;- offering performance and capabilities that were previously only achievable with custom electronics or MIL-SPEC VME products.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2009\FlightLinePXI.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=177</link><pubDate>9/24/2009</pubDate></item><item><title>White Paper: Automating Flight Line Testing for Proximity Sensor Maintenance Applications - Published on 9/22/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;Embedded passive position sensors in various commercial aircraft locations have exhibited substantial failure rates and have resulted in costly turnbacks and delayed flights. Responding to the need to proactively identify marginal sensors prior to failure, Geotest and Alaska Airlines have developed an inexpensive test system that can facilitate the maintenance and troubleshooting of passive flaps and slats sensors for the Boeing 737-400 aircraft. The test system is used during heavy maintenance on commercial aircraft to identify, predict and analyze the failures of these embedded sensors.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2009\Testing_for_Proximity_Sensor_Maintenance_Applications.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=165</link><pubDate>9/22/2009</pubDate></item><item><title>White Paper: DATSA Obsolescence Management Approach - Published on 9/22/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;The AN/GSM-305 Depot Automated Test System for Avionics (DATSA) is an aging Automatic Test Equipment (ATE) used by the U.S. Air Force on the B1B and F-15 programs since the late seventies. Originally built by Emerson, the DATSA systems are now faced with many obsolescence and reliability problems due to the “advanced age” of the systems. While there is no current funded program to replace all the DATSA systems in the inventory, each Air Logistics Center (ALC) is taking the necessary steps to improve the current situation and “patch up” the DATSA for their own local needs. One of these efforts, by Oklahoma City ALC (Tinker AFB), includes extending the DATSA life by replacing key obsolete instruments that can no longer be maintained.&lt;br /&gt;Another effort by Ogden ALC (Hill AFB) led to the replacement of the DATSA altogether with an off-the-shelf tester that already had most of the TPSs for that program. This paper compares these two cases of extending life and complete replacement.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2008\DATSA_Obsolescence_Management_Approach_Loofie_Gutterman.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=155</link><pubDate>9/22/2009</pubDate></item><item><title>White Paper: Joint Strike Fighter Alternate Mission Equipment Test Set - Published on 9/22/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;With the Joint Strike Fighter (JSF) program underway, many new airborne products will have to be tested and maintained for the next few decades. The tester selected by the U.S. Air Force to be the standard platform for manufacturing, ESS (Environmental Stress Screening) and depot-level testing is the Lockheed Martin LM-STAR test set. LM STAR is an open-architecture test set with most of the test set’s components being Commercial&lt;br /&gt;Off The Shelf (COTS) products. Using COTS products helps reduce up-front and maintenance costs and simplified the development process. The test set platform is only the beginning and hundreds of Test Program Sets (TPSs) will be developed for the LM STAR in the next decade to support the 3000+ aircraft to be used by the U.S. Air Force and our allies.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2007\Joint_Strike_Fighter_Alternate_Mission_Equipment_Test_Set_Loofie_Gutterman.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=154</link><pubDate>9/22/2009</pubDate></item><item><title>White Paper: Instrument Certification as part of a Modular Test platform Architecture - Published on 9/22/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;The use of modular test systems for depot, intermediate, and factory test applications has increased dramatically in the last two decades. Today, the primary card modular architecture is based on the PCI Extensions for Instrumentation (PXI) standard with thousands of PXI-based systems in use today. The flexibility and configurability associated with PXI has also created new challenges for the calibration and certification of these systems. Historically, the process for re-certification of modular instruments has been to remove and return the modules to the original equipment manufacturer (OEM) or a 3rd party test house, resulting in system down time. However, a better certification method for a card modular architecture is to develop an overall methodology and implementation that allows recertification of modules within the host system. This paper discusses the features and benefits associated with incorporating a PXI-based standards module (GX1034) as the basis for implementing a system level re-certification strategy. By employing a standards module within the system, recertification logistics and maintenance can be simplified, resulting in extended system up time and offering test managers added flexibility for supporting in-house certification of the system and system components. The GX1034 incorporates frequency, resistance and voltage standards and source / measurement facilities allowing the system designer to implement a baseband re-certification strategy for an automatic test system (ATS) platform. &lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2007\Instrument_Certification_as_part_of_a_Modular_Test_platform_Architecture_David_Manor_and_Michae_Dewey.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Related Product: &lt;a href='../Product.aspx?model=GX1034'&gt;GX1034 - Standards Module&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=153</link><pubDate>9/22/2009</pubDate></item><item><title>How to calculate the frequency measurement accuracy of the GTX22x0 series of Time Interval Counter PXI Cards - Published on 7/10/2009</title><description>Many factors can effect the accuracy of frequency measurements taken on any instrument. Main factors that effect accuracy are&lt;br /&gt;1) Signal noise&lt;br /&gt;2) Instrument timebase accuracy&lt;br /&gt;3) Gate time used to measure the signal&lt;br /&gt;4) Calibration cycle.&lt;br /&gt;&lt;br /&gt;The frequency measurement accuracy for the GTX2200 series can be found using the following formulas:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' bgcolor=#EBEBEB cellpadding=1 cellspacing=2 border=0 class='reg12'&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;&lt;b&gt;Slew Rate&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;Slew Rate (S&lt;sub&gt;R&lt;/sub&gt;) = 2 x PI x V&lt;sub&gt;p&lt;/sub&gt; x f&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;where PI = 3.14159265&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;V&lt;sub&gt;p&lt;/sub&gt; = peak amplitude of the sine wave being measured (in volts)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f = frequency of the signal being measured&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;table width='100%' bgcolor=#EBEBEB cellpadding=1 cellspacing=2 border=0 class='reg12'&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;&lt;b&gt;Trigger Error&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;Error due to noise superimposed on the input signal from both internal and external sources&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/\Q200171\Q200171 Trigger Error Formula.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;E&lt;sub&gt;n&lt;/sub&gt; = rms noise of input signal (100MHz bandwidth)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;table width='100%' bgcolor=#EBEBEB cellpadding=1 cellspacing=2 border=0 class='reg12'&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;&lt;b&gt;Least Significant Digit (LSD)&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;img src="http://www.geotestinc.com/images/support/\Q200171\Q200171 LSD Formula.JPG" alt`=&amp;quot; border='0' /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;table width='100%' bgcolor=#EBEBEB cellpadding=1 cellspacing=2 border=0 class='reg12'&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;&lt;b&gt;Resolution (Hertz)&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;img src="http://www.geotestinc.com/images/support/\Q200171\Q200171 Resolution Formula.JPG" alt`=&amp;quot; border='0' /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;table width='100%' bgcolor=#EBEBEB cellpadding=1 cellspacing=2 border=0 class='reg12'&gt;&lt;tr valign=top&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;&lt;b&gt;Accuracy (Hertz)&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;img src="http://www.geotestinc.com/images/support/\Q200171\Q200171 Accuracy Formula.JPG" alt`=&amp;quot; border='0' /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The following Excel file can be used to calculate the accuracy &lt;a href='http://www.geotestinc.com/images/support/\Q200171\GTX22x0 Accuracy.xls' target='_blank'&gt;GTX22x0 Accuracy&lt;/a&gt;.The values for Signal Frequency, Signal Noise (E&lt;sub&gt;n&lt;/sub&gt;), Measurement Gate Time and Instrument Timebase accuracy can be adjusted to observe the effects of these parameters on the overall measurement accuracy.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=171</link><pubDate>7/10/2009</pubDate></item><item><title>Creating ATEasy Controls Dynamically - Published on 6/16/2009</title><description>There are two processes for adding controls to a form in ATEasy, at design time, and dynamically at run time.&amp;nbsp;&amp;nbsp;The topic of adding controls at design time and referrencing the control objects from an array are discussed in Knowledgebase article &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=161'&gt;Q200161&lt;/a&gt;.&amp;nbsp;&amp;nbsp;This article is an extension of Q200161 and will focus on using arrays to access controls that were placed on the form dynamically at run time.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;InsertControl()&lt;/b&gt; method allows you to create a control during run-time.&amp;nbsp;&amp;nbsp;The syntax is:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;[ ctrl = ] Object.InsertControl ( sControlName, sControlClassType, [fLeft], [fTop], [fWidth], [fHeight], [sContainer], [bVisible], [vNameOrIndex] )&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;A full description of this method, and the associated &lt;b&gt;AddHandler&lt;/b&gt; statement can be found in the ATEasy help document.&amp;nbsp;&amp;nbsp;An example of inserting a new GroupBox with eight Switches and a Label onto an existing ATEasy form is shown below.&amp;nbsp;&amp;nbsp;This code duplicates controls that were placed on the form at design time.&amp;nbsp;&amp;nbsp;Note:&amp;nbsp;&amp;nbsp;Code for setting the dynamically created controls properties and creating an event handlers, while not discussed, were included for completeness.&amp;nbsp;&amp;nbsp;The resulting form and controls are shown in figure 1:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Module Variables:&lt;/b&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;objGB:&amp;nbsp;&amp;nbsp;AGroupBox&lt;br /&gt;objLBL:&amp;nbsp;&amp;nbsp;ALabel&lt;br /&gt;aobjGroup:&amp;nbsp;&amp;nbsp;ASwitch[8]&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Procedure:&lt;/b&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;lWidth:&amp;nbsp;&amp;nbsp;Long&lt;br /&gt;lHeight:&amp;nbsp;&amp;nbsp;Long&lt;br /&gt;lPosX:&amp;nbsp;&amp;nbsp;Long&lt;br /&gt;lPosY:&amp;nbsp;&amp;nbsp;Long&lt;br /&gt;i:&amp;nbsp;&amp;nbsp;Long&lt;br /&gt;&lt;br /&gt;lWidth=gb1.Width&lt;br /&gt;lHeight=gb1.Height&lt;br /&gt;lPosx=gb1.Left&lt;br /&gt;lPosY=gb1.Top+lHeight+50&lt;br /&gt;i=Form.ControlsCount&lt;br /&gt;&lt;br /&gt;!&amp;nbsp;&amp;nbsp;Add new GroupBox control to form "MyForm" and set the Caption property&lt;br /&gt;objGB=Form.InsertControl("objGB","AGroupBox",lPosX,lPosY,lWidth,lHeight,"MyForm",True,i)&lt;br /&gt;objGB.Caption="Run-Time Controls"&lt;br /&gt;&lt;br /&gt;! Add new Label control to form "MyForm" and set properties&lt;br /&gt;objLBL=Form.InsertControl("objLBL","ALabel",170,lPosY+lHeight+10,76,17,"MyForm",True,i+1)&lt;br /&gt;objLBL.Alignment=alblCenter&lt;br /&gt;objLBL.Font.Name="MS Sans Serif"&lt;br /&gt;objLBL.Font.Size=8&lt;br /&gt;objLBL.Font.Bold=True&lt;br /&gt;objLBL.Caption="Byte Value"&lt;br /&gt;&lt;br /&gt;! Add eight Switch control to the new GroupBox control and set properties&lt;br /&gt;For i=0 to 7&lt;br /&gt;&amp;nbsp;&amp;nbsp;aobjGroup[i]=Form.InsertControl("swGB"+Str(i),"ASwitch",343-i*47,41,24,58,"objGB",True,i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;aobjGroup[i].Caption=""&lt;br /&gt;&amp;nbsp;&amp;nbsp;aobjGroup[i].OffText=""&lt;br /&gt;&amp;nbsp;&amp;nbsp;aobjGroup[i].OnText=""&lt;br /&gt;&amp;nbsp;&amp;nbsp;aobjGroup[i].Style=4&lt;br /&gt;! Add an OnSwitchChange event handler for each new switch created&lt;br /&gt;&amp;nbsp;&amp;nbsp;AddHandler aobjGroup[i], "OnChange", OnSwitchChange&lt;br /&gt;Next&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;OnSwitchChange Procedure(objCtrl):&lt;/b&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;objCtrl:&amp;nbsp;&amp;nbsp;VAL AControl&lt;br /&gt;lByteValue:&amp;nbsp;&amp;nbsp;Long&lt;br /&gt;i:&amp;nbsp;&amp;nbsp;Long&lt;br /&gt;&lt;br /&gt;For i=0 to 8&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lByteValue=lByteValue+((2^i)*aobjGroup[i].Value)&lt;br /&gt;Next&lt;br /&gt;objLBL.Caption=Str(lByteValue)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200161\\KB161_05.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 1 - Design Time and Run Time generated controls&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Refer to the Forms.PRG example in the ATEasy Examples.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=169</link><pubDate>6/16/2009</pubDate></item><item><title>Using arrays of control objects in ATEasy - Published on 6/16/2009</title><description>When creating a test program that utilizes many controls, often it is desirable to query or manipulate those controls in a controlled sequence, such as a &lt;b&gt;For/Next&lt;/b&gt; loop.&amp;nbsp;&amp;nbsp;An example of this might be a group of eight &lt;b&gt;Switch &lt;/b&gt;controls representing the value of a binary byte (&lt;b&gt;figure 1&lt;/b&gt;).&amp;nbsp;&amp;nbsp;In these instances it is necessary to create an array of control objects that can be referenced using the loop count variable.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200161\\KB161_01.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 1 - Using switches to enter or display binary values in a program&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The typical method for accessing a control is to reference the control by it’s name.&amp;nbsp;&amp;nbsp;If, for example, you created a &lt;b&gt;Switch &lt;/b&gt;control, and named that switch object &lt;b&gt;swMySwitch&lt;/b&gt;, then to print the switch position (&lt;b&gt;Value&lt;/b&gt;) for &lt;b&gt;swMySwitch&lt;/b&gt; you would use the following:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Print swMySwitch.Value&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;But if, as in the example in figure 1, you had eight switches, or 16 or 32, then you would need to reference each switch specifically by its unique name in order to print the switch position:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Print swMySwitch0.Value&lt;br /&gt;Print swMySwitch1.Value&lt;br /&gt;Print swMySwitch2.Value&lt;br /&gt;Print swMySwitch3.Value&lt;br /&gt;Print swMySwitch4.Value&lt;br /&gt;Print swMySwitch5.Value&lt;br /&gt;Print swMySwitch6.Value&lt;br /&gt;Print swMySwitch7.Value&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;A much simpler approach would be to print the switch positions using a &lt;b&gt;For/Next&lt;/b&gt; loop:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;For index=0 to 7&lt;br /&gt;&amp;nbsp;&amp;nbsp;Print objMySwitch[index].Value&amp;nbsp;&amp;nbsp;! Reference switch by array index number&lt;br /&gt;Next&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;To use an array of control objects, first you must define a variable array to store the objects in.&amp;nbsp;&amp;nbsp;The array variable must be of a Control Object type - refer to the ATEasy Help for a comprehensive list of the standard control types.&amp;nbsp;&amp;nbsp;You can use the generic &lt;b&gt;AControl&lt;/b&gt; type object, or you can use the specific control object, like &lt;b&gt;ASwitch&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;objMyGeneric:&amp;nbsp;&amp;nbsp;AControl[8]&lt;br /&gt;objMySwitch:&amp;nbsp;&amp;nbsp;ASwitch[8]&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The advantage of using the specific control type, like ASwitch, is that all of the properties and methods associated with the control are available using ATEasy's code completion tools.&amp;nbsp;&amp;nbsp;This is because the ASwitch object uses Early Binding, which exposes all of the properties of an object at design time.&amp;nbsp;&amp;nbsp;The generic &lt;b&gt;AControl &lt;/b&gt;or &lt;b&gt;Object&lt;/b&gt; object uses Late Binding and does not display all of the properties of all controls.&amp;nbsp;&amp;nbsp;Late binding exposes the object to the application at run time, so the properties of the object are not known to the application at design time.&amp;nbsp;&amp;nbsp;For example, the &lt;b&gt;Value&lt;/b&gt; property of an ASwitch control can be accessed via a dropdown list with a variable of type ASwitch, but not with a variable of type AControl.&amp;nbsp;&amp;nbsp;The Value property can still be referrenced within a program for a generic type control, assuming it is valid for the control object stored in the AControl variable, but you must type the property manually in your program code.&lt;br /&gt;&lt;br /&gt;The advantage of using the generic AControl object is that any control type can be assigned to it in a "mix-n-Match" process.&amp;nbsp;&amp;nbsp;Since not all controls represented in mix-n-match grouping will share the same properties, you can use the ATEasy Try/Catch statement to test for non-existant controls or properties and avoid ATEasy run-time errors.&amp;nbsp;&amp;nbsp;Refer to the ATEasy help for information regarding Early and Late binding objects.&amp;nbsp;&amp;nbsp;The remaining examples in the article will use control objects with Early Binding.&lt;br /&gt;&lt;br /&gt;Once an appropriate array variable has been defined, then you must copy the control object to the array.&amp;nbsp;&amp;nbsp;There are two methods for doing this.&amp;nbsp;&amp;nbsp;The first is to reference the object by it's name, the second is to use the object's Tab Order.&amp;nbsp;&amp;nbsp;The first method is shown in the code segment below.&amp;nbsp;&amp;nbsp;An array of type ASwitch is created with 8 elements, then each of the eight ASwitch objects are copied to the array in ascending order:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;aobjSwitch:&amp;nbsp;&amp;nbsp;ASwitch[8]&lt;br /&gt;&lt;br /&gt;aobjSwitch[0]=swMySwitch0&lt;br /&gt;aobjSwitch[1]=swMySwitch1&lt;br /&gt;aobjSwitch[2]=swMySwitch2&lt;br /&gt;aobjSwitch[3]=swMySwitch3&lt;br /&gt;aobjSwitch[4]=swMySwitch4&lt;br /&gt;aobjSwitch[5]=swMySwitch5&lt;br /&gt;aobjSwitch[6]=swMySwitch6&lt;br /&gt;aobjSwitch[7]=swMySwitch7&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;This is an inefficient process for placing control objects into an array by name.&amp;nbsp;&amp;nbsp;Fortunately, the &lt;b&gt;Controls()&lt;/b&gt; statement provides a much simpler process for referencing an object either by it's unique text name (shown below), or by its Tab Order (discussed later):&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;i: Long&lt;br /&gt;aobjSwitch:&amp;nbsp;&amp;nbsp;ASwitch[8]&lt;br /&gt;&lt;br /&gt;For i=0 to 7&lt;br /&gt;&amp;nbsp;&amp;nbsp;aobjSwitch[i]=Controls("swMySwitch"+Str(i))&amp;nbsp;&amp;nbsp;! Reference control by text name&lt;br /&gt;Next&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The tab order is the order in which a user moves from one control to another in an application when pressing the TAB key.&amp;nbsp;&amp;nbsp;Each form has its own tab order, and some controls, such as the &lt;b&gt;GroupBox&lt;/b&gt;, has its own tab suborder.&amp;nbsp;&amp;nbsp;Usually, the tab order is the same as the order in which you created the controls within an ATEasy form, or within an ATEasy control.&amp;nbsp;&amp;nbsp;However, the tab order can be redefined at anytime using the &lt;b&gt;TabOrder &lt;/b&gt;button.&amp;nbsp;&amp;nbsp;Refer to the ATEasy online help for additional information about Tab Orders.&lt;br /&gt;&lt;br /&gt;By clicking on the &lt;b&gt;TabOrder &lt;/b&gt;button while the form containing the eight switches from figure 1 is active, you can see the current tab order for the switches (figure 2).&amp;nbsp;&amp;nbsp;The order was defined as the controls were created, with the switch on the right representing the LSB and tab order 0.&amp;nbsp;&amp;nbsp;The MSB is tab order 7, and the label with the text "Byte Value" is tab order 8.&amp;nbsp;&amp;nbsp;The tab order can be redefined simply by clicking on the controls in whatever tab order you desire.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200161\\KB161_02.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 2 - Tab ordering of controls on a form&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;By utilizing the &lt;b&gt;Controls&lt;/b&gt; statement you can take advantage of the tab order to simplify the process of assigning control objects to an array.&amp;nbsp;&amp;nbsp;The &lt;b&gt;Controls&lt;/b&gt; statement returns a control object as specified by a given control name or index.&amp;nbsp;&amp;nbsp;The index value is the tab order, so the eight switch control objects can be stored in the aobjSwitch[] array using the simple For/Loop structure shown below:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;i: Long&lt;br /&gt;aobjSwitch:&amp;nbsp;&amp;nbsp;ASwitch[8]&lt;br /&gt;&lt;br /&gt;For i=0 to 7&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aobjSwitch[i] = Controls(i)&amp;nbsp;&amp;nbsp;! Reference control by tab order&lt;br /&gt;Next&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Once the switch objects are stored to the control array, the controls can be used by referencing the array and index, the same as if you used the control directly.&amp;nbsp;&amp;nbsp;For example, if you wanted to calculate the byte value represented by the switch positions, the following procedure could be used:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;i:&amp;nbsp;&amp;nbsp;Long&lt;br /&gt;lByteValue:&amp;nbsp;&amp;nbsp;Long=0&lt;br /&gt;&lt;br /&gt;For i=0 to 7&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lByteValue=lByteValue+((2^i)*aobjSwitch[i].Value)&lt;br /&gt;Next&lt;br /&gt;lblValue.Caption=Str(lByteValue)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200161\\KB161_03.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 3 - Byte value represented by switch positions&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;As mentioned previously in this article, some ATEasy controls allow embedding other controls within them.&amp;nbsp;&amp;nbsp;The AGroupBox is an example of this type of control.&amp;nbsp;&amp;nbsp;In this case, the tab order for controls embedded within another control have a sub-index number, or an indented tab order.&amp;nbsp;&amp;nbsp;If you were to place the eight byte-value switches inside a AGroupBox control, the AGroupBox control would have the major tab order, or index value, and each of the switches would have a sub tab order.&amp;nbsp;&amp;nbsp;Assuming the GroupBox control had a tab order of 0, then the switche controls inside the AGroupBox would have a tab order of 0.0, 0.1, 0.2 and so on, up to tab order 0.7, and the Byte Value label which had been tab order 8 is now tab order 1 (figure 3).&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200161\\KB161_04.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 4 - Tab ordering of controls within controls&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A new reference level is added for accessing the switch control objects.&amp;nbsp;&amp;nbsp;Since they are now embedded in the AGroupBox, you must reference the AGroupBox control first, before having access to the switch controls within it.&amp;nbsp;&amp;nbsp;This is done by adding another level of the &lt;b&gt;Controls &lt;/b&gt;property to reference the GroupBox.&amp;nbsp;&amp;nbsp;The code below demonstrates how to build the array of ASwitch objects from switches embedded in a AGroupBox:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;i: Long&lt;br /&gt;aobjSwitch:&amp;nbsp;&amp;nbsp;ASwitch[8]&lt;br /&gt;&lt;br /&gt;For i=0 to 7&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aobjSwitch[i] = Controls(0).Controls(i)&lt;br /&gt;Next&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Refer to Knowledgebase article &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=169'&gt;Q200169&lt;/a&gt; for an example of how to create controls dynamically on an ATEasy form.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=161</link><pubDate>6/16/2009</pubDate></item><item><title>How to call a program procedure from the system or from a driver - Published on 6/16/2009</title><description>ATEasy does not allow you to call program procedures directly from the system or a driver as that would make them dependent on specifc programs.&amp;nbsp;&amp;nbsp;Doing so will generate a compiler error.&amp;nbsp;&amp;nbsp;Only one Program module can be active at any time, and it is possible that a procedure defined in one program module would not exist in another module.&amp;nbsp;&amp;nbsp;ATEasy would not be able to resolve this procedure call from the Driver or System module.&lt;br /&gt;&lt;br /&gt;The following procedure shows how to call a program procedure from the System or Driver module.&lt;br /&gt;&lt;br /&gt;In ATEasy you can call program procedures using procedure variables. For example: If you pass a procedure as an argument to a system procedure, that system can call the program procedure using a procedure variable as shown here:&lt;br /&gt;&lt;br /&gt;In the program Program create your procedure ( called 'a' in this example): &lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Procedure a()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Place procedure code here&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Create a public System (or a Driver) procedure variable (called m_procA in this example) and at the beginning of your application assign it to Procedure a, as shown below:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;Program.OnInit()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;system.m_procA=a&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;In the system the program procedure can be called as follows:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;m_procA()&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=166</link><pubDate>6/16/2009</pubDate></item><item><title>PCI/PXI Bus Enumeration - Published on 5/28/2009</title><description>The Plug and Play features of the PCI bus were designed to automate the process of allocating resources to PCI devices. A simplifed process of enumeration is as follows: &lt;br /&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;When a PC is first powered on, the BIOS is loaded and starts the Plug and Play BIOS to enumerate all devices on the PCI bus. Upon boot up, all PCI devices connected to the bus are in an inactive state with no resources assigned and the Plug and Play BIOS must rescan the bus to ascertain what devices are currently present in the system. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The CPU will request the PCI Controller to query each combination of bus, device, and function numbers for a corresponding Device ID and Vendor ID. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;If a device is found for the specified bus device and function, the BIOS will read the configuration space for required resources from the device and memory range (Base Address Registers), IO ports, DMA, and IRQ accordingly. If a PCI-to-PCI bridge is encountered, all the devices behind the bridge are enumerated and allocated resources before continuing past the bridge. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The configuration data is recorded in the Extended System Configuration Data (ESCD) file which is stored in non-volatile memory.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='5'&gt;&lt;/td&gt;&lt;td width='25'&gt;&lt;img src='http://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;If the PCI Controller times out, it will return the maximum value with all bits set high (0xFFFF) indicating that no device was found at the specified device and function number.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;When Windows XP boots up, it will check the ESCD file along with the PCI bus to determine if any new hardware was installed. If so, it will start the process of trying to install the correct device driver. Windows will typically leave the hardware configuration up to the BIOS as to not risk exposing latent BIOS bugs by optimizing resource allocation.&lt;br /&gt;&lt;br /&gt;The BIOS and Windows work in concert to establish the Plug and Play operation of the PCI bus. The level of control given to Windows can sometimes be changed in the BIOS configuration utility for older motherboards. When the PnP OS option is set to &lt;b&gt;No&lt;/b&gt;, the BIOS will configure all PnP PCI devices before Windows boots. If the PnP OS option is set to &lt;b&gt;Yes&lt;/b&gt;, then the BIOS will only configure boot critical devices (Hard Drive, VGA etc.) and leave the rest of the configuration to Windows. ACPI compatible (newer) motherboards do not provide this option.&lt;br /&gt;&lt;br /&gt;The following is a screenshot of the Geotest&lt;b&gt; PCI/PXI Explorer &lt;/b&gt;showing the enumerated PCI devices and their respective resources.&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200163.bmp" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;Reference Knowledge Base Article &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=132'&gt;Q200132&lt;/a&gt; for information on how to resolve PCI resource allocation errors.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=163</link><pubDate>5/28/2009</pubDate></item><item><title>How to repeat a test based on the TestStatus variable - Published on 5/18/2009</title><description>There are a number of ways to repeat a test based on the value of a variable. This example will use the &lt;b&gt;OnEndTest &lt;/b&gt;event to repeat test 4.2 up to three times if the test fails. Code in the &lt;b&gt;OnEndTest&lt;/b&gt; Event will run at the end of every test, so if the retry is only required on specific tests, then the &lt;b&gt;OnEndEvent &lt;/b&gt;code should check for the specific Test Number(s) to prevent retrying all the tests in the application. This example assumes that if Task# 4 Test# 2 fails, then it should be rerun a maximum of 3 times or until it passes. In this example will use a global varaible (m_iTestCount) to keep count of the test retries.&amp;nbsp;&amp;nbsp;A constant iCount will be used to indicate the maximum number of retries.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;&lt;br /&gt;Program Global Variables:&lt;br /&gt;! First declare iCount as a Short Constant and give it a value of 3&lt;br /&gt;m_iCount: Short Const = 3 ! Limit the number of retries to 3&lt;br /&gt;m_iTestCount:&amp;nbsp;&amp;nbsp;Short&lt;br /&gt;&lt;br /&gt;Procedure Program.OnEndTest() ! Event&lt;br /&gt;{&lt;br /&gt;if Test.Number = "4.2"&amp;nbsp;&amp;nbsp; !Check if this is Test Number 4.2&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Check if the test has failed and the number of retries is less than iCount-1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Remember the test has already been run at least once at this stage&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if TestStatus=FAIL AND m_iTestCount &lt; m_iCount-1 &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! Increment the m_iTestCount variable to track the number of retries&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_iTestCount=m_iTestCount + 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! Rerun the current test. Remember Index is zero-based&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Task EndEvents Task.Index+1, Test.Index+1 &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_iTestCount = 0&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EndIf&lt;br /&gt;&lt;br /&gt;Endif&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=162</link><pubDate>5/18/2009</pubDate></item><item><title>Calling a DLL Function with Variable Parameter Lists from ATEasy - Published on 4/28/2009</title><description>Sometimes it is desirable to create and use C/C++ functions within a DLL, that accept a variable number of parameters instead of a fixed set of parameters. &lt;br /&gt;&lt;br /&gt;ATEasy supports use of such a function and calling it from within your test program.&lt;br /&gt;&lt;br /&gt;The first step is to insert the appropriate DLL into your ATEasy project. &lt;br /&gt;&lt;br /&gt;You will then need to manually define the DLL function you wish to use by inserting a new procedure in the DLL sub-module. &lt;br /&gt;&lt;br /&gt;After inserting a new DLL procedure, select CDecl from the type drop down list of the DLL procedure properties page. CDecl is an x86 calling convention that requires the calling function to clean the stack after the called function returns, allowing a variable number of parameters to be used.&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support//Q200159/varlist3.bmp" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;Define all the fixed parameters as you would normally. &lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support//Q200159/varlist1.bmp" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;When you get to the variable list, use the &lt;b&gt;Any &lt;/b&gt;parameter type. Define as many &lt;b&gt;Any &lt;/b&gt;parameters as you would expect to use in your variable list and mark them as optional. These optional parameters will serve as the variable list interface. Use &lt;b&gt;Val Any &lt;/b&gt;type parameters to push parameters to the function (pass by value) or &lt;b&gt;Var Any &lt;/b&gt;type parameters to push a pointer (pass by reference).&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support//Q200159/varlist2.bmp" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;Please refer to Tests 6.8 and 6.9 in the Language.prg example program for more information on implementation of variable parameter lists for &lt;b&gt;sprintf &lt;/b&gt;and &lt;b&gt;scanf&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Note: In order to use a variable parameter list, the DLL must be built using the CDECL convention. Please reference the Microsoft knowledge base article: &lt;br /&gt;&lt;a href='http://support.microsoft.com/kb/69897'&gt;Microsoft KB Article&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You must also have ATEasy 6.0 Build 136 or greater installed (Val/Var Any changes are required for this to work).&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=159</link><pubDate>4/28/2009</pubDate></item><item><title>How to retrieve Windows Environment variables in ATEasy - Published on 4/28/2009</title><description>There are several methods that can be used for retrieving Windows environment variables&lt;br /&gt;1) Using the .NET Framework &lt;b&gt;Environment &lt;/b&gt;class and&lt;br /&gt;2) Using the Windows API &lt;b&gt;GetEnvironmentVariableA() &lt;/b&gt;function&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1) Using the .NET Framework Environment Class:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Note: If you do not have the .NET Framework installed on your computer it can be downloaded and installed for free from the Microsoft web site or by using Windows update. &lt;br /&gt;&lt;br /&gt;To use the &lt;b&gt;Environment &lt;/b&gt;class, first right click on the &lt;b&gt;Libraries&lt;/b&gt; submodule in your program and select &lt;b&gt;Insert Library Below&lt;/b&gt;. Click on the &lt;b&gt;.NET Assemblies&lt;/b&gt; tab and scroll down to &lt;b&gt;mscorlib&lt;/b&gt;. Expand &lt;b&gt;mscorlib&lt;/b&gt; and scroll down to &lt;b&gt;System&lt;/b&gt;. Expand &lt;b&gt;System&lt;/b&gt; and scroll down to &lt;b&gt;Classes&lt;/b&gt;. Expand &lt;b&gt;Classes&lt;/b&gt; and check the box beside &lt;b&gt;Environment&lt;/b&gt;. Then select &lt;b&gt;Insert&lt;/b&gt;. ATEasy will automatically insert the Environment Class into your program. Now define a string variable (called sEnvironVar in the example below) that will be used to store the Environment variable.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;! The following example will find the value of the Windows Environment variable COMPUTERNAME.&lt;br /&gt;! First declare sEnvironVar as a String variable&lt;br /&gt;! Get the Windows Environment variable COMPUTERNAME&lt;br /&gt;sEnvironVar = Environment.GetEnvironmentVariable("COMPUTERNAME") &lt;br /&gt;Print sEnvironVar&amp;nbsp;&amp;nbsp; !Print COMPUTERNAME&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;2) Using the Windows API&amp;nbsp;&amp;nbsp;&lt;b&gt;GetEnvironmentVariableA()&lt;/b&gt; function&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To use this function, first right click on the &lt;b&gt;Libraries&lt;/b&gt; submodule in your program and select &lt;b&gt;Insert Library Below&lt;/b&gt;. Click on the &lt;b&gt;DLL&lt;/b&gt; tab. For the &lt;b&gt;DLL Filename&lt;/b&gt; select &lt;b&gt;kernel32.dll &lt;/b&gt;from the Windows\System32 folder and select &lt;b&gt;Insert&lt;/b&gt;. ATEasy will insert the kernel32 library into your program. Then under the library procedures define a procedure:&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;GetEnvironmentVariableA(sName: Val String, psBuffer: Var String, dwSize: Val DWord) : Public DWord.&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;When you call this function make sure to allocate the psBuffer string parameter (use SetLen).&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;! This example will find the value of the Windows Environment variable COMPUTERNAME&lt;br /&gt;! First declare sEnvironVar as a String variable&lt;br /&gt;! Allocate an appropiate amount of memory to the sEnvironVar string parameter &lt;br /&gt;setlen(sEnvironVar,512) &lt;br /&gt;! Get the Windows Environment variable COMPUTERNAME&lt;br /&gt;GetEnvironmentVariableA("COMPUTERNAME", sEnvironVar, 512)&lt;br /&gt;Print sEnvironVar&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Print COMPUTERNAME&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=160</link><pubDate>4/28/2009</pubDate></item><item><title>Creating an RS170 Video Signal with WaveEasy - Published on 4/21/2009</title><description>&lt;h2&gt;Overview&lt;/h2&gt;WaveEasy simplifies entry of complex analog signals by allowing the user to break the signal up into smaller, easier to define segments and sub-segments, which can easily be replicated in the pattern memory to create a complex signal.&amp;nbsp;&amp;nbsp;This is especially true for signals that are of a repetitive nature, such as RS170 video.&amp;nbsp;&amp;nbsp;The RS170 signal will be discussed in a general sense during this article, but a full discussion of the characteristics of an RS170 signal is beyond the scope of this article, so knowledge of the RS170 signal format and timing is assumed.&amp;nbsp;&amp;nbsp;It should also be noted that examples presented within this article were designed for download to the Geotest &lt;b&gt;GX1110 Function Generator/Arbitrary Waveform Generator &lt;/b&gt;operating at 40 Ms/S (25 nS period).&lt;br /&gt;&lt;br /&gt;For additional information about how to define waveforms in WaveEasy and load them to the &lt;b&gt;GX1110 Arbitrary Waveform Generator&lt;/b&gt;, refer to Knowledge Base Article &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=138'&gt;Q200138&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The RS170 standard transmits a full image at a 29.99Hz rate.&amp;nbsp;&amp;nbsp;The image is transmitted in an interlaced format, with one half of the image being “painted” on the screen after each vertical retrace in an alternating Even/Odd frame format.&amp;nbsp;&amp;nbsp;The half-frames are transmitted at ~ 60Hz rate.&amp;nbsp;&amp;nbsp;A typical horizontal trace signal is shown in figure 1 using common nomenclature.&amp;nbsp;&amp;nbsp;The Even and Odd vertical retrace signals, represented in WaveEasy, are shown in figures 2 and 3.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\RS170.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 1 - RS170 Horizontal Trace Signal (Black &amp; White)&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\Even VSync All_75.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 2 - Even Vertical Synchronization&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\Odd VSync Segment_75.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 3 - Odd Vertical Synchronization&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Waveform Segments and Sub-Segments&lt;/h2&gt;To simplify their definition within WaveEasy, the even/odd vertical retrace synchronization signals are divided into 21 &lt;b&gt;Segments&lt;/b&gt; (labeled "Fields"), each representing the time duration of one horizontal trace.&amp;nbsp;&amp;nbsp;These segments share many common characteristics that facilitate using standard copy/paste functions to build up similar, but slightly different wave components.&amp;nbsp;&amp;nbsp;In between the even/odd vertical retrace signals are the 241 horizontal trace signals that represent the interlaced image.&amp;nbsp;&amp;nbsp;In addition, the even vertical synchronization signal has an added one-half horizontal trace field at its beginning (labeled field 263) and its end to accommodate the one-half horizontal scan line of each image frame.&amp;nbsp;&amp;nbsp;The full image is composed of 21 even vertical retrace fields, plus 241 even horizontal trace fields, plus 21 odd vertical retrace fields, plus 241 odd horizontal trace fields, plus the 263rd horizontal trace tacked on to the even vertical retrace signal.&amp;nbsp;&amp;nbsp;This is a total of 21+241+21+241+½+½=525 horizontal scan lines – one full video frame.&lt;br /&gt;&lt;br /&gt;Each of the field segments making up the vertical retrace and horizontal trace waveforms are further divided into &lt;b&gt;Sub-Segments&lt;/b&gt;, where individual wave components of each field can be defined.&amp;nbsp;&amp;nbsp;Figure 3 demonstrates this concept by defining the “Front Porch” of field #263's synchronization pulse as a 0V signal for a duration of 1.5uS (60 samples at 25 nS [40 MHz] sample rate).&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\Even VSync Sub-Segment 263.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 3 - Sub-Segments of Field #263 - Even Vertical Sync Waveform&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The composite overlay of multiple WaveEasy screen captures in figure 4a illustrates how each sub-segment of field #263, as represented by a change in voltage levels, can be defined.&amp;nbsp;&amp;nbsp;When arranged sequentially they produce the segment pulses of Field #263 within the even vertical synchronization waveform - figure 4b.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\Even VSync Sub-Segment 263_50.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 4a - Sequential Sub-Segments of Field #263 - Even Vertical Sync Waveform&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\Even VSync Segment 263.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 4b - Field #263 Segment - Even Vertical Sync Waveform&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The same process is used to define the remaining frames in the vertical sync waveforms.&amp;nbsp;&amp;nbsp;Where fields are identical to those already defined, copy and paste functions can be used to easily replicate those component waveforms.&amp;nbsp;&amp;nbsp;And where new pulse streams are required, sub-segments of existing fields can be copied and pasted where applicable into the new field (figure 5).&amp;nbsp;&amp;nbsp;The &lt;b&gt;Preview Window&lt;/b&gt; (bottom of figure 5) displays all segments and sub-segments of the active waveform document with the hashed lines identifying the selected segment or sub-segment.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\Preview_75.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 5 - Field #6 of the Even Vertical Sync Waveform&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Waveform Functions&lt;/h2&gt;Similar processes can be used to define the horizontal trace waveform.&amp;nbsp;&amp;nbsp;However, the video content – the waveform that actually defines the intensity of the image as it is painted horizontally across the screen, is defined using canned &lt;b&gt;Functions&lt;/b&gt; built in to WaveEasy.&amp;nbsp;&amp;nbsp;Figure 6a shows a single horizontal trace signal consisting of a black-to-white gradient.&amp;nbsp;&amp;nbsp;The horizontal sync signal can be seen at the beginning of the waveform, and was created using the same process that was used to create the vertical sync waveforms.&amp;nbsp;&amp;nbsp;But the video content (sub-segment Video 14+) was generated using the built-in WaveEasy &lt;b&gt;SawTooth&lt;/b&gt; function (figure 6b).&amp;nbsp;&amp;nbsp;The formula for defining the SawTooth waveform is:&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;(0.55 + 0.45 * SawTooth(1.0005 * x))&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\HScan_01.jpg" alt`=&amp;quot; border='0' /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\HScan_02.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figures 6a and 6b - Single horizontal trace signal using the SawTooth function to generate the video content&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;If the same waveform were used for all of the 442 interlaced horizontal traces, this sawtooth waveform will generate a dark-to-white gradient across the screen from left to right.&amp;nbsp;&amp;nbsp;Many other simple built in WaveEasy functions can be used to create novel or useful test patterns (figures 7a and 7b).&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\Triangle_01.jpg" alt`=&amp;quot; border='0' /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\Triangle_02.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 7a - Triangle Function video signal and formula&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\Sine_01.jpg" alt`=&amp;quot; border='0' /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\Sine_02.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 7b - Sine Function video signal and formula&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You also have access to complex functions such as &lt;b&gt;Noise&lt;/b&gt; (figure 8a), or combinations of functions such as &lt;b&gt;Square Pulses&lt;/b&gt; with &lt;b&gt;Sine Modulation&lt;/b&gt; (figure 8b).&amp;nbsp;&amp;nbsp;The latter will generate vertical lines across the screen of varying white intensity.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\Noise_01.jpg" alt`=&amp;quot; border='0' /&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\Noise_02.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figures 8a - Noise Function video signal and formula&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\VLines_01.jpg" alt`=&amp;quot; border='0' /&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\VLines_02.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figures 8b - Sine-Modulated Square Wave video signal and formula&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Combining Waveform Segments&lt;/h2&gt;All of these component waveforms can be assembled to produce one full video frame.&amp;nbsp;&amp;nbsp;Figure 9 depicts an abbreviated video frame showing the full even/odd vertical sync pulses, each bracketing three horizontal traces (preview waveform image).&amp;nbsp;&amp;nbsp;Normally there would be 241 horizontal traces in between each even or odd vertical retrace.&amp;nbsp;&amp;nbsp;The large waveform occupying the center of the WaveEasy screen shows a magnified section of the preview waveform (hashed lines) where the signal transitions from blank horizontal traces (dark) to active video (represented by sine waves).&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\\Q200158\\Composite Video_75.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 9 - Abbreviated full-interlace video frame&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The process of assembling (loading) these waveforms into a full video frame within the GX1110 is easily done via software using the supplied GX1110 driver functions.&amp;nbsp;&amp;nbsp;The sequence would be to load the even vertical synchronization waveform (55,880 samples), followed by 241 copies of the horizontal trace waveform (2540 samples each), followed by the odd vertical synchronization waveform (53,340 samples), followed by the remaining 241 copies of the horizontal trace waveform.&amp;nbsp;&amp;nbsp;The total pattern size is 1333500 samples in duration – which when output at a 40 MHz sample rate, generates a video signal with a 29.99 Hz refresh rate – exactly as defined for RS170 video.&amp;nbsp;&amp;nbsp;Sample &lt;b&gt;ATEasy&lt;/b&gt; code to demonstrate this concept is provided below.&lt;br /&gt;&lt;br /&gt;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;GTWAVE Set OperationMode ArbitraryWaveformGenerator()&lt;br /&gt;GTWAVE Set OutputState(aChannelA,aOutputDisabled)&lt;br /&gt;GTWAVE Stop(aChannelA)&lt;br /&gt;&lt;br /&gt;dwStart=0&lt;br /&gt;! Load fields 1 to 21 of even vertical sync, pluse field 263 for one-half horizontal traces&lt;br /&gt;GTWAVE Arb Waveform FileLoad(aChannelA,"Even VSync.WaveEasy",0,dwStart,-1)&lt;br /&gt;dwStart=dwStart+55880&lt;br /&gt;&lt;br /&gt;For i=22 to 262 ! Load horizontal trace fields 22 to 262 - Completes even interlace frame&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTWAVE Arb Waveform FileLoad(aChannelA,"Sine.WaveEasy",0,dwStart,-1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dwStart=dwStart+2540&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;! Load fields 1 to 21 of odd vertical sync&lt;br /&gt;GTWAVE Arb Waveform FileLoad(aChannelA,"Odd VSync.WaveEasy",0,dwStart,-1)&lt;br /&gt;dwStart=dwStart+53340&lt;br /&gt;&lt;br /&gt;For i=22&amp;nbsp;&amp;nbsp;to 262 ! Load horizontal trace fields 22 to 262 - Completes odd interlace frame AND full video frame&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GTWAVE Arb Waveform FileLoad(aChannelA,"Sine.WaveEasy",0,dwStart,-1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dwStart=dwStart+2540&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;GTWAVE Set Amplitude(aChannelA,1.2)&lt;br /&gt;GTWAVE Set Offset(aChannelA,0)&lt;br /&gt;GTWAVE Arb Set SampleRate(aChannelA,40e+06)&lt;br /&gt;GTWAVE Arb Set Waveform Length(aChannelA,0,dwStart)&lt;br /&gt;GTWAVE Run(aChannelA)&lt;br /&gt;GTWAVE Set OutputState(aChannelA,aOutputEnabled)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=158</link><pubDate>4/21/2009</pubDate></item><item><title>White Paper: PXI - The Future of Test - Published on 4/14/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;As commercial and military electronic technology evolves so does the need for more sophisticated, reliable, and cost-effective test equipment. The new PXI platform fills this gap and provides the ultimate test solution for field, laboratory, or manufacturing test applications. This paper discusses the evolution of test that led to the development of the PXI standard and provides technical information of the PXI Bus.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2002\PXI_The_Future_of_Test.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=139</link><pubDate>4/14/2009</pubDate></item><item><title>White Paper: PXI for Military Test Applications - Published on 4/14/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;As PXI is gaining in-roads into military test applications, systems integrators start using the PXI platform as the core of military testers for manufacturing, service, and field test. This paper discusses two such applications. The first is a production tester used in the manufacturing of the Longbow launcher and the second is a portable field tester for the Maverick Missile System.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2002\PXI_for_Military_Test_Applications_Loofie_Gutterman.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=140</link><pubDate>4/14/2009</pubDate></item><item><title>White Paper: Military and Field Test Applications Using Modified COTS Products - Published on 4/14/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;Field test for military and industrial applications requires special test equipment that meets stringent environmental requirements. These test applications require hardware that can provide high-performance and capabilities, yet be portable and rugged to ensure usability in the field. Typical environmental requirements include extended temperature range, shock &amp; vibration, altitude, humidity, salt-fog, explosive atmosphere, EMI/RFI and more. The required levels are in most cases higher than those provided by Commercial Off The Shelf (COTS) equipment, which dictates a different approach by the tester designer. This paper discusses design approaches for such testers or data acquisition systems and advocates the use of modified COTS as the preferred solution.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2003\Military_and_Field_Test_Applications_Using_Modified_COTS_Products_Loofie_Gutterman.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=141</link><pubDate>4/14/2009</pubDate></item><item><title>White Paper: Next Generation COTS Test Systems - Published on 4/14/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;This paper surveys card-to-card coordination, synchronization, triggering, and cross triggering in PCI eXtensions for Instrumentation (PXI) commercial off-the-shelf (COTS) systems. It provides an overview with some design guidelines for COTS designers and offers some suggestions to system integrators.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2003\Next_Generation_COTS_Test_Systems_Thomas_M.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=142</link><pubDate>4/14/2009</pubDate></item><item><title>White Paper: Testing MicroProcessor-Based Boards - Published on 4/14/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;Testing Microprocessor-based boards (µP) could be a challenge even for the experienced test engineer. This paper reviews the related challenges and available test philosophies for the functional testing of these products.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2003\Testing_MicroProcessor-Based_Boards_Loofie_Gutterman.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=143</link><pubDate>4/14/2009</pubDate></item><item><title>White Paper: Integrating VISA, IVI and ATEasy to Migrate Legacy Test Systems - Published on 4/14/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;New software technology, such as Interchangeable Virtual Instruments (IVI), benefits customers of Automatic Test Equipment by reducing cost of ownership. The costs of rehosting test program software due to obsolescence issues can be reduced by using application development environments such as ATEasy and IVI. ATEasy provides the means of changing instruments and test system resources similar to IVI via its interchangeable Instrument Technology (I2T). IVI further allows the customer end-user to make the change without compiling the application, as ATEasy would require. Bycombining the power of both technologies, both the customer and the integrator benefit from maximum flexibility and options for instrumentation obsolescence. &lt;br /&gt;This paper discusses the issues and concerns in applying this strategy to a deliverable test system. It discusses some of the obstacles and "speed-bumps" that were overcome during development. Although IVI has been around for over 5 years, it's still a new technology and early adopters will have the work around issues such as driver availability, varying levels of support by equipment vendors, and the lack of experience in the industry applying IVI.&lt;br /&gt;The ATEasy environment can leverage the current, state-of-the art technology while positioning the user and integrator for the future.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2004\Integrating_Interchangeable_Virtual_Instruments_IVI_Resources_with_ATEasy_Ron_Yazma.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=144</link><pubDate>4/14/2009</pubDate></item><item><title>White Paper: Migrating an Electro-Optic Test Bench to PXI - Published on 4/14/2009</title><description>&lt;h2&gt;Abstract&lt;/h2&gt;This paper describes how the Electro-Optic Test Bench ground support test equipment for the TOW Missile has been pressed into extended service even though it is not supported and is obsolete. A new COTS PXI-based test system and optical bench has been designed to replace the obsolete test set for all versions of TOW.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2004\Migrating_an_Electro-Optic_Test_Bench_to_PXI_Thomas_M.pdf&amp;refpage=&amp;FileID=0'&gt;&lt;img src='../images/ico_download.gif' border='0' alt='Download' /&gt;Download the complete white paper&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=145</link><pubDate>4/14/2009</pubDate></item><item><title>Using Trigger Mapping on the GX7XXX Smart Chassis - Published on 3/26/2009</title><description>One of the capabilities that differentiate a test and measurement instrument installed in a PXI chassis from traditional rack-and-stack instruments and instruments installed in a PCI mainframe, is the addition of the PXI trigger bus.&amp;nbsp;&amp;nbsp;This bus facilitates a more tightly integrates suite of instrument by allowing PXI-based instruments to synchronize operation using common clocks and triggers, without the need for external wires or cables.&amp;nbsp;&amp;nbsp;However, due to the nature of the PCI bus, and by extension, the PXI bus, bridges are required to link bus segments together when more than 8 devices are installed on the bus.&amp;nbsp;&amp;nbsp;The PCI bridge extends the computer data bus, but does nothing about extending the PXI trigger bus across multiple bus segments, which is necessary to maintain the synchronization capabilities designed into the PXI bus across the full backplane.&lt;br /&gt;&lt;br /&gt;Early introductions of PXI chassis' accommodated extending the PXI trigger bus by using jumpers on the chassis backplane to enable triggers and set the direction control of the trigger signals between bus segments.&amp;nbsp;&amp;nbsp;If for any reason the trigger bus ever needed to be reconfigured, the chassis would have to be powered down, instruments removed to gain access to the backplane jumpers, and the jumpers manually reconfigured to accommodate the new triggering requirements.&amp;nbsp;&amp;nbsp;This dated technique is still used by many PXI chassis’.&lt;br /&gt;&lt;br /&gt;With the introduction the Smart Chassis series from Geotest, this dated methodology has been replaced with software control for mapping and enabling PXI triggers across bus segments.&amp;nbsp;&amp;nbsp;Trigger mapping can now be set using software commands or virtual instrument panels, all while the chassis is p
