﻿<?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>Real-Time Digital IO Compare Example - Published on 2/18/2010</title><description>In this tutorial, we will be running a GX5292 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&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;1. Open DIOEasy.&lt;br /&gt;2. Create a new file with the following settings:&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&gt;3. Set Channels 0 through 15 to output&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Click Output&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;4. Fill Channels 0 through 15 with a walking one pattern&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Click Overwrite!&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;5. Create the expected pattern for Channel 16 through 31&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Click Overwrite!&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;6. Add HALT command to the end of the pattern&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&gt;7. Insert error in Channel 0&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&gt;8. Save this file as “&lt;a href='https://www.geotestinc.com/..\images\support/Q200186\RTCError.zip' target='_blank'&gt;RTCError.dio&lt;/a&gt;”&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;img src='https://www.geotestinc.com/..\images\support/Q200186\image1.JPG' alt=&amp;quot; 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;&lt;blockquote&gt;1.Launch the GTDIO Panel from DIOEasy using the shortcut (F10).&lt;br /&gt;2.Initialize the driver for the board.&lt;br /&gt;3.Load and run the RTCError.dio pattern&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&gt;4.View the resultant pattern.&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&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='https://www.geotestinc.com/..\images\support/Q200186\image2.JPG' alt=&amp;quot; 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;&lt;blockquote&gt;1. Mask steps 0 through 15&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Click Mask On&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;2. Run the Pattern using the GTDIO Panel&lt;br /&gt;&lt;/blockquote&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='https://www.geotestinc.com/..\images\support/Q200186\image4.JPG' alt=&amp;quot; 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='https://www.geotestinc.com/..\images\support/Q200186\image3.JPG' alt=&amp;quot; border='0' /&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=186</link><pubDate>2/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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='https://www.geotestinc.com/..\images\support/Q200188.zip' target='_blank'&gt;Q200188.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Setting the ATEasy Log Format&lt;/strong&gt;&lt;/font&gt;&lt;br /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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;!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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;How to modify ATEasy Log strings&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;How to change the TestLog Company Logo&lt;/strong&gt;&lt;/font&gt;&lt;br /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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; &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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;How to change the position of the TestLog Company Logo&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;How to insert additional information to the TestLog&lt;/strong&gt;&lt;/font&gt;&lt;br /&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='https://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='https://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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Initialize()&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;PciGetSlotNumbers([Val] Word wVendorId, [Val] Word wDeviceId, Var Short panSlotNumbers[], Var Word pwDevicesFound)&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;PciGetSlotDevice(Val Long lSlot, Var structHWPCIDEVICE pstPciDev)&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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='https://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='https://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='https://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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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: White Paper: Designing PXI-Based Systems for Field and Flight-Line Applications - Published on 2/1/2010</title><description>&lt;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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='https://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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&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='https://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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='https://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='https://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='https://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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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&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&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='https://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&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='https://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&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='https://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&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='https://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='https://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='https://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='https://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='https://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='https://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='https://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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='https://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='https://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='https://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='https://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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/font&gt;&lt;br /&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='https://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='https://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='https://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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Waveform Segments and Sub-Segments&lt;/strong&gt;&lt;/font&gt;&lt;br /&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='https://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='https://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='https://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='https://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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Waveform Functions&lt;/strong&gt;&lt;/font&gt;&lt;br /&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='https://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='https://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='https://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='https://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='https://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='https://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='https://www.geotestinc.com/..\images\support/.\\Q200158\\Noise_01.jpg' alt=&amp;quot; border='0' /&gt;&lt;img src='https://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='https://www.geotestinc.com/..\images\support/.\\Q200158\\VLines_01.jpg' alt=&amp;quot; border='0' /&gt;&lt;img src='https://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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Combining Waveform Segments&lt;/strong&gt;&lt;/font&gt;&lt;br /&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='https://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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/font&gt;&lt;br /&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='https://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='https://www.geotestinc.com/..\images\support/.\Q200137\GX7000 Small Triggers.JPG' alt=&amp;quot; border='0' /&gt;&amp;nbsp;&amp;nbsp;&lt;img src='https://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='https://www.geotestinc.com/..\images\support/.\Q200137\GX7100 Small Triggers.JPG' alt=&amp;quot; border='0' /&gt; &lt;img src='https://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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='https://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='https://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='https://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='https://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='https://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='https://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='https://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='https://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>GT95015 Differential Digital I/O Beakout Adapter Board Product Information - Published on 3/25/2009</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='https://www.geotestinc.com/..\images\support/Q200135 GT95015 Picture.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='https://www.geotestinc.com/..\images\support/Q200135 GT95015 Connector 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='https://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>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='https://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>GT95014 Digital I/O Single-ended Beakout Adapter Board Product Information - Published on 1/13/2009</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='https://www.geotestinc.com/..\images\support/Q200133 GT95014 picture.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='https://www.geotestinc.com/..\images\support/Q200133 GT95014 Connector 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='https://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>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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;&lt;br /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Development Environment&lt;/strong&gt;&lt;/font&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&gt;&lt;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Run Time Engine&lt;/strong&gt;&lt;/font&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;Test Executive Enhancements &lt;/strong&gt;&lt;/font&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;&lt;br /&gt;See the Test Executive Help for detailed information regarding these new features.&lt;br /&gt; &lt;br /&gt;&lt;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;New Examples/Drivers&lt;/strong&gt;&lt;/font&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;&lt;br /&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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;GTDIO/DIOEasy Version 3.2 Build 42 (December 2008) Change List&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&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='https://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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&gt;&lt;img src='https://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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&gt;&lt;img src='https://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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&gt;&lt;img src='https://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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&gt;&lt;img src='https://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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&gt;&lt;img src='https://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='https://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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='https://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;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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='https://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='https://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='https://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='https://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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;&lt;br /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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;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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&gt;&lt;blockquote&gt;&lt;table width='93%' bgcolor=#999999 border=0 cellpadding=2 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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Bug fixes&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=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='https://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='https://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='https://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='https://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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;&lt;br /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;&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='93%' bgcolor=#999999 border=0 cellpadding=2 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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;&lt;br /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;br /&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>Terminate an ATEasy software license - Published on 2/1/2005</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.&lt;br /&gt;6.&amp;nbsp;&amp;nbsp; Write down the string of characters appearing on the dialog box. You will need this string of characters later.&lt;br /&gt;7.&amp;nbsp;&amp;nbsp; Click OK.&lt;br /&gt;8.&amp;nbsp;&amp;nbsp; Close ATEasy. &lt;br /&gt;9.&amp;nbsp;&amp;nbsp; Log into M@GIC. &lt;br /&gt;10. Post the string of characters you wrote down in Step 6 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/1/2005</pubDate></item><item><title>Installing ATEasy network license - Published on 1/25/2005</title><description>&lt;b&gt;Solution:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&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 since the network license handling in the client and in the server sides were considerably enhanced to provide better performance and automated setup.&lt;br /&gt;&lt;br /&gt;The server application, ALicenseServer.exe, must be installed at the computer that will be the ATEasy license server. The License Server computer must be a 32 bit Windows Operating System (Windows 2K, Windows XP, Vista or Windows Server 2003). 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 (since it always turned on).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;To Setup the License Server:&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;b&gt;Install the License Key in the server&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;With the Computer ID and &lt;b&gt;serial number &lt;/b&gt;printed on your ATEasy CD, create a magic incident using your Geotest account or call Geotest Technical Support at 949-263-2222&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Type in the &lt;b&gt;License String or File&lt;/b&gt;. Click OK. The about dialog should display the # of license installed.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;To Set Up the Client:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Perform this step only after you have obtained and installed the license string or file on the server.&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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 (DomainName/ServerName for example GEOTEST/SERVER1). Click OK.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Installing ATEasy License Server a s a service (applies only to ATEasy build 132 or lower):&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Instructions of how to install the license server are copied to the ATEasy folder when you install the ATEasy license server in the server. The file is called ALicenseServerService.rtf. The following list the file content:&lt;br /&gt;&lt;br /&gt;&lt;table width='93%' bgcolor=#999999 border=0 cellpadding=2 cellspacing=1&gt;&lt;tr&gt;&lt;td valign=top bgcolor=#F5F4EA class=reg12&gt;&lt;br /&gt;This file describes the SRVANY.EXE/INSTSRV.EXE utility. This utility allows running the ATEasy License Server under Windows 2000/XP as a service. The benefits include:&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Allow the license server to survive log off/login sequences, hence saving the overhead of re-starting them for each new 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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Allow the license server to come-up and service requests even when no user is logged-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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Allow the license server to run and perform a task in a specific login account, different from the currently logged-on user &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Installation:&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Open the command window: Select Run... from the Start menu, type cmd and click OK. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Change directory to ATEasy folder:&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;CD c:\program files\ateasy&lt;/font&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Install the service, type:&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;INSTSRV ATEasyLicenseServer c:\progra~1\ateasy\SRVANY.EXE&lt;/font&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Run the Registry Editor (REGEDT32.EXE): Select Run from the Start menu, type regedt32.exe and click OK. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ATEasyLicenseServer: create a 'Parameters' key &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Under the above key, create an 'Application' value of type REG_SZ and specify there the full path of the license server executable (including the extension):&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;Application: REG_SZ: C:\Program Files\ATEasy\ALicenseServer.exe&lt;/font&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Open the windows Services applet from the control panel and configure the ATEasyLIcenseServer as follows: &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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Check the "Allow Service to Interact with Desktop". &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Click Start to start the service.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;The license server icon should be displayed in the task bat next to the system clock. Install the license key as describe above. The sever is now ready for use by ATEasy clients.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Uninstalling the service:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Stop the service. When you stop the service, it will terminate the application it had started. The way to stop the service is (as described above for starting):&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;from the Services applet of the Control Panel&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;or&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;using the SC.EXE utility, e.g.: SC stop MyService&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;or&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;NET STOP MyService&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;WARNING: When the service is stopped, it terminates the application via the WIN32 TerminateProcess() API: this is a drastic way to end an application. For example, it would not allow the application to prompt the user to save changes. Therefore, it is recommended to close the application BEFORE stopping the service.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;De-installation:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If you want to prevent an instance of the SRVANY utility from running until further notice, you should configure it via the Services applet ("Startup..." dialog) of the Control Panel as 'Disabled' (rather than 'manual' or 'automatic').&lt;br /&gt;&lt;br /&gt;If you want to remove an instance of the SRVANY utility permanently:&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;If the service is running, stop it (from the Services applet select Stop &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table width='100%' cellpadding='1' cellspacing='0' border='0' align='center' class='reg12'&gt;&lt;tr valign=top&gt;&lt;td width='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Than, run from the command line:&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;INSTSRV ATEasyLicenseServer remove&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Additional instructions are in the ATEasy help and they describe how to install the licenses in the server:&lt;br /&gt;&lt;/blockquote&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><link>http://www.geotestinc.com/KnowledgeBase/KBArticle.aspx?ID=64</link><pubDate>1/25/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;font size=2 color=21529c face=Arial&gt;&lt;strong&gt;ATEasy 5.0 Main New Features Summary &lt;/strong&gt;&lt;/font&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;Support for 64 bit integers.&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&gt;&lt;/td&gt;&lt;td class='reg12'&gt;New examples &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&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='93%' bgcolor=#999999 border=0 cellpadding=2 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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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='20'&gt;&lt;img src='../images/ico_bullet.gif' alt=&amp;quot; /&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;&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;nb