﻿<?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>PMU Functionality with the GX5960 Series - Published on 5/7/2012</title><description>The Gx5960 Series of Digital I/O devices include the ability to configure each of its I/O channels to operate in either dynamic or PMU mode. This article focuses on the PMU mode.&lt;br /&gt;&lt;br /&gt;Each digital channel includes a parametric measurement unit (PMU) which can be used to characterize and measure a digital pin’s DC characteristics. The PMU can be configured for force current, measure voltage, or force voltage, measure current.&amp;nbsp;&amp;nbsp;The PMU’s range of operation is listed below:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Force voltage range: -10 volts to +15 volts (plus vMid Voltage)&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Force current range: +/- 25 mA FS or +/- 200 mA &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Measure voltage range: -10 volts to +15 volts (plus vMid Voltage)&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Measure current range: +/- 25 mA FS or +/- 200 mA &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200224\\PMUDiagram2.JPG" alt="GX5960 Parametrics Measurement Unit Circuit" title="GX5960 Parametrics Measurement Unit Circuit" border='0' &gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;API Functions&lt;/h2&gt;The following are the API calls required to set up the instrument for PMU operation:&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 GtDio6xSetChannelMode(SHORT nHandle, LONG lChannelListArraySize, PLONG palChannelListArray, SHORT nMode, PSHORT pnStatus);&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;VOID WINAPI GtDio6xSetChannelForcedVoltage(SHORT nHandle, LONG lChannelListArraySize, PLONG palChannelListArray, DOUBLE dVoltage,&amp;nbsp;&amp;nbsp;SHORT nCurrentRange, DWORD dwSetupMode, DOUBLE dMaxCurrent, PSHORT pnStatus);&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;VOID WINAPI GtDio6xSetChannelForcedCurrentCommutatingVoltage(SHORT nHandle, LONG lChannelListArraySize, PLONG palChannelListArray, DOUBLE dVComHi, DOUBLE dVComLo, PSHORT pnStatus);&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;VOID WINAPI GtDio6xSetChannelForcedCurrentCommutatingVoltage(SHORT nHandle, LONG lChannelListArraySize, PLONG palChannelListArray, DOUBLE dVComHi, DOUBLE dVComLo, PSHORT pnStatus);&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Note that the voltage clamps only apply for forced current operation up to 24mA. If this current is exceeded, the voltage clamps are no longer effective.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Example Code&lt;/h2&gt;The following C code performs the following:&lt;br /&gt;1. Set Channel 0 Mode to PMU Force Current&lt;br /&gt;2. Set Channel 0 PMU Force Current Voltage clamps to +5V and -5V&lt;br /&gt;3. Set Channel 0 to Force 10mA in 25mA range&lt;br /&gt;4. Measure the output current&lt;br /&gt;5. Set Channel 0 Mode to PMU Force Voltage&lt;br /&gt;6. Set Channel 0 to Force 12V with the current range set to 25mA&lt;br /&gt;7. Measure the output voltage&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;//Use channel 0&lt;br /&gt;alChannelListArray[0]=0; //Use channel 0&lt;br /&gt;GtDio6xInitialize(1, &amp;nHandle, &amp;nStatus);&lt;br /&gt;GtDio6xSetChannelConnect(nHandle, 1, alChannelListArray, TRUE, &amp;nStatus);&lt;br /&gt; //Set Channel Mode to PMU Force Current&lt;br /&gt;GtDio6xSetChannelMode(nHandle, 1, alChannelListArray, GTDIO6X_CHANNEL_MODE_PMU_FORCE_CURRENT, &amp;nStatus);&lt;br /&gt;//Set Clamping voltages to +5V and -5V&lt;br /&gt;GtDio6xSetChannelForcedCurrentCommutatingVoltage(nHandle, 1, alChannelListArray, 5, -5, &amp;nStatus);&lt;br /&gt;//Force 10 mA in 25mA range&lt;br /&gt;GtDio6xSetChannelForcedCurrent(nHandle, 1, alChannelListArray, 10, GTDIO6X_PMU_CURRENT_RANGE_N25MA_TO_P25MA, &amp;nStatus); &lt;br /&gt;//Measure the current output&lt;br /&gt;GtDio6xMeasure(nHandle, 0, GTDIO6X_MEASURE_OUTPUT_CURRENT, &amp;dMeasurement, 1, 0, 0, &amp;nStatus); &lt;br /&gt;&lt;br /&gt;//Set Channel Mode to PMU Force Voltage&lt;br /&gt;GtDio6xSetChannelMode(nHandle, 1, alChannelListArray, GTDIO6X_CHANNEL_MODE_PMU_FORCE_VOLTAGE, &amp;nStatus); &lt;br /&gt;//Force 12 Volts&lt;br /&gt;GtDio6xSetChannelForcedVoltage(nHandle, 1, alChannelListArray, 12.0, GTDIO6X_PMU_CURRENT_RANGE_N25MA_TO_P25MA, GTDIO6X_PMU_FV_SETUP_DEFAULT, 20, &amp;nStatus); &lt;br /&gt;//Measure the voltage output&lt;br /&gt;GtDio6xMeasure(nHandle, 0, GTDIO6X_MEASURE_IO_VOLTAGE, &amp;dMeasurement, 1, 0, 0, &amp;nStatus); &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;More information on the &lt;a href='http://www.geotestinc.com/Product.aspx?model=GX5960+Series'&gt;GX5960&lt;/a&gt; series can be found on the &lt;a href='http://www.Geotestinc.com'&gt;Geotest&lt;/a&gt; website. &lt;br /&gt;&lt;br /&gt;Look at the following articles for more information about PMU and related applications: &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=207'&gt;PMU White Paper&lt;/a&gt; , &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=223'&gt; Semiconductor Testing with GX5295 PMU&lt;/a&gt; </description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=224</link><pubDate>5/7/2012</pubDate></item><item><title>Programming I/O Width on the GX5290 Series - Published on 5/7/2012</title><description>The GX5290 series of DIO cards have a programmable I/O width feature that allows the user to trade I/O channel width for vector memory depth. The GX5292, GX5292e, GX5293 and GX5295 cards each offer 256MB of vector memory and the GX5291 offers 128MB of vector memory. Under software control, the vector memory can be configured to support channel widths shown in the table below. &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;&lt;b&gt;&lt;div align='center'&gt;Vector Width&lt;/div&gt;&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;&lt;b&gt;&lt;div align='center'&gt;GX5292/GX5292e/GX5293/GX5295 Vector Depth&lt;/div&gt;&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;&lt;b&gt;&lt;div align='center'&gt;GX5291 Vector Depth&lt;/div&gt;&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;&lt;b&gt;&lt;div align='center'&gt;Corresponding DIO Channels&lt;/div&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;32 Ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;64Mbit/Ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;32Mbit/Ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;Ch0-31&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;16 Ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;128Mbit/ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;64Mbit/ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;Ch0-15&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;8 Ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;256Mbit/ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;128Mbit/ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;Ch0-7&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;4 Ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;512Mbit/ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;256Mbit/ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;Ch0-3&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;2 Ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;1Gbit/ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;512Mbit/ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;Ch0-1&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;1 Ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;2Gbit/ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;1Gbit/ch&lt;/div&gt;&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;&lt;div align='center'&gt;Ch0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Additional information on this subject can be found in the GTDIO Programmers Reference Manual under the &lt;b&gt;DIOWriteOutMemory()&lt;/b&gt; and &lt;b&gt;DIOWriteDirectionMemory()&lt;/b&gt; functions. &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Configuring DIO cards for vector widths of 4, 2 or 1&lt;/h2&gt;To utilize all of the vector memory when using vector widths of 4, 2 or 1 channel(s), the vector data needs to be packed into a DWORD array (32-bit boundary) before it can be transmitted. The vector data is packed into the DWORD array starting at the LSB of the first DWORD array element. For example, a vector array with the following 32 4-bit hexadecimal values starting at element 0&amp;nbsp;&amp;nbsp;as shown here in this ATEasy 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;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;br /&gt;will be packed into the DWORD array called adwTxData[] starting at element 0, 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;adwTxData[0] = 0x76543210 &lt;br /&gt;adwTxData[1] = 0xFEDCBA98 &lt;br /&gt;adwTxData[2] = 0x76543210 &lt;br /&gt;adwTxData[3] = 0xFEDCBA98 &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;From the above example, it is clear that the packing process is very straightforward and utilizes all available vector memory. To perform the packing function the programmer can use either the GX529x driver &lt;b&gt;DioDataPack()&lt;/b&gt; function or can write a custom function to pack the data. Direction control information will also need to be packed into a DWORD array in the same way as the transmit data array. It is important to note that when writing the DWORD array to the DIO cards Output Memory (&lt;b&gt;DioWriteOutMemory()&lt;/b&gt;) or to the Direction Control Memory (&lt;b&gt;DioWriteDirectionMemory()&lt;/b&gt;) that the dwSize parameter is the number of vectors to transmit not the number of elements in the DWORD array. For example, using the data from the above array the&lt;b&gt; DioWriteOutMemory()&lt;/b&gt; and &lt;b&gt;DioWriteDirectionMemory(&lt;/b&gt;) functions will be 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;DioWriteOutMemory(nMasterHandle,adwTxData,0, 32, nStatus) &lt;br /&gt;DioWriteDirectionMemory(nMasterHandle, adwDirCtrl, 0, 32, nStatus) &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Notice the dwSize parameter is 32 not 4. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; If the DIO card is receiving data, this data will be stored in the receive memory in a packed format in the same way the transmit data is packed above. To analyze the received data it can be unpacked from the DWORD format to its original width using the&lt;b&gt; DioDataUnpack()&lt;/b&gt; function.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Configuring the DIO cards for vector widths of 8 and 16 channels&lt;/h2&gt;When using vector widths of 8 and 16 channels the transmit data and direction control data does not need to be packed as this process is done automatically by the &lt;b&gt;DioWriteOutMemory() &lt;/b&gt;and &lt;b&gt;DioWriteDirectionMemory()&lt;/b&gt; functions. The only requirements for using these widths are:&lt;br /&gt;1) When using a vector width of 8 channels the vector data must be in a BYTE array and&lt;br /&gt;2) When using a vector width of 16 channels the vector data must be in a WORD (16-bit) array. &lt;br /&gt;&lt;br /&gt;Below are two examples showing how the data can be packed. Example 1 uses the &lt;b&gt;DioDataPack()&lt;/b&gt; function and Example 2 uses standard compiler shift commands.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example 1&lt;/b&gt;: Transmit a number of 4-bit elements previously stored in BYTE array called aucFileData[]. The number of elements to transmit is indicated by dwFileSize. This example assumes that the vector data is stored as one 4-bit vector per array element.&lt;br /&gt;&lt;br /&gt;To pack the 4-bit data, 8 elements at a time are transferred to a temporary BYTE array (aucTemp[]) and then the DioDataPack() function is used to write the data to each element of the adwTxData[] DWORD array.&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;!Pack the 4-bit data into adwTxData[] (a DWORD (32-bit) array)&lt;br /&gt;k=0&lt;br /&gt;for i=0 to dwFileSize-1&lt;br /&gt;&amp;nbsp;&amp;nbsp; !Transfer 8 4-bit elements to be packed into a temporary array aucTemp[]&lt;br /&gt;&amp;nbsp;&amp;nbsp; for j=0 to 7 do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aucTemp[j] = aucFileData[i]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i=i+1&lt;br /&gt;&amp;nbsp;&amp;nbsp; next&lt;br /&gt;&amp;nbsp;&amp;nbsp;!Now pack the lower 4 bits of the first eight elements of the aucTemp[] array&lt;br /&gt;&amp;nbsp;&amp;nbsp;!into the adwTxData[] array starting at location 0. This is the data to be transmitted.&lt;br /&gt;&amp;nbsp;&amp;nbsp;DioDataPack(4, 8, 0, 1, adwTxData[k], aucTemp, nStatus)&lt;br /&gt;&amp;nbsp;&amp;nbsp;k=k+1&lt;br /&gt;&amp;nbsp;&amp;nbsp;!Undo the last increment from the above For {j} loop because For {i} loop will also increment i&lt;br /&gt;&amp;nbsp;&amp;nbsp;i=i-1 &lt;br /&gt;next&lt;br /&gt;&lt;br /&gt;!Write the adwTxData array to the Output memory. Remember the dwSize parameter is the &lt;br /&gt;!number of vectors to be transmitted not the number of elements in the adwTxData array.&lt;br /&gt;DioWriteOutMemory(nMasterHandle,adwTxData,0, dwFileSize,nStatus)&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Example 2&lt;/b&gt;: Transmit a number of n-bit wide elements (where n=4,2 or 1) previously stored in BYTE array called aucFileData[]. The number of elements to transmit is indicated by dwFileSize. This ATEasy example assumes that the vector data is stored as one vector per array element.&lt;br /&gt;&lt;br /&gt;This example is written using standard compiler shift commands instead of using the &lt;b&gt;DioDataPack()&lt;/b&gt; function. It uses the ATEasy GX529x driver commands but also expands on the above example by working with vector widths of 4, 2 or 1. First, the DIO instrument I/O configuration is read and based on the channel width value (nChWidth), the data mask (nMask) and number of channels (nNumCh) variables are assigned appropiate values. nMask is used to mask the unwanted vector data bits in each aucFileData[] array element and nNumCh is used to shift the data during the packing process.&amp;nbsp;&amp;nbsp; &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;!Get the DIO I/O Configuration information&lt;br /&gt;DIO Get IOConfiguration(nMasterHandle, nChWidth, nDir)&lt;br /&gt;&lt;br /&gt;!Set the nMask and nNumCh variables depending on the channel width&lt;br /&gt;select nChWidth&lt;br /&gt;&amp;nbsp;&amp;nbsp;Case aChannelsWidth4&amp;nbsp;&amp;nbsp;!Using a vector width of 4 Channels&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nMask = 0x0f&amp;nbsp;&amp;nbsp;!Mask out upper 4 bits. In this example data is in lower 4 bits&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nNumCh = 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Number of DIO channels. Used to shift data for packing purposes&lt;br /&gt;&amp;nbsp;&amp;nbsp;Case aChannelsWidth2&amp;nbsp;&amp;nbsp;!Using a vector width of 2 Channels&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nMask = 0x03&amp;nbsp;&amp;nbsp; !Mask out upper 6 bits. Data is in the lower 2 bits&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nNumCh = 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !Number of DIO channels. Used to shift data for packing purposes&lt;br /&gt;&amp;nbsp;&amp;nbsp;Case aChannelsWidth1&amp;nbsp;&amp;nbsp;!Using a vector width of 1 Channel&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nMask = 0x01&amp;nbsp;&amp;nbsp; !Mask out upper 7 bits. Data is in the LSB&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nNumCh = 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !Number of DIO channels. &lt;br /&gt;endselect&lt;br /&gt;&lt;br /&gt;!Now pack the vector data into DWORD (32-bit) array called adwTxData[]&lt;br /&gt;i=0&amp;nbsp;&amp;nbsp;!Used to count through the vector data array dwFileData[]&lt;br /&gt;k=0&amp;nbsp;&amp;nbsp;!Used to count through the adwTxData[] as data gets packed&lt;br /&gt;while i &lt; dwFileSize&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;j=0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Pack aucFileData[] elements into 32bit boundaries&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while j&lt;(32 div nNumCh) and i &lt; dwFileSize &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;adwTxData[k]=adwTxData[k] or ((aucFileData[i] and nMask) shl (j*nNumCh))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i=i+1 !Increment aucFileData[] counter&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;j=j+1 !Increment while loop counter&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endwhile&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;k=k+1&amp;nbsp;&amp;nbsp; !Increment adwTxData[] counter&lt;br /&gt;endwhile&lt;br /&gt;&lt;br /&gt;!Write the adwTxData array to the Output memory. Remember the dwSize parameter is the &lt;br /&gt;!number of vectors to be transmitted (dwFileSize) not the number of elements in the&lt;br /&gt;!adwTxData array.&lt;br /&gt;DIO Write Memory Out (nMasterHandle,adwTxData,0,dwFileSize)&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;Program examples&lt;/h2&gt;An ATEasy application that demonstrates how to setup a GX5295 DIO card for various vector widths can be downloaded by clicking on this link &lt;a href='http://www.geotestinc.com/images/support/\\Q200226\Q200226.zip' target='_blank'&gt;Q200226.zip&lt;/a&gt;. The application has three tests&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;InitializeDIO. This initializes the GX5295. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;4ChWidthDLL: This is example 1 above. This uses the GTDIO DLL commands to setup the card for a 4 channel vector width and to transmit a clock pattern on all four channels. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;nChWidthATEasy: This is example 2 above. It uses the GX5295 ATEasy commands to setup the card for a 4 channel vector width and to transmit a clock pattern on all four channels. To change the configuration to output on two channels or only one channel, replace the aChannelsWidth4 parameter value in the configuration setup line&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;DIO Setup IOConfiguration(nMasterHandle,aChannelsWidth4, 0x0)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;br /&gt;with aChannelsWidth2 for a two channel vector width or to aChannelsWidth1 for a single channel vector width.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt; </description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=226</link><pubDate>5/7/2012</pubDate></item><item><title>White Paper: Next Generation Test System Architectures for Depot and O-Level Test - Published on 3/1/2012</title><description>&lt;b&gt;Abstract:&lt;/b&gt;&lt;br /&gt;For over 30 years, ATE has been a key resource and tool for the maintenance and repair of electronic systems, subsystems and board level assemblies deployed on a wide range of military-aerospace systems. ATE has been relied upon to maintain and support electronic assemblies for avionics, weapons systems, and communication systems. In addition, repair logistics and the “up-time” demands for these systems have resulted in the need for repair / support strategies that shorten the repair loop. For the US Marine Corp, the need to minimize this repair loop is acute and has resulted in the adoption of a maintenance / repair strategy that employs Depot – level test capabilities which can also be deployed at the field or O-level. &lt;br /&gt;&lt;br /&gt;This paper discusses how a PXI-based architecture which employs the GX5960 subsystem can provide the basis for replacing a Teradyne VXI M9 digital test solution. The successful development and implementation of software tool set for migrating M9 or LASAR-based test programs is also presented. The resulting solution offers a downsized test platform that supports legacy test programs while offering portability and performance at a significantly lower cost for both Depot and O-level test needs.&lt;br /&gt;&lt;br /&gt;&lt;a href='../GetFile.aspx?Type=File&amp;Name=Whitepapers\2012\Nxgen-test-systems.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;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=227</link><pubDate>3/1/2012</pubDate></item><item><title>How to Display an Animated GIF File in an ATEasy Form - Published on 2/27/2012</title><description>In ATEasy form's, animated GIF files are supported by the &lt;b&gt;ALog control&lt;/b&gt;. To display an animated GIF in a log control, set the control to HTML mode (PlainText property set to False), and then append an image tag with the GIF file.&lt;br /&gt;The image file is defined using the HTML &lt;b&gt;IMG tag&lt;/b&gt; and can then be inserted into the ALog control using the &lt;b&gt;Append &lt;/b&gt;method. &lt;br /&gt;&lt;br /&gt;The height and width of the image can be specified using the &lt;b&gt;height&lt;/b&gt; and &lt;b&gt;width &lt;/b&gt;attributes.&lt;br /&gt;For example, the following line links the image to the "C:\geotest.gif" file and sets the image height and width to 42.&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;&amp;nbsp;&amp;nbsp;&lt;img src="c:\\geotest.gif" height="42" width="42" /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;br /&gt;&lt;br /&gt;The image is then appended to the ALog control using the Append control 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;&amp;nbsp;&amp;nbsp;log1.Append("&lt;img src=\"c:\\geotest.gif\" height=\"42\" width=\"42\" /&gt;")&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;To hide the ALog's scrollbar, which is displayed by default, insert the following into ALog's OnLoad event:&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;&amp;nbsp;&amp;nbsp;log1.Document.body.setAttribute("scroll", "no") &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The image can be positioned in the ALog control by setting the ALog control margins. For example, inserting the following settings into AForm's OnLoad event will align the image in the Top-Left corner of ALog control : &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;&amp;nbsp;&amp;nbsp;log1.Document.Body.LeftMargin=0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;log1.Document.Body.TopMargin=0 &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Here is the complete code for displaying the animated GIF in a log control:&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;&amp;nbsp;&amp;nbsp;! set the ALog Window to HTML mode to display the animated image file&lt;br /&gt;&amp;nbsp;&amp;nbsp;logAnimated.PlainText=False &lt;br /&gt;&amp;nbsp;&amp;nbsp;! remove the Scroll bar&lt;br /&gt;&amp;nbsp;&amp;nbsp;logAnimated.Document.body.setAttribute("scroll", "no") &lt;br /&gt;&amp;nbsp;&amp;nbsp;! position the image in the Top-Left corner of the ALog control&lt;br /&gt;&amp;nbsp;&amp;nbsp;logAnimated.Document.Body.LeftMargin=0&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;logAnimated.Document.Body.TopMargin=0&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;! get the dimensions of the ALog control for the image height and width settings&lt;br /&gt;&amp;nbsp;&amp;nbsp;fHeight=logAnimated.Height-4&lt;br /&gt;&amp;nbsp;&amp;nbsp;fWidth=logAnimated.Width-4&lt;br /&gt;&amp;nbsp;&amp;nbsp;! place the image in the ALog window&lt;br /&gt;&amp;nbsp;&amp;nbsp;sText="&lt;IMG SRC=\"File:"+GetDir(aGetDirAppExe)+"\\Hourglass_icon.gif"+\ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;" \"width=\""+str(fWidth)+" \"height=\""+str(fHeight)+"\"&gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;logAnimated.Append(sText)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;An ATEasy application that demonstrates how to load an animated GIF file into a form can be downloaded by clicking on this link &lt;a href='http://www.geotestinc.com/images/support/Q200225\AnimatedGifHourglass.zip' target='_blank'&gt;Q200225.zip&lt;/a&gt;. The application opens a window that displays a spinning hourglass. The main section of code can be found in the OnLoad event for the program form.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=225</link><pubDate>2/27/2012</pubDate></item><item><title>Semiconductor Continuity Test Using the GX5295 Digital IO w/PMU - Published on 2/24/2012</title><description>&lt;h2&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/h2&gt;Prior to testing the functionality of a semiconductor device, it is often a requirement to verify the structural integrity of the device by measuring its DC parameters.&amp;nbsp;&amp;nbsp;If a device fails any of the DC parameter tests, then there is no need to waste time (or money) running a functional test.&amp;nbsp;&amp;nbsp;DC Parametric Measurement Units (PMU's) can be used to perform dc characterization tests on a device by forcing a voltage and measuring a current, and by forcing a current and measuring a voltage.&amp;nbsp;&amp;nbsp;Using these two simple processes, a full range a DC parameters can be measured.&lt;br /&gt;&lt;br /&gt;This article is the first in a series that demonstrates how the per-pin PMU capabilities of the GX5295 can be used to perform DC characterization tests on semiconductor devices.&amp;nbsp;&amp;nbsp;The test programs are written in ATEasy, although any modern programming language could be used, and all screen captures are of the ATEasy application.&amp;nbsp;&amp;nbsp;The tests described here can be conducted on a wide variety of devices, from semiconductor IC's to printed circuit boards, so the ATEasy application was written to allow easier migration to other devices.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;b&gt;Continuity Test&lt;/b&gt;&lt;/h2&gt;The first step in the test process, and the focus of this article, is to determine if the Device Under Test (DUT) is connected to the tester resources – in this case the GX5295 Digital IO (DIO).&amp;nbsp;&amp;nbsp;This test is called a “Continuity” test, and it verifies continuity between the tester and DUT by detecting the ESD diode found on IC pins.&amp;nbsp;&amp;nbsp;Tester-to-DUT continuity is measured by forcing a small current on to the DUT pins, and measuring for the presence or absence of a voltage.&amp;nbsp;&amp;nbsp;This utilizes the Force Current, Measure Voltage (FIMV) capability of the GX5295’s PMU.&amp;nbsp;&amp;nbsp;The ESD protection diode is a semiconductor device, and the voltage developed across it when a current flows is consistent with the voltage drop across a semiconductor junction.&amp;nbsp;&amp;nbsp;If the ESD diode is not present, or in the case of continuity tests, if the tester is not connected to the DUT pin, current will not flow through the ESD diode and the voltage will be inconsistent with semiconductor junction voltage drops.&amp;nbsp;&amp;nbsp;If the ESD diode is defective, then other voltage anomalies can be detected, such as “0” volts measured across an ESD diode in cases where the diode is shorted.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;b&gt;Pin Mapping&lt;/b&gt;&lt;/h2&gt;Before any test or measurement can be performed, you must define the system configuration.&amp;nbsp;&amp;nbsp;An ATEasy "Command" was created that allows the test programmer to define the number of DUT's (Device Under Test) installed in the test fixture, and their pin counts.&amp;nbsp;&amp;nbsp;For additional information about defining commands in ATEasy, refer to the ATEasy Help/Commands on-line documentation.&amp;nbsp;&amp;nbsp;It is assumed that all of the DUT's are of the same type device.&amp;nbsp;&amp;nbsp;The command specifys the number of DUT devices to test (nCount), and the number of pins per DUT (nPins), takes the form:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Dut Define Counts(nCount, nPins)&lt;/b&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;In order to force currents and measure voltages on DUT pins, it is necessary to define in software the connections between the tester resources and the DUT IO.&amp;nbsp;&amp;nbsp;In this example, pin mapping is performed using another special command defined in ATEasy that will store the “Tester-Channel to DUT-Pin” correlation in a structured array.&amp;nbsp;&amp;nbsp;The pin-map structure also holds the DUT pin name and pin type (Output, Input, IO, Vcc1:4 and Ground) - which is useful for providing information about the pins being tested.&amp;nbsp;&amp;nbsp;When used, the “Dut Define PinMap” command specifies the DUT &lt;b&gt;pin_type&lt;/b&gt;, the DUT &lt;b&gt;pin_name&lt;/b&gt;, the DUT &lt;b&gt;pin_number&lt;/b&gt;, and an array containing the DIO channel numbers &lt;b&gt;channel_number&lt;/b&gt;.&amp;nbsp;&amp;nbsp;An array is used for the DIO channel numbers to support mapping pins from multiple DUT devices to appropriate DIO channels.&amp;nbsp;&amp;nbsp;The command takes the form:&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Dut Define PinMap pin_type ("pin_name", pin_number, channel_number[])&lt;/b&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The sample device used is an SN74HC273 octal latch in a 20-pin TSSOP package.&amp;nbsp;&amp;nbsp;The commands for defining the number of DUT devices, the DUT pin count, and the DUT/DIO pin mapping are shown below.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt;&amp;nbsp;&amp;nbsp;The DIO channel array is defined in line with the pin mapping commands for clarity, but could be entered via oteher means, such as reading from a file or spreadsheet, or by entering the channel numbers from a dedicated GUI, to mention a few:&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;Dut Define Counts(1,20)&lt;br /&gt;&lt;br /&gt;Dut.DioChannels={0}&lt;br /&gt;Dut Define PinMap Input	 ("Clr-", 1, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={1}&lt;br /&gt;Dut Define PinMap Output ("Q1"&amp;nbsp;&amp;nbsp;, 2, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={2}&lt;br /&gt;Dut Define PinMap Input	 ("D1"&amp;nbsp;&amp;nbsp;, 3, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={7}&lt;br /&gt;Dut Define PinMap Input	 ("D2"&amp;nbsp;&amp;nbsp;, 4, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={4}&lt;br /&gt;Dut Define PinMap Output ("Q2"&amp;nbsp;&amp;nbsp;, 5, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={5}&lt;br /&gt;Dut Define PinMap Output ("Q3"&amp;nbsp;&amp;nbsp;, 6, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={6}&lt;br /&gt;Dut Define PinMap Input	 ("D3"&amp;nbsp;&amp;nbsp;, 7, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={3}&lt;br /&gt;Dut Define PinMap Input	 ("D4"&amp;nbsp;&amp;nbsp;, 8, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={8}&lt;br /&gt;Dut Define PinMap Output ("Q4"&amp;nbsp;&amp;nbsp;, 9, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={-1}&lt;br /&gt;Dut Define PinMap Ground ("Gnd" ,10, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={17}&lt;br /&gt;Dut Define PinMap Input&amp;nbsp;&amp;nbsp;("Clk+",11, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={15}&lt;br /&gt;Dut Define PinMap Output ("Q5"&amp;nbsp;&amp;nbsp;,12, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={10}&lt;br /&gt;Dut Define PinMap Input&amp;nbsp;&amp;nbsp;("D5"&amp;nbsp;&amp;nbsp;,13, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={13}&lt;br /&gt;Dut Define PinMap Input&amp;nbsp;&amp;nbsp;("D6"&amp;nbsp;&amp;nbsp;,14, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={12}&lt;br /&gt;Dut Define PinMap Output ("Q6"&amp;nbsp;&amp;nbsp;,15, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={11}&lt;br /&gt;Dut Define PinMap Output ("Q7"&amp;nbsp;&amp;nbsp;,16, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={14}&lt;br /&gt;Dut Define PinMap Input&amp;nbsp;&amp;nbsp;("D7"&amp;nbsp;&amp;nbsp;,17, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={9}&lt;br /&gt;Dut Define PinMap Input&amp;nbsp;&amp;nbsp;("D8"&amp;nbsp;&amp;nbsp;,18, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={16}&lt;br /&gt;Dut Define PinMap Output ("Q8"&amp;nbsp;&amp;nbsp;,19, Dut.DioChannels)&lt;br /&gt;Dut.DioChannels={1000}&lt;br /&gt;Dut Define PinMap Vcc1&amp;nbsp;&amp;nbsp; ("Vcc" ,20, Dut.DioChannels)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt;&amp;nbsp;&amp;nbsp;Two special pin mapping parameters need to be mentioned.&amp;nbsp;&amp;nbsp;First, the "-1" DIO channel specified for the DUT "Gnd" signal indicates that this DUT pin is not mapped to any DIO channel.&amp;nbsp;&amp;nbsp;In this case, this is due to the layout of the DUT load board, which connected the DUT Gnd pin to a ground plane, rather than a DIO channel.&amp;nbsp;&amp;nbsp;Second, specifying DIO channel "1000" for the DUT "+5V" Vcc pin means the Vcc pin is connected to one of the four auxilliary IO pins on the GX5295.&amp;nbsp;&amp;nbsp;These "Aux" channels are mapped to DIO channels starting at 1000.&amp;nbsp;&amp;nbsp;Specifying DIO channel 1000 as the DUT Vcc input means that the GX5295 AUX 0 channel will be supplying the Vcc voltage for the DUT.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;b&gt;Continuity Measurement&lt;/b&gt;&lt;/h2&gt;To test for continuity, another ATEasy command has been defined.&amp;nbsp;&amp;nbsp;This command accepts the DUT number and the DUT pin.&amp;nbsp;&amp;nbsp;The DUT pin is a type Variant and can accept the DUT name, as defined by the pin mapping command, the DUT pin number as a text parameter, or the DUT pin number as a numeric parameter.&amp;nbsp;&amp;nbsp;Two other parameters are passed by reference (pointer) and return the DUT pin number and DUT pin name associated with the DUT pin Variant.&amp;nbsp;&amp;nbsp;The command returns a type Double voltage measurement for the specified pin after a small negative current is first applied to the pin.&amp;nbsp;&amp;nbsp;The command takes the form:&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;dMeasurement = Dut PMU Measure Continuity (nDutNumber, varDutPin, pnDutPin, psDutPin)&lt;/b&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;As an object oriented programming language, ATEasy allow a unique name for each test defined in it’s Task/Test structure (see ATEasy Help/Test).&amp;nbsp;&amp;nbsp;The test name is accessible as a text string at run-time using the "Test" object variable and the “Name” property, as shown below:&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;string = Test.Name&lt;/b&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;This simplifies the overall test program to simply calling the Dut PMU Measure Continuity() command using Test.Name, and defining the Test.Name to be either the DUT pin name, or the DUT pin number.&amp;nbsp;&amp;nbsp;The example below measures continuity on the DUT pin defined by the test name, and using ATEasy’s internally defined TestResult variable to store the continuity measurement.&amp;nbsp;&amp;nbsp;The continuity measurements can all be invoked the same for each test:&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;TestResult=Dut PMU Measure Continuity (1, Test.Name, pnDutPin, psDutPin)&lt;/b&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;An example of the ATEasy Task/Test structure is shown in &lt;b&gt;figure 1&lt;/b&gt; below.&amp;nbsp;&amp;nbsp;Notice that each test name is unique and the same as the names used in the pin mapping commands from above.&amp;nbsp;&amp;nbsp;Notice also that each test provides the minimum and maximum voltages for determining the Pass/Fail status of the continuity test (Min/Max parameters are visible just above the highlighted command).&amp;nbsp;&amp;nbsp;ATEasy will automatically evaluate the measurement returned to TestResult against the Min/Max parameters to determine the Pass/Fail status of each continuity measurement, and will automatically report the results of the evaluation to the Test Log (standard output) or Test Executive (ATEasy’s Test Management driver utility).&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200223\Figure 01.5.JPG" alt="Continuity Tests" title="Continuity Tests" border='0' &gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;b&gt;Figure 1:&amp;nbsp;&amp;nbsp;Continuity Task/Test Structure and Test Command&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;Test PMU Measure Command&lt;/b&gt; is attached to a procedure call where the continuity measurement occurs.&amp;nbsp;&amp;nbsp;The procedure, &lt;b&gt;TestContinuity&lt;/b&gt;, is located in a driver called DUT, as are the commands discussed in this article.&amp;nbsp;&amp;nbsp;The procedure calls another procedure,&lt;b&gt; _GetPinInfo&lt;/b&gt;, which searches the structure array for the name or number of the DUT Variant pin passed in by the command, and when found, extracts the DUT pin number and DIO channel number associated with that pin.&amp;nbsp;&amp;nbsp;The code for _GetPinInfo 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;Procedure _GetPinInfo(nDutNumber, varDutPin, nDioPin, pnDutPin, psDutPin): Void&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;nDutNumber: Val Short&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!DUT device number&lt;br /&gt;varDutPin: Val Variant&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !DUT Pin ("Name", "Number" or valNumber)&lt;br /&gt;nDioPin: Var Short&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !DIO Channel number&lt;br /&gt;pnDutPin: Var Short&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Returned DUT pin number&lt;br /&gt;psDutPin: Var String&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !Returned DUT pin name&lt;br /&gt;nHandle: Short&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; !DIO handle&lt;br /&gt;iPin: 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;&amp;nbsp;&amp;nbsp; !Pin index counter&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;! Get the DIO session handle&lt;br /&gt;&amp;nbsp;&amp;nbsp; Dio Get MasterHandle(nHandle)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; If VarType(varDutPin)=vtBstr&lt;br /&gt;&amp;nbsp;&amp;nbsp; ! The procedure searches the structure array for the "name" &lt;br /&gt;&amp;nbsp;&amp;nbsp; ! or "number" of the DUT pin passed in by the command,...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For iPin=0 to m_nDutCount[1]-1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !&amp;nbsp;&amp;nbsp;and when "name" is found...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If LCase(m_astDomain[nDutNumber-1,iPin].Name)=LCase(varDutPin) &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;! the DUT pin number is saved, ...&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;pnDutPin=iPin+1 &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;! the DUT pin name is saved, ...&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;psDutPin=m_astDomain[nDutNumber-1,iPin].Name &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;! the DIO channel number is used for the measurement process&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;nDioPin=m_astDomain[nDutNumber-1,iPin].DIO &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;ExitLoop ! exit the loop&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! or when "number" is found...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ElseIf Val(varDutPin)=(iPin+1) &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;! the DUT pin number is saved, ...&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;pnDutPin=iPin+1 &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;! the DUT pin name is saved, ...&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;psDutPin=m_astDomain[nDutNumber-1,iPin].Name &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;! the DIO channel number is used for the measurement process&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;nDioPin=m_astDomain[nDutNumber-1,iPin].DIO &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;ExitLoop ! exit the loop&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EndIf&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Next&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! If the DUT pin "name/number" was not found...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If iPin=m_nDutCount[1]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! generate an error exception and return&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error 1,"DUT pin name/number \""+varDutPin+"\" not found" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EndIf&lt;br /&gt;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pnDutPin=varDutPin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! If the DUT pin number exceeds it's limits...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If pnDutPin&lt;1 or pnDutPin&gt;m_nDutCount[1]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! generate an error exception and return&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error 1,"DUT pin number "+Str(pnDutPin)+" invalid" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EndIf&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! The DUT pin name is saved, and ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;psDutPin=m_astDomain[nDutNumber-1,pnDutPin-1].Name &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! the DIO channel number is used for the measurement process&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nDioPin=m_astDomain[nDutNumber-1,pnDutPin-1].DIO &lt;br /&gt;&amp;nbsp;&amp;nbsp; EndIf&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The DIO channel number returned by _GetPinInfo is used for the continuity measurement.&amp;nbsp;&amp;nbsp;The DIO channel is placed in the Force Current mode and the commutating voltages (voltage clamps) of +5V and -2V are applied to the DIO channel to keep the DUT pin voltage to a level that is safe for the DUT.&amp;nbsp;&amp;nbsp;A small negative current (-0.5mA) is applied to the DIO channel, and the resulting voltage is measured.&amp;nbsp;&amp;nbsp;Once the measurement is complete, the DIO channel is returned to dynamic mode (default) and the measured voltage is returned to the calling command.&amp;nbsp;&amp;nbsp;The full ATEasy algorithm 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;Procedure TestContinuity(nDutNumber, varDutPin, pnDutPin, psDutPin): Double&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;	nDutNumber: Val Short&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!DUT device number&lt;br /&gt;	varDutPin: Val Variant&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !DUT Pin ("Name", "Number" or valNumber)&lt;br /&gt;	pnDutPin: Var Short&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Returned DUT pin number&lt;br /&gt;	psDutPin: Var String&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !Returned DUT pin name&lt;br /&gt;	nDioPin: Short&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; !DIO Channel number&lt;br /&gt;	dContinuity: Double&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Continuity voltage measurement&lt;br /&gt;	nHandle: Short&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; !DIO handle&lt;br /&gt;{&lt;br /&gt;	! Get the DIO session handle&lt;br /&gt;	Dio Get MasterHandle(nHandle)&lt;br /&gt;	&lt;br /&gt;	_GetPinInfo(nDutNumber,varDutPin,nDioPin,pnDutPin,psDutPin)&lt;br /&gt;	&lt;br /&gt;	! The DIO channel is placed in the Force Current mode and...&lt;br /&gt;	Dio Setup Channels Mode PmuForceCurrentMode RangeOfChannels(nHandle,nDioPin,nDioPin)&lt;br /&gt;	! commutating voltages (voltage clamps) of +5V and -2V are defined&lt;br /&gt;	Dio Setup Channels PMU ForcedCurrentCommutatingVoltage RangeOfChannels(nHandle,nDioPin,nDioPin,5.0,-2.0)&lt;br /&gt;	! A small negative current (-0.5mA) is applied to the DIO channel, and...&lt;br /&gt;	Dio Setup Channels PMU ForceCurrent RangeOfChannels(nHandle,nDioPin,nDioPin,-0.5,aPmuCurrentRange_n2ma_to_p2ma)&lt;br /&gt;	&lt;br /&gt;	! the resulting voltage is measured&lt;br /&gt;	Dio Measure PmuVoltage(nHandle,nDioPin,dContinuity,250)&lt;br /&gt;	&lt;br /&gt;	! The DIO channel is returned to dynamic (default) mode and...&lt;br /&gt;	Dio Setup Channels Mode DynamicIo RangeOfChannels(nHandle,nDioPin,nDioPin)&lt;br /&gt;	&lt;br /&gt;	!&amp;nbsp;&amp;nbsp;the measured voltage is returned to the calling command&lt;br /&gt;	&lt;br /&gt;	Return dContinuity&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h2&gt;&lt;b&gt;Results&lt;/b&gt;&lt;/h2&gt;ATEasy automatically evaluates the measurement returned to TestResult against the test’s Min/Max parameters to determine the Pass/Fail status of each continuity measurement, and reports the results of the evaluation to the Test Log (standard output) or Test Executive (ATEasy’s Test Management driver utility).&amp;nbsp;&amp;nbsp;&lt;b&gt;Figure 2&lt;/b&gt; shows the Test Executive output with a DUT open continuity failure for pin 2, and a DUT short continuity failure for pin 9.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200223\\Figure 04.6B.JPG" alt="Test Executive Output with Failures" title="Test Executive Output with Failures" border='0' &gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;b&gt;Figure 2:&amp;nbsp;&amp;nbsp;ATEasy Test Executive Output with DUT continuity Failures&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The ATEasy project files for this article can be downloaded &lt;a href='http://www.geotestinc.com/images/support/Q200223\Q200223.zip' target='_blank'&gt;here&lt;/a&gt;.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=223</link><pubDate>2/24/2012</pubDate></item><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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://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 powered on and instruments installed.&amp;nbsp;&amp;nbsp;Geotest chassis’ that include this “Smart” feature are the GX7000A, GX7100A, GX7300 and GX7600.&lt;br /&gt;&lt;br /&gt;To configure trigger mapping you must have the appropriate chassis DLL driver installed and be connected to the chassis using either an embedded controller or a PXI bus extender connected to an external host PC.&amp;nbsp;&amp;nbsp;To manually set the trigger direction, launch the Chassis Panel application by selecting &lt;b&gt;GxChassis Panel &lt;/b&gt; on your desktop or from the Windows Start Menu.&amp;nbsp;&amp;nbsp;Click on the &lt;b&gt;Initialize&lt;/b&gt; button and follow the directions for initializing the chassis (figure 1).&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\Q200137\GX7XXX Chassis Panel.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 1 - Generic GX7XXX Chassis Panel&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;From the main panel select the &lt;b&gt;PXI Trigger Lines&lt;/b&gt; tab.&amp;nbsp;&amp;nbsp;The PXI Trigger Lines tab will reflect the number of slots available on the chassis being controlled.&amp;nbsp;&amp;nbsp;The GX7000A and GX7300 each have twenty (20) slots (figures 2 and 3, respectively), the GX7100A has fourteen (14) slots (figure 4) and the GX7600 has nine (9) slots (figure 5).&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\Q200137\GX7000 Small Triggers.JPG" alt`=&amp;quot; border='0' /&gt;&amp;nbsp;&amp;nbsp;&lt;img src="http://www.geotestinc.com/images/support/.\Q200137\GX7300 Small Triggers.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 2 - GX7000 Chassis Triggers Tab&lt;/b&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;&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;b&gt;Figure 3 -&amp;nbsp;&amp;nbsp;GX7300 Chassis Triggers Tab&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/.\Q200137\GX7100 Small Triggers.JPG" alt`=&amp;quot; border='0' /&gt; &lt;img src="http://www.geotestinc.com/images/support/.\Q200137\GX7600 Small Triggers.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 4 - GX7100 Chassis Triggers Tab&lt;/b&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;&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;b&gt;Figure 5 - GX7600 Chassis Triggers Tab&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The screen indicates which slots are the primary slots and which slots are the secondary slots associated with each bridge.&amp;nbsp;&amp;nbsp;The chassis will continuously monitor the state of the triggers on all of the bus segments and report them via the panel as either a logic &lt;b&gt;"0"&lt;/b&gt; or a logic &lt;b&gt;"1"&lt;/b&gt;.&amp;nbsp;&amp;nbsp;Each bridge between bus segments provides three controls for each trigger line.&amp;nbsp;&amp;nbsp;Simply click on the desired control and a drop-down list will be presented that allows you to select the appropriate parameter:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Direction Control&lt;/b&gt; - Direction of the trigger mapping:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;NC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Trigger Mapping Disabled)&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;L -&gt; R&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Primary to Secondary Mapping&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;L &lt;- R&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Secondary to Primary Mapping&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Primary Control&lt;/b&gt; / &lt;b&gt;Secondary Control&lt;/b&gt; - Define whether the trigger is passive (monitored only) or actively driven by the chassis:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;X&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;Monitor only, driven by instruments installed on that bus segment&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;0&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;Force trigger line to logic "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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;1&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;Force trigger line to logic "1"&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;blank&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Monitor only, mapped to (driven by) the opposite bus segment&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Once all of the triggers have been mapped for each bridge, the settings can be saved to EEPROM by selecting the &lt;b&gt;Temperature Settings&lt;/b&gt; tab and clicking on the &lt;b&gt;Save User Settings&lt;/b&gt; button, as represented by the GX7300 panel in figure 6.&amp;nbsp;&amp;nbsp;Once saved, the user defined PXI trigger mapping can be restored manually by clicking on the &lt;b&gt;Recall User Setting&lt;/b&gt; button on the Temperature Setting tab, or automatically on power-up by clicking on the &lt;b&gt;Recall User Settings&lt;/b&gt; radio button under the &lt;b&gt;Load Settings On Power Up&lt;/b&gt; control group.&amp;nbsp;&amp;nbsp;Be sure to save user settings each time you change the Load Settings On Power Up control or the new selection will not be remembered during the next power cycle.&lt;br /&gt; &lt;br /&gt;&lt;div align='center'&gt;&lt;img src="http://www.geotestinc.com/images/support/.\Q200137\Save-Recall User Settings.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;b&gt;Figure 6 - Save/Recall User Settings&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;Setting of the PXI bridge trigger mapping can also be accomplished programmatically using the &lt;b&gt;GxChassisSetPxiTriggerLine &lt;/b&gt;function, and the &lt;b&gt;GxChassisGetPxiTriggerLine &lt;/b&gt;function can be used to query the current trigger mapping settings .&amp;nbsp;&amp;nbsp;The format for these functions are described fully in the GX7XXX User Guide:&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;blockquote&gt;GxChassisSetPxiTriggerLine (nHandle, nLine, nSegment, ucDirection, nPrimaryMode, nSecondaryMode,pnStatus)&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;GxChassisGetPxiTriggerLine (nHandle, nLine, nSegment, pucDirection, pnPrimaryMode, pnSecondaryMode,pnStatus)&lt;br /&gt;&lt;/blockquote&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The Load Settings On Power Up parameter can be set programmatically using the &lt;b&gt;GxChassisRecallSettings &lt;/b&gt;function.&amp;nbsp;&amp;nbsp;The format for this function is described fully in the GX7XXX User Guide:&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;blockquote&gt;GxChassisRecallSettings (nHandle, nSettingSource, pnStatus)&lt;br /&gt;&lt;/blockquote&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=137</link><pubDate>3/26/2009</pubDate></item><item><title>Support for ECL / PECL Logic Levels - Published on 3/25/2009</title><description>Instruments that provide PECL interfacing are the &lt;b&gt;GX5050&lt;/b&gt;, &lt;b&gt;GX5150&lt;/b&gt; and &lt;b&gt;GX5152&lt;/b&gt;, provide they are configured with the &lt;b&gt;GX5940&lt;/b&gt; PECL I/O module.&amp;nbsp;&amp;nbsp;The &lt;b&gt;GX5280&lt;/b&gt; Series or the &lt;b&gt;GX5290&lt;/b&gt; Series do not have support for PECL. &lt;br /&gt;&lt;br /&gt;ECL (Emitter Coupled Logic) and PECL (Positive ECL) are both differential I/O interfaces and are not compatible with single-ended logic families.&amp;nbsp;&amp;nbsp;ECL logic is designed to work with negative power supply levels, and the normal logic levels for ECL are:&lt;br /&gt;&lt;blockquote&gt;V(OH) = -0.9 V&lt;br /&gt;V(OL) = -1.7 V&lt;/blockquote&gt;&lt;br /&gt;The term PECL means we are using ECL logic but with Positive power supply voltages. The normal logic levels for PECL are:&lt;br /&gt;&lt;blockquote&gt;V(OH) = 4.1 V&lt;br /&gt;V(OL) = 3.3 V&lt;/blockquote&gt;&lt;br /&gt;The &lt;b&gt;GX5280 &lt;/b&gt;and &lt;b&gt;GX5290 &lt;/b&gt;series Digital I/O instruments support two types of logic interfaces, Programmable LVTTL and LVDS – except for the &lt;b&gt;GX5291&lt;/b&gt;, which supports only Programmable LVTTL levels.&amp;nbsp;&amp;nbsp;Neither LVTTL nor LVDS are compatible with ECL or PECL logic.&lt;br /&gt;&lt;br /&gt;LVTTL is a single ended I/O standard with output levels programmable in the range of:&lt;br /&gt;&lt;blockquote&gt;Min:&amp;nbsp;&amp;nbsp;1.4V&lt;br /&gt;Max:&amp;nbsp;&amp;nbsp;3.6V&lt;/blockquote&gt;This is compatible with TTL/LVTTL/CMOS/LVCMOS logic families.&amp;nbsp;&amp;nbsp;&lt;br /&gt;The input thresholds for the LVTTL interface is selectable:&lt;br /&gt;&lt;blockquote&gt;1.5 V, 1.8V, 2.5V, or 3.3 V (all are 5V tolerant)&lt;/blockquote&gt;&lt;br /&gt;LVDS is a differential signal, similar to ECL and PECL, but the levels are incompatible with either ECL or PECL.&amp;nbsp;&amp;nbsp;The levels for LVDS/LVDM/M-LVDS are:&lt;br /&gt;&lt;blockquote&gt;Differential Output Voltage:&lt;br /&gt;&lt;blockquote&gt;480mV (Min.); 650mV (Max.)&lt;/blockquote&gt;Input Threshold:&lt;br /&gt;&lt;blockquote&gt;Positive going threshold: 50mV (Max.)&lt;br /&gt;Negative going threshold: -50mV (Min.)&lt;br /&gt;Input voltage hysteresis: 25mV (Typ.)&lt;/blockquote&gt;&lt;/blockquote&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=134</link><pubDate>3/25/2009</pubDate></item><item><title>Using WaveEasy with the GX1110 Arbitrary Waveform Generator - Published on 3/25/2009</title><description>WaveEasy can interface with the Geotest GX1110 Arbitrary Waveform Generator software front panel, allowing users to create waveforms using the powerful waveform editor and then downloading the wavefform into the GX1110 memory to generate the wave. The following steps described the process:&lt;br /&gt;&lt;br /&gt;1. Create either a standard waveform, a complex mathematical function, or a free hand waveform within WaveEasy. Further information on using WaveEasy to create waveforms can be found in the GtWave Manual.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/./Q200138/wavepic1.bmp" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;2. Open the GX1110 Software Front Panel from within WaveEasy; Select &lt;b&gt;GtWave Panel &lt;/b&gt;from the WaveEasy &lt;b&gt;Tools&lt;/b&gt; menu or click on the &lt;b&gt;GtWave Panel&lt;/b&gt; button in the toolbar as shown here:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/./Q200138/wavepic2.bmp" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;GtWave Panel &lt;/b&gt;will be displayed:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/./Q200138/wavepic3.bmp" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;3. Initialize the GX1110 Software Front Panel and select &lt;b&gt;Arbitrary Waveform Generator&lt;/b&gt; from the &lt;b&gt;Operation Mode &lt;/b&gt;drop down list:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/./Q200138/wavepic4.bmp" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;4. Enter the ARB &lt;b&gt;Start Address &lt;/b&gt;(typically 0) and the &lt;b&gt;Length&lt;/b&gt; (number of samples) of the waveform you created in WaveEasy:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/./Q200138/wavepic5.bmp" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;5. Select [! WaveEasy&lt;/b&gt; as the source for loading data and enter the &lt;b&gt;Start &lt;/b&gt;(Start pointbv typically 0) and the number of points (&lt;b&gt;Points&lt;/b&gt;)&amp;nbsp;&amp;nbsp;you would like to load (typically the waveform size as noted in step 4). Then click &lt;b&gt;Execute&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/./Q200138/wavepic6.bmp" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;6. Now the waveform data has been loaded from WaveEasy to the GX1110. Make any changes to the set up of the GX1110 such as amplitutde, sample rate, etc. and click on &lt;b&gt;Apply&lt;/b&gt;. Check the &lt;b&gt;Output Enabled &lt;/b&gt;box to prepare for output.&lt;br /&gt;&lt;br /&gt;7. Use the &lt;b&gt;Run&lt;/b&gt; button to start generating the wave, and &lt;b&gt;Stop&lt;/b&gt; button to suspend the waveform output:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/./Q200138/wavepic7.bmp" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=138</link><pubDate>3/25/2009</pubDate></item><item><title>GX5290 or GX5280 Series Causing Windows Code 12 Error Indicating Insufficient Resources - Published on 1/13/2009</title><description>When using multiple GX5290 and/or GX5280 DIO devices, Windows might not be able to allocate enough contiguous memory resources causing the OS to generate an error code 12. &lt;br /&gt;&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;The code 12 error is caused by a limitation in the PC's BIOS and PCI memory allocation system. Each DIO card requires 16MB of PCI of contiguous memory space to map to the DIO's internal memory structure.&lt;br /&gt;&lt;br /&gt;To fix this issue, change the BIOS settings and disable unused peripherals such as LPT1, COM (serial) port, built in audio, and shared graphics memory. This will free up enough resources to allow BIOS and Windows to allocate memory correctly.&lt;br /&gt;&lt;br /&gt;You should also update your system with the latest BIOS version.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=132</link><pubDate>1/13/2009</pubDate></item><item><title>ATEasy v6.0 SP2 (build 136) - List of changes - Published on 1/12/2009</title><description>The following changes were done since build 132:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ATEasy v6.0 build 136b, November 2008&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Check All/Check Module does not check if data type of variables, procedures and types is undefined.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;"Too few elements" error message when setting the array initial value with smaller number of elements in the variable property page. ATEasy allows to initial the array with smalller number of elements than what defined in the array. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;.NET set-only properties are rejected when loading the assembly.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Assigning Variant to array of enumerated type generated an exception.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;TestExec. Prompt On Failure does not prompt unless Pause on Failure was checked.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AChart. Current bar value for HiLo Horizontal Bar chart were not drawn correctly, it was drawn vertically instead of horizontally.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Unable to load a driver saved in build 136/142 with WinSocket interface.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New ATEasy.EXE command line option /s used with /b to suppress the error message that is displayed if the build results in error.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;b&gt;ATEasy v6.0 build 136a, October 2008 (intermidiate build)&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;When inserting the TestExec driver it create TestExecA shortcut name instead of TestExec.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Passing array of BString to COM method VAR BSTR[] does not work.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Passing array element to Var parameter of late-binding COM/.NET method does not work.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Comparison operands with Variant and unsigned integer returns wrong result.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Passing Var String parameter to an error statement generates an exception.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Passing CreateThread a form procedure generate exception.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;VarDimSize() lDim parameter is now optional (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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Setting AForm.OnQueryUnload pbCancel to TRUE does not keep the form when exiting a a catch block.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;When inserting a variable under procedure the workspace displays the procedure variable mistakenly.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Project EXE/DLL file path is relative instead of absolute if not overrode by the user from the Project property page.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;TestStatus=ERR terminate the 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Setting AForm.OnQueryUnload pbCancel to TRUE does not prevent the form from close when exiting a a catch block inside a try statement. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;ATEasy v6.0 build 136, August 2008 (service pack 2)&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Includes all issues (see below) since build 132 (service pack 1) was release. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New propery AApp.Info property and new type enumAppInfoApp. The property is similar to App.Flags however it retuns a single flag. Two new flags were added aAppInfoIdeAbort and aAppInfoIdeReset indicating True if the user press the IDE abort or Reset command.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. Test executive exit if the abort / reset statements called from within the program (134c issue).&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. Test executive did not display fail statistics when abort.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. Type/COM Library display to show void * as Val Any and void ** as Var Any (in both cases address of the variable is pushed).&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. #ifdef work also on symbols (variable, types, procedures) and can be used to test if they exist.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Compiler error is generated if passing Const or literal to Var Any.&amp;nbsp;&amp;nbsp;&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. Calling a module event in DoIt! mode sometimes ignored.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. VarChangeType/Str did not work properly with BYREF variants.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. ATEasy generated exception when cleaning up a parameter after a DLL call with NULL BString.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. Improved error handling for operation and assignments when using variant data types containg unsigned integers that are unsupported by ole automation.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. New statement for COM or .NET class does not work if the class resided outside of the current module.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. Opening a text format driver file with discrete I/O operations did not read the discrete file correctly resulting in removal of the discrete values.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. Assignment statement between a method or a property to a procedure type variable resulted in NoProcedure.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. Assignment statement between a module event to a procedure sometimes generates NoProcedure.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. Assignment statement between a module event to a procedure sometimes resulted in NoProcedure.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. Opening a workspace files from Windows Explorer sometimes generated an exception.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fix. Compiling a reference to a .NET class virtual property generated an exception.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New support for Variant data types with VT_Ux (unsigned integers) for operators such as add or subtract. Support for these types also expanded for older Windows (e.g. Windows 2K). &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New HW v3.1 (PCI/PXI explorer and hardware access driver) is included in this release - more information is available under Program Files folder, Getotest\HW, ReadMe.txt. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;b&gt;ATEasy v6.0 build 134c, April 2008 (intermidiate build)&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;DLL Procedure view display the procedure vertically centered next&amp;nbsp;&amp;nbsp;to the +/-.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Task/Test property page will rename the task/test name when untitled base on the task/test title.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Form with many controls are slow to draw in design time.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Changing Tab Order after run and running again genrate exception.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Changing title or name of a symbol not always reflected immediately in the Properties window title.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Startup dialog does not enable the OK button in the Recent page if no recent files are available in 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy About dialog displays the product Serial Number.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Variables initial value is shown in the Properties Value page for types such as DateTime, Double 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Viewing a Program DLL Constant value caused it value to be deleted after importing the DLL from header 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Importing string constant from a hedaer file added extra space to the string.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Deleting a procedure variable from the command view is not updated in the command view procedures 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Some third party controls (such as Microsoft TreeView, ListView) do not anchor correctly after its parent form or container is resize.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy generate exception when calculating watch expression with Late Bind expression with typedef return (for example AHandle).&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;On Empty Workspace, Print Document\Selection Enabled instead of disable.&amp;nbsp;&amp;nbsp;&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Unable to set the software license on Vista with user Access Control On.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Loading text format module that have command arguments with function calls corrupt the command argument&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Commands displays a procedure in the parameters box instead of no procedure when the top level command is selcted (i.e. Driver)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Improvments to import C/C++ header 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Improvements to performance of ComRecive/SetInterfaceEvent.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;When IDE Reset command is executed. OnReset events are called prior to reloading the 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Toolbar button stays pressed when a combination of buttons is pressed. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Creating MDI child on a different thread than the MDI frame generate exception.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New support for Val/Var Any to DLL procedure to push Value/Pointer instead of just 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New examples in Language.prg to show calling sprintf and sscanf using optional Var/Val Any. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Optional [Val] Any not passing Null for second level procedure with [Val] Any parameter.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Optional [Val] array did not allocate one element for each dimension if an array was not passed as an argument.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Assigning lLong=vVariant[2] failed while dDouble=vVariant[2] is OK (vVariant contains array of LONG).&amp;nbsp;&amp;nbsp;&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;COM Interface with Xon/Xoff handshake not working properly when set from the driver property page (ComSetup does work).&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;SetLogString() with no argument generate exception.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AImageListImage.ExtracIcon changed to AImageListImage.ExtractIcon.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AImageListImage.ExtractIcon generate exception if Icon not exist.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;InputBox/MsgBox window is not using the Windows MessageBox font and sometimes is displayed behind the application 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AForm.RemoveControl/AForm.RemoveMenu returns Bool value change was reverse to void since causes compatability issue with EXE files.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Internal Error after when event set by AddHandler is called on a form procedure and the procedure calls another control event.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;After editing of a test exec profile, the profile will be reloaded if being used by the test executive.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fault Analysis condition string size limitation increased to 5K.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Test Executive Log Word Wrap is to True to allow longer text not to clip.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Several improvements to the profile action, count and conditions.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New HW v3.0 (PCI/PXI explorer and hardware access driver) is included in this release - more information is available under Program Files folder, Getotest\HW, ReadMe.txt. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New drivers: GX1034, GX2002 and GX2472. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;b&gt;Build 134b November 29, 2007 v6.0&amp;nbsp;&amp;nbsp;(intermidiate build)&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy now traps exception generated by a DLL when DLL is unloaded&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Test Executive/Profile forms for Select Program/UUT/Profile are sizable&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AForm.RemoveControl/AForm.RemoveMenu returns Bool with False if an&amp;nbsp;&amp;nbsp;error occured&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New drivers GX5290 (GX5292)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;b&gt;Build 134a November 2, 2007 v6.0&amp;nbsp;&amp;nbsp;(intermidiate build)&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;GetCallerName - new internal function to return the caller procedure&amp;nbsp;&amp;nbsp;procedure name or test 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Support for Right to Left or non-english Locale:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;When Form.RightToLeft is TRUE, menu, statusbar, and toolbar are displayed from right to left&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;All controls will display text using the current system locale&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;property pages for controls will display text using the current locale&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Form.RightToLeft can be set at run-time (not read-only property) &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New Variant constants: VarEmpty, VarErrorArgMissing, &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;DebugLog can be set at run-time (not read-only property anymore)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=130</link><pubDate>1/12/2009</pubDate></item><item><title>ATEasy v7.0 - List of changes - Published on 1/12/2009</title><description>ATEasy version 7.0 contains numerous enhancements to the test development environment, run-time and Test Executive. The following list describes the main changes in this version.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Development Environment&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;ATEasy DLL &lt;/b&gt;- ATEasy supports creating a DLL from ATEasy code. The new Library Wizard creates a Library DLL project. Export commands supports generating of .vb/.h header files with prototypes of the functions exported by the DLL so they can be called from C or Visual Basic languages. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Threads Window &lt;/b&gt;- a new debug window for debugging a multi-threaded application. You can use the Threads window to view thread information - call stack and local variables. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Batch Build&lt;/b&gt; - a new command that displays the Batch Build dialog allowing you to select multiple workspace projects for build. The selected projects are saved to the workspace 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Back/Forward navigation commands &lt;/b&gt;- these new View commands use the history of windows and symbols viewed and allows you to navigate between these symbols. Similar to Internet Explorer, a drop down history lists all symbols viewed in the ATEasy session.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;New Log file format&lt;/b&gt;, Web Archive Single File format (.mht) is available in File Open as well as in ALog's Save and SaveAs methods for Log files.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;ATML support &lt;/b&gt;- provides functions to export and import ATEasy test results and test descriptions in ATML format (.xml).&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Support for &lt;b&gt;LabView v8.5, v8.6&lt;/b&gt; (all versions from 7.0 to&amp;nbsp;&amp;nbsp;8.6 are now supported) and enhanced support for .NET.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Support for USB &lt;/b&gt;driver interface - provides control of USB RAW or TMC devices using IO Tables or the internal library.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New IDE Workspace Option for default file saving - Binary and Text format saves in both file formats every time the user saves . Allows you to maintain an up to date text format that can be used by external tools such as text editor or a source control 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New IDE Options: &lt;b&gt;Arguments for External Tools&lt;/b&gt; - a set of predefined variables that are available for invoking External Tools.&amp;nbsp;&amp;nbsp;The Customize Tools dialog has been modified to accept new arguments and their values are passed when the tools are launched.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New IDE Option &lt;b&gt;Auto Recover &lt;/b&gt;- this new option, when set, will cause ATEasy to save your work (modified files) every x minutes to a temporary location. When the workspace is loaded again after a system or any other failure, ATEasy will notify you of the modified files that are available for recovery. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New IDE command: &lt;b&gt;Open Containing Folder &lt;/b&gt;- opens a folder in Windows' Explorer which contains the selected 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New ATEasy Development Environment automation server (Application)&amp;nbsp;&amp;nbsp;- provides access to some of the IDE functionality.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;br /&gt;&lt;h2&gt;Run Time Engine&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New &lt;b&gt;LoadLibrary/UnloadLibrary statements&lt;/b&gt; for dynamic loading and unloading of DLL libraries while running. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New &lt;b&gt;USB procedures &lt;/b&gt;to control USB RAW or USBTMC devices and support for USB driver interface.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New &lt;b&gt;String tokenizer functions &lt;/b&gt;: Split, Join, Filter, Replace. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New &lt;b&gt;Math functions &lt;/b&gt;- Min and Max returns the minimum or maximum value of two numbers.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New &lt;b&gt;Misc function &lt;/b&gt;- GetCallerName used to retrieve the current or caller procedure name or test 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New &lt;b&gt;Time functions&lt;/b&gt;: Now, Date, Time, Year, Month, Day, Weekday, Hour, Minute, Second.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New &lt;b&gt;ATask/ATest properties &lt;/b&gt;StartTime and EndTime.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New AApp.Info property and enumAAppInfo returns information about the 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New Variant constants VarEmpty and VarErrorArgMissing and support for 64 signed and unsigned bit variant integers.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Support for converting a string to DateTime/Currency data types and vice versa.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New optional parameter added to CreateObject() : bFreeThreadingModel.&amp;nbsp;&amp;nbsp;Allows the user to specify the server's threading model to be Free, instead of the Apartment model.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New &lt;b&gt;HW v3.1&lt;/b&gt; (Geotest PCI/PXI explorer and hardware access driver) is included in this release to support VISA, multiple PXI chassis, USB and more. More information is available under Program Files folder, Getotest\HW, ReadMe.txt. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;Test Executive Enhancements &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;External Programs (EXE) Support - Unlike a typical project containing all test programs, supports for external programs allows you to create executables, each containing one (or more) programs, while still allowing all programs to run from the same user interface.&amp;nbsp;&amp;nbsp;The main benefit is the support for modular test program development which allows adding programs to the test executive after the initial release of the 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Profile driver - create and modify test sequences or profiles programmatically using commands.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Support for Web Archive Single File (.mht) - allows the user to save an HTML test log containing images into a single 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Ability to disable checking or un-checking of tests and tasks in the tree pane.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New Option to show or hide the Log Summary tab (enOptionsDisplayLogSummaryTab).&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New Option to retry a failed Task automatically (enOptionsRetryFailedTask).&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;See the Test Executive Help for detailed information regarding these new features.&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;New Examples/Drivers&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasyDLL.prj - this example shows how to create an ATEasy DLL and how to use the DLL from ATEasy code or from a C or VB based 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Profile.prj - this example shows how to use profile commands to create a profile programmatically.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Visa.prj - VISA driver and example - this example shows how to use VISA to control an instrument from ATEasy using the ATEasy Visa.drv driver. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATML.prj - this example shows how to use the new ATEasy ATML driver (ATML.drv) to export and format test description and results.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Ki210x.prj - driver/example for USB based driver Keithley 2100 DMM.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New Geotest drivers for GX1034, GX2002, GX2472 and GX5290.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=131</link><pubDate>1/12/2009</pubDate></item><item><title>List of changes in GTDIO/DIOEasy Software version 3.20 build 42 - Published on 12/8/2008</title><description>&lt;h2&gt;GTDIO/DIOEasy Version 3.2 Build 42 (December 2008) Change List&lt;/h2&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;- Hardware Support Changes:&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;- New support for the GX5055 DIO board.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;- New support for the GX5291 DIO board.&lt;br /&gt;&amp;nbsp;&amp;nbsp;- GtDio versions 3.1 (Build 40) and above does not supports the GT5900, GT2550 and GT5150&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ISA boards anymore, use GTDDIO v3.0 to control these cards.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;- Fixed issues: &lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • Driver:&lt;b&gt;DioSetupClkStrobeDelay()&lt;/b&gt; returns an error when the handle passed into the function is a File handle.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • DIOEasy: Gx529X and Gx5055 file types would crash when trying to copy and past channels.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;- New driver (Firmware) functionality:&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • &lt;b&gt;Gx528X/Gx529X:&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Additional offset (advance or delay) of -3.0 to +3.0 nSec (0.25 increments) was added&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in order to ease timing alignment between DIO boards in a domain. See&lt;b&gt; DioSetupClkStrobeDelay() &lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function in the "DIO Programmer’s Reference Guide".&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;• &lt;b&gt;Gx529X:&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Firmware version 0x8A00 and above allow reading the I/O pins data when the card is in PUASE/HALT state.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Firmware versions 0x8A00 and above integrates high speed memory read back operation.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;- New driver functions:&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • &lt;b&gt;DioSetupExternalRefClkFrequency() &lt;/b&gt;- sets the External refernce clock frequency.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • &lt;b&gt;DioGetExternalRefClkFrequency() &lt;/b&gt;- returns the External refernce clock frequency.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • &lt;b&gt;DioFileSetChannelsOrder() &lt;/b&gt;- sets all 32-channels logical order in a DIO file.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • &lt;b&gt;DioFileGetChannelsOrder() &lt;/b&gt;- returns all 32-channels logical order in a DIO file.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;- DIO Virtual panel:&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • Support configurations using VISA and new multiple chassis slot numbering as&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; well as legacy slot numbering.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • Cut execution time for upgrading DIO's firmware.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • Add Domain Setting Save and Recall - allow the user to save/recall the domains&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timing calibration settings after calibrating the clock and strobe delays between&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; boards in the domain.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;- DIO User's Guides:&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • Update all User's Guides "Chapter 3: Installation and Setup" to reflect the&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; support for the new HW v3.0 (PCI/PXI explorer and hardware access driver).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • Update the "DIO Software User’s Guide" with the latest DIO panel description&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and Configuration.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;- Examples&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • New C example named "GtDioExampleC" supporting all PXI/PCI DIO boards.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • New VB 6.0 and VB .NET 2005 examples.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • New Microsoft Visual Basic .NET (2005) GtDio COM Object example.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; • New LabView library and examples.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;- New HW v3.2 ](PCI/PXI explorer and hardware access driver)&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;- The new HW v3.2 is included in this release to support VISA, multiple chassis and more - &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;more information is available under Program Files folder, Getotest\HW, ReadMe.txt. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The new HW provides the following new/revised functionality: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;• New function,&lt;b&gt; DioSetupInitializationVisa()&lt;/b&gt; - initializes the board using VISA, use VISA&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resource string or alias (configure using HW PXI Explorer) to identify the board &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (require NI-MAX).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;• GtDio boards are shown in VISA resource manager (NI-MAX), using HW v3.1.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;• &lt;b&gt;DioSetupInitialization()&lt;/b&gt; function supports multiple chassis slot numbering (for example &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x203 - chassis 2 Slot 3) as well as legacy slot numbering (1-255) as displayed&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;in HW v3.1 PXI/PCI explorer.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=128</link><pubDate>12/8/2008</pubDate></item><item><title>Should OCLK and CLK_LVDS have the same phase? - Published on 12/2/2008</title><description>CLK_LVDS (J4-P4 and J4-P38) and OCLK (J3-P22) are sourced from different PLL outputs within the DIO's FPGA, so it is possible for them to have different frequencies and different phase settings. Even if the phase settings are the same for both clocks, the actual phase observed at the output will be different since the respective signal paths are quite different.&amp;nbsp;&amp;nbsp;Due to the programmability of it, the OCLK goes thru added logic, such as dividers, delays and an external buffer IC. The LVDS clock exits the PLL and goes straight from the FPGA to the connector, resulting in a much shorter signal path.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;WARNING&lt;/b&gt;:&amp;nbsp;&amp;nbsp;The CLK_LVDS signal is driven directly from the FPGA.&amp;nbsp;&amp;nbsp;Shorting the CLK_LVDS may cause &lt;b&gt;damage &lt;/b&gt;to the FPGA device.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;See Also&lt;/b&gt;:&amp;nbsp;&amp;nbsp;&lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=126'&gt;Q200126&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=124</link><pubDate>12/2/2008</pubDate></item><item><title>Using USBTMC instruments in ATEasy 7.0 - Published on 12/2/2008</title><description>ATEasy 7.0 has the capability to control two types of USB devices, USBTMC instruments and USB RAW instruments. &lt;br /&gt;&lt;br /&gt;The following steps will outline how to install, configure, and use the Keithley 2100 USBTMC DMM instrument - this procedure can be applied to other USBTMC instruments:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt; Plug your USBTMC device into an available USB port on your PC&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt; When Windows finds the new hardware, install either the VISA&amp;nbsp;&amp;nbsp;(if you have installed NI VISA for example) USBTMC driver or the Geotest HW driver&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;The Geotest HW driver inf file can be found in Program FIiles\Geotest\HW\Hw.inf &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/usb1.JPG" alt`=&amp;quot; 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt; From within ATEasy, verify that the driver module you want to use supports USBTMC by checking the driver properties. Make sure the USBTMC and USB checkboxes are set&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/usb6.JPG" alt`=&amp;quot; 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt; Insert the appropriate driver into your System module&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/usb2.JPG" alt`=&amp;quot; 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt; Right click on the driver shortcut and go to the properties to select "USB" within the interfaces tab. Select your USBTMC device in the drop down menu labled "Device". &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/usb3.JPG" alt`=&amp;quot; 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt; Make sure the Vendor ID, Device ID, and Serial Number match your device.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/usb4.JPG" alt`=&amp;quot; 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt; Your USBTMC device can now be used in ATEasy by accessing the configured driver.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://www.geotestinc.com/images/support/usb5.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;USBTMC devices can also be accessed using the built in ATEasy internal procedures for USB such as USBOpen(), USBSetup(), USBSend(), etc. More information can be found in the ATEasy help under the USB heading.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=125</link><pubDate>12/2/2008</pubDate></item><item><title>How does the programmable clock delay affect the CLK_LVDS or OCLK signal? - Published on 12/2/2008</title><description>The programmable clock delay (DioSetupClkStrobeDelay) applies to both the internal and external versions of the OCLK; it is the same signal.&amp;nbsp;&amp;nbsp;OCLK (J3-P22) is derived from an internally generated clock, the delayed version of which actually controls the pattern sequencing.&amp;nbsp;&amp;nbsp;Because the data is clocked using the delayed OCLK, the phase relationship of Data Out to OCLK is consistent regardless of the delay setting.&lt;br /&gt;&lt;br /&gt;The programmable delay has no affect on the CLK_LVDS signal.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;See Also&lt;/b&gt;:&amp;nbsp;&amp;nbsp;&lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=124'&gt;Q200124&lt;/a&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=126</link><pubDate>12/2/2008</pubDate></item><item><title>What is the mating connector for the Geotest DIO products - Published on 12/2/2008</title><description>The Geotest DIO cards use 68-pin female VHDCI connector with a shielded, double pin row receptacle. The mating connector is the Honda HDRA-E68MA+ (or equivalent).&amp;nbsp;&amp;nbsp;The plastic shell part number is HDRA-E68LGKPE.&lt;br /&gt;&lt;br /&gt;For more information check the &lt;a href='http://www.honda-connectors.co.jp/product/index.php?m=partNoSearch&amp;ser_id=HDRA&amp;lang_cd=2'&gt;Honda Web Site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.geotestinc.com/images/support/HDRA-E68MA+ Pic1.jpg' target='_blank'&gt;Connector Image and Information&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=127</link><pubDate>12/2/2008</pubDate></item><item><title>How can you play a sound file within an ATEasy application - Published on 10/7/2008</title><description>One of the simplest methods for playing a sound within an ATEasy application involves using the Windows API function &lt;b&gt;sndPlaySound &lt;/b&gt;that resides in &lt;b&gt;Winmm.dll&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;sndPlaySound&lt;/b&gt; function plays the waveform sound specified either by a file name or by an entry in the registry or the WIN.INI file.&amp;nbsp;&amp;nbsp;The function is described in detail in the &lt;b&gt;Microsoft Developers Network&lt;/b&gt; library under the path:&lt;br /&gt;&lt;blockquote&gt;- Win32 and COM Development&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- Graphics and Multimedia&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- Windows Multimedia&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;- Multimedia Reference&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;- Multimedia Functions&lt;br /&gt;&lt;/blockquote&gt;The direct link is:&amp;nbsp;&amp;nbsp;&lt;a href='http://msdn.microsoft.com/en-us/library/ms713269.aspx'&gt;MSDN sndPlaySound&lt;/a&gt;.&amp;nbsp;&amp;nbsp;The method for using the &lt;b&gt;sndPlaySound&lt;/b&gt; function can be applied to any of the functions described in the MSDN library.&lt;br /&gt;&lt;br /&gt;To use the &lt;b&gt;sndPlaySound&lt;/b&gt; function within an ATEasy application you will need to:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Insert the &lt;b&gt;Winmm.dll&lt;/b&gt; library under the &lt;b&gt;Libraries&lt;/b&gt; sub-module of any ATEasy module (System, Driver or Program) - this example uses the Driver module. You can do this by right clicking on &lt;b&gt;Libraries&lt;/b&gt; and selecting &lt;b&gt;Insert Library Below&lt;/b&gt;. Select the DLL tab and for the &lt;b&gt;DLL File Name&lt;/b&gt; parameter, enter:&amp;nbsp;&amp;nbsp;&lt;b&gt;Winmm.dll&lt;/b&gt;.&amp;nbsp;&amp;nbsp;Since the DLL resides in the Windows System folder, the DLL file path can be omitted.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200118_1a.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Click &lt;b&gt;Insert&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Declare in the libraries &lt;b&gt;Procedures&lt;/b&gt; submodule the following function:&amp;nbsp;&amp;nbsp;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;sndPlaySoundA(Val String : sSoundFile, Val DWord dwFlags) : Bool&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200118_1b.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;/blockquote&gt;The constants for the dwFlags parameter are described in the MSDN Library and the header file &lt;b&gt;Mmsystem.h&lt;/b&gt;.&amp;nbsp;&amp;nbsp;The three parameters used in this example are:&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;SND_SYNC = 0x0000 ! Play synchronously (default)&lt;br /&gt;SND_ASYNC = 0x0001&amp;nbsp;&amp;nbsp;! Play asynchronously&lt;br /&gt;SND_LOOP = 0x0008&amp;nbsp;&amp;nbsp;! Loop the sound until next sndPlaySound&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;The ATEasy &lt;b&gt;Getting Started&lt;/b&gt; manual explains how to define a DLL and DLL procedures in an ATEasy application.&amp;nbsp;&amp;nbsp;There are also examples for calling DLL procedures and defining Windows API's in the ATEasy &lt;b&gt;Language.prj&lt;/b&gt; example.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Assuming you have a WAV file in the "C:\Sounds" directory called &lt;b&gt;Alert.wav&lt;/b&gt;, then the following ATEasy code can be used to play the sound:&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;sSoundFile: String&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;sSoundFile="C:\\Sounds\\alert.wav" ! Define the WAV file path&lt;br /&gt;&amp;nbsp;&amp;nbsp;sndPlaySoundA(sSoundFile,SND_SYNC) ! Play the sound file&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;The flags can be combined (added) to produce additional effects, such as repeatedly looping the sound for awhile before stopping:&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;sSoundFile: String&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;sSoundFile="C:\\Sounds\\alert.wav" ! Define the WAV file path&lt;br /&gt;&amp;nbsp;&amp;nbsp;sndPlaySoundA(sSoundFile,SND_LOOP+SND_ASYNC) ! Loop the sound indefinately&lt;br /&gt;&amp;nbsp;&amp;nbsp;Delay(2000) ! Allow sound loop to play for 2 seconds&lt;br /&gt;&amp;nbsp;&amp;nbsp;sndPlaySoundA(sSoundFile,SND_SYNC) ! Terminate the prior sound loop&lt;br /&gt;}&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=118</link><pubDate>10/7/2008</pubDate></item><item><title>How to terminate an application from within ATEasy - Published on 10/7/2008</title><description>You can use the following Windows API functions defined in Kernel32.dll to terminate an application using the application's name: Process32First, Process32Next, OpenProcess, GetExitCodeProcess, and TerminateProcess.&lt;br /&gt;&lt;br /&gt;First you will need to insert kernel32.dll under Libraries sub-module of the ATEasy module (System, Driver or Program). You can do this by right clicking on &lt;b&gt;Libraries&lt;/b&gt; and selecting &lt;b&gt;Insert Library Below&lt;/b&gt;. Select the DLL tab and enter the following file path under &lt;b&gt;DLL File Name&lt;/b&gt;:&lt;br /&gt;kernel32.dll.&amp;nbsp;&amp;nbsp;Since the DLL resides in the Windows System folder, the DLL file path can be omitted.&lt;br /&gt;&lt;br /&gt;Click &lt;b&gt;Insert&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;You will now need to define several functions under the procedures section of the newly inserted kernel32 library as shown below:&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/killproc1.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;You will also need to define a structure under the types section of the kernel32 library as shown below:&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/killproc2.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;And finally, will need to define the following variables in your module:&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/killproc3.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;Now you can enter the code required to scan a list of all open processes and terminate one based on its name. In this example, the first instance of&amp;nbsp;&amp;nbsp;&lt;b&gt;Wordpad.exe&lt;/b&gt; will be terminated.&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;CreateToolhelp32Snapshot(2, 0)&lt;br /&gt;&lt;br /&gt;ProcInfo.dwSize = sizeOf(ProcInfo)&lt;br /&gt;&lt;br /&gt;!Get first Process's information&lt;br /&gt;Process32First(lHandle, ProcInfo)&lt;br /&gt;&lt;br /&gt;!Loop until wordpad.exe is found or the end of the process list has been reached&lt;br /&gt;repeat&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Get the exe file name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sProcName = lcase(ProcInfo.szExeFile)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Check if the current process is wordpad.exe&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (sProcName = "wordpad.exe")&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!If wordpad.exe is found get its ProcessID&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;lHandle = OpenProcess(0x1F0FFF,0, ProcInfo.th32ProcessID)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !Terminate wordpad.exe&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;TerminateProcess(lHandle, -100) ! -100 is user defined exit code&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;exitloop&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif&lt;br /&gt;&lt;br /&gt;until not Process32Next(lHandle, ProcInfo)&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=119</link><pubDate>10/7/2008</pubDate></item><item><title>How does ATEasy support GPIB Service Requests (SRQ) - Published on 10/7/2008</title><description>There are several ways to support GPIB SRQ's within ATEasy.&amp;nbsp;&amp;nbsp;They 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Using SetInterfaceEvent() internal function&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Using the GPIB driver and implementing OnInterface event&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Using EnableInterrupt() internal function&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Using I/O Table Receive operation&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;This article will demonstrate the process for using ATEasy's SetInterfaceEvent() procedure, allowing you to set an ATEasy procedure that will be called by ATEasy when a GPIB SRQ interrupt occurs for a particular GPIB Controller card. A full description of this function is available in ATEasy Help. As there is only one GPIB SRQ line on the GPIB bus, when the event procedure is called, you will have to poll each of the instruments, using GpibSpl(), to find which one requires servicing.&lt;br /&gt;&lt;br /&gt;For example, to assign event procedure OnGpibCntlr1SRQ() to the SRQ interrupt of GPIB controller card1 (there may be more than one GPIB controller card in the system), use the following code:&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;status = SetInterfaceEvent(aioGpib, 0x10000, aioGpibSRQ, OnGpibCntlr1SRQ)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Create a service procedure called OnGpibCntlr1SRQ().&amp;nbsp;&amp;nbsp;The function will search for all of the GPIB drivers in the application system to find the GPIB instrument generating the SRQ:&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;OnGpibCntlr1SRQ()&lt;br /&gt;! Declare the following variables &lt;br /&gt;! i&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; !short variable to be used as a loop counter&lt;br /&gt;! sDriverName&amp;nbsp;&amp;nbsp; !String to hold the drivers name&lt;br /&gt;! lAddress&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !string to hold GPIB instrument address&lt;br /&gt;! sData&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;!String to hold instruments buffer information&lt;br /&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !Search all the drivers assigned to the application to find the GPIB drivers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i=1&amp;nbsp;&amp;nbsp;!System driver numbers start at 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while i &lt;= System.DriversCount&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;! System.DriversCount gives the number of drivers assigned to the application&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;sDriverName = GetDriverName(i)&amp;nbsp;&amp;nbsp;!Get the name of the driver&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;!Check if it is a GPIB driver&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;if GetDriverType(sDriverName) = aioGpib &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;!Get the address of the GPIB driver&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;lAddress = GetDriverAddress(sDriverName)&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;! Now check Request Service bit (RQS is Bit6) in the instruments Status&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;! Byte Register (STB). RQS will be set to 1 if service is requested&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;if(GpibSpl(lAddress) and 0b01000000) &lt;&gt; 0&amp;nbsp;&amp;nbsp;!Check if RQS (bit6) is set&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; !Read the instruments buffer for information on the SRQ&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; sData="" !Clear the buffer array&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; GpibReceive(lAddress, "\r\n", 1, 150, 0, sData, 20)&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; !TODO: Add code to handle the SRQ&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;!...&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endif&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;GpibClear(lAddress)&amp;nbsp;&amp;nbsp;!Reset the Gpib Instrument if required&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endwhile&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=120</link><pubDate>10/7/2008</pubDate></item><item><title>PXI Addressing Using Geotest and VISA based Drivers - Published on 9/24/2008</title><description>To initialize a VISA based PXI drivers, you call &lt;b&gt;viOpen&lt;/b&gt;(.., resource, …_) function passing resource string as an address that can be one of the following: &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Canonical resource name&lt;/b&gt; – “PXI::15::INSTR” PXI bus 0 device 15,&amp;nbsp;&amp;nbsp;or using slot numbers “PXI::CHASSIS1::SLOT3::INSTR” –In this case, when you move the board to another slot in the chassis you need to specify different string and change the 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Alias Name!! ]– “DMM1” –&amp;nbsp;&amp;nbsp;DMM1 need to be defined in the VISA resource manager (usually NI-MAX) Alias Editor and assigned to physical PXI address – In this case, when you move the board to another slot in the chassis you need to open the VISA resource manager and change the alias to point to the new slot – no change to the application is required.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Geotest drivers for PXI instruments are supplied with HW - Geotest Hardware Access Driver. These drivers works in two modes, using VISA or using HW: &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Using VISA&lt;/b&gt; – Using the Geotest driver &lt;b&gt;GxxxInitializeVisa&lt;/b&gt;( … ,sResource, …) function - Allow you to initialize using resource string or alias as in VISA : “PXI::15::INSTR” or “DMM1”) – Using an alias will allow moving of the card without changing the address (you need to change using the VISA resource manager Alias Editor). &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Using HW&lt;/b&gt; – the Geotest driver &lt;b&gt;GxxxxInitialize&lt;/b&gt;(.., nSlot, …)&amp;nbsp;&amp;nbsp;function –&amp;nbsp;&amp;nbsp;You can specify the nSlot parameter in two ways: logical number (legacy slot, for example 3) or physical slot number: chassis*256+slot&amp;nbsp;&amp;nbsp;- 0x103 for chassis 1 slot 3. If you use the logical slot number (3) when you move the board from slot 3 to 4 – You can reassign 4 to 3 logical number using the Geotest PCI/PXI Explorer applet and the app will work with no changes. HW also support alias name, you can set alias name using PXI Explorer and use a HW function to convert the “DMM1” alias as entered in PXI Explorer applet to nSlot to allow using names instead of addresses.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The following are the HW v3.2 functions used&amp;nbsp;&amp;nbsp;to map between alias and physical PXI/PCI address as defined in hw.h:&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;// returns the VISA resource for the specified alias&lt;br /&gt;INT&amp;nbsp;&amp;nbsp;HwPciGetAliasVisaResource(PCSTR pszAlias, PSTR pszResource); &lt;br /&gt;&lt;br /&gt;// returns the chassis slot for the specified alias (Chassis*256+Slot)&lt;br /&gt;INT&amp;nbsp;&amp;nbsp;HwPciGetAliasChassisSlot(PCSTR pszAlias);&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;&lt;br /&gt;// returns the legacy slot for the specified alias&lt;br /&gt;INT&amp;nbsp;&amp;nbsp;HwPciGetAliasLegacySlot(PCSTR pszAlias);&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;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;In ATEasy, you configure PXI driver address from the driver shortcut property page. Newer ATEasy drivers (for example GX2200.drv) supports the same type of initialization of the instrument: using VISA or using HW. If you intend to use VISA, set the &lt;b&gt;VISAResource &lt;/b&gt;driver parameter to a resource string or alias. If you intend to use HW, set the &lt;b&gt;Slot &lt;/b&gt;parameter to legacy or slot number (you can also call the HwPciGetAliasChassisSlot if you intend to use alias).&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Notes:&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Geotest drivers that were release with HW v1.x or v2.x do not support VISA&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Alias mapping is provided with HW 3.2 and above&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=117</link><pubDate>9/24/2008</pubDate></item><item><title>How to use C language  structure with bit fields from ATEasy - Published on 9/22/2008</title><description>&lt;b&gt;Solution:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ATEasy language, similar to Microsoft Visual Basic, does not have a bit field data type as C language structures. This does not prevent you from using bit fields structures when calling to C DLLs. In C, bit fields are grouped to integers (short, long, etc) and in ATEasy you substitute the group with the bit field basic type (for example DWord). To Access the specific field in ATEasy you use AND and SHR operators. For example, if in C you have the following structure:&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;typedef struct&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;UINT32 data1 : 10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;UINT32 data2 : 6; &lt;br /&gt;&amp;nbsp;&amp;nbsp;UINT32 data3 : 14; &lt;br /&gt;&amp;nbsp;&amp;nbsp;UINT32 data4 : 2 ;&lt;br /&gt;} DWORDBITS;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;In ATEasy the structure is defined as DWord (dwBits). Accessing data2 field is done 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;dwData2=(dwBits shr 10) and 0x3F&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;or &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;dwData2=(dwBits shr 10) and 0b111111&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;A more elegant and prone to changes (in the structure fields) is to use a procedure for setting and getting the fields values. Constants that hold the offset and the fields size can be also used 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;DWORDBITS_DATA2_OFFSET : Word Const = 10&lt;br /&gt;DWORDBITS_DATA2_SIZE : Word Const = 6&lt;br /&gt;&lt;br /&gt;Procedure DWordBitsField(pdwBits, wOffset, dwSize, dwValue) : DWord&lt;br /&gt;&amp;nbsp;&amp;nbsp;pdwBits: Var DWord&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;wOffset : Val Word&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! offset of field, 0 based&lt;br /&gt;&amp;nbsp;&amp;nbsp;dwSize : Val DWord&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! # of bits for the field&lt;br /&gt;&amp;nbsp;&amp;nbsp;dwValue: [Val] DWord&amp;nbsp;&amp;nbsp; ! optional, value of the field&lt;br /&gt;&amp;nbsp;&amp;nbsp;dwMask : DWord &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;! get or set DWordBits fields&lt;br /&gt;&amp;nbsp;&amp;nbsp;dwMask=(2ul ^ dwSize) -1&amp;nbsp;&amp;nbsp;! calc mask, 8 bit integer&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;If ArgMissing(dwValue)&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! get and return the field value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return&amp;nbsp;&amp;nbsp; (pdwBits shr wOffset) and dwMask&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! set the field and return all the bits&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pdw=(pdwBits and&amp;nbsp;&amp;nbsp;not (dwMask shl wOffset))&amp;nbsp;&amp;nbsp;or (dwValue shl wOffset)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return pdw&lt;br /&gt;&amp;nbsp;&amp;nbsp;Endif&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Now to set data2 to 35 in dwBits:&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;dwData2=DWordbitsField(dwBits, DWORDBITS_DATA2_OFFSET, DWORDBITS_DATA2_SIZE, 35)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;To get data2 from dwBits:&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;dwData2=DWordbitsField(dwBits, DWORDBITS_DATA2_OFFSET, DWORDBITS_DATA2_SIZE)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Notes:&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;When you import&amp;nbsp;&amp;nbsp;a C header file that contains bit fields ATEasy substitute them with the basic 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;You can also use the ATEasy Bit() function in the internal library to access (get or set) a single bit. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=102</link><pubDate>9/22/2008</pubDate></item><item><title>How can I have two versions of ATEasy in the same computer - Published on 9/4/2008</title><description>ATEasy does not allow running two versions at the same time on the same computer. When you upgrade ATEasy to a newer version, ATEasy setup overrides and replaces current files not allowing you to have two versions of ATEasy on the same computer. The procedure below shows how to install more than one version on the same computer and how to switch between the versions to run specific version. &lt;br /&gt;&lt;br /&gt;The following steps describe installing version 5.0 and 7.0 at the same compute. Make sure to read and understand the whole procedure before attempting to perform it:&lt;br /&gt;&lt;br /&gt;1. Install ATEasy 5 (run ATEasy5.exe and follow the instructions).&lt;br /&gt;2. Copy ATEasy folder and subdirectories (C:\Program Files\ATEasy) to C:\Program Files\ATEasy5.&lt;br /&gt;3. In the Windows System folder (usually C:\Windows\System32) copy ATEasy files and add 5 to the files name. There may be up to 6 files to copy: ATERT.dll, ATERCTL.dll, ATEasy.usr, ATEasyPanel.cpl and optionally ATEasy2_32.dll and ATEZUSER32.dll – add 5 to the filename. For example copy ATERT.dll to ATERT5.dll.&lt;br /&gt;4. Install/upgrade to 7 by running ATEasy7.exe and follow the instructions.&lt;br /&gt;5. Repeat steps 2 and 3&amp;nbsp;&amp;nbsp;(above) this time to ATEasy7 folder and ATERT7.dll etc.&lt;br /&gt;6. At this time ATEasy 7 in ready to run (ATEasy 5 will not run).&lt;br /&gt;7. When you need to switch from version X to Y (5 to 7 or 7 to 5), delete the ATEasy folder and copy ATEasyY folder to ATEasy folder (copy ATEasy5 folder to ATEasy)&amp;nbsp;&amp;nbsp;and copy the ATEasy System files to the original files (for example ATERT5.dll to ATERT.dll). Once files are copied, you will need to re-register the files by opening the windows command prompt (Start, Run Cmd), change the current directory to the Windows System folder ("cd c:\windows\system32")&amp;nbsp;&amp;nbsp;and re-register the two files ATERT.dll and ATECTL.dll ("regsvr32 ATERT.DLL" and "regsvr32ATECTL.dll"). At this point version Y is ready for use.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Notes:&lt;/b&gt;&lt;br /&gt;1. You can create a batch file to automate this process and launch ATEasy at the end. You can create shortcut on your desktop to switch to version Y.&lt;br /&gt;2. Make sure not to attempt to run executables created with newer version of ATEasy with older run time version. Newer run time can run older EXE files.&lt;br /&gt;3. Modifying files created such as programs with newer version of ATEasy with older version of ATEasy is not recommended.&lt;br /&gt;4. If you wish to have diffrenet options and settings for each version you may also need to copy and restore the ATEasy registry settings under HKEY_LOCAL_MACHINE\SOFTWARE\Geotest\ATEasy and HKEY_CURRENT_USER\Software\Geotest\ATEasy.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=101</link><pubDate>9/4/2008</pubDate></item><item><title>How to inform an ATEasy application of a UPS Power Failure - Published on 8/21/2008</title><description>This process will be broken into two parts: first create an application (EXE) that will be called by the UPS Management Software when a power failure occurs. This application should create an AEvent object with a name "UPSPowerFailEvent". After creating it, use the PulseEvent() method to signal the test application that the UPS is now running on battery power and it needs to shut down. Second, the test application will create a thread to watch for a UPSPowerFailEvent signal and if received shut down gracefully.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 1:&lt;/b&gt; Create an application to be run by the UPS Management Software in the event of a power failure. Note: the UPS Management Software is supplied with the UPS&lt;br /&gt;&lt;br /&gt;In ATEasy create an application (for example UPSPowerFailure). In the OnInit event procedure create an object called UPSPowerFailEvent (an object with the same name will be created by the test application). Then use the PulseEvent() method to signal the test application that a power failure has occured.&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 System.OnInit()&lt;br /&gt;obUPSEvent: AEvent !Object to inform test application of UPS power failure&lt;br /&gt;{&lt;br /&gt;obUPSEvent = CreateObject("AEvent") ! Create an AEvent object&lt;br /&gt;obUPSEvent.Name="UPSPowerFailEvent" ! Give it the same name as the test application thread &lt;br /&gt;obUPSEvent.PulseEvent() ! Signal the test application of the UPS power failure and that it&lt;br /&gt;! should shutdown&lt;br /&gt;} &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Compile the application and add the name of the executable file to the UPS Management Software Event Notification command line. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 2: &lt;/b&gt;The test application should create a thread when it starts (OnInit). The thread will call a procedure (called MonitorForUPSEvent() in this example). In the procedure create an event with the same name "UPSPowerFailEvent" as used Step 1 above. Then call WaitForSingleObject() to monitor the event signal. Once the wait returns perform the shut down of the application (call abort, exit, display a message etc):&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 MonitorForUPSEvent(lThread)&lt;br /&gt;lThread: Val Long ! Required to create the thread&lt;br /&gt;obUPSEvent: AEvent ! Object to be monitored for UPS Failure&lt;br /&gt;{&lt;br /&gt;obUPSEvent = CreateObject("AEvent") ! Create an object&lt;br /&gt;obUPSEvent.Name=" UPSPowerFailEvent " ! Give it the same name as Step 1&lt;br /&gt;WaitForSingleObject(obUPSEvent.Handle,) ! Wait for a Pulse Event to occur&lt;br /&gt;&lt;br /&gt;! Once the PulseEvent has occurred there are multiple ways of dealing with the shutdown process. These will mainly depend&lt;br /&gt;! on the UPS battery run time. In this example we will use Abort. &lt;br /&gt;&lt;br /&gt;Abort !Jump to System.OnAbort. Add code to OnAbort to run all the instrument and application shutdown routines&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Procedure System.OnInit()&lt;br /&gt;{&lt;br /&gt;	CreateThread(MonitorForUPSEvent)&lt;br /&gt;} &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;For instructions on shutting down Windows from ATEasy see KB Article &lt;a href='/KnowledgeBase/KBArticle.aspx?ID=70'&gt;Q200070&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The language.prg has additional examples of how to use events.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=99</link><pubDate>8/21/2008</pubDate></item><item><title>GX5280 and GX5290 Delay Settings - Published on 7/18/2008</title><description>The Gx5280 and Gx5290 boards use a multi-step delay circuit to perform two critical functions:&lt;br /&gt;&lt;br /&gt;1. Time-align the internal main clocks across a multi-module digital domain.&lt;br /&gt;2. Adjusting the timing between the data clock (data out) and strobe clock (data in) signals on each module to ensure that valid setup and/or hold parameters are met while testing the UUT. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Domain Offset&lt;/b&gt;&lt;br /&gt;While all modules in a digital domain use a common reference clock to maintain synchronization of the data clock and strobe clock, the alignment of theese clock edges is not guaranteed across all of the modules in the domain. The Domain Offset delay can be used to calibrate the modules in a domain so that the respective data and strobe clocks on each module are not only phase locked to each other, but are also phase aligned. The edge of each module’s master clock can be adjusted in a +/- 3nS range with 250pSec resolution, with slower edges adjusted in the negative direction, and faster edges adjusted in the positive direction, until all clock edges are aligned.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Clock and Strobe Delays&lt;/b&gt;&lt;br /&gt;The clock and strobe delays are achieved using a two stage process. The first stage is a programmable delay generator capable of generating delays from 0.0nS to 3.0nS, with a 250pS resolution. The second stage consists of a fixed delay generator with six output taps, each offset by 4nS. A switching circuit routs the clock or strobe signal through the appropriate delay path to produce a cumulative delay of the desired value.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Delay Ranges&lt;/b&gt;&lt;br /&gt;There is a gap between the maximum 3.0nS programmable delay in the stage one delay circuit and the minimum 4.0nS delay tap in the stage two delay circuit. These 1nS gaps are found between 3.0nS and 4.0nS, 7.0nS and 8.0nS, 11.0nS and 12.0nS, 15.0nS and 16.0nS, 19.0nS and 20.0nS and 23.0nS and 24.0nS. The second reason for the non-linearity is that there are added propagation delays introduced whenever the stage two delay circuit is included in the signal path. Because these additional delay factors are uncontrolled, each module has the potential for slight variations in the cumulative delays.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=97</link><pubDate>7/18/2008</pubDate></item><item><title>Changing the log result during run time after the test result is appended to the log - Published on 7/18/2008</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;You can change the log result during run time (even for tests that have already completed) by utilizing the ATEasy ALog’s Document object. The Document object is consistent with the Document Object Model (DOM of the Internet Explorer) .&lt;br /&gt;&lt;br /&gt;In the example code below, the various data members of the ALog Document object are used to modify the contents of the ATEasy test log. The Document object has access to all the text that is output to the test log.&lt;br /&gt;&lt;br /&gt;You can modify the text of each entry in the test log by accessing the appropriate innerText property.&lt;br /&gt;&lt;br /&gt;Use the following code to modify the log entry corresponding to the first test in the first 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;! obj is a variable of type Object&lt;br /&gt;&lt;br /&gt;obj=Log.Document.getElementsByTagName("TABLE")&lt;br /&gt;&lt;br /&gt;obj.item(3).cells.item(5).innerText="Some Text"&lt;br /&gt;&lt;br /&gt;! Destroy reference to Document object&lt;br /&gt; obj= Nothing&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Here is an explanation of how to index the different lines of the test&lt;br /&gt;&lt;br /&gt;obj.item(3) corresponds to the first test line in the first task and cells.item(5) corresponds with the sixth column of that particular test line (if you are using a min/max test then this means the test result).&lt;br /&gt;&lt;br /&gt;Here are some other examples:&lt;br /&gt;&lt;br /&gt;If you have 1 task with 2 tests then obj.item(3) will correspond with task1 test1, and obj.item(4) will correspond with task1 test2.&lt;br /&gt;&lt;br /&gt;You have to add 1 to the obj.item index if you are crossing a task. So if you have two tasks, each with 1 test, then obj.item(3) will correspond with task1 test1, and obj.item(5) will correspond with task2 test1.&lt;br /&gt;&lt;br /&gt;Use the View Source Log context menu to see the HTML table structure generated by ATEasy.&lt;br /&gt;&lt;br /&gt;Note: ATEasy Log must be configured to HTML format in order to use the methods described in this article (log.PlainText=False).</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=98</link><pubDate>7/18/2008</pubDate></item><item><title>Using threads to execute code within a specified time interval - Published on 6/17/2008</title><description>You can create a thread to execute code at a specified time interval. This can be useful if you want to take a measurement or reading for example every 200 millisecond. Use the following two part process:&lt;br /&gt;&lt;br /&gt;1. Create a thread procedure that accepts one parameter and contains the code you want to repeat on a regular, timed, basis.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The following thread procedure takes 50 measurements. Each measurement takes 200 mSec. Once the measurement is taken, the thread is suspended for the remaining time (of the 200mSec) using the Sleep function, releasing the CPU to handle other tasks: &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 MeasurementThreadProcedure(num) : Void&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;num: Long&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dwTimeStart : DWord&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dwTimeEnd : DWord&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i : Long &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! take 50 measurements each should take no more than 200 mSec&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for i=0 to 49&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Record time before measurement&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dwTimeStart = Tick()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Make measurement&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DMM Measure (g_adMeasurement[i])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Record time after measurement&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dwTimeEnd = Tick()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!Let thread sleep for the remaining time of this 200ms time cycle&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sleep(200-(dwTimeEnd-dwTimeStart))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;next&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;2. In your main program, you create the thread (in this case supended), start it, and then wait for the thread to end before continuing the main program.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; - Create a variable of type AHandle in your variables submodule.&lt;br /&gt;&lt;br /&gt;- Instantiate a thread object and link it to the previously created procedure using 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;hMeasurementThread = CreateThread(MeasurementThreadProc, 1, True, )&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;This line of code will create a thread and wait for you to start it with the Resume method. &lt;br /&gt;In this example, MeasureThreadProc is the name of the procedure created in step 1 and MeasurementThreadHandle is the name of the AHandle variable created earlier.&lt;br /&gt;&lt;br /&gt; - Optionaly. Set the priority of the thread to time critical for improved timing accuracy.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;SetThreadPriority(hMeasurementThread, aPriorityTimeCritical)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt; - Start the thread by calling its ResumeThread function:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;ResumeThread(hMeasurementThread)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt; - Use the WaitForSingleObject procedure to wait for the thread to finish execution (with a 20 second time out) before finishing your main ATEasy program.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;table width='100%' style='background-color:LightGrey' class='reg12'&gt;&lt;tr&gt;&lt;td&gt;&lt;font face='Courier New'&gt;WaitForSingleObject(hMeasurementThread, 20000)&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=95</link><pubDate>6/17/2008</pubDate></item><item><title>Determining the frequency measurement accuracy of the GTX2200 and GC2200 Timer/Counter - Published on 6/17/2008</title><description>For frequency measurements, the GTX2200 family uses a technique known as Reciprocal Counting, a method where the accuracy of the measurement is based on the relationship of the reference clock period and the measurement window duration (gate time), and not the input signal frequency.&lt;br /&gt;&lt;br /&gt;This method measures the time interval between two identical trigger points on the input signal, as defined by the trigger level setting and the trigger slope setting.&amp;nbsp;&amp;nbsp;During the gate time – the window in which the instrument is taking a measurement, the instrument simultaneously counts the number of cycles of the input signal, and the number of clock pulses from the built-in frequency reference.&amp;nbsp;&amp;nbsp;A microprocessor then calculates the frequency of the input signal.&amp;nbsp;&amp;nbsp;The absolute resolution of a measurement is the period of one reference clock cycle, and the relative resolution is equal to the absolute resolution divided by the gate time.&lt;br /&gt;&lt;br /&gt;For example, if the counter incorporates a 100MHz reference clock, then the absolute resolution is eight digits (10nS = 1.0E-8 Seconds).&amp;nbsp;&amp;nbsp;Using a gate time of 100mS, the relative resolution is seven digits irrespective of the input signal frequency (10 nS/0.1S = 1.0E-7 Seconds).&amp;nbsp;&amp;nbsp;The GTX2210, GTX2220 and GTX2230 all use a 100 MHz reference clock, but the GTX2220 and GTX2230 use an interpolation technique which yields an effective absolute resolution of 10 digits, equivalent to a 10 GHz reference clock.&lt;br /&gt;&lt;br /&gt;The overall accuracy of the measurement is degraded by the combined effects of the jitter on the measured signal, the jitter on the reference clock, the accuracy of trigger detection circuit and the accuracy of the gate timer.&amp;nbsp;&amp;nbsp;The frequency measurement accuracies for the GTX2200 family of products are:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;GTX2210/GC2210:&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;#Digits&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;Gate Time (s)&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;1.000&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;7&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0.100&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;6&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0.010&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;5&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0.001&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;GTX2220/GC2220 and GTX2230/GC2230:&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;#Digits&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;Gate Time (s)&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;10&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;1.000&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;9&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0.100&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;0.010&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;7&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0.001&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=94</link><pubDate>6/17/2008</pubDate></item><item><title>Why is my plain text Log columns not aligned? - Published on 6/17/2008</title><description>When the &lt;b&gt;ALog.PlainText&lt;/b&gt; property is set to True, ATEasy will use the Internet Explorer (IE) fixed pitch font. By default this will be set to "Courier New", however some systems may have set it to non-fixed pitch font (using IE options). You can override that by setting the &lt;b&gt;ALog.FixedFont.Name&lt;/b&gt; in your application.&amp;nbsp;&amp;nbsp;Once the font is set to a fixed pitch, any print statement in this mode will generate the same spacing for every character. &lt;br /&gt;&lt;br /&gt;The log control font can be set 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;Log.FixedFont.Name = "Courier New"&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The log control font size can be set 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;Log.FixedFont.Size= 11&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=96</link><pubDate>6/17/2008</pubDate></item><item><title>How do I change the order of controls on a form? - Published on 6/16/2008</title><description>The form controls are drawn according to the order of the Form.Controls where 0 is drawn first and 1 is on top of 0, etc. This is sometimes reffered to as ZOrder of controls. &lt;br /&gt;&lt;br /&gt;At design-time, you can change the order of controls at design time using the Tab Order command (Edit, Arrange, Tab Order) or by dragging the control in the Controls drop down list at the form editor.&lt;br /&gt; &lt;br /&gt;At run-time, you can use the following code to change the ZOrder using 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;img1.ZOrder(aWindowZOrderTop)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;will draw the img1 control on top of all controls. If you want img1 on top of img3, do 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;img3.ZOrder(aWindowZOrderTop)&lt;br /&gt;img1.ZOrder(aWindowZOrderTop)&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=91</link><pubDate>6/16/2008</pubDate></item><item><title>How to change the default printer that ATEasy uses for printing - Published on 5/29/2008</title><description>The following example shows how to change the default printer used by ATEasy when printing using &lt;b&gt;ALog.PrintLog &lt;/b&gt;method or internal functions such as &lt;b&gt;LogPrint&lt;/b&gt;, &lt;b&gt;FilePrint&lt;/b&gt;. The example prints the ALog control (log1) to a network printer:&lt;br /&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;Procedure btnPrint.OnClick(): Void Public Compile ! Occurs&lt;br /&gt;! when the mouse button is pressed and released upon the object.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sDefaultPrinter: String&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sPrinter: String&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ob: Object&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Example for Log Printing with printer different than default&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Use the following to print while prompting the user to select printer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!log1.ExecWB(alogOleCmdIdPrint, alogOleCmdExecOptPromptUser)&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Use the following code to change the default printer &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! (that ATEasy uses when printing) programmatically&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! print to sPrinter to (may be different than current default)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sPrinter="\\\\geoserver\\Dell Laser Printer 5100cn PCL6"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Get current default printer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ob=CreateObject("WScript.Shell")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sDefaultPrinter=ob.RegRead("HKCU\\Software\\Microsoft\\Windows NT\\" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"CurrentVersion\\Windows\\Device")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sDefaultPrinter=Left(sDefaultPrinter, Pos(",", sDefaultPrinter))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Set default printer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ob=CreateObject("WScript.Network")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ob.SetDefaultPrinter(sPrinter)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Print&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log1.PrintLog()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! Restore default printer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ob.SetDefaultPrinter(sDefaultPrinter)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ob=Nothing&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=90</link><pubDate>5/29/2008</pubDate></item><item><title>How to obtain ATEasy Single License from Geotest - Published on 4/22/2008</title><description>ATEasy single license (GT800-SL) can be setup from the ATEasy License Setup dialog box. This dialog is displayed either when starting ATEasy with no license or trial license expired or from the About ATEasy menu item under the Help menu.&lt;br /&gt;&lt;br /&gt;If you do not have a license, you can activate a 30-day trial version of the ATEasy software. The trial license contains full ATEasy functionality for 30 days. You are allowed one 30-day trial period on the computer on which you install ATEasy.&lt;br /&gt;&lt;br /&gt;Follow these steps to setup an ATEasy Single license:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Install ATEasy using the ATEasy Setup program.&lt;/b&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='20'&gt;&lt;img src='https://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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Open the &lt;b&gt;ATEasy License Setup &lt;/b&gt;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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Select Install Single License from the License Type list. An &lt;b&gt;ATEasy Computer ID &lt;/b&gt;is displayed in the bottom field. The ATEasy Computer ID is used to identify the machine where the license is installed. With the ATEasy Computer ID and the &lt;b&gt;ATEasy Serial Number &lt;/b&gt;(located on the outside of the CD case or on the license key), create a new incident using your M@gic (www.geotestinc.com/magic) user account to obtain a &lt;b&gt;license string &lt;/b&gt;or file. You will need to paste both Serial Number and computer ID to the incident. You can start using ATEasy by activating the trial version until you receive the 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='20'&gt;&lt;img src='https://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 &lt;b&gt;ATEasy License Setup &lt;/b&gt;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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Select &lt;b&gt;Install Single License &lt;/b&gt;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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Type or paste in the ATEasy License String or select the license File. Click &lt;b&gt;OK&lt;/b&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=89</link><pubDate>4/22/2008</pubDate></item><item><title>Creating Dynamic Forms Using ATEasy - Published on 12/14/2007</title><description>ATEasy supports creating dynamic forms. Usually the form contents: Controls and menus is created at design time using the ATEasy form editor. Dynamic forms are forms that their content is created at run time. While it possible to create the form with all the possible controls that you expecting to use at design time and then use the control &lt;b&gt;Visible &lt;/b&gt;property to show or hide control and &lt;b&gt;Move &lt;/b&gt;method to position them, sometimes you may want to create the controls at run-time based on the form logic.&lt;br /&gt;&lt;br /&gt;To create a dynamic form you create a form at design time with the fixed controls on it. At run time you call the &lt;b&gt;InsertControl&lt;/b&gt;, AForm class method to create and add additional controls:&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;btnClicked=InsertControl("btnClicked", "AButton", Form.Width/2-80, Form.Height/2-14, 160, 28)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Once the control is created you can link the control events with an event handler procedure (btnClicked.OnClick) using the &lt;b&gt;AddHandler &lt;/b&gt;statement 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;AddHandler btnClicked.OnClick, btnClickedOnClick&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Call the &lt;b&gt;RemoveHandler &lt;/b&gt;statement and the &lt;b&gt;RemoveControl&amp;nbsp;&amp;nbsp;&lt;/b&gt;method to and release the handler and&amp;nbsp;&amp;nbsp;delete the control. &lt;br /&gt;&lt;br /&gt;For more information on dynamic forms see the Dynamic Form task in the Forms.prg example.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=88</link><pubDate>12/14/2007</pubDate></item><item><title>PXI chassis configuration is lost every time the system is powered up. - Published on 12/13/2007</title><description>&lt;b&gt;Problem:&lt;/b&gt; Every time my test system boots up, the Geotest PXI chassis configuration that is stored in the &lt;b&gt;PXISYS.ini&lt;/b&gt; file gets replaced with an empty file with no configuration data. This forces us to create a new PXISYS.ini file with the correct configuration data each time the system is re-booted.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;This problem is caused by National Instruments Measurement and Automation Explorer overwritting the Geotest slot description file upon rebooting.&amp;nbsp;&amp;nbsp;If you have NI Measurement and Automation Explorer (NI-MAX) installed, and it is version 4.0 or later, then your configuration file is being overwritten by NI-MAX and NI-VISA .&amp;nbsp;&amp;nbsp;To correct this problem you need perfom one of the following procedures:&lt;br /&gt;&lt;br /&gt;1. Download and install HW v3.0 or above. Many of Geotest drivers and products release after August 2008 contains the new HW. The new HW perform the registry fix (described in 2 below) automatically .&lt;br /&gt;&lt;br /&gt;2. Modify the Windows registry by applying a registry patch to disable NI-VISA from doing this.&amp;nbsp;&amp;nbsp;The process is as follows:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Create a text file called "&lt;b&gt;DisableBootPxiSysGeneration.reg&lt;/b&gt;" and copy/paste the following text to the file:&lt;/td&gt;&lt;/tr&gt;&lt;/table&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;Windows Registry Editor Version 5.00&lt;br /&gt;[HKEY_LOCAL_MACHINESOFTWARENational InstrumentsNI-PXIRM]&lt;br /&gt;"DisableBootPxiSysGeneration"=dword:00000001&lt;/font&gt;&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Save the file (in text format).&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Double click the file to apply the registry change.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Use PXI/PCI Explorer to verify or assign instruments to the appropriate chassis slot.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Cycle power and verify that the chassis configuration and instrument slots are preserved.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=87</link><pubDate>12/13/2007</pubDate></item><item><title>ATEasy v6.0 Service Pack 1 (build 134)  - list of changes - Published on 7/20/2007</title><description>ATEasy 6 build 134 contains all fixes and changes since version 6 (build 132). &lt;br /&gt;&lt;br /&gt;The following list the changes that were made:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Enhanced support for .NET and new support for .NET namespace&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Enhanced support for WinSocket interface interface re-openeing when InterfaceInfo changes, support for terminators&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Project new option AutoIncrementFileVersion&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;LoadOnAccess new option for 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AdoDB example - new task that show how to use System.Data for databases using .NET&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;DotNet example - new task showing how to send email using System.Net.Mail using .NET &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Enhanced License Server support with automated setup as service and a way to set the server from the client&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New drivers for Signametrix SM2060/55, SMX4030/32, Navatek NT6000, GX5733, GX5641, GX5642, GX2002, GX6377, GX6384, GxChassis, Gx7xxxA smart chassis), Keithley Instruments 2000/1/2/10 DMMs, Keithley Instruments PXI (DAQ and DIO) boards, Sorensen DCS and DLM600 power supplies&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New command line options for the setup:&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/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;&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;&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;Silent mode&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;&amp;nbsp;&amp;nbsp;/SetupType"[Typical, Full, LicenseServer]"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Specify one of the setup type, i.e Typical, Full,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LicenseServer&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Default=Typical&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;This command only apply to clean installation&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;&amp;nbsp;&amp;nbsp;/TargetDir"Path"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Specify the target directory for the installation&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Default="C:\Program File\ATEasy"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;This command only apply to clean installation&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;&amp;nbsp;&amp;nbsp;/Uninst&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Uninstall ATEasy &lt;/td&gt;&lt;/tr&gt;&lt;/table&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;GetLogString - new constant aLogStringAppend to enumALogStringType to return the current append statements string &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Enahance support for WinSocket interface (OnInterface, AutoAccept)&amp;nbsp;&amp;nbsp;&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New Units in the test property page&amp;nbsp;&amp;nbsp; &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Allow passing of Form procedures to DLL/callbacks&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Readonly control properties were change to read/write (for example BorderStyle, Sorted, Style, etc)&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AUsers.ShowLogInDialog() returns a user token and AUsers.Login() accept a token&amp;nbsp;&amp;nbsp;&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;CreateObject internal function support for remote host (DCOM) and free&amp;nbsp;&amp;nbsp;treading model&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Tolerance test type Plus and Minus values if left empty allow open end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New code completion support for .NET overloaded methods and constructors&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Bug fixes&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=86</link><pubDate>7/20/2007</pubDate></item><item><title>How to configure NI-MAX version 4.1 and above to recognize a Geotest chassis. - Published on 5/3/2007</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; &lt;b&gt;HW v3.0&lt;/b&gt; and above automated the process described below. You can configure the chassis from the HW &lt;b&gt; PXI/PCI Explorer&lt;/b&gt; applet that can be found the Windows Control Panel using the &lt;b&gt;Scan for New Devices&lt;/b&gt; and clicking on the &lt;b&gt;Save &lt;/b&gt;button.&lt;br /&gt;&lt;br /&gt;Download and install the &lt;b&gt;GxChassis &lt;/b&gt;package, found in the download section of the Geotest website. Once this package is installed, all the chassis INI files can be found at the following path: C:Program Files\Geotest\GxChassis\INI Files\.&lt;br /&gt;&lt;br /&gt;In NI Measurement &amp; Automation Explorer (NI-MAX), right click on "PXI System" and select "Show PXI Buses". Typically, multiple busses will be shown, and the chassis may be associated with any one of these buses (depending on chassis type).&lt;br /&gt;&lt;br /&gt;Starting from the first bus listed, right click and select "Identify as a PXI Chassis". Then choose "other chassis" and select the Geotest .INI file that corresponds to your chassis.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/screen1.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;In case of an error message ("This chassis has been identified but is not described in the pxisys.ini for this system") right click on "PXI System" and select "Delete All Identifications".&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/screen3.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;Repeat steps 1 through 3 listed above, using the next bus in sequence, until NI-MAX properly identifies the correct Geotest chassis.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Right click on "PXI System" again, and deselect (uncheck) "Show PXI Buses".&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/screen4.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;You will now be able to view and configure your chassis and its resources, using NI Measurement &amp; Automation Explorer (NI-MAX) 4.1+. &lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/screen5.JPG" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=85</link><pubDate>5/3/2007</pubDate></item><item><title>What is the accuracy of the Delay() function? Is background processing occurs while Delay() is called? - Published on 3/13/2007</title><description>&lt;b&gt;Delay() &lt;/b&gt;is accurate to 1msec, however, since the Delay() function allows form events and interrupts to be dispatched, it may not always be accurate to 1msec. You can use the &lt;b&gt;Sleep() &lt;/b&gt;function if you would like to completely suspend the thread and get better accuracy , however your form events will not be dispatched and will look frozen until Sleep is returned (if sleep is called in the form thread). The &lt;b&gt;SetThreadPriority()&lt;/b&gt; may also be used to improve accuracy. While delay is processing an event is, the delay can only return after the event is executed, so make sure the event processing time is short as possible. &lt;br /&gt;&lt;br /&gt;If you still want to process events while you are waiting but want to consume less CPU, use the &lt;b&gt;Tick() &lt;/b&gt;function to implement your own delay and allow other processing such as interrupts, form events and other custom processing while doing it. You should call &lt;b&gt;WaitForEvent() &lt;/b&gt;function to suspend the thread and consume less CPU while waiting to the next event resulting in a better delay function as in the following 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;lStart=tick()&lt;br /&gt;while tick()-lStart&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! optional&amp;nbsp;&amp;nbsp;- do something&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! suspend to conserve CPU but still allow form events interrupts etc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WaitForEvent(tick()-lStart)&lt;br /&gt;&lt;br /&gt;endwhile&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=84</link><pubDate>3/13/2007</pubDate></item><item><title>Calculating time diffrerence using DateTime data type - Published on 3/8/2007</title><description>ATEasy's DateTime type values are really a Double data type - the same applies to a DateTime value in a variant (vtDate) type.&lt;br /&gt;The integer part of the double number is the number of days since 12-30-1899.&amp;nbsp;&amp;nbsp;The fractional part is effectively the time-of-day.&lt;br /&gt;The easiest way to convert a date string into our DateTime is to assign the string to a variant and then assign the variant to a DateTime variable, for 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;vr01 = "8/25/2006 17:49"&lt;br /&gt;dt01 = vr01&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;DateTime values can be compared with the expected meaning.&amp;nbsp;&amp;nbsp;Since they are really Double values, if you subtract them and store the result in a Double, you have the number of days between the two dates.&amp;nbsp;&amp;nbsp;Similarly, adding a Double to a DateTime, adjusts the date and time by that many days plus a fraction of a day.&lt;br /&gt;Here is an example of subtracting two day/time:&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;vr1:Variant&lt;br /&gt;vr2:Variant&lt;br /&gt;&lt;br /&gt;vr1="08/27/06 "&lt;br /&gt;print VarChangeType(vr1, vtDate)&lt;br /&gt;print vr1&lt;br /&gt;vr2="08/28/06 10:48"&lt;br /&gt;print VarChangeType(vr2, vtDate)&lt;br /&gt;print vr2&lt;br /&gt;print vr2-vr1&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt; &lt;br /&gt;The example will print:&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&lt;br /&gt;8/27/2006&lt;br /&gt;0&lt;br /&gt;8/28/2006 10:48:00 AM&lt;br /&gt;1.44999999999709 (one day and .449 of 24 hours)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=83</link><pubDate>3/8/2007</pubDate></item><item><title>ATEasy is unable to load a DLL error when I start my ATEasy application - Published on 12/15/2006</title><description>ATEasy 6.x and above uses &lt;b&gt;LoadLibraryEx &lt;/b&gt;Windows Application Programming Interface (API) function at run time to load the DLLs you described in the ATEasy module (program, system or driver). The function returns a details status which ATEasy displays when it fails. The error will show as "Unable to Load the '%1' DLL file '%2'. Windows API LoadLibraryEx returned error # %3 (0x%4): %5". Prior version of ATEasy returned the error "Unable to load the '%1' DLL file '%2' Error %3 (0x%4): %5".&lt;br /&gt;&lt;br /&gt;Here are a list of possible causes and solution to this problem in case the error description (%5) is "The specified DLL or a referenced DLL could not be found" (error #127/0x7F) or "the specified module could not be found" (error #127/0x7F) or "the specified procedure could not be found"&amp;nbsp;&amp;nbsp;(error #126/0x7E):&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Check the DLL library file path and make sure the DLL exist. You can check this from ATEasy DLL Properties. The property page display if the file exist or not, if the file exist it will show the exact location where the DLL file name will be used at run-time.&amp;nbsp;&amp;nbsp;If you are using relative (i.e. ..abc.dll) or no path name in the DLL path in ATEasy you need to make sure the DLL will be located in a folder found relative to the EXE file name as displayed in the Project property page. If you are not using a path in the file name (i.e. kernel32.dll) using no You may have several DLLs of the same name make sure the DLL on the disk is the one you think is loaded - Try to temporary change the DLL Library path in ATEasy to a full path name instead of relative path or no path. This procdure is used usally for error # 127 or&amp;nbsp;&amp;nbsp;0x7F. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The DLL you are using may depends on other DLLs. You can download a tool called &lt;b&gt;DEPENDS.EXE &lt;/b&gt;from &lt;br /&gt;&lt;a href='http://www.support.microsoft.com/kb/198038'&gt;http://www.support.microsoft.com/kb/198038&lt;/a&gt; to see what DLLs are used by the DLL you are trying to load. After you download it, run the program and open the DLL you are trying to load from the DEPENDS file menu and it will show a list of DLLs that are used by your DLL. If it's missing it will show it in red the DLL that is missing.&amp;nbsp;&amp;nbsp;This procdure is used usally for error # 126 or&amp;nbsp;&amp;nbsp;0x7E. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Some DLLs will have initialization code that is called when they are loaded. This code may fail. Follow the DLL manufacturer instruction for setup and preparation before using it or contact the manufacturer for support.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=82</link><pubDate>12/15/2006</pubDate></item><item><title>How can i disable the popup menu of the ALog control? - Published on 12/11/2006</title><description>The ALog.ShowContextMenuItem method can be used to hide individual items of the contecxt menu. For 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;log1.ShowContextMenuItem(alogContextMenuItemClear, False)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt; &lt;br /&gt;would hide the Clear from the context menu.&lt;br /&gt; &lt;br /&gt;To remove the context menu all together add the following to the Form.OnLoad event:&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;log1.ShowContextMenuItem(-1, False)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=81</link><pubDate>12/11/2006</pubDate></item><item><title>How to use Microsoft Excel to calculate a statistical/mathematical/financial function from ATEasy - Published on 12/7/2006</title><description>The example creates a hidden Excel workbook, fill the data and calculate &lt;b&gt;TINV &lt;/b&gt;value and return it to ATEasy. &lt;br /&gt;&lt;br /&gt;TINV Excel function used in this example returns the t-value of the Student's t-distribution as a function of the probability and the degrees of freedom.&lt;br /&gt;&lt;br /&gt;You can modify the example to calculate and to use any excel mathematical/statistical/financial formula.&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;ob: Object&lt;br /&gt;&lt;br /&gt;ob=CreateObject("Excel.Application")&lt;br /&gt;if ob=Nothing&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MsgBox("Unable to Create Excel.Application. Check if MS Excel is intsalled properly. Aborting...")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;abort&lt;br /&gt;endif&lt;br /&gt;ob.Caption="ATEasy Excel Function Call Using COM"&lt;br /&gt;ob.Visible=TRUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ! show/activate execl main window&lt;br /&gt;&lt;br /&gt;ob.Workbooks.Add()&amp;nbsp;&amp;nbsp;! add workbook&lt;br /&gt;&lt;br /&gt;ob.Cells.Item(1, 1).Value = 0.054644927&lt;br /&gt;ob.Cells.Item(2, 1).Value = 60.0&lt;br /&gt;ob.Cells.Item(1, 2).Value = "=TINV(A1, A2)"&lt;br /&gt;&lt;br /&gt;print ob.Cells.Item(1, 2).Value &lt;br /&gt;&lt;br /&gt;ob.Workbooks.Item(1).Close(FALSE)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! close workbook do not save changes&lt;br /&gt;ob.Quit()&lt;br /&gt;ob=Nothing&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=80</link><pubDate>12/7/2006</pubDate></item><item><title>Can an ATEasy executable (EXE) handle command line parameters? - Published on 7/21/2006</title><description>Use the App.CommandLine to retrieive these parameters. The on-line help explains how to use the &lt;b&gt;CommandLine &lt;/b&gt;property of the &lt;b&gt;AApp &lt;/b&gt;class.&lt;br /&gt;&lt;br /&gt;For example if you call your exe:&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;abc.exe a.log&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The App.CommandLine will be equal to "a.log" and in you code you can use it:&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;SaveLog(App.CommandLine)&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=79</link><pubDate>7/21/2006</pubDate></item><item><title>How can I display a PDF file from ATEasy application using WinExec? - Published on 7/21/2006</title><description>Use &lt;b&gt;WinExec()&lt;/b&gt; internal function to open a window with a the PDF document. For 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;iStatus=WinExec("\"\\\\MyServerName\\SharedFolder\\Program Files\\"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"ATEasy\\Corporate\\Mercuri\\Help\\MERCURI HELP.pdf\"")&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Note also that the file name is surrounded with double quotes since the file name may contain space which. A space will cause ATEasy the think the first part (up to the space) is the exe and the second is the command line parameters, so to avoid this we use the quotes .&lt;br /&gt;&lt;br /&gt;WinExec will noot generate exception so there is no need for try statement just check as the help says that the returned status or handle is greater than 32.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=78</link><pubDate>7/21/2006</pubDate></item><item><title>How do I modify the test log results numbers format to not display numbers in scientific format? - Published on 7/21/2006</title><description>There are several ways to change the formatting of the test results in the log:&lt;br /&gt;&lt;br /&gt;1. Use the &lt;b&gt;FormtLogString()&lt;/b&gt;to internal functions change the table columns and their contents &lt;br /&gt;&lt;br /&gt;2. In &lt;b&gt;OnEndTest &lt;/b&gt;event call &lt;b&gt;GetLogString()&lt;/b&gt;, modify the string and call &lt;b&gt;SetLogString()&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;The FormatLogString() automatically switches to Scientific format (i.e. 1.2E+07) if the number cannot be displayed. You can override this by changing the test result:&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;TestResult=Round(TestResult, -3)&amp;nbsp;&amp;nbsp;! Will truncate and leave only 3 digits after the decimal point.&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The second method is a bit more flexible and it gives you full control over the way the &lt;b&gt;TestResult&lt;/b&gt; number is displayed in the log string and than send it back to ATEasy. Once you identify using string manipulation functions the position of the test result in the log string, use the &lt;b&gt;Format()&lt;/b&gt; function to convert the number to a string the way you use it and than replace the test result string. Make sure the code you'll put will work with both HTML and Text test logs.</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=77</link><pubDate>7/21/2006</pubDate></item><item><title>ATEasy v6.0 Detailed List of Changes - Published on 7/21/2006</title><description>&lt;b&gt;Development Environment&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fresh new look for the development environment includes auto hide docking windows, gradient and color customization for menus and toolbars. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Multiple level programs in your project allow you to organize your projects test programs under user defined folders and divide them to categories. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Create folders in your projects to store baggage files of your projects such as documentation, dlls, software components and more. You can open/edit/print these files directly from ATEasy (using Windows shell verbs). &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New program Parameters property page allow you to create and define parameters at design time for AProgram of type Numeric, String and enumerated type. Document shortcuts have description and program shortcut have a way to override and change the program UUT name set in the 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Procedure property page: new Compile checkbox, to force a procedure to compile even if not referenced.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Run-Time&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New class AVirtualKeyboard allow you to control and display the Virtual keyboard on the screen. The virtual keyboard enables touch pane; support for control that require text input using a keyboard that is displayed on the screen and designed for touch panel user interface. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;EnableTouchScreen new internal function to configure and enable automatic support touch panel to your application including support for scrollbar sizing, font changes etc. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AForm.AutoScale - new property enables auto sizing and scaling of the form by setting the AForm.Font. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AProgram, ASystem, ADriver new property Type and new eneum enumAAppItemType. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AProgram, ASystem, ADriver new property Parent to return the parent 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AProgram.Parameters new property, ADriver.Parameters also extended to support write at run-time. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ADriver.MiscFolder, AProgram.MiscFolder and ASystem.MiscFolder new property used to store the application files. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ADriver.Tag, AProgram.Tag and ASystem.Tag new property used to store user defined string to the module files. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New classes AAppFolder and AAppShortcut used for module based user defined folders and baggage files. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New statement Append statement - allows you to append text to be appended to the log after the test results is printed. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Support for dynamically creating of menus AMenu.InsertMenu new method to dynamically insert a menu, AMenu.Move new method to move a menu item, AMenu.RemoveMenu. This is similar to 5.0 dynamically creating of form controls using AForm.InsertControl and AForm. RemoveControl. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AButton - multi-line and word wrap text support. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New File and directory functions FileGetStatus, FileCopy, DirectoryCreate, DirectoryRename, DirectoryDelete new internal functions, FileFind now returns optional structure structFileStatus. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ParseDateTime and FormatDateTime new internal functions for date time string manipulation. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The statement AddHandler and RemoveHandler now support .NET, COM events, Control and Menu events (any object type that generate events). &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy now support importing of the new .NET 2.0 framework and Lab View 8.0 (up from .NET 1.1 and LabView 7.1). &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AButton, ARadioButton, ACheckBox new support for multiple lines text and word wrap for the caption property. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AStatusBarPane new support for Progress bar pane - new properties ProgressMin/Max and Value, asbrpStyleProgressBar new member of enumStatusBarPaneStyle. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;enumGetDir has new constants aGetDirApp, aGetDirAppExe, also the aGetDirATEasy now always return the ATEasy folder (and not the EXE when running outside of the IDE). &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New internal function, GetCallbackThunkAddress, the function return the ATEasy procedure thunk so it can be called from an external 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ControlsCount and Controls properties are now available only to controls that are containers: ATab, APanel and AGroupbBox (also AForm). &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Test Executive&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Full support for touch panel user interface: &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Modal and Modeless user interface. Modal user interface used mainly for touch panel to replace menus and toolbars with buttons forms to navigate and control the test executive. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The user can define forms designed for touch panel user interface that includes test executive commands or user defined commands to control the test executive&amp;quot;s capabilities via the touch panel in Modal 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;User groups based user interface, allow you to customize the user interface for production users, test engineers etc. Each group can have its own privileges and user interface (forms, menu, toolbars and options). &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Customization of forms, menus, toolbar options and more per users group can be set by the administrator with no programming.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Automatic management and backup, save, delete and naming of log files.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Compatibility issues&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ATEasy 6.0 is fully backward compatible with prior versions of ATEasy (3.0-5.0) . Binary files saved in version 6.0 can be loaded using version 5.0 build 94a (but not always with versions prior to 94a). ATEasy 6 can also run EXE created with prior versions. &lt;br /&gt;&lt;br /&gt;See &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=75'&gt;Q200075&lt;/a&gt; for a summary and less detailed list of features.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=76</link><pubDate>7/21/2006</pubDate></item><item><title>ATEasy v6.0 Main New Features Summary - Published on 7/20/2006</title><description>&lt;b&gt;Run time and Development:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fresh new look for the development environment includes auto hide docking windows, gradient and color customization for menus and toolbars. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New support for applications that have a large number of programs, we now provide an easy way to organize these programs. Essentially, the user can define folders under the Programs folders and organize its test program in a tree structure according to their functionality or UUT variants. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Create folders within the project modules that can contain "baggage" information. Things like UUT documentation, fixture wiring, TRDs', software components, etc. These can be opened directly from ATEasy regardless of their application type - i.e. Word, Excel. Etc. The advantage to this is that now, all of the specific files needed for an application can be located in one location, facilitating source control, archiving and backup. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New Full feature, virtual on-screen virtual keyboard. This allows full keyboard support for applications that are designed for touch panel. This feature also includes support for an increased scrollbar size for all windows controls, multi line push buttons and automatic sizing/scaling of a form when it font is changed. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The Internal library contains several new functions and class including support for extended directory and file manipulation, date time parsing, dynamic menu and control creation and extended support for .NET/ActiveX events. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New support for .NET 2.0, LabView 8.0, ActiveX/COM event handlers, DLL callback. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Tested under Windows VISTA (b2) &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Test Executive Features:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Full support of test executive features using a touch panel user interface: &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The user can define forms designed for touch panel user interface that includes test executive commands or user defined commands to control the test executive's capabilities via the touch panel. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Virtual keyboard will automatically popup when the current control requires text entry. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Customize the user interface for different classes of users - i.e. operators, technicians, test engineers, etc. Each group can have its own privileges and user interface (forms, menu, toolbars and options).&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Automatic management of log files - i.e. when to backup, when to delete, when to save, how to name log files, etc. Previously, the user had to code these capabilities as part of the logging process.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;See &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=76'&gt;Q200076&lt;/a&gt; for additional and more detailed list of features.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=75</link><pubDate>7/20/2006</pubDate></item><item><title>Getting Return Code from External Process Started with WinExec - Published on 4/24/2006</title><description>&lt;b&gt;Solution:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;WinExec()&lt;/b&gt; does not operate synchronously and will not wait until the called process is closed before returning to the calling application. Instead, it will return immediately and return a process handle indicating if the process was successfully created or not. To access the code returned by the application launched with WinExec(), you will need to use code similar to 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;hProcess=WinExec("...")&lt;br /&gt;if hProcess&lt;21&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! error creating the process&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;br /&gt;endif&lt;br /&gt;WaitForSingleObject(hProcess)&lt;br /&gt;GetExitCodeProcess(hProcess, dwCode)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The &lt;b&gt;GetExitCodeProcess &lt;/b&gt;function retrieves the termination status of the specified process, and is defined in kerner32.dll. You will need to define it under a kernel32.dll entry within your module libraries.&amp;nbsp;&amp;nbsp;In ATEasy this function will be defined as:&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;GetExitCodeProcess(hProcess: Val AHandle, pdwCode : VAR DWord) : BOOL&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;A description of the function is provided below:&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;GetExitCodeProcess:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;BOOL GetExitCodeProcess&lt;br /&gt;(&lt;br /&gt;HANDLE hProcess,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // handle to the process&lt;br /&gt;LPDWORD lpExitCode&amp;nbsp;&amp;nbsp; // termination status&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Parameters:&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;hProcess [in] - Handle to the process. For Windows NT/2000/XP, the handle must have PROCESS_QUERY_INFORMATION access. For more information, see Process Security and Access Rights. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;lpExitCode [out] - Pointer to a variable to receive the process termination status. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Return Values:&lt;/b&gt;&lt;br /&gt;If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Remarks:&lt;/b&gt;&lt;br /&gt;If the specified process has not terminated, the termination status returned is STILL_ACTIVE. If the process has terminated, the termination status returned may be one of 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The exit value specified in the ExitProcess or TerminateProcess function. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The return value from the main or WinMain function of the process. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The exception value for an unhandled exception that caused the process to terminate.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=69</link><pubDate>4/24/2006</pubDate></item><item><title>How do I send email from ATEasy? - Published on 4/18/2006</title><description>&lt;b&gt;Solution:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You can do it by using the Microsoft CDO ActiveX/COM library :&lt;br /&gt;&lt;br /&gt;1. Insert the CDO library to your module&lt;br /&gt;&lt;br /&gt;2. Define the following variables:&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;cdocfg: CDO.Configuration&lt;br /&gt;msg: CDO.Message&lt;br /&gt;sMyHTMLMessage: String&amp;nbsp;&amp;nbsp;! HTML message&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;&lt;br /&gt;3. The following code is an example of how to use the CDO library to send email (may require some changes for error handling message text):&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;! create configuration &lt;br /&gt;cdocfg=CreateObject("CDO.Configuration")&lt;br /&gt;cdocfg.Fields.Item(cdoSMTPConnectionTimeout).Value=400 &lt;br /&gt;cdocfg.Fields.Item(cdoSMTPServer).Value="10.10.1.1" ! server address could be also something like "smtp.primenet.com"&lt;br /&gt;cdocfg.Fields.Item(cdoSendUsingMethod).Value=cdoSendUsingPort&lt;br /&gt;cdocfg.Fields.Update()&lt;br /&gt;&lt;br /&gt;! create a message&lt;br /&gt;msg=CreateObject("CDO.Message")&lt;br /&gt;msg.Configuration=cdocfg&lt;br /&gt;msg.From="rony@geotestinc.com"&lt;br /&gt;msg.Subject="Hello world!"&lt;br /&gt;msg.HTMLBody=sMyHTMLMessage&lt;br /&gt;msg.To="\"Ron Y\""&lt;br /&gt;&lt;br /&gt;! send the message&lt;br /&gt;Try&lt;br /&gt;&amp;nbsp;&amp;nbsp; msg.Send()&lt;br /&gt;Catch Else&lt;br /&gt;&amp;nbsp;&amp;nbsp; ! error message&lt;br /&gt;EndTry&lt;br /&gt;&lt;br /&gt;!clean up&lt;br /&gt;mgs=Nothing&lt;br /&gt;cdocfg=Nothing&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=71</link><pubDate>4/18/2006</pubDate></item><item><title>How do I shut down or restart windows from my ATEasy application? - Published on 3/21/2006</title><description>&lt;b&gt;Solution:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To shut down or restart windows, You need to call a Windows API that is found in USER32.dll. The function is described here:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ExitWindowsEx(uFlags: Val DWord, dwReason: VAL DWord): Bool&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Parameters&lt;/b&gt;&lt;br /&gt;&lt;b&gt;uFlags &lt;/b&gt;- [in] Shutdown type. This parameter must include one of the following values: &lt;br /&gt;&lt;br /&gt;EWX_LOGOFF - 0 - Shuts down all processes running in the logon session of the process that called the ExitWindowsEx function. Then it logs the user off. This flag can be used only by processes running in an interactive user's logon session.&lt;br /&gt; &lt;br /&gt;EWX_POWEROFF - 0x00000008 - Shuts down the system and turns off the power. The system must support the power-off feature. The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Remarks section.&lt;br /&gt; &lt;br /&gt;EWX_REBOOT - 0x00000002 -&amp;nbsp;&amp;nbsp;Shuts down the system and then restarts the system. The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Remarks section.&lt;br /&gt; &lt;br /&gt;EWX_SHUTDOWN - 0x00000001 - Shuts down the system to a point at which it is safe to turn off the power. All file buffers have been flushed to disk, and all running processes have stopped. The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Remarks section. Specifying this flag will not turn off the power even if the system supports the power-off feature. You must specify EWX_POWEROFF to do this. &lt;br /&gt;Windows XP SP1:&amp;nbsp;&amp;nbsp;If the system supports the power-off feature, specifying this flag turns off the power.&lt;br /&gt; &lt;br /&gt;This parameter can optionally include one of the following values:&lt;br /&gt;&lt;br /&gt;EWX_FORCE - 0x00000004 -&amp;nbsp;&amp;nbsp;Windows 2000/NT:&amp;nbsp;&amp;nbsp;Forces processes to terminate. When this flag is set, the system does not send the WM_QUERYENDSESSION and WM_ENDSESSION messages. This can cause the applications to lose data. Therefore, you should only use this flag in an emergency. Starting with Windows XP, these messages will always be sent.&lt;br /&gt; &lt;br /&gt;EWX_FORCEIFHUNG - 0x00000010 - Forces processes to terminate if they do not respond to the WM_QUERYENDSESSION or WM_ENDSESSION message within the timeout interval. For more information, see the Remarks. Windows NT and Windows Me/98/95:&amp;nbsp;&amp;nbsp;This value is not supported.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;dwReason&amp;nbsp;&amp;nbsp;&lt;/b&gt;- [in] Reason for initiating the shutdown. This parameter must be one of the system shutdown reason codes. If this parameter is zero, the SHTDN_REASON_FLAG_PLANNED reason code will not be set and therefore the default action is an undefined shutdown that is logged as "No title for this reason could be found". By default, it is also an unplanned shutdown. Depending on how the system is configured, an unplanned shutdown triggers the creation of a file that contains the system state information, which can delay shutdown. Therefore, do not use zero for this parameter. Windows 2000/NT and Windows Me/98/95:&amp;nbsp;&amp;nbsp;This parameter is ignored.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Return Values&lt;/b&gt;&lt;br /&gt;If the function succeeds, the return value is nonzero. Because the function executes asynchronously, a nonzero return value indicates that the shutdown has been initiated. It does not indicate whether the shutdown will succeed. It is possible that the system, the user, or another application will abort the shutdown.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;See Also&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;See &lt;a href='http://msdn.microsoft.com/en-us/library/aa376868.aspx'&gt;microsoft.com&lt;/a&gt; for more information regarding this function.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;See the ATEasy Getting Started manual for more information of how to define an call an external DLL function.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=70</link><pubDate>3/21/2006</pubDate></item><item><title>List of issues/changes for ATEasy v4.0 build 94 and ATEasy v5.0 build 104 - Published on 12/5/2005</title><description>Here is the list of changes/issues resolved in build 104a/94a. Changes in [ATEasy5] are specific to v5.0 (104a), changes without [ATEasy5] applies to both&amp;nbsp;&amp;nbsp;build 94a and 104a since 92a and 102a was released.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE (development environment)&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Property page of Precise,Tolerance, or Min/Max test types displays "Out of range" warning when enter a hex value between 0x80000000 - 0xFFFFFFFF. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;'Insert Driver' dialog does not display correctly, controls sometime overlap each other &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Viewing/Saving ATEasy program in text mode (.pgt) results in REFX values printed/displayed as decimal rather than hex. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy sometimes crashed when it tries to load/import Function Panel file (.fp) of Version 3.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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Unable to select HiMetric scale mode from AForm's Scale property page. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Auto Type Information tooltips does not display the description of the attached procedure when hovering the mouse over command 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Go To Definitions Of 'xxx' does not show the command when "if" is preceding the command &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;DLL procedures are checked twice when using Check All &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New option to clear the Build Log before build &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Function Panel files (.fp) conversion/import was improved &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Compiler error generate an internal error for struct variable.enumfield.constant &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Code Completion should not displays enum constants when entering '.' character after variable of type enum &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Command is not properly updated when insert/delete its attached procedure's parameter(s) &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;'Goto Defnition Of' does not work for Struct types in the Code 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Call Completion listbox window's width is not calculated correctly &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Problem undo/redo AForm's menu items &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Unable to build stand-alone EXE in Windows 95/98/Me. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;A breakpoint at the last line of a test only works if it's right after the last line of code. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Find dialog hang when searching for non-exist symbol&amp;nbsp;&amp;nbsp;in active view only and current active view is the local varariables frame. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Escape sequence string support for AComboBox and AListBox controls. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;App.ModulePath property has been changed to return the ATEasy folder instead of the application EXE file path when running from the IDE. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Module protection did not protect the documents from viewing / changing in all cases. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Enhanced Font property page of form and controls to include font scripts (e.g. Western, Hebrew etc...). &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy will detect if a wrong version/build of the ATERT.DLL is used. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy may crashes when loading invalid or corrupted project 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Renaming project file name may crashs ATEasy if File tree view is the current active view of the Workspace 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Watch window generates 'access violation exception' after entering build-in procedure name (e.g. Sin, Cos, Abs, Round etc...) into the watch 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Duplicate items in call stack when paused in interrupt handler or Dll call back procedure. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;[ATEasy 5] ATEasy crashed when importing IviConfigServer.h header file and ATEasyPreprocessor.h is missing &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Run-Time&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;During Run-Time Error processing, Ignore statement in OnError() cause ATEasy to crash &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;'Unsupported MSXML2 type' error when inserting Microsoft CML, v5.0 type library &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Program's Status property is not reset to NONE before run &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy crashed while running example Excel project &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Repeated Ignore of "Unable to open interface for driver" errors which occurred in IOTable caused ATEasy to crash &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Redim preserve of array of struct containing field of type Object crash 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Unable to print enum's constants (i.e. PRINT enumATestStatus.PASS) &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Text file (.drt, .pgt) loading is terminated when encounter an unclosed string, e.g. "xyz, as supplied parameter in command &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Changing Form.Backcolor does not update the background when AutoRedraw is TRUE &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Form.PopupMenu method does not work if the popup menu does not belong to any menubar or the menubar is not visible &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Setting the Form.AutoRedraw to True for MDI form will corrupt the display of its client area&amp;nbsp;&amp;nbsp;&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Unable to close or save changes in Users dialog after selecting 'Clear User' &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Compiler error when references non-public nested menu , e.g. Menu1.Popup1.Item1, while inside a form event or procedure &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Omitting the error number from the catch module statements, e.g. CATCH MODULE DMM, generate "Expected end-of-line" compiler 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Array of procedure does not get initialized with its initial value when running in EXE 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;WSReceive() erroneously return 0 if the remote socket was closed instead of -1 as documented in the Help &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Form's mouse cursor change does not take effect until the mouse is moved &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Unable to load ActiveX library with version &gt;= 10.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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Problem accessing AForm's procedures and variables using array of form &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New optional EndEvents keyword for Exit statement &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Val(sHexString, 16) function's behavior has been modified, it will now convert sHexString to an unsigned integer (i.e. 0xFFFF is 65,535 instead of -1) &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;'Unsupported Types' error when loading ActiveX library containing 64-bit integer 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Generates OnQueryUnload and OnUnload events for MDI child form when its parent MDI form is being destroyed. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy EXE will detect if a different build is used for ATERT.dll and ATECTL.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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy crashed when run TestExec project more than one and m_stRunTime struct is being watched in the Watch 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New aFlagsExit flag was added to enumARuntimeFlags which can be used to indicate whether an Exit EndEvents statement has been executed &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Optional EndEvents keyword to be used with Exit statement (i.e. Exit EndEvents) &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AProgram's Uut information is not serialized in 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;[ATEasy 5] Fixed several bugs related to 'Optimize Short Circuit Boolean Expressions' &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;[ATEasy 5] Added supports for callback procedures, this feature provides a way for an external instrument driver (i.e., DLL) or Windows API to call ATEasy procedure when a certain event occurs. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;[ATEasy 5] Added supports for late binding COM/.NET events using AddHandler and RemoveHandler statements. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Library&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AForm's DrawText() does not return the width and height. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AForm/Acontrol's Image property does not return the content if window is not visible or covered &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;MDI child form's OnQueryUnload and OnUnload events are not generated when its parent MDI form is being destroyed. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Problem Inserting AChart control into design time dialog of Visual C &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Using Common Dialog with multiple selection files does not return the selections &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;APicture.Render() method does not work &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AControl. Creating a control from text file (property bag) will use the control name as the caption instead of the Caption/Text stored in the text 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AToolbar with labels displays fixed width buttons instead of variable width buttons base on the button's 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;When a modeless form is unloaded, its parent form was not activated &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ALabel's appearance always look 3D regardless of the Appearance property setting &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Some of ALog's events were never generated. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ALog.Find() method does not work &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AForm.DrawText() does not use FillColor as background when FontTransparent is True &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AForm.DrawText() method with aformDrawTextVCenter draw mode does not center the text vertically (text is a bit down) &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AForm.Circle() method uses the ForeColor as default color instead of the FillColor &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AForm.Circle() method ignored lArcStart, lArcEnd&amp;nbsp;&amp;nbsp; &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Calling ComSend to send a BString with # of bytes equals 1 fails &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Calling ComOpen after ComClose with no delay between cause ComOpen to fail &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ComSetup - XOn/Xoff Setup sometime does not work &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Form's General property page should not restrict ClientWidth and ClientHeight to 102 and 27 respectively &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy crashed when the focus was changed while inside one of Form's KeyPreview events. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The run-time will detect different version of ActiveX libraries when running EXE. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AListBox control's OnClick() and OnMouseDown() events are not generated for left mouse button &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Setting AForm's menu bar dynamically at run-time (e.g. Form.MenuBar=menu2) causes ATEasy to crash on the next run or exit. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;MsgBox and InputBox always enable its owner window when close regardless of whether the owner was previously disabled. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;[ATEasy 5] Enhanced ACommonDialog control to support directory selection using acdlgOpenOptionsDirectory option. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;[ATEasy 5] AListBox control with CheckBox style and contains no item (empty) may cause ATEasy to crash &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;[ATEasy 5] ATab control's OnPageSelChange() event does not set 'PageNew' parameter correctly &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;[ATEasy 5] Added supports for .NET assemblies. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;[ATEasy 5] Added supports for dynamicly created controls using AForm's InsertControl and RemoveControl methods. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;TestExec&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;When CLEAR LOG is pressed after START, the font and log alignments are not as they should &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;OnReset called twice after we call the reset statement &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fixed problem related to RunProgram command. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;[ATEasy 5] Replaced all occurences of 'Exit' statement with 'Exit EndEvents' &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Drivers&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;SM204X ATEasy Driver Diode Range off by 1 &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;All ATEasy DIO drivers DioGetDriverSummary generate RT 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;TE5200 ATEasy driver problem &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New and updated DLLs for various Geotest drivers &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Setup&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;When installing a new ATEasy version/build, personalized settings disappear. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=68</link><pubDate>12/5/2005</pubDate></item><item><title>Setting form variables and calling form procedures from the creator of the form before the form is displayed. - Published on 9/1/2005</title><description>&lt;b&gt;Solution:&lt;/b&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;For a modeless form (Load frmVariable, FALSE):&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;1. Use frmVariable.variableName where the variableName is a form’s public variable. &lt;br /&gt;&lt;br /&gt;2. Use a form procedure to set or get the variable’s value.&amp;nbsp;&amp;nbsp;For example: &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;frmVariable.SetVariableValue(value)&lt;br /&gt;frmVariable.GetVariableValue():type.&amp;nbsp;&amp;nbsp;Note:&amp;nbsp;&amp;nbsp;procedure must be public. &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;For a modal form (Load frm.Variable, TRUE):&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;blockquote&gt;The caller cannot set the variable or call a procedure because the control does not return to the Load’s callee until the form is destroyed. &lt;br /&gt; &lt;br /&gt;1. You can use a Module (program, system or driver) Procedure or a variable to retrieve a value and use it in the OnLoad Form Event. &lt;br /&gt;&lt;br /&gt;2. You can create the form as modeless (as shown above), set the form’s variables, call the form's procedure and use the Load statement again with TRUE as the mode parameter.&amp;nbsp;&amp;nbsp;See the example below:&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;Load frmVariable, FALSE&lt;br /&gt;frmVariable.variableName=value&lt;br /&gt;frmVariable.procName()&lt;br /&gt;Load frmVariable, TRUE&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Note:&amp;nbsp;&amp;nbsp;This procedure can only be implemented in ATEasy 4.0 (build 94) or ATEasy 5.0 (build 102b and above).&amp;nbsp;&amp;nbsp;You can initialize the form to be hidden and then show it just before the second Load statement (frmVariable.Visible=True).&amp;nbsp;&amp;nbsp;See the example 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;Load frmVariable, FALSE&lt;br /&gt;frmVariable.variableName=value&lt;br /&gt;frmVariable.Visible=True&lt;br /&gt;Load frmVariable, TRUE&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;This added line (line 3) will prevent the user from accessing the form control before the form is ready.&lt;br /&gt;&lt;/blockquote&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=66</link><pubDate>9/1/2005</pubDate></item><item><title>Acquiring data into a file/database without interrupting the current acquisition process. - Published on 8/26/2005</title><description>&lt;b&gt;Problem: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I am trying to get more functionality from my IOTech DaqLab 2000. I have data acquisition on 32 channels that run at about 1Hz each. This data logging is uninterrupted for days at a time. I would like to be able to look at old data without interrupting the current acquisition. I would prefer one continuous file or a database like Access or Oracle that could be viewed and manipulated while the data is logging without causing any data loss. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In ATEasy, you can write a small program that can gather a DAQ’s data and insert it into a text, binary, excel, or database file.&amp;nbsp;&amp;nbsp;You can use IOTech’s DLL functions to gather data and the ATEasy internal library for everything else.&amp;nbsp;&amp;nbsp;The ATEasy Getting Started Manual, which can be downloaded from the Geotest web site, discusses DLL function implementation.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;There are several ways to write to a database file.&amp;nbsp;&amp;nbsp;In the ATEasy Getting Started Manual, an example is provided to show you how to use the Microsoft Active Data Object COM Component (see also the AdoDB.prj example).&amp;nbsp;&amp;nbsp;This library supports a long list of databases that includes Microsoft Access (.mdb files), SQL Server and Oracle.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;You can also read and write to a database using an ODBC driver or a DLL.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=65</link><pubDate>8/26/2005</pubDate></item><item><title>ATEasy 5.0 Main New Features Summary - Published on 11/9/2004</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;h2&gt;ATEasy 5.0 Main New Features Summary &lt;/h2&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Enhanced &lt;b&gt;Test Executive &lt;/b&gt;with: &lt;/td&gt;&lt;/tr&gt;&lt;/table&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Touch Screen&lt;/b&gt; user interface; allows operation of test set via touch-screens with a special customized toolbars. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Users and Groups based privileges and customization; the administrator can customize the test executive per user groups without writing code. Each option and each menu command can be hidden or disabled. The toolbar buttons can be also customized per group and its buttons can be hidden or arranged. User can use the administrator set of customization and customize it further if the administrator allowed it. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Complete customization of toolbars menu with or without using users and groups feature. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Many new options including: selection of debugging level for the operator – allows the test engineer to disable selection and running of individual tests or tasks, log failures only. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New commands for better controls of the test executive options and behavior. New test conditions, option to disable menus while program is running, Windows XP style menus and much more.&amp;nbsp;&amp;nbsp;&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;On-line Help for the test executive to provide detail on how to operate and customize the test executive. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New &lt;b&gt;Fault Library&lt;/b&gt;: &lt;/td&gt;&lt;/tr&gt;&lt;/table&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Fault Library provides a powerful troubleshooting tool for electronic circuits. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;A Fault Editor allows program developers to define Fault Conditions to be analyzed by ATEasy during runtime. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;When activated during runtime, the operator can be prompted to replace assemblies or components based on the actual failures (i.e. “Replace U1 and Re-Test”). &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Open Architecture &lt;/b&gt;Improvements: &lt;/td&gt;&lt;/tr&gt;&lt;/table&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Built in support for &lt;b&gt;IVI drivers&lt;/b&gt;. ATEasy now includes ATEasy drivers for all the IVI driver classes currently available (DC power supply, Digital multimeter, Function generator &amp; Arb, Oscilloscope, Power meter, RF signal generator, Spectrum analyzer and Switch. ATEasy also support of importing non-class compliant IVI drivers using a new &lt;b&gt;IVI Wizard &lt;/b&gt;and support both IVI driver formats: IVI-C and IVI-COM &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Support for &lt;b&gt;.NET components .Net&lt;/b&gt;. assemblies or assemblies components can be imported to ATEasy and used similar to the way you would use them from Visual Studio .NET languages. This capability provides a truly open architecture by embracing new technologies and is similar to the way COM and DLL extend ATEasy capabilities. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy can now import functions and type declarations directly from &lt;b&gt;C/C++ header &lt;/b&gt;file (.h). This reduces the development cycle and eliminates any errors when calling external DLL library. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;LabView &lt;b&gt;VIs &lt;/b&gt;– ATEasy users can now use existing LabView code in their test applications. All the user needs to do is selects the VI (Virtual Instrument or LLB (library) file and the ATEasy Insert LabView wizard generates an ATEasy procedure to call the VI. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Lab Windows &lt;b&gt;Function Panels Drivers &lt;/b&gt;(.fp) import was improved and generates more accurately ATEasy driver from LabWindows drivers – this feature allows users to use these drivers without the need to re-write them. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy now includes a Summation Import Wizard that allows import of Summation TestCase programs into ATEasy. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Enhanced &lt;b&gt;Forms &lt;/b&gt;Features: &lt;/td&gt;&lt;/tr&gt;&lt;/table&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Two new controls were added: Tab Control (&lt;b&gt;ATab&lt;/b&gt;) and Panel Control (&lt;b&gt;APanel&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Current controls where enhanced. For example, the AListBox now support a list of checkboxes. Additionally, Controls now have the XP theme look and the AMenu support the new .NET style menus.. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy forms now support automatic &lt;b&gt;form and controls sizing&lt;/b&gt;. Similar to .NET controls, each control can be anchored and aligned. This allows users to implement sizable forms with minimal coding to size the controls when the form is sized. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;Programming Language &lt;/b&gt;Enhancements: &lt;/td&gt;&lt;/tr&gt;&lt;/table&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New support for &lt;b&gt;COM events handlers &lt;/b&gt;using the &lt;b&gt;AddHandler/RemoveHandler &lt;/b&gt;statements. This allows users to interface with COM applications that generate events. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;&lt;b&gt;ATEasy&lt;/b&gt; now supports&lt;b&gt; callback procedures&lt;/b&gt;. ATEasy procedures can be called by an external DLL directly. This feature provides a way for an external instrument driver (i.e. DLL) to call ATEasy procedure when a certain event occurs. Windows API also uses callbacks. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Internal library have new bit manipulation, help, log functions and more. Also new classes properties and methods extend the internal library further.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Support for 64 bit integers.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Other Improvements and Enhancements: &lt;/td&gt;&lt;/tr&gt;&lt;/table&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The Integrated Development Environment (IDE) has new dialogs such as Save Modified, new popup Conditions menu and new menu commands. Additionally, many editing features were added or improved. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Many new additional ATEasy drivers. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New examples &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;And much, much more… &lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=63</link><pubDate>11/9/2004</pubDate></item><item><title>How to Customize log string for the program header - Published on 6/9/2004</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt; &lt;br /&gt;ATEasy generates the following test log string when a program is start to run. The output is generated after the Program Init events are called as shown here:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&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;Program&amp;nbsp;&amp;nbsp;: Program5&amp;nbsp;&amp;nbsp;&lt;br /&gt;UUT&amp;nbsp;&amp;nbsp;:&amp;nbsp;&amp;nbsp;&lt;br /&gt;Serial #&amp;nbsp;&amp;nbsp;:&amp;nbsp;&amp;nbsp;&lt;br /&gt;Start time&amp;nbsp;&amp;nbsp;: 6/9/2004 9:21:46 AM &lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt; &lt;br /&gt;To customize the test log program start string you need to add some code of the Program Events OnInit() and OnInitTask(). If the change is for all programs in the project you can place ad the same code in the System Events OnInitProgram() and OnInitTask().&lt;br /&gt;&lt;br /&gt;The code in OnInit/OnInitProgram should load the your form with the special serial number / uut information and than set the log off to prevent ataesy from output it log string and than, output your own customized log string.&amp;nbsp;&amp;nbsp;&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() or System.OnInitProgram()&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;! display my serial num form&lt;br /&gt;Load frmMySerialNum&lt;br /&gt;&lt;br /&gt;! Take control over log printing for this event! &lt;br /&gt;SetLogOff()&lt;br /&gt;&lt;br /&gt;! print to log (two ways&lt;br /&gt;&lt;br /&gt;! one way is to modify the ateasy log string&lt;br /&gt;! s=GetLogString()&lt;br /&gt;! modify s using Mid., Pos etc&lt;br /&gt;! print s&lt;br /&gt;&lt;br /&gt;! second way is to output a completly new string, (shown here is the default log string)&lt;br /&gt;&lt;br /&gt;print "&lt;TABLE class=Header border=0&gt;;" \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;TBODY&gt;"; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;TR&gt;"; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;TD class=Program align=left width=\"15%\"&gt;Program"; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;TD class=Program align=left width=\"85%\"&gt;: Program5"; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;TR&gt;"; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;TD align=left width=\"15%\"&gt;UUT"; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;TD align=left width=\"85%\"&gt;: "; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;TR&gt;"; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;TD align=left width=\"15%\"&gt;Serial #"; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;TD align=left width=\"85%\"&gt;: "; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;TR&gt;"; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;TD align=left width=\"15%\"&gt;Start time"; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;TD align=left width=\"85%\"&gt;: 6/9/2004 9:21:46 AM"; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;/TR&gt;"; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;/TBODY&gt;"; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;/TABLE&gt;"; \ &lt;br /&gt;&amp;nbsp;&amp;nbsp; "&lt;HR width=\"100%\"&gt;" &lt;br /&gt;} &lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The code shown above is for HTML test log you can make your program works for HTML and Text by using the Log.PlainText property:&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;If Log.PlanText&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! print text&lt;br /&gt;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! print HTML&lt;br /&gt;endif&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;You can figure out the ATEasy default log string by right clicking on the log window and selecting View Source from the menu.&lt;br /&gt;&lt;br /&gt;Finally in OnInitTask we have to enable the log again:&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.OnInitTask()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetLogOn()&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=62</link><pubDate>6/9/2004</pubDate></item><item><title>Using ADO to Access a Database from ATEasy - Published on 6/3/2004</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; ATEasy 5.x and above provide a more elaborate example (AdoDb.prj) for accessing database from ATEasy. &lt;br /&gt;&lt;br /&gt;The following describes how to access database using ADODB Active Data Objects) ActiveX library:&lt;br /&gt;&lt;br /&gt;Add ADO (Active Data Objects) type library to your module libraries (You must have VB or Access installed on your machine).&lt;br /&gt;&lt;br /&gt;The following code shows how to open a database for R/W (Declare rs as ADODB.Recordset and sSrc and sCon as String):&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;rs=CreateObject("ADODB.Recordset")&lt;br /&gt;&lt;br /&gt;sSrc="SELECT "+m_sField1+", "+ m_sField2+" FROM "+m_sTableName &lt;br /&gt;&lt;br /&gt;sCon="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+m_sDataBaseFile&lt;br /&gt;&lt;br /&gt;rs.Open(sSrc, sCon,,adLockPessimistic)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Notes: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;m_sField1 and m_sField2 are database field names &lt;br /&gt;m_sTableName is the database table name that contains m_sField1 and m_sField2 &lt;br /&gt;m_sDataBaseFile is the path to the database file.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;The following code shows how to read a field in the current record:&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;rs.Fields.Item(m_sField1).Value&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The following code shows how to set a field in the current record, then update the record:&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;rs.Fields.Item(m_sField1).Value=Value&lt;br /&gt;&lt;br /&gt;rs.Update()&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The following code shows how to move to the next record:&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;rs.MoveNext&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The following code shows how to close the database connection:&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;rs.Close()&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;You can browse on the library object and classes if you need more operations. If you need more help on this select the ADODB library from ATEasy under Libraries and press F1.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=29</link><pubDate>6/3/2004</pubDate></item><item><title>ATEasy 4.0 build 92 changes - Published on 4/5/2004</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We have release a new build of ATEasy 4.0.&lt;br /&gt;&lt;br /&gt;The new release includes several bug fixes that were found since build 90 was released and some new features as shown here:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Run-Time&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Form.Refresh method did not invalidate the rectangle and only update the window. &lt;br /&gt;2.&amp;nbsp;&amp;nbsp; Non-public form procedures and events were accessible outside the form even if they are not public. &lt;br /&gt;3.&amp;nbsp;&amp;nbsp; Error in Catch block need to be sent to outer Try Block instead of the current one. &lt;br /&gt;4.&amp;nbsp;&amp;nbsp; Path of CompanyLogo.gif in the test log was changed to absolute from the ATEasy folder. This allows proper display of the log file from any folder. &lt;br /&gt;5.&amp;nbsp;&amp;nbsp; When running from the IDE OnEnd for drivers sometimes did not get called. &lt;br /&gt;6.&amp;nbsp;&amp;nbsp; Assignment of Driver type Structure that is alias (typedef) to a driver DLL type structure to a literal in a program fails loading of EXE. Executable returned ‘Unknown Error’ when running EXE. &lt;br /&gt;7.&amp;nbsp;&amp;nbsp; GPIB IO Table timeout with NI board does not take effect unless with set the timeout in NI max properties. &lt;br /&gt;8.&amp;nbsp;&amp;nbsp; Setting App.StartProgram before the start program gets called did not had any effect. &lt;br /&gt;9.&amp;nbsp;&amp;nbsp; Tolerance test display +3/+0 instead of +3/-0 in the test log. &lt;br /&gt;10.&amp;nbsp;&amp;nbsp;Assign a variant array member which is also an array into another variant generated run-time error #310 : 'Unable to assign a value'. &lt;br /&gt;11.&amp;nbsp;&amp;nbsp;Using function that return a structure field will crash at run-time. &lt;br /&gt;12.&amp;nbsp;&amp;nbsp;Hour glass is displayed when the EXE is loaded. &lt;br /&gt;13.&amp;nbsp;&amp;nbsp;Calling the Abort statement twice will terminate the application. &lt;br /&gt;14.&amp;nbsp;&amp;nbsp;Calling ExitTest statement from OnInitTest will skip OnEndTest. &lt;br /&gt;15.&amp;nbsp;&amp;nbsp;Nested modal forms may hang if no messages are available in Windows queue. &lt;br /&gt;16.&amp;nbsp;&amp;nbsp;After Run/Start, calling Form.TextWidth second time loading same Modal form returns 0 instead of the actual width. &lt;br /&gt;17.&amp;nbsp;&amp;nbsp;Test.Type property can be set at run-time. &lt;br /&gt;18.&amp;nbsp;&amp;nbsp;Form.Tag, Control.Tag type was changed from string to variant. &lt;br /&gt;19.&amp;nbsp;&amp;nbsp;Double precision test type Min/Max/Tolerance Pass/Fail status is evaluated within a 1e-15 tolerance rounded result to avoid floating point errors. &lt;br /&gt;20.&amp;nbsp;&amp;nbsp;Run-time now supports changing the test type at run-time. &lt;br /&gt;21.&amp;nbsp;&amp;nbsp;Allow assign of array literal with different dim size but same count. &lt;br /&gt;22.&amp;nbsp;&amp;nbsp;Assign incompatible data type to initial value of indirect data type VARIANT/DOUBLE/DATETIME/CURRENTCY leaked memory. &lt;br /&gt;23.&amp;nbsp;&amp;nbsp;When calling abort or reset statements ATEasy print ..."Application abort or reset&amp;nbsp;&amp;nbsp;by user" instead of "Application abort or reset".&lt;br /&gt;24.&amp;nbsp;&amp;nbsp;MF42CLOC.DLL causes ATEasy to display ??? in various message boxes and in the Control property pages names. &lt;br /&gt;25.&amp;nbsp;&amp;nbsp;When calling DLL function stack miss-match is now reported if the function is prototype with wrong number of parameters or wrong CDecl/StdCall DLL function definition. &lt;br /&gt;26.&amp;nbsp;&amp;nbsp;Passing a string to VAR Any passes the address of the address of the string instead of the address of the string. &lt;br /&gt;27.&amp;nbsp;&amp;nbsp;Passing NULL to DLL procedure’s parameter of type VAL OBJECT generates 'Internal Run-time Error # 28'. &lt;br /&gt;28.&amp;nbsp;&amp;nbsp;Passing 'NULL' to DLL procedure's parameter of type [VAR] STRING generates compiler error # 620 'Expected l-value'. &lt;br /&gt;29.&amp;nbsp;&amp;nbsp;Passing 'Nothing' to DLL procedure's parameter of type [VAL/VAR] ANY no longer working (did not pass NULL). &lt;br /&gt;30.&amp;nbsp;&amp;nbsp;Compiler Error # 650 "Type 'Object' is undefined" when calling DLL proc which has parameter of type [VAL] OBJECT. &lt;br /&gt;31.&amp;nbsp;&amp;nbsp;Run-time error #310 'Unable to assign a value' when accessing the returning struct's members from a call using Procedure variable. &lt;br /&gt;32.&amp;nbsp;&amp;nbsp;s=FuncReturnVariantContainsStringArray()[0] caused GP fault. &lt;br /&gt;33.&amp;nbsp;&amp;nbsp;Print ProcReturnComplexStruct().m_ArrayOfStruct[0].m_lField1 caused GP fault. &lt;br /&gt;34.&amp;nbsp;&amp;nbsp;Changing TestStatus (i.e. to FAIL) at OnEndTest() event does not have any affect on UUT Status (GetUUTStatus()). &lt;br /&gt;35.&amp;nbsp;&amp;nbsp;StringArray2D[0]=ByteArray1D generated a GP fault. &lt;br /&gt;36.&amp;nbsp;&amp;nbsp;Calling DLL procedure with parameter of type VAR BString generated "Memory Access Violation" run-time error. &lt;br /&gt;37.&amp;nbsp;&amp;nbsp;Assign DateTime to Variant will result in vtDouble instead of vtDate. &lt;br /&gt;38.&amp;nbsp;&amp;nbsp;Goto a label within&amp;nbsp;&amp;nbsp;the same TRY block generates run-time error #330 - 'Catch or EndTry executed without Try'. &lt;br /&gt;39.&amp;nbsp;&amp;nbsp;Unable to 'Ignore' recoverable error inside a CATCH block. &lt;br /&gt;40.&amp;nbsp;&amp;nbsp;FileRead() should not allow reading more than the size of the Fixed size string. &lt;br /&gt;41.&amp;nbsp;&amp;nbsp;Log.Append will not display the image unless an absolute file path is stated. &lt;br /&gt;42.&amp;nbsp;&amp;nbsp;Assignment of array of bytes to string assignement xcaused internal error -33 line -2 &lt;br /&gt;43.&amp;nbsp;&amp;nbsp;MemoryCopy() does not work between array element (string/byte). &lt;br /&gt;44.&amp;nbsp;&amp;nbsp;FileEOF() always returns zero, even when end of file is reached. &lt;br /&gt;45.&amp;nbsp;&amp;nbsp;Changing procedure variable to parameter, setting a constant value, and than changing parameter to var or val causes ATEasy to lock.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE (integrated Development Environment)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Variables property page. Changing procedure variable parameter from none, setting a constant value, and changing parameter to var or val causes ATEasy to lock. &lt;br /&gt;2.&amp;nbsp;&amp;nbsp; Debugger. Aborting the application from the IDE when the form.OnLoad() is in process causes ATEasy Crash upon when Call Stack view is open. &lt;br /&gt;3.&amp;nbsp;&amp;nbsp; Driver shortcut Interface property page. Unable to populate I/O address IO1 with a range of values in the drivers properties/interface section. &lt;br /&gt;4.&amp;nbsp;&amp;nbsp; Text file format. Constants variables should display their initial value even if it’s the same as the default value. &lt;br /&gt;5.&amp;nbsp;&amp;nbsp; Paste Bellow command was enabled for the text editor. &lt;br /&gt;6.&amp;nbsp;&amp;nbsp; Code completion displays function prototype in a different format than text file format. &lt;br /&gt;7.&amp;nbsp;&amp;nbsp; Paste a procedures to procedure view with no procedures will crash. &lt;br /&gt;8.&amp;nbsp;&amp;nbsp; Switching to another user with the same access rights should update menus and views with the new access rights. &lt;br /&gt;9.&amp;nbsp;&amp;nbsp; After loading ATEasy, pressing TaskIt does not necessarily run the task that is shown by the cursor (as gray, not blue). &lt;br /&gt;10.&amp;nbsp;&amp;nbsp;Do not allow drag anything to enum unless it has long + const &lt;br /&gt;11.&amp;nbsp;&amp;nbsp;Globals. Internal Page did not display correct value for CONTROL and FORM variables. &lt;br /&gt;12.&amp;nbsp;&amp;nbsp;ATEasy crashes when the command line is missing the file name after the option flag (e.g. /b). &lt;br /&gt;13.&amp;nbsp;&amp;nbsp;Changes in the current user’s access rights (because of log in) was not reflected to the IDE only after the IDE was closed and open again. &lt;br /&gt;14.&amp;nbsp;&amp;nbsp;Setting the initial value of Optional Variant Val Parameter to 'Nothing' will crash ATEasy upon Save. &lt;br /&gt;15.&amp;nbsp;&amp;nbsp;Converting a number that start with a ‘.’ (i.e. .234) failed when serializing with text file format and from property pages. &lt;br /&gt;16.&amp;nbsp;&amp;nbsp;Command parameters font is using the code editor font. &lt;br /&gt;17.&amp;nbsp;&amp;nbsp;Parsing commands built-in arguments sometimes failed. &lt;br /&gt;18.&amp;nbsp;&amp;nbsp;Changing public attribute of module variable from the variables property page cleared initial value. &lt;br /&gt;19.&amp;nbsp;&amp;nbsp;Double click on a Form will not open the form if we have a browser window open with Forms selected and the form selected in the object view in list mode. &lt;br /&gt;20.&amp;nbsp;&amp;nbsp;ATEasy Crash with ProgramIt after setting the active project. &lt;br /&gt;21.&amp;nbsp;&amp;nbsp;Description in the property page. Tab setting is not the same as in the description view.&amp;nbsp;&amp;nbsp;Pressing enter in the description of the property page will insert a new line. Word wrap was also enabled. &lt;br /&gt;22.&amp;nbsp;&amp;nbsp;Under Windows XP the tree/list view will not show the selection if the window does not have focus. &lt;br /&gt;23.&amp;nbsp;&amp;nbsp;Comparing two drivers that turned out&amp;nbsp;&amp;nbsp;to be identical display a very big message box. &lt;br /&gt;24.&amp;nbsp;&amp;nbsp;The new address when changing the address of a driver from the driver shortcut property page does not always save. &lt;br /&gt;25.&amp;nbsp;&amp;nbsp;Test Property Page. Changing the test type from Min Max to Tolerance or Precise should reuse the values. &lt;br /&gt;26.&amp;nbsp;&amp;nbsp;Change the test type&amp;nbsp;&amp;nbsp;from MIN-MAX to TOLERANCE gets caught in an endless loop &lt;br /&gt;27.&amp;nbsp;&amp;nbsp;Importing FP that uses the new 5.1 specifications crashes ATEasy. &lt;br /&gt;28.&amp;nbsp;&amp;nbsp;Missing files when opening Drivers.wsp (GP1008.drv, GP1650.prj and GT1648.prj). &lt;br /&gt;29.&amp;nbsp;&amp;nbsp;When trying to copy constants from one ATEasy DLL driver to another (replacing all existing duplicates), the program hung up and did not respond to Windows. &lt;br /&gt;30.&amp;nbsp;&amp;nbsp;Clicking on a menu procedure when the properties window is open will cause the document to be modified. &lt;br /&gt;31.&amp;nbsp;&amp;nbsp;Sorted List sym view did not refresh correctly after deleting an item. &lt;br /&gt;32.&amp;nbsp;&amp;nbsp;Occasional crash when running Language and aborting out of multi-threading task. &lt;br /&gt;33.&amp;nbsp;&amp;nbsp;Monitor Window crashes when Clear with Properties Window open. &lt;br /&gt;34.&amp;nbsp;&amp;nbsp;Bitmaps displayed in menus and toolbar have transparent look when running on XP. &lt;br /&gt;35.&amp;nbsp;&amp;nbsp;FileCreate/FileOpen mode enum displayed in decimal instead of hexadecimal. &lt;br /&gt;36.&amp;nbsp;&amp;nbsp;Watch window's display format "All Hexadecimal" caused Bool var to display Hex instead of True/False. &lt;br /&gt;37.&amp;nbsp;&amp;nbsp;Watching variant of type VT_UI4, VT_UI2 (reference) crashed ATEasy. &lt;br /&gt;38.&amp;nbsp;&amp;nbsp;Struct displayed in Watch or CallStack windows will crash ATEasy after Redim the struct's field of type BString array. &lt;br /&gt;39.&amp;nbsp;&amp;nbsp;Redim array which is currently expanded displayed&amp;nbsp;&amp;nbsp;in global call stack caused GP fault. &lt;br /&gt;40.&amp;nbsp;&amp;nbsp;Not all of ATEasy Context Menu update handlers are checking user's rights - for example enabled Edit/Save/View doc for Tester. &lt;br /&gt;41.&amp;nbsp;&amp;nbsp;Breakpoint after the last line of code disappear after refreshing the code view as result of window close or display of different symbol. &lt;br /&gt;42.&amp;nbsp;&amp;nbsp;Run-Current-Task, etc. are enabled even though there is no program module for the project Start-Program and there is no System module. &lt;br /&gt;43.&amp;nbsp;&amp;nbsp;Loading text file with version's time beetween [Dec 31 69 16:00:00] and [Dec 31 69 17:00:00] crashed ATEasy. &lt;br /&gt;44.&amp;nbsp;&amp;nbsp;Internal run-time error #1 when running EXE which contained a module event with local variables and empty code. (i.e. program's OnEndTask()). &lt;br /&gt;45.&amp;nbsp;&amp;nbsp;Startup dialog hang if the recent workspaces list contains a workspace file from a disabled (Power Off or removed from network) network's computer. (i.e. //UNIT219-01//ATeasy//Workspace.wsp). &lt;br /&gt;46.&amp;nbsp;&amp;nbsp;Run-time sometimes stops at breakpoint that is no longer exists. &lt;br /&gt;47.&amp;nbsp;&amp;nbsp;View in Text Format will display current date and user instead of the original one. &lt;br /&gt;48.&amp;nbsp;&amp;nbsp;Project’s Start program is now displayed in bold in the workspace window. &lt;br /&gt;49.&amp;nbsp;&amp;nbsp;Build All will now generate warning if a defined DLL function does not exist in the DLL. &lt;br /&gt;50.&amp;nbsp;&amp;nbsp;License Server was modified to run as a service. Server-client communication was improved. See ReadMe.txt for more information. &lt;br /&gt;51.&amp;nbsp;&amp;nbsp;Code Completion will not work for non-project modules. &lt;br /&gt;52.&amp;nbsp;&amp;nbsp;Text format for ATEasy modules doesn't include Stdcall/CDecl attribute for DLL procs. &lt;br /&gt;53.&amp;nbsp;&amp;nbsp;Changing 'Untitled' Task/Test's title using property page does not update the test/task's Id to a new id based on its name. &lt;br /&gt;54.&amp;nbsp;&amp;nbsp;Saving new module file as a text file format saved it in a binary format. &lt;br /&gt;55.&amp;nbsp;&amp;nbsp;Reloading a driver file since it was modified externally causes the system to be marked as changed. &lt;br /&gt;56.&amp;nbsp;&amp;nbsp;Edit-Find-Replace dlg FindAll flag cannot be remembered correctly - registry says All (True), but ATEasy does not come back with the All option checked. &lt;br /&gt;57.&amp;nbsp;&amp;nbsp;Find in current document doesn't search in menu items until a menu item has been selected. &lt;br /&gt;58.&amp;nbsp;&amp;nbsp;Find-Replace All OldName to NewName can get into very tight loop when there already exist two procedures named OldName and NewName and RenamSym fails on proc OldName because proc NewName already exists.&lt;br /&gt;59.&amp;nbsp;&amp;nbsp;Opening a driver shortcut property pages and changing the driver file name to an invalid file name and switching to Misc. page crashed ATEasy. &lt;br /&gt;60.&amp;nbsp;&amp;nbsp;Access violation opening test in Tests view. Test is under nested task. &lt;br /&gt;61.&amp;nbsp;&amp;nbsp;62Sizing of Members list/Parameters Suggestion for code completion is now remembered between sessions of ATEasy and between subsequent displays. &lt;br /&gt;62.&amp;nbsp;&amp;nbsp;Goto Definition of internal library symbol (i.e. enumATestStatus) in a project without a system (i.e. Language) crashed ATEasy. &lt;br /&gt;63.&amp;nbsp;&amp;nbsp;Drag and Drop is now allowed from one DLL to another. &lt;br /&gt;64.&amp;nbsp;&amp;nbsp;Endless "Illegal Type" message box when viewing parameter of type optional VAR ([VAR]). For example, Add method of treeview's nodes collection. &lt;br /&gt;65.&amp;nbsp;&amp;nbsp;File difference can now use a folder in one of the fields From/To instead of a file. &lt;br /&gt;66.&amp;nbsp;&amp;nbsp;Changing Project Defines should invalidate all compiled code. &lt;br /&gt;67.&amp;nbsp;&amp;nbsp;After pressing Ignore in the dafault error handling the status bar continues to display in red the error message. &lt;br /&gt;68.&amp;nbsp;&amp;nbsp;Changing procedure's local variable of type Fixed string to Val/Var parameter generated endless "Illegal Type" message. &lt;br /&gt;69.&amp;nbsp;&amp;nbsp;Run/Doit! will remove newly typed text of the Debug window. &lt;br /&gt;70.&amp;nbsp;&amp;nbsp;I/O address in the ISA Interface property page is not saved.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Test Executive&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Hour glass is displayed when filling the tree view when a new program or a profile is selected. &lt;br /&gt;2.&amp;nbsp;&amp;nbsp; New commands to set wait cursor. &lt;br /&gt;3.&amp;nbsp;&amp;nbsp; New commands to set the status bar. &lt;br /&gt;4.&amp;nbsp;&amp;nbsp; Status bar will display driver initialization progress when the test executive is started. &lt;br /&gt;5.&amp;nbsp;&amp;nbsp; TestExec will run a task with out being checked after test -1 statement &lt;br /&gt;6.&amp;nbsp;&amp;nbsp; Menu and Toolbar Icons support the XP transparent Style, Also images are now included for all commands&amp;nbsp;&amp;nbsp;&lt;br /&gt;7.&amp;nbsp;&amp;nbsp; OnEndProgram. Move print of the GetLogString to the beginning to complete the test log before calling other drivers OnEndProgram (e.g. they&amp;nbsp;&amp;nbsp;might call SaveLog). &lt;br /&gt;8.&amp;nbsp;&amp;nbsp; After user login, the string for the log header does not updated by the new user name. &lt;br /&gt;9.&amp;nbsp;&amp;nbsp; Test Executive has a new command to set the CompanyLogo.gif file displayed on the top of the test log. &lt;br /&gt;10.&amp;nbsp;&amp;nbsp;When loading a program to the tree view program tasks are not get expanded to save loading time. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Examples&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Language.prg Example has new test showing how to use DLL CDecl function call. Th example shows call to atof() using MSVCRT.DLL. also added new examples for Variables, Structures and more.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;New Drivers&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; HW.drv does not return the board description. &lt;br /&gt;2.&amp;nbsp;&amp;nbsp; GT1648.drv - New driver for the GT1648 - analog output.&amp;nbsp;&amp;nbsp;&lt;br /&gt;3.&amp;nbsp;&amp;nbsp; GX5731.drv - New driver for the GX5731 - digital I/O with 128 channels and 32 customizable channels PXI board from Geotest. &lt;br /&gt;4.&amp;nbsp;&amp;nbsp; GX1648.drv - New driver for the GX1648 - analog output. &lt;br /&gt;5.&amp;nbsp;&amp;nbsp; GX1838.drv - New driver for the GX1838 - programmable discrete outputs. &lt;br /&gt;6.&amp;nbsp;&amp;nbsp; GX5050.drv - New driver for the GX5050 - 50MHz digital I/O. &lt;br /&gt;7.&amp;nbsp;&amp;nbsp; NvNT5000.drv - New driver for the NX500/NT5000 ROM emulator boards from Navatek. &lt;br /&gt;8.&amp;nbsp;&amp;nbsp; PiLPxi.drv - driver for System 40 PXI switching board from Pickering Interfaces.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=61</link><pubDate>4/5/2004</pubDate></item><item><title>ATEasy 4.0 - What's new - Published on 10/7/2003</title><description>ATEasy version 4.0 contains numerous enhancements to the test development environment. Among the new features included are the ability to import Function Panel (FP) driver files and convert to ATEasy drivers, Integration with Microsoft Source Safe, the ability to show and edit ATEasy documents in text mode and to display file differences side by side. The Test Executive driver was enhanced greatly and uses a new Profile driver that allows you to create and run a profile that is a subset of the application programs, tasks and tests in a user specific/defined order and count. Version 4.0 also contains enhancements to the ATEasy run time engine. New functions were added, for examples, functions to read and write directly to physical memory, which can be useful when writing or creating drivers or prototype to PCI boards. We also improved the speed of the run time engine so that it runs ATEasy application 30% faster than version 3.0. The following lists new features available in ATEasy 4.0:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Open Architecture&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Ability to import Function Panel driver files. Function Panel driver file (.fp) is a file of a specific format used by software packages (LabWindows and HP VEE) drivers. The function panel file format is based on the VXIPlug&amp;Play Instrument Driver specifications published by VXIPlug&amp;Play organization (http://www.vxipnp.org). Using the File Open command a Function Panel file (.fp) can be opened and then, converted to ATEasy driver format (.drv). ATEasy will generate a command tree, procedures, DLL function calls, constants and data types as defined in the function panel file and its accompanied C/C++ header file.&amp;nbsp;&amp;nbsp;ATEasy also loads an optional SUB file, which commonly used by IVI drivers.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Source Safe Integration. ATEasy directly interfaces with Microsoft Visual Source Safe. You can 'source control' ATEasy documents/files: Add, Check in, and Check out files directly from ATEasy. It also allows comparing files between versions of ATEasy and showing their versions. Differences are clearly marked and highlighted. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;You can edit or view in text mode ATEasy documents, Program, Driver, System and Project, directly from 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Command line options allow you to log on to ATEasy as a specific user, as well as allow you to build an application, print a file or load a file to ATEasy.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;IDE User Interface&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Startup dialog allows opening examples, driver examples and recent workspaces files or create new files or an application using the Application Wizard. This dialog can be programmed to show up at the start up of ATEasy, as well as it is available from File menu command.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Workspace Window has a new Files Tab. The current workspace window is displayed in the Objects Tab while a new tab, Files is showing each current workspace file. This provides a simpler file view of your project file and faster navigation between files. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Workspace window. When ATEasy starts up, the active project is expanded, and Files/Objects tab and selection is restored.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Description button was added to various views. The description view now has a button, displayed on the module view (new), the Forms, Procedures, Tests, and Commands View that can show or hide the view. The button has an indication to show whether the description is empty or not.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Description of objects (sub modules, etc) was enhanced and is more self-explanatory.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Module view. A new view is shown when you click on a module (e.g. Program). The new view displays the module's sub-modules and a larger area containing the module description.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Find and Replace dialogs. They have new options to skip the internal library and whether to re-start the search when the end of file is reached ('All').&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New Program is now created with a Task and a Test.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Insert Object Below/After/At menu command now displays the type of object being inserted, e.g. Insert Variable Below.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New context menu to show/hide toolbars and dockable windows.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Display documents and type libraries progress during ATEasy loading a workspace in the status bar.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Selecting colors from the property pages (e.g. chart, status bar) was enhanced and allows using system colors for controls. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ATEasy notifies you if another application or user modified externally the document that you are currently working on.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Save As Text context menu command allows saving the current file in text mode (same file name with text file extension) without prompting.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Variables and their types (and initial values and descriptions) can be typed directly when renamed from the list view. Additional command was added to perform the in-place editing of the name and type of a variable (Ctrl+F2). For example, you can type "i:int=3!index starts at 3"&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Application Wizard was enhanced to support the new Profile driver.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Programit!&amp;nbsp;&amp;nbsp;New command lets you execute any program, which may not be the first one.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Go to Definition. New menu command (and context menu) opens a window containing the definition or type of the selected symbol.&amp;nbsp;&amp;nbsp;This is a convenient tool that you can use during coding.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Project has an optional setting (in the project property page) that allows including or excluding unreferenced procedures during build.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Certain List view such as variables can now be sorted by Name, Type or Description (display only) by clicking on its column header.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;In the procedures or form view, the procedure combo box provides the Drag and Drop capability.&amp;nbsp;&amp;nbsp;After pulled down the combo list box, you can drag and drop a procedure within the combo list, so that you can re-arrange the procedure 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The Build menu, Check All includes checking of making sure Dll procedures defined in a module (under Libraries) actually exist in the Dll.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Debugger&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Auto Data Tips - ATEasy will display variables values on the code view in a tooltip window during debugging when the application is paused. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;When an application paused via break point, one can view each variable/parameter value in the variable/parameter 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Watch and CallStack/Global windows will retain the values even after the current run terminates.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Run Time Engine&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Speed Improvements. Run-time engine runs ATEasy application faster, at least by 30%.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Peek and Poke functions. New functions to read and write directly to the PC physical memory. This is mainly to support PCI/ISA boards driver development. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;MemoryCopy function. New function to copy and fill data between two ATEasy variables.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ArgMissing function. New function to indicate whether an optional parameter was passed to a procedure.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;DoEvents function. New function to allow form events to be nested. Useful when performing long operation in a form event.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Redim statement. New statement to change the dimension of an array size programmatically.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AClipboard class. Allow you to perform clipboard operations and to transfer data between applications (Cut, Copy, Paste, Clear).&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;AChart, ASlider, ASwitch controls uses the control area better and optimized 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;EndEvents keyword. New optional keyword to be used with the Run, Task and Test statements.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;HTML Log uses CSS style sheet that allows changing the test log format attributes easier, e.g., font, color...&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;ADriver.InterfaceType can be set during run-time.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Test Executive and Profile&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Added support to Text and HTML log format.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New Options dialog allows you to specify the default Log format, Clear and Save log before run.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The main window can be divided to two main panes. The left pane, the Tests Pane displays the program tests while the right pane, the Log pane shows the test Log as shown the previous test executive version. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The Tests pane displays in a tree the available tests of the current selected program or profile. A check box appears next to each Program, Task or Test. The user can select individual tests, tasks and programs from the Tests pane to run from the Tests pane. Program or Task is displayed in bold if they are partial selection (e.g. one test is checked and one is unchecked).&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;At run-time, these tests are color coded to reflect the test status at run time (black for none, green for Pass and Light Red for Fail and Red for 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The left pane bottom area displays the current selected test properties such as the test Name, Type, Required, Result and Status. At run-time it shows the current running test properties.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The Log, Tests and Tests Properties panes may be visible or hidden from the View menu. At list one Tests or Log Pane must be visible.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Window position and size and Log Options are remembered between sessions.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;New Profile driver. The profile driver allows the user or the test engineer to create profile files for an application. A profile file contains tests, tasks and programs list that can be executed in that specific order and 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Test Executive can dynamically supports the new Profile. Adding the profile to your system and the Profile command will show in the test executive menus.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;New Examples/Drivers&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Hp34401a, FP driver - example for a converted function panel driver.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;MultiPad example - example for MDI application that provides text editor similar to NotePad.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;HW example - example for Port I/O, Memory I/O and PCI device handling.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Additional drivers (Geotest, Adlink, UEI, PC Instruments and more).&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=59</link><pubDate>10/7/2003</pubDate></item><item><title>ATEasy 4.0 build 90 – Release Notes - Published on 7/22/2003</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE/Run-Times New Features/Changes&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; AApp.Flags - new flags and re-organizing existing flags. The new flags were added to allow the test executive to synchronize the tree view and the execution after the application uses the Run/Task and Test statements.&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;&amp;nbsp; Call Stack window will display binary/hex values of Bool type variables &lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;&amp;nbsp; You can override an internal function by declaring it. ATEasy will call your function instead of the internal one. You can still call the internal one using Internal.Function Name&lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;&amp;nbsp; Drag and drop inside the procedures combo box was added. Also, the drop down list is stayed dropped after dropping&lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;&amp;nbsp; The debugger will pause after stepping/tracing on the last line and will let you examine local variable before exiting the procedure&lt;br /&gt;&lt;br /&gt;6.&amp;nbsp;&amp;nbsp; Leaving Task and Test ID empty should cause their property page to regenerate new Ids&lt;br /&gt;7.&amp;nbsp;&amp;nbsp; Source Safe. Check In will always save the file without prompting the user unless it is a read-only file.&lt;br /&gt;&lt;br /&gt;8.&amp;nbsp;&amp;nbsp; Source Safe. Check Out/Undo Check Out will not prompt the user to save the changes. (This is unnecessary since the file will be replaced by source safe.)&lt;br /&gt;&lt;br /&gt;9.&amp;nbsp;&amp;nbsp; Source Safe. If the file is under source control and was not checked out, any attempt to modify it will be ignored, or the user will be prompted to check out the file. (Depends on the setting of the new "Check Out When Edited' option).&lt;br /&gt;&lt;br /&gt;10.&amp;nbsp;&amp;nbsp;Insert At/After was added to drag and drop depends on the position of the mouse cursor&lt;br /&gt;&lt;br /&gt;11.&amp;nbsp;&amp;nbsp;When debugging (e.g. Doit!) the run-time thread is kept until you restart the application again. This allows DLLs to retain their initialization between subsequent DoIt!s. DLLs and Applications will now initialize and load only between different starts.&lt;br /&gt;&lt;br /&gt;12.&amp;nbsp;&amp;nbsp;Insert Command will prompt for code completion for parameters&lt;br /&gt;&lt;br /&gt;13.&amp;nbsp;&amp;nbsp;DLL libraries can be merged using drag and drop&lt;br /&gt;&lt;br /&gt;14.&amp;nbsp;&amp;nbsp;Control, Form, and Menu property pages supports escape sequence strings in Caption and Text properties&lt;br /&gt;&lt;br /&gt;15.&amp;nbsp;&amp;nbsp;Recent page in Startup dialog has a new button called “Other” that allows opening other files that are not listed in the list&lt;br /&gt;&lt;br /&gt;16.&amp;nbsp;&amp;nbsp;During pause, debugged forms remain painted to allow you to examine the run-time form while pausing&lt;br /&gt;&lt;br /&gt;17.&amp;nbsp;&amp;nbsp;Step-Out is now enabled and allows stepping out of a test&lt;br /&gt;&lt;br /&gt;18.&amp;nbsp;&amp;nbsp;Step Over will not activate the application form causing debugging a form using the Step Over to cause flickering&lt;br /&gt;&lt;br /&gt;19.&amp;nbsp;&amp;nbsp;CreateObject/GetObject now supports "LibraryName.ClassName" or "Class" instead of only supporting the registry ProgID&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;20.&amp;nbsp;&amp;nbsp;Any type is now supported as a variable type and not only as a parameter to a DLL procedure&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Compatibility&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; It is recommended to rebuild your EXE application before using it on the new run-time engine. This is especially needed when running applications that contain the test executive driver.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Bug/Issues&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Compiler. Compiler error was mistakenly reported 'Function has no return statement' when performing CheckIt! on a function&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;&amp;nbsp; Compiler. The statement "if lAttrib or ~0xA0" did not generate compiler error&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;&amp;nbsp; Compiler. Checkit! On a module shortcut caused the containing module to be checked instead of the module.&lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;&amp;nbsp; Compiler. Doit! generated compiler error on no-return statement&lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;&amp;nbsp; Compiler. Did not generate error for Val Object type with initial value &lt;br /&gt;&lt;br /&gt;6.&amp;nbsp;&amp;nbsp; Compiler. Did not allow taking address of Const variable even though it allows address of literal constant.&lt;br /&gt;&lt;br /&gt;7.&amp;nbsp;&amp;nbsp; Compiler. Problem with passing Val enumXXX from System to Program.&lt;br /&gt;&lt;br /&gt;8.&amp;nbsp;&amp;nbsp; Compiler. When system procedure with parameter type of public system enum is called via system command, the parse fails the first time, but it is OK on subsequent compilations&lt;br /&gt;&lt;br /&gt;9.&amp;nbsp;&amp;nbsp; Compiler. Structure size and member offset are incorrectly calculated if packing order is greater than 1 when loading type information from a type library.&lt;br /&gt;&lt;br /&gt;10.&amp;nbsp;&amp;nbsp;Compiler. Omitting parameter list when comparing variant to function return value, e.g."IF TestResult &lt; GetTestMax" - will generate wrong PCode that will crash the run-time&lt;br /&gt;&lt;br /&gt;11.&amp;nbsp;&amp;nbsp;Run-Time. Assignment of array of characters to a string could crash ATEasy&lt;br /&gt;&lt;br /&gt;12.&amp;nbsp;&amp;nbsp;Run-Time. ExitTask and Test -1 statements will not work properly in Taskit mode&lt;br /&gt;&lt;br /&gt;13.&amp;nbsp;&amp;nbsp;Run-Time. Calling empty module event crashed ATEasy in stand-alone EXE&lt;br /&gt;&lt;br /&gt;14.&amp;nbsp;&amp;nbsp;Run-Time. Calling System.OnXXX event from a driver will crash if the event does not exist&lt;br /&gt;&lt;br /&gt;15.&amp;nbsp;&amp;nbsp;Run-Time. Passing variant containing array of non-object (LONG[], DOUBLE[], STRING[] etc...) to procedure's parameter of type VAL OBJECT[] (array of type object) could crash ATEasy.&lt;br /&gt;&lt;br /&gt;16.&amp;nbsp;&amp;nbsp;Run-Time. Passing a non-array variant to a procedure's parameter of type VAL array crashed ATEasy.&lt;br /&gt;&lt;br /&gt;17.&amp;nbsp;&amp;nbsp;Run-Time. Test Log tables header for HTML and text displays different strings for Text and HTML: Test-Name and Name.&lt;br /&gt;&lt;br /&gt;18.&amp;nbsp;&amp;nbsp;Run-Time. Changing Projects did not reset the FormatLogString() settings&lt;br /&gt;&lt;br /&gt;19.&amp;nbsp;&amp;nbsp;Run-Time. Late bound call to method which has a parameter which is a safe array fails&lt;br /&gt;&lt;br /&gt;20.&amp;nbsp;&amp;nbsp;Run-Time. Assigning a variant to another did not set the LValue variant type as the right side&lt;br /&gt;&lt;br /&gt;21.&amp;nbsp;&amp;nbsp;Run-Time. Passing array of string to a variant generated run-time error #427&lt;br /&gt;&lt;br /&gt;22.&amp;nbsp;&amp;nbsp;Run-Time. DoIt! of program code followed by Run-Start command did not compile or execute program events&lt;br /&gt;&lt;br /&gt;23.&amp;nbsp;&amp;nbsp;Run-Time. Form's drawing functions (Circle, Rectangle, DrawText etc...) did not work after the first usage.&lt;br /&gt;&lt;br /&gt;24.&amp;nbsp;&amp;nbsp;Run-Time. Passing negative number to Output IO table operation generated sometimes "Out Of Range" message&lt;br /&gt;&lt;br /&gt;25.&amp;nbsp;&amp;nbsp;Run-Time. Print statement in HTML mode truncated string above 1024 characters caused the log to display garbage &lt;br /&gt;&lt;br /&gt;26.&amp;nbsp;&amp;nbsp;Run-Time. Assigning structure literal to element of structure array VAR parameter generated access violation in RT&lt;br /&gt;&lt;br /&gt;27.&amp;nbsp;&amp;nbsp;Run-Time. Return statement in procedure which returns a complex type and which also has structure literal generated run-time error when run from EXE file&lt;br /&gt;&lt;br /&gt;28.&amp;nbsp;&amp;nbsp;Run-Time. Passing address of a variable to a Val parameter of type LONG generated parser error #612 'Type of argument is incompatible'.&lt;br /&gt;&lt;br /&gt;29.&amp;nbsp;&amp;nbsp;Run-Time. Setting default value of optional parameter that its type is resolved to object will crash during Build/Execute.&lt;br /&gt;&lt;br /&gt;30.&amp;nbsp;&amp;nbsp;Run-Time. Passing variable of type object to a parameter of type "[Var] Variant" generated run-time error # 407.&lt;br /&gt;&lt;br /&gt;31.&amp;nbsp;&amp;nbsp;Run-Time. The statement proc=Program.OnInit did not work from the driver&lt;br /&gt;&lt;br /&gt;32.&amp;nbsp;&amp;nbsp;Controls. Changing list item's text using List() property of AListBox or AComboBox reset item data to 0.&lt;br /&gt;&lt;br /&gt;33.&amp;nbsp;&amp;nbsp;Controls. Inserting, deleting or changing item of a sorted AListBox or AComboBox control in design mode using List property page unsorted current items.&lt;br /&gt;&lt;br /&gt;34.&amp;nbsp;&amp;nbsp;Controls. Changing round slider control's ticks spacing to non-auto (interval, division) could crash ATEasy.&lt;br /&gt;&lt;br /&gt;35.&amp;nbsp;&amp;nbsp;Controls. ALog.SaveAs will not work when Visible=FALSE&lt;br /&gt;&lt;br /&gt;36.&amp;nbsp;&amp;nbsp;Commands. Reducing procedures # of parameters will corrupt a command that uses this procedure with a constants/changed parameters&lt;br /&gt;&lt;br /&gt;37.&amp;nbsp;&amp;nbsp;Commands. Creating a command that is assigned to a procedure with two with two enum parameters does not saved the commands parameters (constants) properly&lt;br /&gt;&lt;br /&gt;38.&amp;nbsp;&amp;nbsp;Debugger. A Change in array dimension size followed by a Redim statement was not reflected in Watch/Call Stack window or code completion.&lt;br /&gt;&lt;br /&gt;39.&amp;nbsp;&amp;nbsp;Debugger. Changing display format of the Watch/Call Stack windows did not refresh the value with new format&lt;br /&gt;&lt;br /&gt;40.&amp;nbsp;&amp;nbsp;Debugger. Changing array elements in the Watch window could crash ATEasy&lt;br /&gt;&lt;br /&gt;41.&amp;nbsp;&amp;nbsp;Debugger. Char is displayed as a number in the Watch window&lt;br /&gt;&lt;br /&gt;42.&amp;nbsp;&amp;nbsp;Debugger. Aborting while in error handling OnError caused breakpoints placed in OnAbort to be ignored.&lt;br /&gt;&lt;br /&gt;43.&amp;nbsp;&amp;nbsp;Debugger. Duplicated items were shown in the call stack when paused while displaying a message box/input box.&lt;br /&gt;&lt;br /&gt;44.&amp;nbsp;&amp;nbsp;Debugger. Step Over (F10) the last line of the nested call does not always work. It behaved like Continue (F4) instead of pausing at the next line after the call.&lt;br /&gt;&lt;br /&gt;45.&amp;nbsp;&amp;nbsp;Debugger. Step out from interrupt procedure did not continue stepping at point of interrupt.&amp;nbsp;&amp;nbsp;Step into when interrupt procedure is fired did not continue stepping at start of interrupt procedure.&lt;br /&gt;&lt;br /&gt;46.&amp;nbsp;&amp;nbsp;Property Page. Fixed string did not retain the its value from the Value property page&lt;br /&gt;&lt;br /&gt;47.&amp;nbsp;&amp;nbsp;Property Page. Terminator in Winsock Interface of a Driver was missing from the property page&lt;br /&gt;&lt;br /&gt;48.&amp;nbsp;&amp;nbsp;Property Page/ActiveX controls. TabStrip ActiveX control. Making changes in its property page (Remove Tab) was not caused the page to be marked as dirty and not saved.&lt;br /&gt;&lt;br /&gt;49.&amp;nbsp;&amp;nbsp;Property Page. Open On Access fro GPIB, VXI and ISA was mistakenly displayed in the driver shortcut property page&lt;br /&gt;&lt;br /&gt;50.&amp;nbsp;&amp;nbsp;Property Page. Document property page File Browse button initializes the current directory instead of the document path directory.&lt;br /&gt;&lt;br /&gt;51.&amp;nbsp;&amp;nbsp;Property Page. Form property pages of READ ONLY document does not disable some of controls.&lt;br /&gt;&lt;br /&gt;52.&amp;nbsp;&amp;nbsp;Property Page. REFX tests use as default 0x0 mask instead of 0xfffffffffffffff.&lt;br /&gt;&lt;br /&gt;53.&amp;nbsp;&amp;nbsp;Property Page. Changing the Form ScaleMode in design time will confuse the form editor&lt;br /&gt;&lt;br /&gt;54.&amp;nbsp;&amp;nbsp;Property Page. Pressing Del when the driver shortcut is selected with the Misc page sometimes crashed ATEasy&lt;br /&gt;&lt;br /&gt;55.&amp;nbsp;&amp;nbsp;Property Page. Selecting new file to replace the currently modified file using file browse dialog (instead of typing the file name) crashed ATEasy.&lt;br /&gt;&lt;br /&gt;56.&amp;nbsp;&amp;nbsp;Property Page. GPIB Primary secondary address spin button behavior was wrong &lt;br /&gt;&lt;br /&gt;57.&amp;nbsp;&amp;nbsp;Property Page. Com method/property/variable or type allowed to change its type from the property page&lt;br /&gt;&lt;br /&gt;58.&amp;nbsp;&amp;nbsp;Code Completion. Syntax coloring problem with '\"' marks the rest of the line as comment&lt;br /&gt;&lt;br /&gt;59.&amp;nbsp;&amp;nbsp;Code Completion. Replacing a string with a ‘.’ did not display the members list box&lt;br /&gt;&lt;br /&gt;60.&amp;nbsp;&amp;nbsp;Code Editor. Selecting a variable or placing the cursor at the end of the variable makes the Go To Definition disabled&lt;br /&gt;&lt;br /&gt;61.&amp;nbsp;&amp;nbsp;Code Editor. Test header did not show the Task number and name when having two level tasks or more&lt;br /&gt;&lt;br /&gt;62.&amp;nbsp;&amp;nbsp;List View. List View edit label box was sometimes too small to type in long variable name, etc&lt;br /&gt;&lt;br /&gt;63.&amp;nbsp;&amp;nbsp;List View. Types such as Enum, Struct edit labeling with F2 display the type incorrectly.&lt;br /&gt;&lt;br /&gt;64.&amp;nbsp;&amp;nbsp;List View. Commands View. Insert After, Undo, Insert Below may crash ATEasy&lt;br /&gt;&lt;br /&gt;65.&amp;nbsp;&amp;nbsp;Undo/Redo. Undo of copy/paste of multiple controls&amp;nbsp;&amp;nbsp;could crash ATEasy&lt;br /&gt;&lt;br /&gt;66.&amp;nbsp;&amp;nbsp;Copy/Paste. After Copy and Paste of controls, selection of a particular button selects other control&lt;br /&gt;&lt;br /&gt;67.&amp;nbsp;&amp;nbsp;Copy/Paste. Paste into Procedures combo box disregards what is being selected, it always paste at the end&lt;br /&gt;&lt;br /&gt;68.&amp;nbsp;&amp;nbsp;Copy/Paste. Paste Task/Test did not always checked for unique ID.&lt;br /&gt;&lt;br /&gt;69.&amp;nbsp;&amp;nbsp;Find/Replace. Various problems were fixed.&lt;br /&gt;&lt;br /&gt;70.&amp;nbsp;&amp;nbsp;Source Control. Source control status did not correctly displayed status of read-only files&lt;br /&gt;&lt;br /&gt;71.&amp;nbsp;&amp;nbsp;Source Control. All changes will be rolled back after CheckOut or Undo CheckOut.&lt;br /&gt;&lt;br /&gt;72.&amp;nbsp;&amp;nbsp;Source Control. Source control file changed notification did not work under Windows 95/98/Me.&lt;br /&gt;&lt;br /&gt;73.&amp;nbsp;&amp;nbsp;Source Control. File difference combo box does not always offer to use the latest folder/file in the to combo box&lt;br /&gt;&lt;br /&gt;74.&amp;nbsp;&amp;nbsp;Options. Removed unused 'Menu Return' option from the Option dialog. &lt;br /&gt;&lt;br /&gt;75.&amp;nbsp;&amp;nbsp;Document. Menu text format serialization does not serialize the shortcut information&lt;br /&gt;&lt;br /&gt;76.&amp;nbsp;&amp;nbsp;Document. Save In Text Format on binary format document resets the document modified flag&lt;br /&gt;&lt;br /&gt;77.&amp;nbsp;&amp;nbsp;FP Document. Conversion of FP file could crash ATEasy&lt;br /&gt;&lt;br /&gt;78.&amp;nbsp;&amp;nbsp;FP Document. After Converting FP file and running the application ATEasy crashes since the FP author did not enclose a string GPIB0::5::0::INSTR with double quotes. &lt;br /&gt;&lt;br /&gt;79.&amp;nbsp;&amp;nbsp;ATEasy 2 conversion. Converting INS files IO Table with Input IO operation generates an extra argument&lt;br /&gt;&lt;br /&gt;80.&amp;nbsp;&amp;nbsp;ATEasy 2 conversion. ATEasy2 I/O table conversion did not work with Input mode "File"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Test Executive/Profile&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Will synchronize the tree view and the execution with the Run/Task/Test/ExitTask/ExitProgram (Task -1) statements&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;&amp;nbsp; Profile forever count did not work&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;&amp;nbsp; Test Executive will disabled itself when debugging from the IDE using TaskIt/TestIt/ProgramIt!&lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;&amp;nbsp; Profile Editor Up Down caused endless message boxes to be displayed&lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;&amp;nbsp; Node tags of the Test Executive/Profile stored information using array of variants instead of single string &lt;br /&gt;&lt;br /&gt;6.&amp;nbsp;&amp;nbsp; Redesigned parts of the test executive execution mechanism to provide better performance handling of flow control statements&lt;br /&gt;&lt;br /&gt;7.&amp;nbsp;&amp;nbsp; The Test Executive commands where organized and new commands where added to provide better application control&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Drivers&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; SM2040x - added/modified new ranges, added new function such as pulse width&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;&amp;nbsp; SM2020 - DMMReadBuferStr spelled incorrect, DMM Measure command uses the DMMReadNorm instead of DMMReadDbl&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;&amp;nbsp; PCI42x - DLL file name was wrong under NT/2000/XP - users must change the DLL manually if using the driver on these OSs. This is now documented in the driver&lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;&amp;nbsp; HW.drv - better support for PCI and Plug and Play configuration and resource handling &lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;&amp;nbsp; New drivers for NIDAQ (National Instruments), NT5000 (Navatek), various Geotest PXI Instruments and Adlink Data Acquisition. &lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=58</link><pubDate>7/22/2003</pubDate></item><item><title>How to control the vertical scroll bar in the ALog control - Published on 7/22/2003</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To hide the scroll bar:&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;log.Object.Document.Body.Scroll="No"&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;To show the scroll bar (same as ALog default):&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;log.Object.Document.Body.Scroll="Yes"&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;To show the scroll bar only if needed:&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;log.Object.Document.Body.Scroll="Auto" &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=57</link><pubDate>7/22/2003</pubDate></item><item><title>Implementing a loop micro-code command by writing directly to the control memory (GX5050/GC5050/GT2550) - Published on 4/17/2003</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The following table shows the control memory content in order to create the sequence of loop three times and then Halt.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; All 32 channels direction are set to OUT, i.e. bits 28-31 are low.&lt;br /&gt;&lt;br /&gt;When writing commands to the control memory all commands need to be spread on four consecutive steps.&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;Step #&lt;/b&gt;&lt;/td&gt;&lt;td bgcolor=EBEBEB class=pt9&gt;&lt;b&gt;Control Memory value&lt;/b&gt;&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;0x00000002&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;0x00000002&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;0x00000002&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;0x00000002&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;0x00000000&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;5&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0x00000000&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;6&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0x00000000&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;7&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0x00000004&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;0x00000004&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;9&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0x00000004&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;10&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0x00000004&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;11&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0x00000000&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;0x000E0000&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;13&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0x000E0000&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;14&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0x000E0000&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;td bgcolor=ffffff class=pt9&gt;15&lt;/td&gt;&lt;td bgcolor=ffffff class=pt9&gt;0x01CE0000&lt;/td&gt;&lt;/tr&gt;&lt;tr valign=top&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Steps 0-3:&lt;/b&gt;&lt;br /&gt;Command Sets register A equal to 2 with no conditions in order to loop a total of 3 times we set register A to 2. &lt;br /&gt;The first three steps (0 through 2) hold the Register value (bits 0 through 15). The fourth consecutive step (3) &lt;br /&gt;has the register number (bits 20-21) ORed with the Loop address value.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Steps 4-6:&lt;/b&gt;&lt;br /&gt;Command No Operation&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Steps 7-11:&lt;/b&gt;&lt;br /&gt;Command: Loop on A. Loop steps 4 through 10 the number of times register A is set to.&lt;br /&gt;The first three steps (7 through 9) hold the Loop address value (bits 0 through 16 for a total of 128K).&lt;br /&gt;The fourth consecutive step (10) holds the Operation Code (bits 22 through 24) ORed with the Loop address value.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 11:&lt;/b&gt;&lt;br /&gt;Command No Operation&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Steps 7-11:&lt;/b&gt;&lt;br /&gt;Command: Halt. The first three steps (12 through 14) hold the Halt command condition value (bits 17-19). &lt;br /&gt;The fourth consecutive step (15) holds the Operation Code, bits 22 through 24 ORed with Halt command condition value.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Loop command flow chart:&lt;/b&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Loop Image.jpg" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; The value of register A at the end of a Loop command is 65535 (0xFFFF).</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=51</link><pubDate>4/17/2003</pubDate></item><item><title>What is the screw thread for the Geotest switching product's DB78 connector - Published on 4/17/2003</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Geotest switching cards use a Positronic DB78 connector. This connector has a jackscrew for fastening a harness or cable. What is the jackscrew thread spec? It is 4-40 thread.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=56</link><pubDate>4/17/2003</pubDate></item><item><title>Accelerating the execution of ARM or TRIG commands when using GT2550 board - Published on 4/16/2003</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;The GT25/50 driver has embedded delays (about 30-40 mS) in order for it to work properly under different operating systems, carrier cards or different computers.&lt;br /&gt;&lt;br /&gt;In GTDIO/DIOEasy v3.0 build 12 and above users can accelerate the execution of &lt;b&gt;DioArm &lt;/b&gt;or &lt;b&gt;DioTrig&lt;/b&gt; procedures when the GT25/50 run in frequencies greater then 200KHz using the &lt;b&gt;DioSetOperationMode&lt;/b&gt; procedure. See the Dio on-line books for details on how to use this function.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=21</link><pubDate>4/16/2003</pubDate></item><item><title>GX5150 VHI0, VHI1 VREF, VTH0, VTH1 Pins - Published on 4/15/2003</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It is not necessary to connect these pins. The GT5930 provides return path for all 32 channels on the wire opposite the signal wire.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=55</link><pubDate>4/15/2003</pubDate></item><item><title>How to create a "system modal" form similar to ATEasy 2.x dialogs - Published on 4/10/2003</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The System modal dialog style (DS_SYSMODAL) was dropped as it is no longer supported in Win32. According to MSDN documentation:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;This style is obsolete and is included for compatibility with 16-bit versions of Windows. If you specify this style, the system creates the dialog box with the WS_EX_TOPMOST style. This style does not prevent the user from accessing other windows on the desktop. Do not combine this style with the DS_CONTROL style.&lt;br /&gt;&lt;/blockquote&gt;You can still make a window top-most by using the following USER32.DLL function, in the &lt;b&gt;Form OnLoad &lt;/b&gt;event:&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;SetWindowPos(Form.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE) &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Where the parameters are prototype 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;DLL User32&lt;br /&gt;––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&lt;br /&gt;File = User32.dll&lt;br /&gt;&lt;br /&gt;DLL Types&lt;br /&gt;––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&lt;br /&gt;&lt;br /&gt;DLL Procedures&lt;br /&gt;––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&lt;br /&gt;&lt;br /&gt;Procedure SetWindowPos(hwnd, hwndInsertAfter, x, y, cx, cy, uFlags): Bool&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;hwnd: Val AHandle&lt;br /&gt; hwndInsertAfter: Val AHandle&lt;br /&gt; x: Val Long&lt;br /&gt; y: Val Long&lt;br /&gt; cx: Val Long&lt;br /&gt; cy: Val Long&lt;br /&gt; uFlags: Val DWord&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;DLL Constants&lt;br /&gt;––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&lt;br /&gt; HWND_TOPMOST: AHandle Const = -1&lt;br /&gt; SWP_NOSIZE: Long Const = 1&lt;br /&gt; SWP_NOMOVE: Long Const = 2&lt;br /&gt; SWP_NOZORDER: Long Const = 4&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Sample files are available: &lt;a href='http://www.geotestinc.com/images/support/Q200054.zip' target='_blank'&gt;Q200054.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=54</link><pubDate>4/10/2003</pubDate></item><item><title>Regenerating Program Tasks and Tests IDs - Published on 3/24/2003</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ATEasy will try to leave the Test or Task IDs intact after renaming them. The reason is that an external file or code may reference the ID; changing the ID name will break the code.&lt;br /&gt;&lt;br /&gt;If you don't have any external reference to the Task or Test IDs and you would like to generate IDs that are similar to the Task/Test name you can use the attached utility. &lt;br /&gt;&lt;br /&gt;To use the utility copy the files to a folder and open the project file (&lt;b&gt;ProgramIds.prj&lt;/b&gt;). From the &lt;b&gt;Run&lt;/b&gt; menu select &lt;b&gt;Start&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.geotestinc.com/images/support/Q200053.gif" alt`=&amp;quot; border='0' /&gt;&lt;br /&gt;&lt;br /&gt;Select the program source file that you wish to convert (language.pgt in this example) and type a new program name that will contain the new program with the new Ids (language-new.pgt). Click on the &lt;b&gt;Convert&lt;/b&gt; button.&lt;br /&gt;&lt;br /&gt;Files for this Article: &lt;a href='http://www.geotestinc.com/images/support/Q200053.zip' target='_blank'&gt;Q200053.zip&lt;/a&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=53</link><pubDate>3/24/2003</pubDate></item><item><title>Setting test requirements (e.g. Min/Max) from an external file - Published on 2/20/2003</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The following describe a way to use external requirements files:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Open the external test requirements file in &lt;b&gt;Program.OnInit&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Read the new requirements 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Set the program test objects properties. You can set the test properties in &lt;b&gt;OnInitTest &lt;/b&gt;(e.g., Test.Min=dMin) or for the whole program at once during &lt;b&gt;Program.OnInit &lt;/b&gt;by looping and setting the test's objects (e.g., Program.Tests(name or number).Min=dMin).&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;If you want to set the test requirements for all the&amp;nbsp;&amp;nbsp;program tests at one time, do that after the program is running (e.g. &lt;b&gt;OnInitProgram&lt;/b&gt; and not in &lt;b&gt;OnInitSystem)&lt;/b&gt; since the &lt;b&gt;run&lt;/b&gt; statments will reset any requirements you set.&lt;br /&gt;&lt;br /&gt;The external file can be text, binary, an Excel spreadsheet, or a database. Text and binary files can be opened and read using ATEasy's FileXXX internal library functions. Excel spreadsheets or database files can be opened using Excel or ADO COM objects using a type library. For example code, refer to the ATEasy Excel example.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=50</link><pubDate>2/20/2003</pubDate></item><item><title>How Do I Call a DLL Created in Microsoft.NET from ATEasy 3.x or 4.x? - Published on 2/3/2003</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ATEasy 3.x or 4.x (ATEasy 5.x and above support importing and using .NET assemblies directly) cannot call Microsoft.NET assemblies directly. Even if you create a Microsoft.NET class library with public methods, Microsoft.NET will compile these into Microsoft.NET assembly. This assembly will still have a .DLL extension, but it is NOT a dynamic link library (DLL). For more information on assemblies, see Microsoft.com &lt;a href='http://msdn.microsoft.com/en-us/library/hk5f40ct(VS.71).aspx'&gt;assemblies&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One way to use the .NET assembly from ATEasy is by wrapping the .NET classes in your .NET library to ActiveX COM objects using a tool that is provided with .NET.&amp;nbsp;&amp;nbsp;This tool works as follows:&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Register the .NET assembly using the .NET Framework Assembly Registration Utility (RAGASM.EXE) for 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;RGEASM MyLib.dll /tlb&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The /tlb option is optional and will create and register a type library with the name MyLib.tlb. The type library can then inserted to the ATEasy sub module Libraries and can be used as other early binding objects.&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;&amp;nbsp; Install the assembly into the Global Assembly Cache&amp;nbsp;&amp;nbsp;(GAC) using the .NET Framework Global Assembly Cache Utility (GACUTIL.EXE) for 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;GACUTIL –I MyLib.dll&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;3.&amp;nbsp;&amp;nbsp; After these step the .NET components can be used similar to any other COM object from ATEasy. Both methods early and late binding can be used. &lt;br /&gt;&lt;br /&gt;Another workaround is to create an actual dynamic link library (DLL) from a Microsoft.NET language. This can be done with Visual Studio.NET. From within Visual Studio.NET, select &lt;b&gt;File » New » Project&lt;/b&gt;. You can then select &lt;b&gt;Visual C++ &lt;/b&gt;as the Project Type and &lt;b&gt;Win 32 Project &lt;/b&gt;as the Template. After you click &lt;b&gt;OK&lt;/b&gt;, you can then select &lt;b&gt;Application Settings&lt;/b&gt;, rather than &lt;b&gt;Overview&lt;/b&gt;. Then select DLL as the Application Type and select &lt;b&gt;Export Symbols &lt;/b&gt;as Additional Options&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=44</link><pubDate>2/3/2003</pubDate></item><item><title>How to use a DCOM component from ATEasy - Published on 12/16/2002</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Use the following procedure to use a DCOM component from ATEasy:&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Register the server application on the server computer (usually by running it)&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;&amp;nbsp; Run the component setup to register the server component on the client computer&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;&amp;nbsp; Run Component Services Windows application (Start, Run, dcomcnfg.exe) on the server computer and select the application from the Component Services, My Computer, DCOM Config and set the security to allow remote computer to access the component&lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;&amp;nbsp; Run Component Services Windows application (Start, Run, dcomcnfg.exe) on the client computer and select the application from the Component Services, My Computer, DCOM Config and set the application computer location&lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;&amp;nbsp; From ATEasy use &lt;b&gt;CreateObjec()&lt;/b&gt; or &lt;b&gt;GetObject()&lt;/b&gt;&amp;nbsp;&amp;nbsp;internal functions to create the remote objects as creating local object&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; Since ATEasy version 6.0, &lt;b&gt;CreateObject()&lt;/b&gt; has a new optional parameter (&lt;b&gt;sHostName&lt;/b&gt;) that can be used (in addition to the method described here) to create remote objects.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt; &lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=43</link><pubDate>12/16/2002</pubDate></item><item><title>ATEasy's Sleep(), Delay() and WaitForEvent() Functions Usage - Published on 12/6/2002</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Sleep suspends the thread from which it was called (meaning it will also suspend UI such as form events, painting, etc.). If you wish to create an interval of time, you may call &lt;b&gt;Delay() &lt;/b&gt; instead. However, &lt;b&gt;Delay()&lt;/b&gt; consumes CPU time (see knowledge base article &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=30'&gt;Q200030&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;If that is a problem, you can 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;Procedure DelayEx(lDelay)&lt;br /&gt;{&lt;br /&gt;lStart=Tick()&lt;br /&gt;&lt;br /&gt;loop&lt;br /&gt;&amp;nbsp;&amp;nbsp; lTime=Tick()&lt;br /&gt;&amp;nbsp;&amp;nbsp; if lTime-lStart&gt;lDelay than exitloop&lt;br /&gt;&amp;nbsp;&amp;nbsp; WaitForEvent(lStart+lDelay-Time)&lt;br /&gt;&amp;nbsp;&amp;nbsp; ! optional - call DoEvent() if you are calling this from a form event&lt;br /&gt;endloop&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=41</link><pubDate>12/6/2002</pubDate></item><item><title>PCI/PXI explorer hangs when opened - Published on 12/3/2002</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The problem can be replicate usually on new Dell computers since their mother board contains a PCI device with function #7.&lt;br /&gt;&lt;br /&gt;To replicate the problem, you can run the HWTEST application from the Program Files\Geotest\HW from the command prompt:&lt;br /&gt;&lt;br /&gt;HWTEST pci&lt;br /&gt;&lt;br /&gt;After running it you will see endless list of PCI devices displayed in the command window. &lt;br /&gt;&lt;br /&gt;Geotest fixed this issue with HW (hardware access device driver) v2.11. This driver is shipped with every Geotest product that was released after December, 3 2002.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=42</link><pubDate>12/3/2002</pubDate></item><item><title>ATEasy 2.x DLG Based Dialog Boxes Appear Narrower in ATEasy 3.0 than in ATEasy 2.x - Published on 10/31/2002</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This problem occurs because the Windows Dialog Base Unit (DBU) works differently in Win32 than in Win16. &lt;br /&gt;&lt;br /&gt;DBUs are a Windows unit that let you specify control in a portable way that will allow different system to display text without clipping (to prevent the problem that cause fonts to be truncated). &lt;br /&gt;&lt;br /&gt;Dialog Base Units (DBU) are used in DlgEasy and by Windows specify control size and position which are later on converted to pixels before being displayed by Windows. &lt;br /&gt;&lt;br /&gt;Microsoft recommends to UI designers to add 30% width to controls that display text to prevent font clipping when changing system. If this rule is not followed, font truncating is not guaranteed. In addition, moving from WIN16 to WIN32 DBU translation to pixels was changed by Microsoft and made a bit narrower. However if the 30% rule was used than in most cases migrating dialog (in C or ATEasy) will work. Designing a dialog box in Visual C 1.5 and recompiling it to Visual C 6.0 may cause the same problem.&lt;br /&gt;&lt;br /&gt;If font is truncated the only workaround is to resize the dialog controls in DlgEasy before using it from ATEasy 3.0.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=14</link><pubDate>10/31/2002</pubDate></item><item><title>Changing ATEasy control properties that affect the control window area does not take effect until you return from the form/control event - Published on 10/31/2002</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;For example changing the ASwitch control &lt;b&gt;Value&lt;/b&gt; property will not take effect (in the control area in the form) until you exit the form event.&lt;br /&gt;&lt;br /&gt;Use one of the following methods to force painting:&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp;Call &lt;b&gt;DoEvent() &lt;/b&gt; this will cause events to be handled while the form event is handled. (ATEasy 4.0)&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;&amp;nbsp;Use the control &lt;b&gt;Refresh()&lt;/b&gt; method (ATEasy 4.0 build 90 and above).&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;&amp;nbsp;You can use User32.dll &lt;b&gt;UpdateWindow(hwnd)&lt;/b&gt; to force painting (hwnd is the control.hWnd property).&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=40</link><pubDate>10/31/2002</pubDate></item><item><title>How to make the ATEasy log window update immediately after print during a form event - Published on 10/28/2002</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;You need to use the &lt;b&gt;Flush()&lt;/b&gt; method of the log control. Just call the method after the print statement or append method and the log control will be updated immediately.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=39</link><pubDate>10/28/2002</pubDate></item><item><title>CoolBar control in Microsoft Window Common Control 3 not supported with ATEasy - Published on 10/16/2002</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ATEasy does not support control that contains other controls (control container using ISimpleFrameSite interface). This interface is not documented by Microsoft and is currently supported only by VB. (Not supported by other application such as: Access or FoxPro MFC or ATL).&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=38</link><pubDate>10/16/2002</pubDate></item><item><title>ATEasy EXE File Compatibility with Older Run-Time (RT) Engine Builds - Published on 10/16/2002</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In general, ATEasy created executables (EXE) files run with the same run-time that was used to build the EXE. The EXE can also run with newer version of the ATEasy run-time. &lt;br /&gt;&lt;br /&gt;Upgrading the target computer with the build that that you used to build the EXE along with the EXE file will always work. However, steps have been to reduce incapability between versions of ATEasy, so you will be able to mix different run time and EXE versions. &lt;br /&gt;&lt;br /&gt;Since the file format of the ATEasy EXE or files rarely changes, you may not always need to send the run-time engine with your rebuilt EXE file. Starting from ATEasy 3.0 build 54 we made several changes to prevent the need for sending run-time updates.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=37</link><pubDate>10/16/2002</pubDate></item><item><title>How to Find the Free Disk Space from an ATEasy Application - Published on 9/27/2002</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;You need to call the Windows API that resides in a system dll. See the on-line help how to declare and call DLL function.&lt;br /&gt;&lt;br /&gt;You can call &lt;b&gt;GetDiskFreeSpace&lt;/b&gt; or &lt;b&gt;GetDiskFreeSpaceEx&lt;/b&gt; declared in kernel32.dll or &lt;b&gt;SHGetDiskFreeSpace &lt;/b&gt; in shell32.dll (check the Microsoft web site for declaration of these functions).&lt;br /&gt;&lt;br /&gt;Below is a sample &lt;b&gt;GetDiskFreeSpace &lt;/b&gt;declaration in ATEasy:&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;GetDiskFreeSpace(&lt;br /&gt;lpRootPathName : val string,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! root path e.g. "c:\\"&lt;br /&gt;lpSectorsPerCluster: var dword,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;! sectors per cluster&lt;br /&gt;pBytesPerSector: var dword,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!bytes per sector&lt;br /&gt;lpNumberOfFreeClusters: var dword,&amp;nbsp;&amp;nbsp;! free clusters&lt;br /&gt;lTotalNumberOfClusters: var dword:&lt;br /&gt;) : Bool&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Free space is calculated as:&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;dFreeSpace=lpSectorsPerCluster*1.0*pBytesPerSector*lpNumberOfFreeClusters&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;the *1.0 in the above code is used to convert to double and to avoid overflow since the result could be &gt;4GB&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=36</link><pubDate>9/27/2002</pubDate></item><item><title>Make ATEasy Wait until WinExec Application/Process Completes - Published on 9/25/2002</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In ATEasy 3.0 build 54b and above, &lt;b&gt;WinExec&lt;/b&gt; returns a true handle.&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;hHandle=WinExec(..)&lt;br /&gt;&lt;br /&gt;WaitForSingleObject(nHandle)&amp;nbsp;&amp;nbsp;! wait until app is completed&lt;br /&gt;&lt;br /&gt;….&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;For ATEasy 3.0 build 54a and below, you must use &lt;b&gt;FindWindow&lt;/b&gt; (user32) on the caption of you application or the class of its main window (using spy):&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;WinExec(...)&lt;br /&gt;&lt;br /&gt;while FindWindow(...)&lt;br /&gt;endwhile&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=35</link><pubDate>9/25/2002</pubDate></item><item><title>How to copy a file from an ATEasy application - Published on 9/25/2002</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;ATEasy 6.x and above have a FileCopy() function that can be used to copy file. The following provides a way to copy a file using ATEasy 3.x-5.x:&lt;br /&gt;&lt;br /&gt;Copy the following to your text file Libraries section:&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;DLL Kernel32&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt; File = Kernel32.dll&lt;br /&gt;&lt;br /&gt;DLL Types&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;DLL Procedures&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Procedure CopyFile(sExitingFileName, sNewFileName, bFaiIfExist): Bool&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt; sExitingFileName: Val String&lt;br /&gt; sNewFileName: Val String&lt;br /&gt; bFaiIfExist: Val Bool&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=34</link><pubDate>9/25/2002</pubDate></item><item><title>Toggling the DTR line with an RS232 COM port from ATEasy - Published on 9/25/2002</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Before starting, you must know the base address for the port, which can be obtained from Windows Device Manager Resource tab. Usually the base address for COM1 is 0x3F8.&lt;br /&gt;&lt;br /&gt;The DTR line is connected to Modem Control Register (MCR) bit 0 at an offset of 4 (e.g., 0x3F8 + 4). Setting this bit to 1 makes the line active.&lt;br /&gt;&lt;br /&gt;For example:&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;iBase=0x3F8&lt;br /&gt;ucByte=PortInByte(iBase+4)&lt;br /&gt;&lt;br /&gt;! set DTR On&lt;br /&gt;PortOutByte(iBase+4, ucByte or 0x1)&lt;br /&gt;Delay(500)&lt;br /&gt;&lt;br /&gt;! set DTR Off&lt;br /&gt;PortOutByte(iBase+4, ucByte and 0xFE)&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=33</link><pubDate>9/25/2002</pubDate></item><item><title>ATEasy 2.x and 3.x GPIB Secondary Addresses - Published on 9/25/2002</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In ATEasy 3.0 and above, Secondary Address 0 is used as a None secondary address. Use 1 to 31 as a Secondary Address for GPIB instruments.&lt;br /&gt;&lt;br /&gt;ATEasy 2.x uses 0 as the first Secondary Address. To remain compatible with ATEasy 3.0 and above, add 1 to ATEasy 2.x application Secondary Address (e.g., use 1 instead of 0).&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=32</link><pubDate>9/25/2002</pubDate></item><item><title>Printing an Image or Form Data from ATEasy - Published on 9/25/2002</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;The process is comprised of two steps. The first step is to save the chart to a image file. The second step is to print the image file.&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp;To save to an image file, use the Image property with the &lt;b&gt;SavePicture()&lt;/b&gt; internal library routine.&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;&amp;nbsp;Use one of the following methods to print the saved image file:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Use &lt;b&gt;WinExec()&lt;/b&gt; with MSPAINT or any other application that supports printing of picture from the command line (/p).&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Use the Log control in HTML mode to insert a picture tag to it with the file saved. Then, use &lt;b&gt;Log.PrintLog&lt;/b&gt;. This method is very flexible, as you may add text and/or other drawing elements to your printout.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Use COM libraries such as Word and Excel to send a picture and to print.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=31</link><pubDate>9/25/2002</pubDate></item><item><title>High CPU Utilization when Using ATEasy's Delay() - Published on 9/25/2002</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;Calling &lt;b&gt;Delay()&lt;/b&gt; does not put your thread to sleep; events and interrupts continue to be monitored in your thread.&lt;br /&gt;&lt;br /&gt;If you don't want to monitor events, you can use &lt;b&gt;Sleep()&lt;/b&gt;, which does not use as much CPU.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=30</link><pubDate>9/25/2002</pubDate></item><item><title>Is there a way to know if my application is running from the ATEasy development env (IDE)? - Published on 9/25/2002</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;If &lt;b&gt;app.ModulePath &lt;/b&gt;has the string value "ATEasy.EXE", then your application is running from the ATEasy development environment.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=25</link><pubDate>9/25/2002</pubDate></item><item><title>PCI/PXI Instruments not working properly when several instruments of the same type are installed on the same Windows NT machine - Published on 9/25/2002</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Cause:&lt;/b&gt; The Windows NT Hardware Abstraction Layer (HAL) HAL assigned an I/O port address or memory resource to a PCI device that overlaps with an existing PCI device, causing a PCI resource conflict on your system. Under normal operation, the system BIOS is responsible for setting the PCI device resource requirements. When Windows NT loads, the Windows NT HAL sometimes moves the PCI device resources. PCI devices are dynamically configurable. However, the Windows NT HAL sometimes assigns overlapping I/O port addresses or memory resources for the PCI devices.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Resolution:&lt;/b&gt; Adding the /PCILOCK switch to the BOOT.INI file forces the Windows NT HAL to use the PCI device resources allocated by the system BIOS. After modifying the BOOT.INI file the system must be rebooted.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example:&lt;/b&gt; The following is a typical Boot.INI file with the /PCILOCK switch&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;[boot loader]&lt;br /&gt;timeout=3&lt;br /&gt;[operating systems]&lt;br /&gt;multi(0)disk(0)rdisk(0)partition(1)WINNT="Windows NT Workstation&lt;br /&gt;Version 4.00"/PCILOCK&lt;br /&gt;multi(0)disk(0)rdisk(0)partition(1)WINNT="Windows NT Workstation&lt;br /&gt;Version 4.00 [VGA mode]" /basevideo /sos /PCILOCK&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=20</link><pubDate>9/25/2002</pubDate></item><item><title>ATEasy Licensing Q&amp;A - Published on 9/19/2002</title><description>&lt;h2&gt;General&lt;/h2&gt;&lt;b&gt;Q.&lt;/b&gt; &lt;b&gt;What kind of licensing does ATEasy have?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A.&lt;/b&gt; ATEasy has two types of licenses: Single-User and Network. A Single-User license is installed on one computer and allows you to use ATEasy on that computer. A Network license is installed at a network server and allows users to work from any computer connected to that network limited to the number of licenses that have been purchased (concurrent license).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Q. &lt;/b&gt; &lt;b&gt;Can I distribute my ATEasy application?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A. &lt;/b&gt;Yes. ATEasy applications compiled to EXE file are Royalty-Free. You will have to install the ATEasy run-time on each machine that the executable will run.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Q.&lt;/b&gt; &lt;b&gt;Will my license work with any version of ATEasy?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A.&lt;/b&gt; Licenses are purchased for a specific version of ATEasy only and will not work with newer versions of that product.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Q.&lt;/b&gt; &lt;b&gt;I bought a license for version 3.0, Can I use version 4.0 with that license?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A.&lt;/b&gt; No, You cannot. You must purchase a subscription or an upgrade. Subscriptions can only be purchased within 90 days of the original product purchase. Upgrades can be purchased at any time.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Q.&lt;/b&gt; &lt;b&gt;I bought a license for version 6.0, Can I use version 4.0 with that license?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A.&lt;/b&gt; Yes, You can. A license for specific version support ATEasy v3.0 and newer up to the version of the license purchased. For example if your network license server have a 7.0 license, client can run version 3.x-7.x.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Q. &lt;/b&gt; &lt;b&gt;What does one year subscription provides?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A.&lt;/b&gt; The one year subscription &amp; support provide one full year of free technical support as well as one full year of free upgrades. With subscriptions you will get a new license if an upgrade to the product is release during that year. In general, we release new major upgrade (that requires new license) at least once a year.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Q.&lt;/b&gt; &lt;b&gt;If I did not buy a subscription and a new version has been released, Can I buy subscription to upgrade my license?&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;A.&lt;/b&gt; You can buy subscriptions only within 90 days of the date you originally purchased the product. After that you must buy an upgrade to get license for the new version.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Q.&lt;/b&gt; &lt;b&gt;When I buy an upgrade, can I buy a subscription to keep me up-to-date for a year?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A.&lt;/b&gt; Yes, You can. Once purchased, you will receive one full year of upgrades and support from the date you have purchased the upgrade.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Single License&lt;/h2&gt;&lt;b&gt;Q.&lt;/b&gt; &lt;b&gt;What kind of single-user license is available for ATEasy?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A.&lt;/b&gt; ATEasy is offered with either a Hardware Key, or a Software Key Licenses. Hardware licenses use a device that plugs to the computer's Parallel or USB ports to provide the license. Software Licenses use a string of characters that are entered into the ATEasy License dialog box (located under the About ATEasy dialog).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Q.&lt;/b&gt; &lt;b&gt;Can I move the key from one machine to another?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A.&lt;/b&gt; Yes you can. Hardware keys can be moved from one computer to another by unplugging the device and plugging it into another computer. Software keys can be also transferred to another machine (up to three times) by requesting a license transfer from Geotest (by requesting it using your M@gic/support account), this process involved terminating the license (see &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=60'&gt;Q200060&lt;/a&gt;) and installing a new license obrtained from Geotest (see &lt;a href='http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=89'&gt;Q200089&lt;/a&gt;) .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Q.&lt;/b&gt; &lt;b&gt;I've purchased several copies of single-user license. Can I buy subscriptions for part of my single-user licenses&lt;/b&gt;?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A.&lt;/b&gt; Yes you can. However, only the licenses with subscriptions can be upgraded when a new release is available as the upgrade is by serial number.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Network License&lt;/h2&gt;&lt;b&gt;Q.&lt;/b&gt; &lt;b&gt;What is the minimum number of licenses allowed with network license?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A.&lt;/b&gt; 3 or more. You cannot purchase a network license with one of two licenses.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Q.&lt;/b&gt; &lt;b&gt;Can I buy subscription for part of my Network licenses?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A.&lt;/b&gt; No you cannot. Subscriptions for network licenses must be purchased for all licenses that are included in that network license.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=26</link><pubDate>9/19/2002</pubDate></item><item><title>On Windows 9x ATEasy will not notify if file used by ATEasy was saved externaly on a network driver - Published on 9/19/2002</title><description>&lt;b&gt;Solution: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This problem can happen only in ATEasy 4.x and above running on Windows 9x.&lt;br /&gt;&lt;br /&gt;This is due to a known windows 98 bug with &lt;b&gt;FindFirstChangeNotification&lt;/b&gt; Windows API used by ATEasy that does not return notification when file saved on network drive.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=24</link><pubDate>9/19/2002</pubDate></item><item><title>VB Controls or Objects are Slow When Running from the ATEasy IDE - Published on 9/19/2002</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;Visual Basic 6.0 objects are single threaded by default. VB objects that are run in the ATEasy IDE will run in the IDE's main process thread apartment. ATEasy must then use a proxy when creating a control from the run-time thread, which slows performance (50-100 times).&lt;br /&gt;&lt;br /&gt;To increase performance when using VB objects, make sure to change your VB project setting to use the Apartment Threaded threading model.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=18</link><pubDate>9/19/2002</pubDate></item><item><title>Customizing the ATEasy Log Header and Footer when printing - Published on 9/19/2002</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;If you are using ATEasy 5.x and above the &lt;b&gt;PrintLog() &lt;/b&gt;internal function and the &lt;b&gt;ALog.PrintLog&lt;/b&gt; has parameters to support setting the page header and footer for printing. &lt;br /&gt;&lt;br /&gt;For ATEasy 3.x and 4.x users use the following solution:&lt;br /&gt;&lt;br /&gt;The ATEasy Log window is based on Internet Explorer (IE). When printing, the ATEasy log window uses the IE page setup options that are stored in the Registry. To change the settings, you can run IE, select &lt;b&gt;Page Setup &lt;/b&gt;from the &lt;b&gt;File&lt;/b&gt; menu, then edit the header and footer fields as required. You can also do this programmatically -- you'll need to locate the registry entry and write to it on the fly before calling &lt;b&gt;Log.PrintLog()&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=23</link><pubDate>9/19/2002</pubDate></item><item><title>ATEasy USB License Key Does Not Work in Windows NT 4.0 - Published on 2/28/2001</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;Windows NT does not support USB devices. Therefore, the USB Rainbow protection key is not supported under Windows NT. &lt;br /&gt;&lt;br /&gt;The USB protection key is supported only under Windows 9x/ME and Windows 2000.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=17</link><pubDate>2/28/2001</pubDate></item><item><title>How to Create and Use C Structure Bit Fields in ATEasy - Published on 2/12/2001</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;Bit fields are not part of the ATEasy language. To create a bit field-like structure, you can define a member as an integer and manipilate the field using the Or or And operators to set values in the fields. To clear a field you can use the &lt;b&gt;Not &lt;/b&gt;operator.&lt;br /&gt;&lt;br /&gt;For example if the C structure was : &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;Struct Fields&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; DWORD a : 5;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD b: 3;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&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;Define the Bit field as dw in ATEasy:&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;struct Fields&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;dwFields : Dword&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&amp;nbsp;&amp;nbsp;} &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Define some constants:&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;A _MASK: Dword=0x1F&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A _POS: Dword=0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B_MASK : Dword=0x7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B_POS: Dword=5&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;To clear b use:&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;f.dwFiellds =f.dwFiellds &amp; not (B_MASK shl B_POS)&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;To set b use:&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;f.dwFiellds =f.dwFiellds &amp; not (B_MASK shl B_POS) or (bNew shl B_POS)&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=15</link><pubDate>2/12/2001</pubDate></item><item><title>Can I Pass an ATEasy Procedure to a DLL for CallBack? - Published on 2/12/2001</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;Passing an ATEasy procedure to a callback is supported from version 6.0 and above. &lt;br /&gt;&lt;br /&gt;The following workaround provides the same functionality for ATEasy version 3.x-5.x:&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Write a DLL with the callback function and pass it to the function that requires callback function. &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;&amp;nbsp; To pass the address, call the Windows API &lt;b&gt;GetProcAddresss()&lt;/b&gt;, then pass the result as long to the function that requires callback function. &lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;&amp;nbsp; The DLL callback function can use another ATEasy thread to perform an action in ATEasy when the call back was called. The thread can be triggered by an ATEasy synchronization object (AEvent), using a global variable or an ATEasy user interrupt.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=16</link><pubDate>2/12/2001</pubDate></item><item><title>ATEasy Log Control Hangs or Crashes - Published on 10/13/2000</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;The ATEasy ALog control may hang or crash if appending too much text.&lt;br /&gt;&lt;br /&gt;The ATEasy Log Windows is based on Microsoft Internet Explorer (IE). IE does not provide an easy and fast way to determine the limitation on the IE page size. The limit is highly dependent on IE platform, version, and memory. Usually the log file can be very large (several MB) if Windows have enough memory.&lt;br /&gt;&lt;br /&gt;If each program run is saved to a separate log file (default), this will not should be an issue.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=13</link><pubDate>10/13/2000</pubDate></item><item><title>ATEasy SNMP Protocol Support - Published on 10/4/2000</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;The SNMP protocol API comes with Windows NT/2000 and above, and can be accessed from ATEasy using Windows SNMP APIs. &lt;br /&gt;&lt;br /&gt;&lt;a href='http://msdn.microsoft.com/en-us/library/aa378988.aspx'&gt;http://msdn.microsoft.com/en-us/library/aa378988.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Additionally, there are third party ActiveX or .NET SNMP components available, including: &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;PowerTCP SNMP Tool &lt;a href='http://www.dart.com/powertcp/Snmp.asp '&gt;http://www.dart.com/power&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Cyberons &lt;a href='http://www.netaphor.com/products/default.asp'&gt;http://www.netaphor.com&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=12</link><pubDate>10/4/2000</pubDate></item><item><title>ATEasy Properties or IDE Dockable Window Disappears or is not Positioned Properly - Published on 9/26/2000</title><description>&lt;b&gt;Solution:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This issue is caused by corrupted ATEasy Workspace key the the Windows registry.&lt;br /&gt;&lt;br /&gt;This problem can be fixed by editing the Windows Registry which will cause ATEasy IDE to reset all windows position to default:&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Exit ATEasy.&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;&amp;nbsp; Start the Registry Editor (REGEDIT.EXE).&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;&amp;nbsp; In the Registry editor, select the&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;HKEY_CURRENT_USER\Software\Geotest\ATEasy\Workspace&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;4.&amp;nbsp;&amp;nbsp; To delete the whole IDE windows position delete the whole key.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;To delete the properties window position and size delete the PropertiesPlacement from the Full key.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=11</link><pubDate>9/26/2000</pubDate></item><item><title>Bypassing the Windows NT Logon Process - Published on 9/20/2000</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;WARNING: &lt;/b&gt;Use this procedure only when absolutely necessary. Follow the procedures carefully. If the registry editor is used improperly, you may have to reinstall Windows NT to correct problems. Back-up pertinent data. Geotest - Marvin Test Systems, Inc. provides this information as a courtesy to its users. Geotest is not responsible nor liable for any damage caused by following these procedures.&lt;br /&gt;&lt;br /&gt;Windows NT allows you to automate the logon process by storing your password and other pertinent information in the Registry database. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; Storing login and password information in the Registry database allows other users to start your computer and use the account you establish to automatically logon. Timing conflicts can also occur. For example, if you have several network transports loaded, enabling automatic logon may make Windows NT attempt to connect to network resources before the network transports are completely loaded. &lt;br /&gt;&lt;br /&gt;Use the Registry Editor (REGEDT32.EXE), available as part of Windows NT operating system, to add your logon information, as follows: &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Start REGEDT32.EXE and locate the following Registry subkey: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;&amp;nbsp; Establish your domain name, account name, and password using the values you would normally type when logging on. You should assign the following values:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;DefaultDomainName&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;DefaultUserName&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;DefaultPassword&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; The DefaultPassword value may not exist. If it doesn't, from the &lt;b&gt;Edit&lt;/b&gt; menu, choose &lt;b&gt;Add Value&lt;/b&gt;. In the &lt;b&gt;Value Name &lt;/b&gt;field, type:&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;DefaultPassword&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Select REG_SZ for the Data Type. In the &lt;b&gt;String&lt;/b&gt; field, type your password. Save your changes. &lt;br /&gt;&lt;br /&gt;Also, if no DefaultPassword value string is specified, Windows NT automatically changes the value of the AutoAdminLogon key from 1 (true) to 0 (false), thus disabling the AutoAdminLogon feature.&lt;br /&gt;&lt;/blockquote&gt;3.&amp;nbsp;&amp;nbsp; From the Edit menu, choose Add Value. Enter AutoAdminLogon in the Value &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Name field. Select REG_SZ for the Data Type. Enter 1 in the String field. Save your changes. &lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;&amp;nbsp; Exit REGEDT32.&lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;&amp;nbsp; Exit Windows NT and turn off your computer. &lt;br /&gt;&lt;br /&gt;6.&amp;nbsp;&amp;nbsp; Restart your computer and Windows NT. You should be able to logon automatically.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=9</link><pubDate>9/20/2000</pubDate></item><item><title>ATEasy Timers - Published on 7/28/2000</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;ATEasy has two types of timers: &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; ATimer control&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;&amp;nbsp; INT_TIMERx interrupts&lt;br /&gt;&lt;br /&gt;The ATimer is based on the windows WM_TIMER message (not an accurate timer). Windows documentation describes the WM_TIMER message as a low-priority message. The GetMessage and PeekMessage functions post this message only when no other higher-priority messages are in the thread's message queue. &lt;br /&gt;&lt;br /&gt;The &lt;b&gt;INT_TIMERx&lt;/b&gt; interrupts are based on the Window MultiMedia Timers (see the Windows SDK for &lt;b&gt;timeSetEvent &lt;/b&gt;API). The multimedia timers provide accuracy up to 1 ms. ATEasy's ability to deliver 1 ms interrupts depends on the time required to execute a single PCode command. Since interrupts cannot be called in the middle of a PCode command in that thread, this time may be long if the thread calling a DLL function takes a long time before it completes.&lt;br /&gt;&lt;br /&gt;The following list alternatives to the above mentioned timers:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Create an ATEasy thread and use the &lt;b&gt;Sleep()&lt;/b&gt; function to form a delay between events. Call &lt;b&gt;SetThreadPriority()&lt;/b&gt; to ensure more accurate timer.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Write a DLL and use the multimedia timer &lt;b&gt;timeSetEvent&lt;/b&gt;. This method is accurate, but requires a callback function that must be implemented in a DLL. This method could be more accurate if implemented in its own thread.&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Write a DLL and use the Windows &lt;b&gt;SetWaitableTimer&lt;/b&gt;. This method is accurate (better than 1 ms), but requires a callback function must be implemented in a DLL in its own thread. &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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Use hardware to implement the handler functionality.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=8</link><pubDate>7/28/2000</pubDate></item><item><title>Can't obtain a license from ATEasy License Server - Published on 7/11/2000</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;The following list reasons why license cannot be obtained from an ATEasy Network License server:&lt;br /&gt;&lt;br /&gt;1. ATEasy v6.0 (build 136 and above) support automatic installation of the license server in the server. It installs the server as a service in the server computer and have more reliable and flexible way of communication with the workstations. &lt;br /&gt;2. The License server must be running and have enough licenses installed to accommodate requests from the workstations. &lt;br /&gt;3. The workstation ATEasy version must be equal or smaller than the license installed in the license server. If the workstation have an ATEasy 4.x and the server license is for ATEasy 4.x and above it will work. For example You can not have 7.0 client and a 4.0 license.&lt;br /&gt;4. ATEasy workstations must have a direct and a reliable connection to the license server at all time. Same IP subnet is recommended for both server and workstation.&amp;nbsp;&amp;nbsp;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=7</link><pubDate>7/11/2000</pubDate></item><item><title>Cannot Call an ATEasy Program Procedure from a Driver or a System - Published on 6/20/2000</title><description>&lt;b&gt;Solution:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Calling a program procedure from a driver or a system is prohibited by design. Drivers or systems should be designed so that they are independent the active program's implementation, which can be changed when the application is running.&lt;br /&gt;&lt;br /&gt;Program events, however, can be called by a driver or system using, for example, Program.OnInit().&lt;br /&gt;&lt;br /&gt;The following procedure provides a workaround using procedure variable:&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Program pass in the procedure to a procedure variable stored in a driver or a system module.&lt;br /&gt;2.&amp;nbsp;&amp;nbsp; The driver or system can now call the program procedure using the procedure variable.&lt;br /&gt;&lt;br /&gt;The following procedure provides a workaround using interrupts:&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Program installs an interrupt&lt;br /&gt;2.&amp;nbsp;&amp;nbsp; When a driver needs to call the program procedure, it sets the interrupt&lt;br /&gt;3.&amp;nbsp;&amp;nbsp; The program interrupt handler can then call a driver function to retrieve the parameters, or can use driver public variables to pass parameters&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=6</link><pubDate>6/20/2000</pubDate></item><item><title>Modifying ATEasy Code During Debugging - Published on 5/31/2000</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;ATEasy Code that was already parsed will not re-parsed to include the new code changes in the code editor. Code that was not yet parsed by the ATEasy's Just In Time compiler is parsed&amp;nbsp;&amp;nbsp;when called and&amp;nbsp;&amp;nbsp;the latest code changes will take effect. &lt;br /&gt;&lt;br /&gt;When the application is started, ATEasy first compiles the application module events and the procedures and commands referenced by these events. When a program is run ateasy first compile its events. Tasks tests&amp;nbsp;&amp;nbsp;are compiled before they are about to be executed (one task at a time).&amp;nbsp;&amp;nbsp;When a DoIt! is executed only the highlighted code and the referenced procedures and commands are compiled.&lt;br /&gt;&lt;br /&gt;Since module events are always parsed when the application is started, code changes in module events will only take effect when the application is started but not during debugging. &lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=4</link><pubDate>5/31/2000</pubDate></item><item><title>Removing ATEasy License from a Machine - Published on 5/31/2000</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;Use the following procedure to remove an ATEasy license from a machine:&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; Open the ATEasy &lt;b&gt;About&lt;/b&gt; dialog box from the Help menu.&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;&amp;nbsp; Press &lt;b&gt;Ctrl + Alt + Shift + K&lt;/b&gt;. A confirmation dialog box is displayed.&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;&amp;nbsp; Click &lt;b&gt;Yes&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;&amp;nbsp; Write down the confirmation code and send to customer support for verification. A temporary file containing this information is also generated in the temp directory. It is recommended to take a screen capture and send to Geotest for approval the confirmation code to avoid mistakes while copying the confirmation code from the screen.&lt;br /&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=5</link><pubDate>5/31/2000</pubDate></item><item><title>Reasons why ATEasy Save Command Fails - Published on 5/19/2000</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;A Save Document operation may fail under any one of the following conditions:&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;The file's security permissions or attributes are set to Read Only&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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;Another application or instance of ATEasy is using the 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='20'&gt;&lt;img src='https://www.geotestinc.com/Images/ico_bullet.gif'&gt;&lt;/td&gt;&lt;td class=reg12&gt;A user on another machine is accessing the file&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=3</link><pubDate>5/19/2000</pubDate></item><item><title>ATEasy Form.Visible, and .WindowState Values During OnLoad Event - Published on 3/28/2000</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;During the form loading the properties have the following 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;Form.Visible = False &lt;br /&gt;Form.WindowState = Normal &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;After the OnLoad is return these properties are restored as set in design mode.&lt;br /&gt;&lt;br /&gt;This behavior is similar to Microsoft Visual Basic's forms behavior. &lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=2</link><pubDate>3/28/2000</pubDate></item><item><title>ATEasy Application Module Events Sequence - Published on 3/30/1999</title><description>&lt;b&gt;Solution:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;The following list represents the sequence in which ATEasy application module events execute:&lt;br /&gt;&lt;br /&gt;system: OnInit&lt;br /&gt;drivers: OnInit (from start to end)&lt;br /&gt;system: OnInitSystem&lt;br /&gt;system: OnInitProgram&lt;br /&gt;drivers: OnInitProgram&lt;br /&gt;program: OnInit&lt;br /&gt;system: OnInitTask&lt;br /&gt;drivers: OnInitTask&lt;br /&gt;program: OnInitTask&lt;br /&gt;system: OnInitTest&lt;br /&gt;drivers: OnInitTest&lt;br /&gt;program:OnInitTest&lt;br /&gt;program:OnEndTest&lt;br /&gt;drivers: OnEndTest&lt;br /&gt;system: OnEndTest&lt;br /&gt;program:OnEndTask&lt;br /&gt;drivers: OnEndTask&lt;br /&gt;system: OnEndTask&lt;br /&gt;program:OnEnd&lt;br /&gt;drivers:OnEndProgram&lt;br /&gt;system:OnEndProgram&lt;br /&gt;system: OnEndSystem&lt;br /&gt;drivers: OnEnd&lt;br /&gt;system: OnEnd&lt;br /&gt;&lt;br /&gt;Note drivers are called : for InitXXX from top to bottom for EndXXX from bottom to start)&lt;br /&gt;&lt;br /&gt;Abort Sequence:&lt;br /&gt;system: OnAbort&lt;br /&gt;program: OnAbort&lt;br /&gt;drivers: OnAbort&lt;br /&gt;system: OnAbort&lt;br /&gt;&lt;br /&gt;Reset sequence: first call abort sequence if running that execute reset procedure than zero variables, then:&lt;br /&gt;program: OnReset&lt;br /&gt;drivers: OnReset&lt;br /&gt;system: OnReset&lt;br /&gt;&lt;br /&gt;Error sequence:&lt;br /&gt;source module: OnError&lt;br /&gt;program: OnError&lt;br /&gt;drivers: OnError&lt;br /&gt;system: OnError&lt;br /&gt;&lt;br /&gt;See Also: ATEasy ModuleEvents.prj located in the ATEasy examples folder.&lt;br /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=1</link><pubDate>3/30/1999</pubDate></item></channel></rss>
