Ultrasonic imaging system
The invention pertains generally to an ultrasonic imaging system and is more particularly directed to such systems which are used in nondestructive testing of components having internal surfaces without access, or of components for which defects can be determined only by access to an external surface. 
     Nondestructive testing (NDT) relates to that science which can be used to gain information about the integrity of structures by noninvasive techniques. These systems are used in maintenance programs to test parts of an overall system without having to physically disassemble the tested component from its surroundings. NDT is useful in examining welds of metal conduits used in pipelines, power plants, ship building, aircraft and the like, both immediately after construction and as a part of an ongoing maintenance program. Internal tanks for aircraft and submarines are also places where nondestructive testing assists in reducing maintenance costs. The ability to describe the internal structure of a component by means of this noninvasive technique will lend itself to many other uses in the future. 
     Many in the past have used x-rays or other penetrating rays to produce images of welds and the like. The hazards to personnel which are produced by the powerful radiation sources needed to penetrate significant depths in most metals and other materials make these systems expensive. Because of the danger posed by the emitting material, extensive safety precautions are taken, such as elaborate protective gear worn by the testing personnel. Further, the test areas must be cleared of other workers and cumbersome shielding provided in relatively confined working areas. These conditions lead not only to considerable expense to the equipment needed to accomplish the test, but also for the delay of other work which must stop around the testing area. Additional costs are incurred for the regulations and records which are required for all personnel in and around the testing area. This record keeping is burdensome and, although unrelated to the condition of the components under test, must still be constantly updated, monitored, and audited. 
     The nondestructive testing art has now developed ultrasonic testing apparatus which overcome many of the objections to conventional x-ray testing. These systems use an ultrasonic transducer to generate a pulse of ultrasonic energy to perform a test. As the energy propagates through a test component, discontinuities in the part including walls and defects reflect various amounts of the ultrasonic energy depending upon their shape, size, orientation and location. The imaging system detects these reflections or &#34;echoes&#34; and can, by calculating the elapsed time from the test pulse and the amplitude of the reflection, reconstruct the internal structure for the tested component. In general, the elapsed time from the generation of an ultrasonic energy pulse to the detection of a reflection determines the distance from a reference where a defect or discontinuity is located. The amplitude of the reflection of such energy is related to the shape, orientation, and physical size of the discontinuity. 
     These systems are inherently safer than x-ray systems as the acoustic energy is not harmful and thus requires no shielding, special equipment, or record keeping to protect the test personnel. Therefore, work proximate to the testing areas does not have to be delayed while the NDT tests are being made. This saves considerable time in the construction of structures where the integrity of previously assembled components must be insured before further construction proceeds. Further, for maintenance programs considerable time is saved because the structure need not be disassembled and other maintenance around the test area can continue undisturbed. 
     Much of the ultrasonic testing apparatus today is hand-held, where single locations of a test component are pulsed with energy and the reflections read from an oscilloscope display (A-Scan) by sweeping the reflected signals with a time base. The discontinuities of a structure are then displayed as the larger amplitude echoes displaced in time from the original pulse. By dividing the distance (time) between an echo and the original pulse by the velocity constant (speed of sound) in the tested material, a rough estimate of the depth of a defect can be determined. Data about a particular component for later interpretation, if recorded at all, is taken by hand location by location. Thus, an accurate and easily interpreted reconstruction of the entire internal structure of a component is difficult. 
     Others in the art have used pseudo three-dimensional displays (C-Scan) to display an area of a component under test. A scanner is automated to take a number of readings at fixed points of an area and data are recorded and later displayed on a video monitor. The data are represented as either black or white (on-off) elements on the display, depending upon whether the reflection detected was before or after a threshold. Generally, these systems have their transducers coupled through a bath to the tested component and are not portable. 
     Newer ultrasonic imaging systems record imaging information as a function of two parameters related to each test point. The first parameter is a depth indication showing the distance from the frontal surface to a discontinuity and the second parameter is an amplitude indication related to the size, orientation, and physical structure of the discontinuity. By assembling data from a large number of these points, an image of the internal structure of a component can be generated. The recorded data may be displayed after it has been stored such as on magnetic tape, in a memory, etc. Modern displays or ultrasonic imaging data are on strip chart reorders, visual monitors, such as cathode ray tubes, or on-off displays. The images are generated by playing back a large amount of the stored data as representative parameters of the components. 
     However, this lack of being able to analyze the data at the test site, because of the delay in displaying the information as a range of depths, often causes mistakes and uncertainty in the interpretation of an image. Personnel at a test site will scan a chosen area on a component and not know until the information is later displayed whether the area is of interest. They usually have only a one dimensional display for a single point in the form of an oscilloscope display (A-Scan) for a real-time display. However, this type of display is difficult to interpret broadly and extrapolate to the area under consideration. 
     This causes problems in at least two areas, as, initially, it is not known whether the area should have been studied at all, and, secondly, it is not known whether certain portions of the area should have been studied more closely. If there are no defects recorded when the information is displayed, then the time spent scanning a large area surrounding a test site has been wasted. However, if a small area is tested and defects appear when the data is displayed, then additional tests must be done over a larger area to determine the extent of the problem found. Further, retesting of the defects may have to be accomplished at a higher resolution. Upon rescanning, it is difficult to obtain the same calibration over the same area because of resolution differences, area differences, etc. A mismatch in calibration can cause interpretational variances between a first scan and those following such that successive scans of an area may be inconclusive. Further, it is difficult to correlate different images into an overall picture if taken at different resolutions and calibrations. 
     What is necessary is a real-time display of the information in an easily interpreted form. This would allow testing personnel on site to determine those areas which must be recorded for further visual interpretation or safety assurance recordation. A large area could be scanned rapidly at low resolutions and areas of interest marked for closer inspection at higher resolutions, thereby saving significant amounts of inspection time. Real-time display of an area would also allow the correct indication sizing and resolution of the area scanned to produce data at the same levels and calibration as other scans. When a test person has finally decided that a real-time image is a correct qualitative picture of what the internal structure of a component actually is, then a permanent recording can be made. The amount of data that are finally transformed into a permanent record would be drastically reduced but be of considerably better quality. 
     The necessity for an easily interpreted display is paramount. The actual electrical signals detected from the reflected ultrasonic energy with a particular amplitude and a particular delay, if shown without further processing, are relatively incomprehensible to test personnel. These are the A-Scan signals and are generally used only in mutual calibrations or the most cursory of inspections. Individually, data points mean little and it is only when a large number of data points are integrated into an image representative of the internal structure of the component that they are relatively useful. 
     One of the best ways to provide comprehensibility to an integrated display of data is to provide contrast levels between test points or pixels with different physical characteristics. These contrast levels, which can be either a gray scale or a color scale, are interpreted easily as differences in physical features. When a physical feature (depth, amplitude) of a defect in a component changes and the gray level or color level of a particular scan element varies correspondingly, a person interpreting the data can correlate all such changes over a large display by integrating the same contrast level by eye into a visual image of a physical feature (defect). 
     Another problem experienced with ultrasonic imaging is the coupling of ultrasonic energy to the test piece. Because air is a poor coupling medium, conventional systems has used a liquid bath of either oil, water, or similar liquids to couple the energy. The bath or liquid column is interposed between the ultrasonic transducer and the tested component to couple the energy in an efficient manner. This type of apparatus unduly encumbers the scanning portion of the system and increases the setup and testing time because of the complex structure needed for moving the transducer through the bath. Further, a bath-type scanning apparatus cannot be operated with facility in confined areas where compactness is at a premium, and the apparatus is not portable. 
     Direct contact systems are more efficient but exhibit problems in maintaining the transducer in a tightly coupled relationship with the component surface. This is particularly a problem when the surface is uneven and the scanning transducer may be tilted at an angle or actually bumped off the tested component by a surface imperfection during the scan. When a decoupling of the transducer from the component surface in a contact ultrasonic imaging apparatus occurs, the data taken during the lapse in coupling are not usable and must be discarded. However, there is no easy method of deciding which data of a scan is incorrect because of a decoupling. Therefore, a contact scanner apparatus must be provided with a means for maintaining a tight coupling of the transducer to an uneven surface so as to insure the integrity of the data. 
     SUMMARY OF THE INVENTION 
     The invention provides an improved ultrasonic imaging system which is facile in use because of an easily interpreted display and means for varying the actual size of the imaged area. The apparatus provides the display as a real-time image in which contrast is provided for the pixels forming the image as either a gray scale or a color scale. 
     In addition, the invention provides a user friendly interface by which test personnel can select a number of automatic operational modes for the apparatus. Importantly, one of the automatic modes which can be selected is a calibration mode where the acoustic delay of the configuration coupling the transducer to the test component is compensated for. The coupling delay in ultrasonic imaging systems is a combination of an electrical delay and a mechanical delay. The electrical delay is caused by the circuitry and cable connecting the pulse generator to the transducer. The mechanical delay is caused by the physical material between the transducer and the tested component. This delay can be due to a coupling block, an angular orientation of the transducer to the test surface, a bath coupling, or the clearance between the tested surface and the transducer. The calibration mode compensates for all such delays by a method which accurately determines the sum of all coupling delays. 
     Another feature which can be selected during the calibration mode permits the translation of the scan area into larger or smaller sizes and provides a true proportional size for a radial mounting geometry of the scanner. This feature is an aid in interpreting the images, as higher or lower resolution images are available upon command. The proportioning of the scan area for different geometries removes any distortion in the image caused by nonplanar surfaces on the test component. 
     The ultrasonic imaging system is implemented by a scanner which includes means to carry a transducer in proximity to a tested component while maintaining a constant coupling, an ultrasonic circuit which produces energy pulses for driving the transducer and which encodes reflected echoes detected by the transducer, a microprocessor based system control for controlling the operations of the ultrasonic circuit to produce image data and for controlling the display of the image data when it is received, and a video monitor for visually displaying image data. 
     In a scanning mode, the system control requests that the ultrasonic circuit pulse the transducer at particular intervals. The ultrasonic circuit receives an electrical signal from the transducer indicative of the detected energy reflected from the workpiece and encodes this information into a depth data word and an amplitude data word for transmission to the system control. At the same time, the system control is tracking the position of the transducer with two position encoder circuits such that the amplitude data and depth data correspond to a particular coordinate position on the surface of the tested component. 
     The system control contains a large random access memory, part of which is partitioned into a scan memory having an area of the amplitude data as a function of the position of the scanner and an area for depth data as a function of the position of the scanner. Incoming data words are stored in these respective locations in real time when data is received from the ultrasonic circuit producing an array or image of the scan area which builds as the area is scanned. A depth image is constructed in the first area and an amplitude image is constructed in the second area of the memory. 
     A real-time contrast display of the stored data is provided by the system control communicating image values from the scan memory, as they are received, to a video memory of a graphics controller. The graphics controller regulates an image display on a video monitor from pixel information stored in the video memory. Each data word which is stored in the scan memory is correspondingly transferred to a location in the video memory after a processing step by the system control. The processing step converts the absolute data value into a representation of a gray level or a color level. The translation is accomplished by the system control through a programmable lookup table which stores values for gray levels or color levels used by the video memory as a function of the data. By addressing the lookup table with the data value, the gray level or color value contained in the location addressed is the desired level of contrast. This contrast information is then transferred to the pixel location in the video memory corresponding to the element position location in the scan memory. 
     Therefore, as data is collected by the scanner, it is immediately displayed as a contrast image on the video monitor. The provision of a scan memory, a video memory, a lookup table, and a graphics controller permits the rapid translation of the datected data into a real-time contrast display point-by-point. 
     The lookup table which performs the transformation of data information into contrast levels adds flexibility to the system whereby during a setup mode, test personnel can program the table. In the illustrated embodiment, four or eight levels of contrast are provided as choices. In addition, the test personnel may choose the depth range over which the levels correspond and therefore the step size required to produce a contrast change. A choice is also provided for displaying the contrast levels as either gray levels or color levels. Another option permits the assignment of a palette of hues for the different levels. Consequently, test personnel can make an image much easier to interpret visually, by highlighting particular data or excluding other data using different levels of contrast or different colors. 
     Further, different representations of the imaged area can be displayed because the image is being determined in real time. If the image being formed on the display in real time is not providing the information desired or is providing hard to interpret information, the system can be placed back in the setup mode and a more optimum translation table formed. The test component can then be reimaged and the different representation observed to see if it conveys information in the form desired. 
     According to another feature of the invention, the position encoder circuits for the scanner are programmable to provide a variable area corresponding to the scan element array. The feature provides a method for easily varying the resolution of the system by changing the actual area which each element in the scan array represents. The position encoder circuit includes a counter which records pulses from an encoder representing fixed increments of actual scanner movement. The encoder circuit is under the control of a microprocessor which is adapted to receive commands from the central processing unit of the system control. The microprocessor can be commanded to read the count from the counter and translate that count into a position from a reference which corresponds to one of the elements of the scan array. The microprocessor accomplishes this task by calculating the number of incremental movements which are contained in an element from a grid size constant input from the central processing unit. During the creation of a header containing the calibration data for the system, this grid size constant can be programmed for the position encoder to change the actual area represented by the scan element array. The grid size constant is then used for a scan mode when the position encoders transfer the transducer position as an element location to the central processing unit. 
     In addition to changing the grid size constant of the position encoder circuits because of the desired scan area changes, the system provides a feature for changing this constant because of test component geometry. The scanner is mounted on a flexible track which can be located on a test component with a planar geometry or a radial geometry. The position of the scanner on this track is encoded as one of the position signals. If the movement of the scanner along the track does not equal that of the transducer scanning the surface, the image obtained will be out of proportion. This can occur when the track is mounted on a radius of the test component which is larger or smaller than the radius that the transducer traces over the tested area when the component has a radial geometry. A disproportionality can also exist if the movement of the transducer carrier does not equal the movement of the transducer over the tested area. For each of these situations, the system provides an offset for the position encoder circuit constant to take into account the proportionality between the different movements. This produces a translation of the outputs of the encoders into position data which is representative of the true proportional size for the scan area. 
     The system provides an automatic calibration mode as another feature. This automatic calibration is based upon a test block of a known thickness and of a known material for a velocity constant calibration. The calibration corrects for all coupling delays in combination with the velocity constant calibration. A delay calibration is provided by measuring the difference between twice the time for a first reflection and the time for a second reflection after pulsing the calibration block. 
     For the velocity constant calibration, the transducer pulses the test block and the resultant data for the echo is stored. A measured velocity constant is calculated as the ratio of the thickness measured to the actual thickness multiplied by a nominal velocity constant. That measured velocity constant is then used to calculate the thickness. A comparison is made between the calculated thickness value and the actual thickness of the test block value by the system. The calculated velocity constant is then increased or decreased until the actual thickness agrees with the calculated thickness within a small error value. 
    
    
     These and other objects, features and aspects of the invention will be readily apparent and more fully described upon reading the following detailed description in conjunction with the appended drawings wherein: 
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIG. 1 is a system block diagram of an ultrasonic imaging apparatus constructed in accordance with the invention; 
     FIGS. 1A, B, and C are representative pictorial views of the switch settings and controls for the thickness gate, the pulser, and the receiver illustrated in FIG. 1; 
     FIG. 2 is a pictorial representation of the front face of the terminal of the system illustrated in FIG. 1; 
     FIG. 3 is a pictorial representation of the commands which can be given to the ultrasonic imaging system in a display mode by the terminal illustrated in FIG. 2; 
     FIG. 4 is a detailed block diagram of the memory of the system illustrated in FIG. 1; 
     FIG. 5 is a detailed block diagram of the graphics controller of the system illustrated in FIG. 1; 
     FIG. 6 is a detailed block diagram of the Central Processing Unit of the system illustrated in FIG. 1; 
     FIGS. 7A and 7B are a detailed electrical schematic diagram of the interface circuit for the system illustrated in FIG. 1; 
     FIG. 7C is a detailed electrical schematic diagram of a position decoder circuit implementing the x and y position decoder circuits of the interface circuit illustrated in FIG. 7; 
     FIG. 7D is a pictorial representation in tabular form of the address selection sequence for the interface circuit illustrated in FIG. 7; 
     FIG. 8 is an isometric view of the scanner of the system illustrated in FIG. 1 as mounted on a test component of radial geometry; 
     FIG. 9 is an exploded assembly view of the transducer carrying means for the scanner illustrated in FIG. 8; 
     FIG. 10 is a cross-sectional view of the transducer mounting assembly for the carrying means illustrated in FIG. 9; 
     FIG. 11 is a bottom view of the transducer sled of the mounting assembly illustrated in FIG. 10; 
     FIG. 12 is an operational flow diagram illustrating the functional modes of the system illustrated in FIG. 1 as selected from a menu program; 
     FIG. 13 is a system flowchart for the subroutine CALBRT called as option 5 from the menu illustrated in FIG. 12; 
     FIG. 13A is a pictorial representation in tabular form of the data which is stored in the header of a scan record for the system illustrated in FIG. 1; 
     FIG. 13B is a pictorial representation of the calibration byte CALTYP which is used to determine the type of calibration the system has recorded; 
     FIGS. 14-1, 14-2, and 14-3 are a system flowchart for the subroutine SCAN called as option 6 from the menu illustrated in FIG. 12; 
     FIG. 14A is a pictorial representation of the contrast levels for black and white or color video displays; 
     FIG. 14B is a pictorial representation of the division of scan memory into depth and amplitude data areas; 
     FIG. 14C is a functional flowchart of the operations performed for a real-time display of scan memory data; 
     FIG. 14D is a pictorial representation of a sequence of representative pixels displayed to the operator during three successive time periods; 
     FIG. 15 is a system flowchart for the subroutine SETUP called as option 8 from the menu illustrated in FIG. 12; 
     FIGS. 16-1 and 16-2 are a system flowchart for the subroutine CALSCN which is called from the subroutine CALBRT illustrated in FIG. 13; 
     FIGS. 16A and 16B are pictorial representations of the variations in scan element size produced by the subroutine CALSCN illustrated in FIG. 16; 
     FIG. 17 is a system flowchart of the subroutine FRONCL called from the subroutine CALBRT illustrated in FIG. 13; 
     FIGS. 18-1, 18-2, 18-3, 18-4, and 18-5 are a system flowchart for the subroutine THIKLCL which is called from the subroutine CALBRT illustrated in FIG. 13; 
     FIGS. 18A and 18B are pictorial representations of the waveforms and calculations used for the delay and velocity constant calibrations performed by the subroutine THIKCL illustrated in FIG. 18; 
     FIG. 19 is a system flowchart of the subroutine SCOLOR which is called from the subroutine SETUP illustrated in FIG. 15; and 
     FIG. 20 is a system flowchart of the subroutine PULSE called as option 4 from the menu illustrated in FIG. 12. 
    
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS 
     In FIG. 1 there is illustrated a system block diagram for an ultrasonic imaging apparatus which is constructed in accordance with the invention. The imaging apparatus is a microprocessor-controlled imaging system with a central processing unit (CPU) 10 having an on-board disk controller. The disk controller communicates with and controls a dual disk drive which includes a program disk drive 16 and a data disk drive 18. The suitable disk drive for implementing drives 16, 18 is a standard 51/4&#34; floppy disk drive made by the Micropolis Corporation of California. 
     A program disk can be loaded into the drive 16 and the software contained herein is used to control the system by executing a system program with the CPU 10. A data disk can be loaded into the drive 18 and is used to store image data from the system or to provide stored image data to the system for display. The central processing unit communicates with an operator terminal 14 via one of its serial data ports. The terminal 14 allows an operator to communicate commands to the CPU 10 for execution and to receive error messages from the system. The CPU 10 accesses and has provision for a large random access memory 22 which includes a 100×200 array of locations for depth data and a 100×200 array of locations for amplitude data. These areas will hereinafter be referred to as the scan memory. The memory 22 is additionally used for other data storage and arrays by the system software. 
     The central processing unit 10 also controls a graphics controller 20 which generates a video output to a video monitor 26. A video output is produced from a video memory which has data stored therein by the CPU 10 under control of the graphics controller 20. The graphics controller 20 has the ability to control either a monochromatic monitor or a color monitor with a video signal. Preferably, in the implementation that will be described, a color monitor 26 is used and the video signal has separate red, gree, and blue color signals for coupling to the separate color guns of the video monitor 26. The video monitor 26 is used to display prompts from the system software, real time color images of data during a scan process, and analysis images from stored data. 
     The central processing unit 10 communicates with peripheral devices including a scanner 40 and an ultrasonic circuit 39-1 through an interface circuit 24. 
     The central processing unit 10, the graphics controller 20, the memory 22, and the interface circuit 24, form a system control 23. All have communications paths between other elements of the system control 23 via a multibus 44 such as that defined by the Intel Corp. of Santa Clara, Calif. The multibus 44 provides a data path, an address path and a control signal path between the separate functions. The ultrasonic circuit 39-1 under control of the CPU 10 is adapted to pulse a transducer 42 and convert the echoes therefrom into digital data words representative of the depth and amplitude of a reading. The scanner 40 is under operator control and can be moved to position the transducer 42 at a desired location on a test component. 
     The ultrasonic circuit 39-1 includes a pulser 32, a receiver 34, and a gate 30. The circuit 39 converts analog ultrasonic signals into digital signals rapidly for accurate data recording and passes them to the central processing unit 10 via an ultrasonic bus 46. The pulser 32 provides a pulse voltage with a variable pulse width at a predetermined rate to the transducer 42 which converts the electrical pulses into acoustical energy. The receiver 34 detects reflected acoustical pulse energy from a test component and converts the energy into an electrical signal for processing by the gate 30. The gate 30 sets a window or area within the component under inspection from which reflected acoustical energy will be accepted and recorded. It also provides a threshold which the acoustical energy must exceed before it is recorded. 
     The gate 30 further produces an external sync signal EXT SYNC and an electrical signal RFL representative of the reflected acoustic energy detected by the receiver 34. The RFL signal is the analog signal which is converted to the two digital words for transfer to the system control 23. These signals, RFL and EXT SYNC, are additionally used to drive an A-Scan display 28 which is implemented on an 80 MHz oscilloscope. The display 28 is provided such that the system may be used in a manual mode similar to a hand held ultrasonic test apparatus. The A-Scan is a display of the amplitude of the reflected signal RFL on a time axis referenced to the EXT SYNC signal which is generally the pulser output or some set delay thereafter. 
     The pulser 32 and receiver 34 can be connected either in a pitch/catch or pulse/echo mode of operation. In the pulse/echo mode of operation, the pulser transmits an electrical pulse via the cable 48 and receives a reflected echo with the same transducer and cable. The reflected electrical energy is passed to the receiver 34 by transmit out (TXOUT) and transmit in (TXIN) terminals in the receiver 34. A cable 50 connects the pulser 32 to the receiver 34 such that the reflected energy can be processed by the receiver, sent to the thickness gate and thereafter sent onto the central processing unit 10. In the pitch/catch mode, the reflected ultrasonic energy is converted by a second transducer which transmits on cable 52 to the receiver. In either of these modes the control is the same wherein the central processing unit commands the ultrasonic circuitry to produce a pulse and then receives the data in digital form via the ultrasonic bus 46 and the interface circuit 24 which is representative of the measured parameters. For every pulse a digital 12-bit word describing the depth of the reflection and a digital 8-bit word describing the amplitude of the reflection is received by the CPU 10. 
     The mechanical scanner apparatus 40 supplies position data to the CPU 10 via the interface board 24 and a pair of encoders 36 and 38. The scanner 40 includes a carriage assembly 41-1 that positions the transducer 42 along a track axis and an arm axis to produce a coordinate position (x, y) for the transducer related to its position on the scan area. A track encoder 36 is used to determine the track position P t  and an arm encoder 38 is used to determine the arm position P a . The encoders 36, 38 transfer their position data via a set of square waves in quadrature which can be decoded by the interface board 24 and transformed into digital position data to be later used by the CPU 10. 
     In FIGS. 1A, 1B, and 1C there is illustrated the switch settings and controls for the thickness gate 30, the pulser 32 and the receiver 34. In FIG. 1A, the thickness gate 30 has three thumbwheel switches 35, 37, and 39 from which the operator can adjust the gate delay, the gate width and the scope trigger delay, respectively. The gate delay thumbwheel switch 35 adjusts the time interval between the firing of the main pulser energy and the leading edge of the gate in the thickness measurement. The gate width thumbwheel 37 controls the width of the gate, providing a time interval in which to detect the reflected pulse under consideration from the test component. The scope trigger delay 39 varies the start of the sweep signal EXT SYNC for the number of microseconds dialed in the thumbwheels after the trigger pulse. 
     The thickness gate 30, as shown in FIG. 1A, has an initial pulse/gate switch 41 which, depending upon its position, triggers the A-Scan sweep on the main pulse or the beginning of the gate pulse. A range and resolution switch 43 is also provided to select the maximum depth of inspection for the system. The range is equivalent to the sound travel in metals from thicknesses of 0.5 to 50 inches. Setting the range in this manner determines the viewing resolution and the dimension covered by the ultrasonic energy within the material per bit of information storage. Therefore the setting of the resolution simultaneously sets the range (maximum thickness) that can be inspected in a part. 
     Viewing FIG. 1B it is seen that the pulser 32 has a number of controls which vary the parameters of the pulse transmitted to the transducer. First is a damping control 45 which can be used to adjust a damping resistance in parallel with the pulse output. This provides a step adjustment to the output pulse width. Also, a pulse amplitude control 47 can be used to adjust the output pulse amplitude. In addition to the damping control 45, the pulser 32 includes a low-high pulse width switch 49. In the high position the pulse width (and the pulse energy) is approximately triple that obtained in the low position. This switch 49 is used in conjunction with the damping control 45 to provide a wide range of output pulse widths. 
     The controls for the receiver 34 are better seen in FIG. 1C. The receiver controls include a function switch 51 which selects either the pulse/echo mode or the pitch/catch mode. A push button 53 is used to select either RF or demodulated video for transmission to the thickness gate 30. Additionally, a filter switch 55 is used to select the lower 3 dB frequency of the receiver band pass. Frequency ranges of 1-4 MHz, 2-8 MHz, and 4-6 MHz and broad band (BB) are available. Finally, seven pushbutton switches 57 are used for attenuation of the receiver input. These seven pushbutton switches allow attenuation of the input signal in one dB steps to 62 dB total. An ultrasonic circuit 39 similar to that described is available from the Metrotele Corp. of Richland, Wash. 
     The terminal unit 14, more fully illustrated in FIG. 2, is a hand held unit which is a miniature terminal enabling bidirectional serial communications with the ultrasonic imaging apparatus via a serial data port of the CPU 10. Input data is generated by 20 alphanumeric keys on a keypad 60 and three shift keys 62, 64 and 66 located on the side of the terminal unit. The shift keys are used to select an upper case character set which is input from the keypad 60. Generally, shift key 62 picks the left character of the upper case of a key, shift key 64 picks the middle character, and shift key 66 picks the right character. Normally, the system operates from the lower case font and produces ASCII coded characters therefrom. 
     In FIG. 3 the keys 60 of terminal 14 have been translated into special commands for the system in a display mode. A shift to first and second logic levels produces specialized commands in that mode which can be used to expand the display (ZOOM), provide a (B-Scan) two-dimensional display (SLICE), and to move a cursor. On the second logic level, a read logic level, a zoom logic level, and a slice logic level are available. An LED display 68 may be used to display diagnostic messages from the CPU 10 via the serial data port. A terminal which includes the functions illustrated in FIGS. 2 and 3 is a model HT/10 commercially available from the Termiflex Corporation of Nashua, NH. 
     The memory 22, as more fully detailed in FIG. 4, is preferably a random access semiconductor memory using 64k dynamic RAMS with parity error detection. The memory 22 contains a memory array 33, address manipulation circuitry 25, refresh logic 27, data control, timing control, and error detection circuitry 29, and an interface 31 for system I/O. The particular memory used provides 512k bytes of storage and is connected to the multibus 44 by the address lines illustrated. The memory described is a single board memory, which connects directly to a multibus, having a model number PSM512P manufactured by the Plessey Micro Systems Corporation of Hungerford Drive, Rockville, Md., and more thoroughly described in the technical publication &#34;PSM512P Multibus Parity DRAM User Guide&#34;, the disclosure of which is hereby incorporated by reference. 
     The graphics controller 20 is more fully detailed by the block diagram in FIG. 5. The graphics controller 20 is a master/slave multibus-compatible intelligent video controller which receives the data to be displayed on the video monitor 26 through a multibus interface 114. The controller 20 under control of the CPU 10, through commands transferred over the multibus 44, develops and generates the video signal to the monitor 26 from a video outputbuffer 124 as a sync signal and red, green and blue color signals which can be used to drive the separate color guns of the video monitor 26. 
     The graphics controller 20 is a device having a central processing unit 100 and a 4k EPROM 106 for graphic programming. In this manner the controller 20 may operate under the program control of the CPU 100 while the CPU 10 of the ultrasonic imaging apparatus is busy with other tasks. A 2k RAM 108 is provided for temporary storage and calculations while running the central program for the device from the EPROM 106. Additionally, a direct memory access device 102 can be used to request data from any of the onboard memory which is connected to the multibus 44. The direct memory access device 102 can bring data into the graphics controller without interrupting the program cycle of the central processing unit 100. A first-in first-out memory buffer 110 offers fast multibus access for the device and is used to buffer commands and data from the central processing unit 10. 
     The video portion of the graphics controller 20 includes a video display controller 116 embodied as an NEC uPD7220 graphics display controller. In addition to executing the tasks of scanning and refreshing a video memory 118 of 512k bytes, the graphics display controller 116 also has a sophisticated instruction set for hardware figure and character drawing capability. The graphics display controller is under control of the central processing unit 100 via the common bus. 
     The video memory is configured as four 640×1638 bit planes giving four bits per pixel of information. However, in the present configuration only 640×481 pixels are viewable at any one time. Video memory is addressed as 256k of 16 bit words of continuous memory organized as four blocks of 64k words per plane. A color lookup table 120 translates the four bits/pixel of information from the video memory into 12 bits/pixel, 4 bits for each of the three color guns (red, green and blue) of the video monitor. This means that 16 colors from a palette of 4,096 colors can be displayed at any one time. Colors then may be changed by either writing different values into video memory or by changing the values in the color lookup table 120. Output from the color lookup table 120 is changed from a digital from to an analog form by D/A converters 122 before being buffered onto the output lines by video output buffers 124. 
     A graphics controller 20 suitable for such purposes and containing the above-referenced functions is an MLZ/VDC color graphic controller made by the HEURIKON Corporation of 3201 Latham Drive, Madison, Wisc. This graphics controller is more fully described in the &#34;Heurikon Video Display Controller User Manual&#34;, the disclosure of which is hereby incorporated by reference. 
     The CPU 10 is more fully detailed in the block diagram shown in FIG. 6. The CPU 10 of the system is implemented as a single board microcomputer which includes a microprocessor 130 which is synchronized by the timing of a 4 MHz clock 132. The microprocessor accesses 64 k bytes of RAM 138 and 4k bytes of EPROM 140 via a common bus 141 and a memory mapping RAM 142. Parity and write protect logic 135 assures valid data and prevents overwriting in certain protected areas of the RAM 138. The microprocessor 130 controls a serial I/O controller 146 with a dual baud rate generator 150 and thereby controls the input and output of serial data through an RS 232 serial port 148. The serial port B is coupled to the terminal 14 for the operator interface described above. Also included for data control and transfer to the two disc drives 16, and 18 is a double density floppy disc interface (FDIO) 134 which uses data separation logic 142 and write precomposition logic 144 for reading and writing, respectively. 
     The microprocessor 130 communicates to the other elements of the ultrasonic imaging apparatus through a master/slave bidirecional bus interface 154. The bus interface 154 also includes a bus mapping RAM which provides priority and interrupt capability for the single board computer. The bus interface 154 allows the internal bus 141 to interface directly with the multibus 44. The bus interface 154 controls 8 bits of data, a 20 bit address space, 8 interrupt lines, and 5 control lines for input/output and memory access. 
     The single board computer is preferably a model MLZ-91A microcomputer which is commercially available from the Heurikon Corporation of the address listed above. The single board computer is more fully described in the &#34;MLZ-91A User Manual&#34; published by the manufacturer which disclosure is incorporated by reference herein. 
     The CPU 10 is equipped with a monitor program which is stored in the EPROM 140 to provide a boot for an operating system from one of the disk drives. In the present embodiment a common disk operating system such as CP/M available from the Digital Research Corporation is loaded from the program disk drive 16 into the RAM 138. The operating system CP/M is then used to interface with the other elements of the system software and loads a system software program from the program disk drive 16 which runs the CPU 10 as an ultrasonic imaging apparatus. The ultrasonic imaging program is a menu driven program which allows the user to enter commands and communicate with the system via the video monitor 26 and the terminal 14. By means of program prompts on the video monitor and the menu choices, the operator controls various modes in the system as will be more fully described hereinafter. 
     The interface circuit 24 will now be more fully explained with respect to FIGS. 7A and 7B. The interface circuit has provisions for connecting to the multibus 44 through address lines ADR0-ADR7, data lines DAT0-DAT7, and various control lines. The control lines used for the interface 24 include a memory read signal MRDC, a memory write signal MWTC, a reset signal INIT, an input/output write signal IOWC, an input/output read signal IORC, and a bus clock signal BCLK. Further, the interface circuit 24 generates signals to the multibus 44 as an interrupt signal INT1 and a bus acknowledge signal XACK. From these inputs the interface circuit 24 develops control and data signals for interfacing with the scanner encoders 36, 38, the ultrasonic bus 46, and a real time clock chip 332. 
     Each of the input signals, except the MRDC and MWTC signals, are buffered by bus buffers 346 before being input to various decoding circuits. Memory signals MRDC and MWTC are buffered by a NAND gate 358. The interface circuit 24 is enabled by decoding address lines ADR4-ADR7 in a decoder 344 which matches the logic levels on those address lines (inputs A0-A3) with a set of logic levels jumpered to its opposite inputs (B0-B3). In the implementation shown the interface circuit address is hexadecimal 40 to 4F. A successful comparison generates a signal to AND gate 345 and inverter 347 to provide an interface enable signal. The AND gate 345 further has an enabling signal which is either the input/output read or write signals, IOWC, IORC via AND gate 343. 
     The interface enable signal from the inverter 347 provides the enablement for devices 300, 306 and 312. The device 300 is a decoder which decodes the address lines ADR0-ADR2 into outputs 1YO-1Y3, 2Y0-2Y3 when address line ADR3 is in a low state. The enabling signal for the decoder device 300 is the output of NAND 340 which combines the address line signal ADR3 with the interface enable signal from the output of inverter 347. 
     In a similar manner, NAND gate 310 combines the address line ADR3 and the interface circuit enable signal into an enabling signal for another decoder device 306. The address line ADR3 is not inverted for this decoder and, therefore, the states of the address line are used to select between the two sets of functions. The decoder 306 decodes the address lines ADR1, ADR2 into outputs 1Y0-1Y3. The address inputs which decode into the interface circuit function selections of the decoders 300, 306 are more fully set forth in the table of FIG. 7D where the selection address is in two digits of hexadecimal representation. The interface enable signal also is provided to the CLR input of a shift register 312 which provides a generation of two internal clock signals from the bus clock signal BCLK received at its CLK input. 
     The control of the ultrasonics bus 46 now will be more throroughly described with reference to devices 362 and 364. Device 364 is a programmable peripheral interface (PPI) device which has three bidirectional channels of 8 bits each. The first channel A is labeled PA0-PA7, the second channel B is labeled PB0-PB7, and the third channel C is labeled PC0-PC7. The PPI device 364 latches bytes of data from the data bus lines D0-D7 onto one of the corresponding channels depending upon the bit combination input to its address selection inputs A, B. Further, the PPI device 364 can input data from any of the three channels in byte format and transfer that data to the data bus according to the address selection provided by address lines A0-A1. The device 364 determines whether data bytes are to be written onto the channels or onto the data bus depending upon whether a read operation or a write operation is selected via its inputs labeled WR and RD. For a low-level signal on the WR input, a byte from the data bus is latched and written onto the selected channel. For a low-level signal value on the RD input, a byte is latched from the selected channel and written onto the data bus. The device 364 also includes a reset input RST which allows the device to be cleared and set to an input mode and a chip select input *CS which enables and disables the operation of the device. The ultasonic bus interface also includes a buffer 362, which through its data inputs D0-D7, can transfer data from the ultrasonic circuit to the ultrasonic bus 46 when enabled by inputs labeled *G1, *G2. A flip-flop 325 provides a *RST signal for resetting the device 362. 
     The channels A, B, C of the PPI device 364 provide three functions. Channel A, through a buffer 366, provides commands for determining a function to be executed by the ultasonic circuit 39. Channel B is used as a write port for receiving data from the CPU 10 and channel C is used as a read port for data which is to be sent to the CPU. Further, status words from lines S0-S4 can be input on the data bus to the CPU 10 via devices 362 and 364. 
     Therefore, to write data to the address port of the ultrasonic circuit 39, the CPU 10 writes a selection command to port address 48 of the interface circuit 24. The operation enables the output of AND gate 308 to select the PPI device 364 and channel A. Along with the command on the address bus, the processor will generate the command IOWC which through buffer device 326 enables the WR input of the device 364. The IOWC signal further enables a monostable device 348 and the D flip flop 352 to acknowledge data via buffer 356 with the bus acknowledging signal XACK. Data on the data but D0-D7 is then channeled to the device 366 for input to the ultrasonic circuit. The PPI device 364 enables similarly by the output of gate 308 during access to hexadecimal address 49 which causes data on the bus to be written into channel B for input to the write port of the ultrasonic circuit 39-1. 
     Data can be read from the utrasonic circuit 39-1 through the PPI device 364 by enabling the device 364 with a read port access which is hexadecimal address 4A and applying an input/output read signal IORC to the bus. The read signal via the buffered device 326 enables the read operation of the device 364 and applies data from channel C to the data bus. A mode control signal (hexadecimal 4B) transmitted from the output of the gate 308 enables the device 364 to be able to receive mode data to set up the device for a particular operation in combination with the signal IOWR. 
     For testing a status input from the ultrasonic circuit 39-1, the central processing unit 10 generates an IORC signal which enables the *G2 input of the buffer 362. The *G2 input is enabled, via the device 326, in the same manner as previously described for the PPI device 364. The status input request is then generated through the address bus as either hexadecimal 4C or 4D which enables the Y2 output of the multiplexer 306 and thereby the *G1 input of the buffer 362. When both the *G1 and *G2 inputs of the buffer 362 are enabled, the data on status line S0-S3 are applied to the data bus by the device. 
     The second set of devices that the interface circuit controls are two position encoder circuits 384, 386 which receive the quadrature signals X, X, Y, Y from the scanner encoders 36, 38 and digitize those signals into data which can be input to the central processing unit 10. The hexadecimal address for reading the data from the X position encoder 386 is 44, for reading data from the Y position encoder 384 is 46, for reading the X status is 45, and for reading the Y status is 47. The addresses 44 and 45 select the X position encoder circuit 386 by a low output signal from the AND gate 304 and the position encoder circuit determines whether data, status, or command information is to be written onto or read from the data bus by the logic level of the address line A0. The process is completed by performing an input or output cycle via the signals IOWC and IORC which enables the inputs WR and RD, respectively, of the position encoder circuit 386 via the circuit 326. The position encoder circuit 386 will apply the data that is requested on the data bus for transfer to the central processing unit 10 or read data from the bus. In a similar manner, the Y position encoder circuit 384 is addressed for data, command, or status by the IOWC or IORC signals and the hexadecimal addresses 46 or 47. 
     The last device that is interfaced with the multibus 44 by means of the interface circuit 24 is the real-time clock chip 332. The clock chip 332 can be commanded to perform different operational modes to set a time and date in the chip and then can be commanded when needed by the system software to output the date and time from that initial point. Mode control for the clock chip 332 is entered through the address inputs A0-A4 of the device from the outputs Q0-Q5 of a latch 336. The mode commands for the latch 336 are input to that device from the CPU 10 by applying the commands to the data bus D0-D7. The chip 330 outputs data from the interface data bus to the multibus 44 when the CPU 10 outputs address 40 and an IORC command enables the output of the function decoder 300. The latch 336 outputs data from the interface data bus to the clock chip 332 upon a hexadecimal address 40 and an IOWC enabling signal to AND gate 320 from device 326. Additionally, the higher order outputs Q6-Q7 of the latch 336 can be used to change the polarity of the inputs from the encoders 36, 38 for the position encoder circuits 384, 386. 
     When the mode of the clock chip 332 has been determined, data for the clock chip can either be written into the chip for setting the clock or read from the chip for determining the real time by the software. The CPU 10 accesses the device through the hexadecimal address 42 which enables the input CS via the 2Y3 output of the function decoder 300. During a write cycle, which is started by the signal IOWC and the selection of the chip, data is written into the clock chip 332 through the data input bus and the device inputs D0-D7. Further, when the chip 332 is selected, the signal from output 2Y2 of the decoder 300 clears a D flip-flop 334 which is then set from the RDY output of the device when a byte of data has been accepted. The *Q output of the flip-flop 334 enables the bus acknowledge signal XACK via a tri-state buffer 338. Thus, the chip may accept a number of bytes of data by indicating when it is ready to further process data. 
     On the opposite cycle, the data can be read from the clock chip in a similar manner by addressing the chip with an IORC signal which, assuming that latch 336 has the proper mode word loaded, will cause the device 332 to output data onto the data bus. In a manner similar to the writing mode multiple bytes can be read from the chip via the IORC signal and the bus acknowledge signal XACK indicating that another byte is ready. 
     The detailed circuitry comprising a position encoder circuit, for example, the one shown at 386 for the X coordinate, is better illustrated in FIG. 7C. The circuitry shown in the figure is identical for either the X position encoder circuit 386 or the Y position encoder circuit 384 such that either may be addressed and operated by the interface circuit as previously described. The encoder circuit 386 comprises coincident detecting circuit 382 which determines when the quadrature output, X, X of the encoder 36 is in the correct phase. When the encoder output is correctly phased, an output pulse from the circuit 382 indicates a motion of a certain physical distance along the X axis. These output pulses are fed through an exclusive OR gate 376 to the U/D inputs of an up/down counter 370. The up/down counter 370 records the number of pulses detected as it is clocked by an output from a monostable 378 and thereby contains the distance moved in increments of those pulses from a reference value. The design provides for direction indicating to the U/D inputs of the counter 370 to retain directional polarity along the axis. The sense or direction of the pulses coming from the encoder can be changed by the logic level EXENB which the sofware sets via latch 336 (FIG. 7B). From the clock signal input to the CLK input of a monostable device 380, a pulse is developed to the T1 input of a microprocessor 368. This monostable device 380 provides a pulse which acts as a status signal to indicate to the microprocessor 368 when the counter is being updated. 
     The outputs of the counter are read by the microprocessor 368 through I/O ports comprising pins P10-P17 and P20-P26. The most significant bit of the counter chips 370 is applied to the T0 input of the microprocessor 368 to indicate an overflow condition. One of the I/O ports of the microprocessor represented by output P27 is used to reset the counters to zero and provide a reference position which is determined by the software. 
     The microprocessor 368 is run by a control program which is under the command of the CPU 10 of the imaging system. The commands are input in byte form through the data bus D0-D7 when a memory write cycle is generated and the particular decoder circuit is addressed. The output of the decoder chip indicates the position of the scanner along the particular axis selected with respect to a set reference position. The position and status of the encoder may be read in byte form onto the data bus during a memory read cycle by the CPU 10. 
     The input to the position encoder circuit 386 is a scale factor which informs the program of microprocessor 368 of how many counts of the encoder are contained in a scan element side. Additionally, a command to start a calculation cycle for determining the X, Y coordinate position of the transducer on the scan area can be input. The device 386 provides a status output indicating whether it has finished its calculations, along with two digital bytes indicative of the position calculated. In addition, the position encoder circuit 386 is able to provide a calculation for calibrating the scale factor. A subroutine for the program of microprocessor 368 counts the number of pulses which are received when the scanner is moved a known distance. The routine then calculates a scale factor which is output from the position encoder circuit 386 to change the scale factor for the system. 
     With respect now to FIG. 8 there is shown the detailed disclosure of the scanner for the ultrasonic imaging apparatus. The scanner 40 is illustrated as mounted on the flang 204 of a pipe 200 by means of a flexible track 202 which supports a scanner carriage 212. The carriage 212 can move around the flange periphery by its attachment to the flexible track 202. The flexible track 202 is securely mounted on the flange by wrapping the track around the flat surface of the coupling and securing the belt end of the track in a ratchet mechanism 206. The track 202 can be used to mount the scanner on a radial surface such as that shown, on a flat surface, or on various other types of surfaces. 
     The carriage 212 maintains its position on the track 202 by means of links 228, 222 which slide on pins 231 and have rollers 230 which fit under the lip of the flexible track 202. The rollers 230 are tensioned against the track 202 by means of a biased support bar 225 which crosses the carriage 212 and connects the links on opposite sides of the carriage 212. The bias is supplied by a spring 224 and is adjustable by a set screw 226. 
     A gear internal to the carriage 212 rotates the encoder 16 for the track 202 to provide a position signal indicative of the carriage postion along the axis labeled X in the drawing. The gear is turned by mating it with a flexible chain 210 attached to the track 202. When the carriage moves along the flexible track on the flange 204, a quadrature signal X, X indicative of its incremental movement is output via the terminal lead 205. The quadrature signal is by its frequency (number of pulses) indicative of the actual distance moved and by its phase indicative of the direction. 
     Motion in the Y direction, as seen in FIG. 8, is provided by a moveable carrier means 232 which is supported on two arms 218 and 220. Arm 218 is stationary and connects the carriage 212 with a stationary bar block 236. The carrier 232 slides on the stationary arm 218 by means of a bushing 234 which journals the arm. The carrier means 232 is moved along the stationary arm 218 by a rotating arm 220. The rotating arm 220 is journaled in a bearing 240 in the bar block 236 and is inserted through a threadless lead screw 242 mounted on the carrier means 232. By rotating the drive bar 220, the threadless lead screw 242 moves the carrier means 232 at any position along the stationary arm 218. 
     The drive arm 220 is connected internally by a gear which drives an encoder device 38 indicating the incremental movement of the carrier means 232 on the drive arm 220. The output from this encoder is read by the ultrasonic imaging apparatus via the terminal lead 207 as a quadrature signal Y, Y. The gear (not shown) which turns the drive bar 220 is rotated through the chain linkage of a gear body 216 by a handle 214. The handle 214 has a gear linked to the cain in the gear box 216 and provides a convenient method for producing a fine positioning along the support arm by the carrier means 232. 
     The carrier means 232 mounts a stem 244 which carries an acoustic transducer 258. The stem 244 is vertically adjustable in the carrier means 232 by means of a threaded clamp 246. The stem 244 further mounts a pair of gimbals 248 and 250 in opposition such that two degrees of movement are allowed for a sled 252 which receives the transducer 258. A transducer feed cable 256 provides a conduit for signals going to or from the transducer 258 and terminates at a connection block 254. A coupler picks up the signals from the connection block 254 and via another coupler and a transmission cable 259 carries these signals to the ultrasonic circuit 39. The connection block 254 is used to provide strain relief to the transducer feed cable 256 so that no force is applied to the transducer 258 when the scanner is moved. 
     In operation the transducer 258 may be scanned over a generally rectangular test area 265 to any position X, Y by turning the handle 214 and moving the carriage 212 along the track 202. The position of the transducer 258 is always available to the imaging apparatus from the signals on the encoder signal lines 205 and 207. The transducer 258 may be pulsed in a pulse/echo mode via the transmission cable 259 (a single transducer) or can be used in a pitch/catch mode with dual transducers by using a second cable for the return signal. 
     As will be more fully explained hereinafter, any point on the surface area of the part to be tested can be used as reference or zero. Larger or smaller areas can be encoded for the scanner apparatus by simply lengthening the arms 218 and 220. In the X direction the scanner has almost a 360° carriage and thus large areas of the piping 200 can be scanned at one time. The area 265 which is scanned can be extremely large or extremely small depending upon the area assigned for each point or scan element. In accordance with one of the objects of the invention, the element area may be changed dramatically to provide large area scanning to find an area of defects and then small area scanning to more readily identify the actual configuration and severity of those defects, with the reference or zero point located in the area of interest. 
     Further, the scanner apparatus illustrated in FIG. 8 provides the advantage of contact imaging without a liquid bath or complicated ultrasonic energy coupling apparatus. Generally, the test area 265 is cleaned and a viscous coupling fluid is applied to this surface. The transducer is then lowered by stem 244 into contact with the surfaces and slides along the test area in a tight acoustic coupling with the component. The stem 244, as will be more fully explained hereinafter, is spring loaded and mounts the transducer sled 252 on a set of gimbals to provide two degrees of freedom for sled movement. This produces the effect of having the sled easily transported over uneven surfaces while maintaining firm contact and tight acoustic coupling to the imaged component. Thus, signals from the transducer 258 will not vary because of the transducer becoming decoupled or displaced with the contact area which would cause large coupling differentials to be introduced into the system. 
     The carrier apparatus 232 and its mounting of the stem 244 and sled 252 and more fully illustrated in FIGS. 9, 10 and 11. The stem 244 can be adjusted by loosening the threaded clamp 246 to where the stem slides freely through the clamp. When the stem 244 is positioned such that the transducer 258 makes contact with the test component under a predetermined amount of pressure, the clamp 246 may be screwed into a socket 247 in the carrier means 232 such that its bayonet prongs close around the stem and hold it in this vertical position. 
     A post 266 extends from the end of the stem 244 and is mounted in two linear bearings 270 and 272 which are press-fitted coaxially into a set of steps in the stem 244. The post 266 is spring loaded by means of a spring 268 compressed between the bearing 272 and a flange 269 of the post 266. The post 266 is free to slide in the bearings 270 and 272 in an upward vertical direction by compressing the spring 268 thereby producing a resilient return force on the post. The post 266 is locked into a rotationally set position by means of a screw 274 having a keyway joined to another keyway in the post 266 by a key 276. Upward pressure from the sled 252 is balanced against the spring force from spring 268. 
     The outboard end of post 266 is fixed in an aperture of a first gimbal 248 by means of a set screw 260. A second gimbal 250 is mounted in the first gimbal 248 by means of screws 262. The second gimbal 250 mounts the generally square transducer sled 252 with mounting screws 261. The sled 252 is free to swing on the mounting screws 260 and further is free to swing in gimbal 248. 
     The assembly for the acoustic transducer 258 is generally cylindrical and has a pair of oppositely positioned mounting pins 280. The pins 280 fit through slots 282 in the transducer sled 252 and can be twisted one-quarter turn to fall into recesses 284 to secure the transducer assembly in sled 252. A bias k for the transducer by means of a spring 278 is provided to form a resilient mounting of the transducer 258 in the sled 252. The transducer protrudes slightly from the sled and contacts the surface with a wear plate 286 which is attached to the bottom of the assembly. The wear plate 286 is backed by the actual acoustic transducer 258 which is preferably a disk-shaped piezoelectric device which converts electrical energy into acoustical energy and vice versa. The transducer 258 is coupled to the transmission cable 256 which is potted in the assembly for strain relief. 
     Illustrated on the bottom of the sled 252 in FIG. 11 is a rectangular in cross section channel 288 and a triangular in cross section channel 290. The channels 288 and 290 allow the viscous coupling fluid to surround the wear plate 286 without losing contact with the tested surface. The channel 288 is particularly adapted to be moved along a flat surface while the channel 290 is particularly adapted to be moved along a curved or radical surface. The channels provide for an even flow of the coupling fluid to and around the contact plate 286 such that sufficient acoustic coupling is always maintained. 
     The double resilient mounting of the transducer in conjunction with the freedom of movement provided by the gimbal mounting allows the transducer to step over surface imperfections on a test component and to maintain contact with the component even on curved or uneven surfaces. The mounting permits the transducer to follow the surface contour of the test component with facility along flattest trajectory available to it. A tight acoustic coupling between the transducer and the surface is thereby insured which, as a consequence, insures data integrity from the transducer. 
     A functional flowchart of the system software is illustrated in FIG. 12 where a menu 160 indicates those operations or modes which are available to the testing personnel. The menu 160 is the first item that is displayed on the video monitor after loading the software from the program disk into RAM and initializing the real-time clock. There are nine modes which can be requested from the imaging apparatus including commands to load H/S data, save H/S data, edit header data, pulse the system, calibrate, scan, display, set up, and access utilities. The system block diagram which flows from the menu 160 discloses those functions which can be produced when a particular one of the nine modes illustrated is entered. 
     The load H/S (Header/Scan) data command (mode 1) in block 161 is used to call a subroutine that displays the header and scan data from the disk file. Therefore, choosing this command will produce a display of all the files on the data disk in a table for selection and transfer the data into the scan memory for subsequent system use. The data files from the data disk are displayed on the video monitor in the format of having a project name, a task name, a number for the scan of the file, and the date and time of the scan was completed. By selecting the record number from the table the operator can transfer that file to the scan memory. 
     A full record for the system includes a header having information relating the conditions under which a scan was made, and scan data. The scan data comprises a depth data word and an amplitude data word for every one of the 100×200 scan elements of the scan area. Representative header data is illustrated in FIG. 13A where four groups of data are recorded. Group A, administrative data, records information about a particular scan which is used in building a file for a particular task or project and allows an inspector to record his name and a reference number for the file. That data prefaced with an * is automatically calculated and filled in by the system. 
     Group B data is used to record the scanner setup parameters and defines the scanner operation. The operator enters the physical configuration for the scanner operation which is later transferred to the position encoder circuits and used in calculating actual scanner positin. As in the previous case, those items prefaced by an * are calculated automatically by the system. 
     Group C provides a place in the header for calibration data which records the parameters that were used during the recording of scan data. The nominal velocity constant, the material tested, the maximum and minimum inspection depth, and other data provide an aid in interpreting the information after it has been recorded. 
     The group D header data is for storing the ultrasonic circuit settings. This data is used to completely define the operational condition of the ultrasonic circuit during testing. These settings can be transferred to internal settings of the ultrasonic circuit or values for the actual settings can be loaded into the header from the ultrasonic circuit. 
     The second operational mode, save H/S data, is entered by calling block 162. This mode allows the system to record a file on the disk, and enables header data, or header and scan data, to be transferred from RAM onto the data disk for archiving. A caution message will appear on the video monitor if a scan is not completed or none has been taken when the mode 2 command is selected. 
     The third mode command (Edit Header) is entered in block 163 and causes the monitor to display an edit header menu which provides a selection among the three options: (1) create, (2) modify or (3) display, a header. The creation of a header in block 172 can be accomplished with thickness entries as in block 173, time entries as in block 174, or with the ultrasonic circuit switch settings as in block 175. When the option to modify the header is called in block 176, the header data can be modified by input from the terminal 14 in a text mode as in block 177 or modified by switches from the ultrasonic circuit as in block 178. Alternatively, block 179 can be entered as a selection, which causes the header to be displayed. 
     The command mode 4 is entered in block 164 and operates the system in the pulse mode. This mode allows the apparatus to be used in a manner similar to a hand-held ultrasonic instrument. When this mode is chosen the system will pulse at a preset rate and the result will be displayed on the A-Scan display 28 until requested to exit. By moving the scanner to a desired position and pulsing individual scan element areas the scanner can be used as a manual device in this mode. 
     The calibration mode in block 165 is ordered by selecting command 5 and displays a calibration menu which allows selection among five options for performing a calibration of the apparatus. The choices are a calibration with the present header values in block 182, with the ultrasonic switch settings in block 183, with a delay variable and a velocity constat in block 184, with values from the scanner in block 180, or with values for a radial geometry in block 181. 
     When calibrating with header values in block 182, the present header values are compared with the actual switch settings of the ultrasonic circuit 39. If the settings agree, then the calibration is accomplished automatically. If the settings do not agree with the header values, then the errors or disagreements appear on the video monitor stipulting what the settings should be. A message to correct the ultrasonic circuit settings is displayed on the video monitor along with a request to enter a carriage return when the settings have been corrected. Once the corrections have been made the calibration will again proceed automatically. 
     The option to calibrate from the front panel in block 183 enables an operator to enter the pulse mode and to calibrate the system by physically changing the ultrasonic circuit switch settings to obtain a desired set of calibration parameters. 
     A velocity constant calibration is performed in block 184 by pulsing a calibration reference block of a known thickness. When the transducer is first pulsed a counter is initiated, and when a signal within the preset region of interest exceeds the threshold level, the counted pulses are multiplied by a selected velocity constant entered in memory to provide a result in thickness units. A measured velocity constant is thereafter calculated as the ratio of the actual thickness to the measured thickness multiplied by the selected velocity constant. A calculated thickness is then formed by pulsing the block using the measured velocity constant. A comparison between the calculated thickness and the actual thickness of the reference standard is made by the system. The calculated velocity constant is increased or decreased by iteration until the difference between the measured and actual thickness values is minimized. 
     The scanner calibration in block 180 entails moving the scanner a known distance and entering that distance into memory. As the scanner is being moved, the encoders 36, 38 output pulses proportional to the distance traversed. The system then compares this distance with the encoder pulse count and calculates a scale factor. 
     In the last calibration option, in block 181, a radial offset adjustment is calculated. When the transducer carrying means is mounted on a track or arm with a curved surface, the transducer is scanning a component area with a different diameter than the encoders are indicating. The radial offset calibration must be performed to provide an adjustment to the reading so the display of the scan area is proportional. 
     The sixth command or scan mode in block 167 initiates with selected header items displayed for viewing. An inspector identifier is entered and the scanner is set up at the start of a scan area with the coordinates 0, 0 in the upper left hand corner. The area to be scanned is divided into 100×200 scan elements of between 0.02-0.20 inches on a side. When the scanner is displaced in either of the X or Y directions, the scan elements on the video display illuminae with contrast levels to indicate acceptable received data. If a scan rate greater than approximately six inches/seconds is reached, then the input capacity of the system has been exceeded and the scan lines do not illuminate the raster. When a complete scan has been taken, a D is input on the hand-held terminal indicating that scanning is complete. The scan data with a corresponding header can be saved on the disk file by exiting and then choosing mode 2. 
     In the seventh command mode or the display mode in block 167, a scan data file can be displayed on the video monitor for either depth or amplitude analysis. The amplitude plot displays the scan data in various levels of grey or color to denote amplitude variations in the return signals, thereby enabling calculation of flaw or defect sizes. The depth dislay illustrates the scan data in various levels of grey or color to denote variations in depth to a discontinuity. 
     A cursor is available and can be selected to appear on the display. The locatin (X, Y) and size of the cursor are variable via input from the terminal unit 14. The cursor placement function enables the operator to position the cursor at any location on the display for magnification, a percent thinning calculation of a particular flaw, or the display of the actual depth of a flaw from the front surface. The cursor size (X and Y) can be increased or decreased depending upon the size of a flaw to accurately calculate a percent thinning factor. Slice plotting along the X or Y axis is provided to illustrate a cross-sectional display indicating the overall thinning of a component from the back surface. 
     In block 168 the setup mode or the eighth command is illustrated. This mode provides a scan color selection, a display color selection, a data disk drive assignment function, and a scanning direction change function. The scan color selection option in block 185 allows for the selection of 4 or 8 grey or color levels with high and low viewing thesholds. The display color selection option in block 186 allows the selection of grey or color levels and the size of the step changes. The data disk drive assignment option in block 187 allows data disk drive A or B to be assigned as the data disk. The scanning direction change option in block 188 reverses the X and Y scanning axis directions. 
     The last of the operational modes is the utilities mode 9, entered in block 169. The choice among the utilities options allow an initilization of the data disk in block 189, a deletion of selected data files in block 190, a system reset of the disk system in block 191, and an ability to reset the real tim clock in block 192. 
     The flowchart for the subroutine CALBRT used for the calibration option is shown in FIG. 13. The routine starts in block A200 by initializing variables and flags which are used later in the routine. After initialization, the routine writes a menu or option list in block A202 from which the operator can choose a calibration of the system from the ultrasonic circuit switch settings, a hole size or thickness calibration, or a calibration from the header. In addition, options are provided for a scanner calibration where the geometry is either radial or planar. Next, in block A204 a prompt is written to the video monitor requesting the operator to choose one of the options. The operator inputs his choice through the keyboard of the terminal in block A208 and that input is decoded in block A206. The variable IOPT is set equal to a value from 1-7 depending upon the option chosen and is decoded in blocks A210-A220. 
     An option value of 2 or 3 is chosen when an ultrasonic circuit switch setting or header calibration is desired and the subroutine FRONCL is called in block A262 or block A264. An option value of 3 will cause the subroutine FRONCL to produce a calibration from the switch settings of the ultrasonic circuit while a value of 2 will cause the subroutine to provide a calibration from the header parameters. After returning, the subroutine FRONCL sets bits 2 in the byte CALTYP if an ultrasonic circuit switch setting calibration was done. 
     FIG. 13B is a pictorial representation of the byte CALTYP and the type of calibration each bit represents. The header calibration bit 1 is set in CALTYP if the program returns from a header calibration in block A260. If the option value for the variable IOPT is 4, decision block A216 transfers control to block A266 where the subroutine THIKCL is called to provide a thickness calibration. The subroutine THIKCL returns after the calibration with either bit 3 or bit 4 of CALTYP set depending upon the procedure accomplished in the subroutine THIKCL. The subroutine provides the options for a velocity constant calibration or a delay time calibration as will be more fully explained hereinafter. 
     If the option value IOPT is 5, then an affirmative response to the test in decision block A218 produces a hole sizing calibration in block A268. The calibration is done by calling the subroutine HOLCAL which returns with bit 5 set in the byte CALTYP. 
     A value of 6 or 7 for the variable IOPT transfers control from block A220 to block A270 where the constant 5 is subtracted from IOPT. This produces a value for a variable IPTH which is either 1 or 2. The program next calls the subroutine CALSCAN which depending upon the value of IPTH provides either a scanner calibration or a radical calibration as will be more fully described hereinafter. If IOPT is not equal to a value between 1 and 7 the system indicates that there has been invalid input in block A222. 
     After the calibration subroutines have been called and executed, the program will return to the mode option list in block A202 so the operator may determine whether another calibration should be accomplished or if he should exit to the mode command list. If the operator desires, a direct exit to the mode option list can be taken by setting IRSP=1 in the CALSCAN routine to exit the calibration mode. This result is detected by block A274 which exits on an affirmative test of the variable IRSP. If the operator desires to exit normally, IOPT is set equal to 1 by input through the terminal in block 208 and is decoded in block A206. Decision block A210 will then produce an affirmative response and will branch the program to block A224. 
     The program firs determines in block A224 whether any of the available calibrations have been done. If none of the calibrations have been accomplished then the previous value of the calibration byte CALOLD is loaded into the byte CALTYP in block A240 before the routine returns to the mode option list. If CLATYP is not zero, indicating that a calibration has been accomplished, then the header must be updated with character data to account for this. Therefore, in blocks A226, A228 the place in memory for intermediate storage of the type of calibration, the CALTYP array, and the calibration type location in the header are cleared. 
     The byte CALTYP is thereafter decoded in blocks A230-276 to determine which calibration type character code should be placed in the header. A front panel calibration, as decoded by block A230, causes an &#34;F/P&#34; to be loaded in the ICAL array. Similarly, the codes &#34;DLY&#34;, &#34;VC&#34;, &#34;HCAL&#34;, and &#34;Header&#34; are loaded into the array in blocks A238, A244, A250, and A275 respectively. Next these intermediate values, ICAL, are transferred into the header in block A280. The scan flag SFLAG is reset in block A282 and the ultrasonic circuit is sent the correct calibration values based upon the recent input by calling LDMTEK in block A284. The routine, before exiting to the mode list, sets the calibration complete bit in block A286. 
     The subroutine SCAN will now be more fully described with respect to FIG. 14-1, 14-2, and 14-3, which illustrate a system flowchart of the program. Block A300 is used to initialize the flags and constants for the routine and will transfer control to block A302 where the subroutine TIMDIS is called to write the label &#34;SCAN&#34; on the video display. Thereafter, the system checks for a calibration in block A304 by testing the CALTYP byte and continuing to block A306 if bit 0 of that byte is not set. If this branch is taken, the system writes a message indicating that the syste is not calibrated in block A306 and waits for a keyboard response from block A308 before exiting. 
     If the calibration bit is set then the program continues to block A310 where the variable SFLAG is tested. The scan flag (SFLAG) indicates whether the system can resume a scan that has been terminated by the transfer of control to anothermode or is to start a new scan. If the scan flag is equal to zero this is indicative of the desire for a new scan and the program transfers control to block A331. Otherwise, the program branches to block A312 where ICLR is set equal to one and block A314 where a question is output to the video monitor asking the operator whether he wishes to resume scanning. Depending upon the keyboard response from block A315, the program either exits from block A316 for a negative response (IRSP=1) or continues kto blocks A318 and A391 for a positive answer. 
     In block A322 the system tests whether the scan flag, SFLAG, is eqyal to one and transfers control to block A331 if a negative answer is found. A scan flag which is equal to one causes the program to continue to block A324 where the variable ICLR set equal to one and a prompt alerting the operator that the scan data in memory has not been saved on the disk is written to the video monitor in block A326. Further, the question is displayed on the monitor: &#34;Do you wish to rescan?&#34; in block A328. Upon an affirmative answer in block A330, the program continues to block A331 and upon a negative answer exits the routine. 
     The calibration type is then moved from the header to a temporary location labeled ICAL in block A331. Thereafter, the header values of the ultrasonic circuit switch settings for the velocity constant and threshold are coded into an internal bit pattern by calling the subroutine CDHDR. Errors in the coding are checked by testing the error variable IERR in block A337 and exiting if the variable is equal to one. Next the program continues to block A334 where the switch settings that were coded are stored in a buffer IBC. In the next step, block A334, the program compares the values in the buffer IBC with the values in the buffer IBUF which have been loaded from the switch settings of the ultrasonic circuit. If the header settings do not compare with the switch settings in the ultrasonic circuit then in block A336, a message indicating that the ultrasonic settings in the header do not match those used for calibration is output to the video monitor. The system then requests the operator determine if he wishes to recalibrate the system in block A337. Depending upon his answer from keyboard input in block A338, the program either continues to block A340 or exits immediately. 
     If the answer to the prompt to recalibrate is affirmative, an exit will return the operator back to the command list where he can call the calibration routine. If he determines to go ahead with the scan, block A340 codes the ultrasonic switch settings into the header, erasing the values which do not compare. Thereafter, if an error is detected in the header coding by block A341 then the program will immediately exit. To notify the operator, during a display of the header, that the values found therein are from the switch settings and not from an actual calibration, a &#34;pre&#34; is put in front of the calibration type in the header area in block A342. 
     The program continues to block A343 where the velocity constant IVC from the ultrasonic circuit is loaded into the headerbuffer with the memory access routine MEM. Thereafter, the locations for the velocity constant and attenuation constant in the header are blanked in block A344. The bit value for the velocity constant is then encoded to an integer value and further encoded to an ASCII string before being loaded into the header in block A345. The integer value for the velocity constant is translated to a floating point value and encoded to the header in ASCII by a call to the subroutine NCDEF. Next, an attenuation setting IATTN, which is in a buffer of the memory, is read out in block A346 and converted to an ASCII string value before being loaded in the header in block A347. 
     Thereafter, in block A348 the maximum and minimum inspection depths, the static system delay, the velocity constant, the scan axis, and the grid size are displayed on the video monitor. The program then prompts the operator to input an identifier character string for the person who is going to do the scan in block A349. The input characters from the keyboard input of block A350 are read into the system by a call to the subroutine READI and are checked by a call to the subroutine INPTCK. The checking routine for the input characters from the keyboard returns with an error value IERR=1 if the routine has detected bad data. If the answer in block A352 is negative, a subroutine call to the routine INPINV will produce an output message on the video monitor indicating that there is an invalid input. The program will thereafter loop back to the prompt in block A349 to reprompt for the input. 
     When the identifier data is stored within memory correctly it is then moved to the header by block A353. Next the range of the data is loaded from the header into the variable RANGE. There follows a test to detemine if the third element of the VIEW array is less than 3. If the test is affirmative then the program will branch to block A355 where the scan display is filled with one color. 
     Otherwise, in block A357, the variable ICL is set equal to four. In the next block A358, if ICN is greater than 2, then in block A359, ICL is set equal to eight. The program thereafter continues by setting up the color table for translation of the display depth while the scanning is taking place. The first two elements of the array VIEW are loaded into the variables VL and VH respectively in block A360. In block A361 these variables are compared to each other to determine which is larger. If the low threshold (stored in VL) is equal to the high threshold (stored in VH) then VH is unchanged. If in block A361 (the value of the low threshold is greater than the value for the high threshold, then the bytes are swapped in block A362 such that the value of VL is placed in VH and the value of VH is placed in VL. Next the step size is calculated in block A363 by differencing VH and VL and dividing by ICL. 
     The program next builds an address table ITAB in steps from the high threshold and decrementing that level by subtracting the value of STEP from it successively until the loop is finished in blocks A366 and A367. The program thereafter fills the color translation table with colors at this address of the array ITAB. In the next block the memory access routine MEM is called to the load offset address OE with zero. 
     There follows a portion of the subroutine in blocks A370-A391 similar to that of the subroutine CALSCN in which an internal area factor is calculated. The linear scale factor for the track is read from the header as variable LSFT, the linear scale factor for the arm is read from the header as variable LSFA, and the grid area factor is read as variable IGS in block A370. Thereafter, the radial offsets are calculated by setting the variable RTRK equal to the ratio of the first element of the RADIAL array divided by the second element of the RADIAL array in block A371. The variable RARM is set equal to the division of the third element of that array by the fourth element. The program then enters a loop to determine the largest internal area factor for the arm and track which are within range. These factors are calculated by the loop for all area multiplication constants from 20 to 320. In block A375 after each pass through the loop the scale factor ISFT and the seal factor ISFA are tested to determine if they are less than their maximum values of 250. 
     If none of these area factors are within range, then the loop will end after the five iterations and transfer control to block A376 where the subroutine TIMDIS outputs the scan label to the video display and writes a message that there is an error because the scanner overflows on the highest area factor in block A392. A message indicating that the operator should go to the header and reduce the grid size is also permitted in block A378. The program then waits in block A378 until the operator enters a key stroke on the keyboard in block A383 and then returns to the calling routine. This path allows the operator to call the edit header mode and reduce the grid size. 
     If an internal area factor was selected, the program will instead transfer control to block A380 where a test is accomplished to determine if either of the internal scale factors ISFT, ISFA are less than the actual scale factors LSFT and LSFA. If either one of the these conditions is true, block A381 writes a warning message that the linear scale is greater than the actual scale. The program then halts until an input is entered by the operator in block A382 at which point the routine continues. Next the internal area factor IAFACT is loaded into memory in the block A384. 
     The program continues by determining whether the scan direction stored in memory is the track or the arm direction by decoding a valve from the header in block A385. If the scan axis is picked as the track direction then blocks A386, A387 load the memory with the port addresses of the position encoders and the scale factors, accordingly. If the scan axis is selected as the y direction, then the blocks A388, A389 load the memory with the port addresses of the position encoder and the scale factors in reverse order. 
     The program then transfers control to block A391 where the value IPTH is tested to determine whether it is equal to zero. If IPTH is not equal to zero, then a rescan has been requested and the subroutine RESCAN is called in block A390 to fill out an incomplete scan. If, however, this is an initial scan the variable IPTH is equal to zero and the system continues at block A392 where the variable SDELAY is loaded with the system delay value from the header. Next, the delay in counts per bit of resolution is coded from the value of SDELAY, the velocity constant VCT, and the range constant RANGE. This variable IDLY is then converted into floating point notation in block A393 and thereafter loaded back into memory. 
     The initialization continues by clearing the scan memory by calling the subroutine INITM in block A394 which initializes all locations within the memory. Next, the scan flag SFLAG is set equal to 2 to indicate that a scan has not yet been accomplished. The variable SLOAD is set equal to a logical value of FALSE and the memory offset location 0D (hexadecimal) is loaded with zero in block A395. 
     Block A396 calls the subroutine TIMGET to load the header with the time from the real-time clock. This indicates, if the scan is saved, at what time a particular test occurred. The routine then calls the subroutine PRESCN in block 397 which actually produces the scanning and display of the real-time data on the video monitor. After a return from RESCAN or PRESCN the program tests the variable IEXIT in block A398. This variable is set by those two scanning routines when the operator desires to end a scan. If IEXIT is greater than zero then the program will immediately exit. Otherwise the nominal thickness is read from the header and placed in the variable THICK in block A399. The nominal depth NDSCLD is then calculated from the values for THICK and the range variable RANGE in block A301 and thereafter stored in memory in block A301. 
     The scan flag SFLAG is set equal to one in the following block A305 to indicate that a scan has been accomplished. The next step of the routine, block A307, loads the version number of the software into the header to provide the operator with an indication of what softward update was used to store the data. The radial ratio locations in the header are then replaced with blanks and loaded with the values of the variables RTRK and RARM in block A309. 
     The RAM of the system is now fully loaded with scan data and header data. This includes a full record of information, such as all entries in areas A-D of the header, as well as depth data areas and amplitude data areas for the scan memory. Therefore, in block A311 the program prints out the scan label by a call to the subroutine TIMIDIS, and then writes a message on the video display asking the operator whether he wishes to save the scan data to the disk. The system then pauses for a keyboard response from block A313. If the response is affirmative as tested by block A315 the system sets the variable RARG equal to 2.3 in block A317. This produces an indication to the system that the present scan data and header should be saved on the disk file. The routine then exits. 
     After the scan routine has loaded the scan memory with data, that data is also transferred element by element to the video memory to produce a real-time display. The transfer of the scanned data to the video memory for a real-time display will now be more fully explained with reference to FIGS. 14A-14D. It is seen in FIG. 14B that scan data relating to depth information and amplitude information is stored in scan memory. The scan memory comprises 200×200 storage locations, of depth elements DE (i,j) and amplitude elements AE (i,j), which relate a position of an element of the scan area to a corresponding depth value and an amplitude value. As the scanner is moved over the scan area, each element position of the scanner i,j (i=100, j=200) has two data values input for it by pulsing the transducer and encoding the results. The scan memory is loaded in real time, location by location, depending upon the rate of movement of the scanner. 
     The scanning routine which accomplishes the pulsing and reading of data for the elements of the scan area further produces a real-time display of contrast levels for the data as it is input to the scann memory. The constrast levels can be either 4-level grey scale or 4-level color or 8-level grey scale or 8-level color as seen in FIG. 14A. FIG. 14C is a functional flowchart of the operations performed for a real-time display of the scan memory data. After an element DE (i,j) is stored in the scan memory it is additionally stored in an intermediate storage location in the RAM in step (1). The next step (2) is to output a contrast level or color (green) to a pixel of the video memory corresponding to the location i, j-1 of the previous element scanned. The present data is then translated in step (3) by a contrast translation table (built in the subroutines SCAN and SET UP) into a value which will produce a grey level or a color (blue) on the video monitor when loaded into the video memory. Thereafter, in the stop labeled (4) the corresponding location (i,j) is stored along with the pixel color. As a final step (5) the system will output the color (white) to the pixel at location (i,j) to light the element for a visible cursor, which indicates the location of the transducer. 
     After the next scan data DE (i,j+1) is loaded into the scan memory, that data is stored in the location previously used for DE (i,j) and the process repeated for steps 2-5 before cycling for more data. After all elements of a row have been filled then another row (i+1, j) is filled and so on until the entire video memory area corresponding to the scan area has data stored therein. Although the example given shows scanning in an orderly manner, actual scanning can be accomplished in an entirely random fashion. 
     The representative image displayed to the operator is shown in FIG. 14D for three time periods N-1, N, N+1. The length of these time periods is dependent upon how fast the scanner is moved over the scanned area. For each of these times a number of successive display area or pixels on the video monitor are shown. Each of the pixels corresponds to an element E in the scan area, namely E (i, j-1), E (i,j), and E (i, j+1). At time N-1 the pixel E (i, j-1) is lighted with the color white to indicate to the operator the real-time position of the transducer and the corresponding element location where scan data is being taken. Because the scanning direction is from left to right as seen in the drawing, pixels E (i,j) and E (i, j+1) are not lighted as no data has been taken for those element locations. The scanner moves from location i, j-1 to location i,j at time N and the cursor records this fact by lighting pixel E (i,j) with the color white. The data translated into a contrast level (green) which was taken at N-1 for pixel E (i, j-1), is now displayed as such. This process continues with movement of the scanner such that at time N+1, the cursor has moved to light element E (i, j+1) with white and element E (i,j) with the data recorded at time N namely the contrast level (blue). 
     Thus, as the test area is scanned on the component, element by element, a real time contrast image pixel by pixel becomes visible on the display screen of the video monitor. The image is displayed in dependence upon the interpretation the operator has built into the translation table. The image is used to ensure the operator that valid data is being stored in the scan memory and further, the real-time display provides him with the information necessary to determine if the entire scan area or a larger or smaller area should be rescanned before the data is stored on the disk. 
     The detailed description of the routine SETUP will now be more fully disclosed with respect to FIG. 15, which illustrates a system flowchart for the program. The first block A460 of the routine clears the variables RARG, IRSP while the second block A462 writes the label &#34;Set U&#34; to the video monitor to inform the operator of the mode he has selected. The program next writes the option list in the block A464 on the video monitor and prompts for a keyboard response in block A468. The program then decodes the keyboard response from block A470 in blocks A466-A476. If the second character input is not a carriage return and the first character is not an option character 1-5, then the program proceeds to block A478 where a message that invalid input has been entered is displayed on the video monitor by calling the subroutine INPINV. The command list is redisplayed if an invalid data character is input by looping back to block A464. 
     Otherwise, the input characters are decoded as the variable IOPT, ranging from 1-5, by subtracting a constant from the first character input. Thereafter, depending upon the value of IOPT, the program will branch to either block A484, block A482, or block A480. If IOPT has a value of 1, the program immediately returns to the calling routine. A transfer to block A484 when IOPT is equal to either 2 or 3 calls the subroutine SCOLOR to provide the operator a selection of colors for the scan display or a selection of colors for the display mode. Upon a return from the SCOLOR routine, the program tests whether the variable IOPT that is return is equal to one in block A486. If the test is affirmative then the program exits but if not, loops back to the block A462 where the command list is again displayed. 
     If block A482 is chosen by a value of IOPT equal to 4, then the data disk drive assignment program SDRIVE is called. Upon return from the routine SDRIVE, the program moves back to the block A464 where the command list is again displayed. In a similar manner if block A480 is chosen then the scanning direction change subroutine SSDIR is called. After the routine SSDIR returns the program loops back to block A464 where the command list is again displayed. 
     The subroutine CALSCAN will now be more fully described with reference to FIGS. 16-1 and 16-2. The routine begins by initializing its constants and flags in Block A400. The title of the calibration chosen is then written to the video monitor depending upon the value if IPTH as tested in Block A402. If IPTH equals 1  then the &#34;Calibrate Scanner&#34; prompt is issued in Block A406. Otherwise, for IPTH equal to 2, the message is &#34;Calibrate Radial&#34; issued in Block A406. Next the variables IERR, IRSP are set equal to zero. 
     The next set of operational steps in Block A410 reads the track linear scale factor LSFT, the arm linear scale factor LSFA, and the grid area factors IGS from the header. A check is provided in Block A412 to determine if any of these parameters are zero. If any of the variables are zero, the program prompts the operator in Block A414 with a message indicating that header data is missing and that he should either read a header or create one. The program then waits for the input of a key from the terminal indicating a desire to return to the mode option list so that the error can be fixed by editing the header. A keyboard input from Block A418 allows the program to continue to Block A416 where the variable IRSP is set equal to one. This value for IRSP will call the command mode list as the routine exits in the next step. 
     If the header data is complete, the decision block A420 permits the program to determine whether this access requires a scanner or a radial calibration by the value of IPTH. If the variable IPTH equals 1 (scanner), the track and arm linear scale factors LSFT, LSFA, and the internal area factor IAFACT are loaded into the correct locations in memory for transfer to the interface circuit by the memory access routine MEM in block A422. The are factor is set equal to 20 so that the scanner calibration on the accomplished with a convenient scan area. Thereafter, in block A424, the x direction and y direction for the scanner are defined. The track direction is defined as the x coordinate and the arm direction is defined as the y coordinate. At this point in the program, the memory has stored calculations for the grid area, the linear scale factors, and the axis directions. The scanner calibration is now ready to be accomplished by calling the subroutine SCNCAL in Block A426 which compares the count for a known physical movement of the scanner to the theoretical count as determined by the scale factors to determine if there is any error between them. 
     The subroutine SCNCAL produces actual linear scale factors for the arm and track from the calibration operation. After a return from SCNCAL, the actual track and arm scale factors are reloaded into the header in block A430 after deleting the old factors in block A428. 
     The subroutine then transfers control to block A432 where the radial offsets RTRK, RARM are calculated from diameter values input during the radial calibration. If the calibration is for planar geometry the radial offsets are equal to 1. If the calibration is for a radial geometry, RTRK is the ratio of the diameter of the transducer movement RADIAL (1) divided by the track diameter RADIAL(2) and RARM is the ratio of the diameter of the transducer movement RADIAL(3) divided by the arm diameter RADIAL(4). These calculated values are then stored into the header in block A436 after the locations receiving them have been cleared in Block A434. 
     Next, an internal area factor IAF is calculated by a D0 loop in blocks A438-A444. The loop calculates the internal scale factors ISFT, ISFA for the track and arm for various IAFs, to choose the largest area factor which does not cause an overflow of the internal scale factors. The scale factors are representative of the number of encoder pulses which are to be used to determine the length of a side for an individual scan element. Initially, a grid ratio is calculated in block A438 by dividing the grid size variable IGS by the internal area factor IAF. This being the first pass through the loop, the division is the smallest IAF, 20. The result of the calculation RGRID is used in combination with the linear scale factors LSFT, LSFA, and the radial offset RTRK, RARM to calculate the internal scale factors ISFT, ISFA in blocks A440, A442. These internal scale factors are tested for an overflow condition in block A444 and, if both are within range, then the programd continues to block A450. However, if either overflows, then the program does another iteration of the loop using a larger internal area factor, 40 for pass two. The loop continues until the overflow condition is broken or the largest factor, 320, is sued. If the loop finds that an overflow condition on the larges internal area factor occurs, then a branch to block A445 is taken where the &#34;calibrate scanner&#34; label is displayed. 
     If the calculation for the internal area factor is out of range at all sizes, the program will prompt with an error message that the scanning factors entered into the system overflow on the highest area factor in block A446. The program thereafter allows for a keyboard input in block A449 and an exit to the edit header routine to reduce the grid size IGS. If the test for over range is passed by an affirmative branch to block A450 then the program will test the calculation of IAF for under range. The program first prompts with the correct label in block A450 depending upon whether the cailbration is for a radial (IPTH=2) or a scanner (IPTH=1) operation. 
     A comparison between the actual scale factors (ISFT, ISFA) and the linear scale factors (LSFT, LSFA) is then made. If either of the linear factors are greater than the actual counterparts then a warning to that effect is given in block A454. The screen of the video monitor is then provided with an output in block A456 to display the linear and actual scale factors for both the track and the arm (ISFA, ISFT, LSFA, LSFT), the track and arm diameters, the transducer movement diameters in RADIAL (1-4), the grid size (IGS), and the area factor (IAF). 
     For a radial calibration which is executed when IPTH=2 at block A420, the program sets the radial offset elements of the array RADIAL(1-4) equal to 1 in block A399. If no scale factor is needed then the ratio of these factors will be 1 and no proportioning of the grid size will be produced. However, for a radial geometry these offsets will produce a proportional sizing of the elements of the grid. The system prompts the operator to input values for the track diameter, the arm diameter, and the transducer diameter in block A401. The response by the operator is read into memory from keyboard input in block A413 and tested for validity and range in block A407. If any of the inputs are out of range or invalid, then an error message is given in block A411 informating the operator that invalid data was received. The program loops back to block A401 where prompts for the data are again written to the video monitor, and the operator is repeated until data is input correctly, causing an affirmative branch from block A407. The program thereafter stores the input in the radial array elements RADIAL(1-4) in block A409 and then merges with the scanner calibration portion of the routine at block A432. 
     In FIGS. 16A and 16B the scanner calibration for the grid size and the radial offsets is illustrated. The grid or scan area is divided into 100×200 elements. Every element corresponds to an area of between 20 mills-200 mills along an edge producing an actual scan area which may vary between 2&#34;33 4&#34; and 20&#34;×40&#34;. The grid size, or the actual area each element represents, is easily changed by setting the grid constant in the header. The software automatically calculates the internal scale factors which are transmitted to the position encoding circuits. Because the position encoding circuits relate a position from a reference in the scan area to an element in the scan memory and do so by counting pulses from the encoders which measure actual increments of distance, defining the number of pulses which produce a position or coordinate change from one element to another defines the actual area of each element and thus the actual size of the entire grid area. Therefore, the operator, by entering a grid size constant, may vary the actual scan area to that needed for a particular purpose. For inspection scanning of large areas, a large grid factor can be dialed into the system. For a more detailed analysis of a particular feature or a higher resolution image of a defect, a smaller scan area can be chosen. 
     Additionally, the scanner scale factors can be varied to ensure proportionality of the image. If a radial geometry workpiece is scanned as illustrated in FIG. 8 and FIG. 16B, the track encoder is generating counts of the actual distance traveled along the radius R2 for the x direction. The transducer, however, is actually traveling along the radius R1. As the transduceer moves in the x direction, its movements correspond on a one-to-one basis with distance movements along the y direction which are linearly encoded. If the counts from the x encoder are not modified, a distortion of the scan area elements will take place on the display. The skewed image can make interpretation of the display difficult or impossible. A movement of D1 in the x or radial direction will produce an image which appears elongated in the X direction as illustrated at 403 in FIG. 16B. What is needed is a method of restoring the one-to-one proportionality to the counts of the encoders for each axis. Therefore, the system provides an operation in the calibration mode where the ratio of the diameter of the track to the transducer movement is calculated. This proportionality constant R2/R1 is multiplied by the grid size constant or scale factor bore it is transmitted to position encoder circuits. The counts from the encoders are modified accordingly such as at 405, in FIG. 16B, so that an area distortion does not occur. Although the track direction has been described for a radial geometry, it is evident that for aradial geometry in the arm direction that a similar radial offset can be provided and/or that both directions can be provided with radial offsets of different sizes. 
     The subroutine FRONCL for performing a front panel or header calibration will now be more fully disclosed with respect to FIG. 17. This figure shows a system flowchart for the subroutine FRONCL. FRONCL begins with block A500 where the flags and constants for the program are initialized. The routine then determines whether a front panel or header calibration has been requested by decoding the value of the variable IPTH in block A502. For a front panel calibration (IPTH=2) the program displays the label &#34;FRONT PANEL&#34; at block A504 to indicate the difference. 
     Both the header calibration and the front panel calibration merge at block A506 where the variable IERR is set equal to zero. The program thereafter codes the ASCII values of the header into an internal bit pattern representing the ultrasonic circuit switch settings, the velocity constant, and the threshold values. The routine CDEHDR is called in block A508 to perform this operation and loads these values into an array IBUF for further processing. The subroutine CDEHDR returns with an error code IERR depending upon whether the converted data input is valid. 
     If the subroutine CDEHDR returns with IERR=1, as tested by block A510, then there is a defective header value and the subroutine exits. Otherwise, the values returned from the subroutine are valid and are loaded into their corresponding locations in the array IBUF. Thereafter, the velocity constant is transferred from the array IBUF to the array II as two bytes in block A514. The two bytes of the velocity constant are then converted to a floating point number and thereafter into an ASCII string value IVC in block A516 for input into the header in block A518. 
     The velocity constant IVC is thereafter loaded into the ultransonic circuit with a subroutine call to LDMTEK. The system tests the value of IFLAG in block A522 to determine whether the ultrasonic circuit was loaded correctly. If the subroutine LDMTEK returns bits 4 and 5 set for IFLAG then the routine will flag the error in block A522 and exit to the calling routine CALBRT. If the error flag has not been set, the routine continues by testing whether the variable IPTH is equal to 1 in block A524. An affirmative test indicates that the calibation for a header input has been accomplished and the routine returns. 
     If IPTH is not equal to one then the rest of the front panel calibration must be accomplished. Therefore, th program calls for the display label &#34;Calibrate Front Panel&#34; on the video monitor in block A526 and for the pulsing of the ultrasonis circuit by the subroutine PULSE in block A528. The front panel of the ultrasonic circuit is then decoded with the subroutne RDMTEK in block A530 and those values returned are coded into the header by the subroutine CDEMTK in block A534. 
     Before coding the values into the header they are checked to determine if an error exists. If any errors have occurred, the error flag IERR is set equal to 1. A determination of whether there has been an error in the encoding of the front panel settings is determined in block A536 where the value for IERR is tested against 1. If there was an error in the encoding of the front panel settings then the program exits. 
     If the variables on the front panel (now stored in the header) are correctly read, then the program continues at block A538 where the subroutine CDEHDR codes these values to the array IBUF. In addition, the memory access routine MEM is called to reload the memory buffer with the low and high depth limits for the calibration in block A542. To complete the routine the CALTYP byte is set in block A544 to indicate that a front panel calibration has been accomplished. The routine then returns to the CALBRT routine from which it was called. 
     The subroutine which is used to produce the thickness calibration THIKCL will now be more fully explained with reference to the system flowchart in FIGS. 18-1, 18-2, 18-3, 18-4 and 18-5. The routine begins by initializing its constants and flags in block A550 before calling a screen display subroutine TIMDIS to write to the video monitor in block A552. The subroutine TIMDIS writes the label &#34;Calibrate Delay&#34; to inform the operator of the mode of operation. Next, in block A554 the program reads the header for the range, gate delay, gate width, calibration block thickness, and velocity constant. 
     Next a calibration adjustment variable CALADJ is calculated by summing two products together in block A556. The first product is the [(DELAY+WIDTh)×2.0×0.05] and the second product is (CALBLK×VCH1/2). This calculation yields an internal resolution for the system taking into account the thickness of the calibration block and the system coupling delay. In the next block A558, the variable RESI is set equal to a value between 0.002 and 0.1, based upon the value for the variable CALADJ. Thereafter, in block A560 the switch setting for the range IRSW is set from the calculation for RESI. Depending upon the value of the variable RESI, the range switch variable IRSW is set equal to values from hexadecimal F0 to F5. 
     The next set of instructions in blocks A562 and A564 initially sets the error value IERR equal to zero prior to calling the subroutine CDEHDR. The subroutine CDEHDR decodes the ASCII values of the header into an internal bit pattern representing the switch seetings, velocity constant, and threshold and stores these values in the IBUF array. The next step of the routine, block A566, tests whether the storage resulted in any defective header values. If IERR is equal to 1, an error was found and the routine exits. if, however, the values from the header were stored correctly, the program continues in block A568 by transferring the array IBUF to an intermediate array II with the memory access routine MEM. 
     The program thereafter prompts the operator with the question &#34;Do Delay Calibration?&#34; in block A570. Depending upon the input from the keyboard in block A572, which is given the variable name IRSP, the system will either perform a delay calibration, continue with the velocity calibration or immediately return. If IRSP equals 1 a delay calibration has been requested and the program continues to block A576 where the label &#34;Calibrate Delay&#34; is displayed on the video monitor. The memory access routine MEM is thereafter called in block A578 to set the delay constant to zero in memory. Next, the switch settings of the ultrasonic circuits are read with a call to the subroutine RDMTEK in block A580. These switch values are then reloaded into the buffer IBUF before continuing. 
     The value for the internal resolution is output to a variable IRSWI by calling the memory acces routine MEM in block 582 so as to provide an intermediate value for comparison. A value for the ultrasonic switch settings variable IRSW is then loaded into that same memory location. The velocity constant is set to a value of 2×10 -5  in Block A588. 
     Subsequently, a test is performed in block A590 to determined if the variable RANGE is greater than 50 and the resolution RESI is less than or equal to 0.01. If both of these conditions are true the program transfers control to block A596 where IRSW is compared to IRSWI. If the new range value is not equal to the old range value a prompt is written in block A598 to request that the operator change the resolution to the value of the variable RESI. Additionally, a prompt in block A600 request that the operator change the delay and switch settings. Otherwise the values for IRSW and IRSWI are compared in block A592 and control is transferred by the program to block A594 if the two variables are equal and to block A612 if not equal. If the two are not equal the prompt to change the resolution to the value of RESI is written on the video monitor in block A594 before transferring control to block A610. 
     If the path to the program is to block A598 the gate delay value and gate width value are read out of the memory by calling the memory routein MEM in block A602. These values are shifted up one decade in value in block A604 before being loaded in memory in block A606 in order to match the change in the switch settings. At block A610 the program waits for a carriage return from block A608 to continue. This gives the operator time to change the switch setting and then signal the program that he has accomplished the task. 
     After continuing in block A612 the program loads the ultrasonic circuit with the perimeter values now in the IBUF array by calling the subroutine LDMTER. After the values are loaded the value of IFLAG is tested in block A614 to determine if there was an error in the loading of the perimeters. If there was an error, bit 5 of IFLAG will be set and the program will immediately return. The path for a program with a good load is to block A615 where the subroutine TIMDIS outputs to the video monitor the &#34;Calibrate Delay&#34; label. The subroutine PULSE is then called in block A616 to generate a pulse to the transducer for reading a first thickness. The data which is returned from the ultrasonic circuit is input to the system by the subroutine READTK in block A618 by variables which are representative of the distance measurement ITHK1 and an amplitude measurement IAMP. 
     Next the value of the variable IERR is checked to determine whether there was an error in the reading of the values. If so, the message that there was an error in the thickness measurement is sent to the video monitor in block A622. Additionally, the program asks the operator whether he wants to try again in block A621. In response to this prompt, the program either returns or branches back to block A615 where the system is again pulsed. 
     When there is no error in the readings, the program continues to block A263 where the variable TIME1 is calculated from the value for ITHK1 and the variable RANGE. Multiplying the thickness measurement by the resolution and dividing by the velocity constant yields a time measurement for a first echo from the back surface of the calibration block. The program then outputs the variable TIME1 to the video monitor in terms of microseconds. 
     The system thereafter sets up to read the second echo from two traversals of the pulse through the calibration block. First, in block A626, a message is output to the video monitor indicating that the operator should move the gate delay and width to read the second echo. A message prompts the operator to enter a carriage return from block A627 when ready to continue. Next, in block A628, the program calls the subroutine IMPULSE, which provides a pulse for the transducer upon sensing the carriage return from the operator. Thereafter, the ultrasonic circuit readings are input into the memory by calling the subroutine RDMTEK in block A629. 
     All the switch settings except the gate delay and the gate width settings are stored in the intermediate memory locations from array IBUF in block A630. Further, the internal resolution is set to the value of IRSW in block A681. Following these steps, the program displays the &#34;Calibrate Delay&#34; label on the video screen in block A632 and then reads the second echo signal by a call to the subroutine READTK in block A633. This produces the two inputs for the transducer position which are variables ITHK2 and IAMP. Next, in block A634 the program checks for errors in the variables produced for the second echo. If the error value IERR is not equal to zero, in block A642 the operator is sent a message on the video screen that the thickness measurement is in error. The system also provides a prompt to ask if he would like to try again in block A641. Depending upon his response, the program either returns or loops back to block A626 where the operator is again requested to move the gate delay and gate width to read the second echo. The error is possibly due to the fact that the operator did not move the gate or delay far enough to read the second echo and this sequence allows him another change to determine what the value of ITHK2 is by again pulsing the system. 
     If there were no errors detected in the second echo reading then the time TIME2 is calculated by multiplying the thickness measurement ITHK2 by the resolution and then dividing by the velocity constant in block A635. The system delay variable SDELAY is then calculated in block A636 as twice the variable TIME1 minus the variable TIME2. This is the delay due to transducer coupling and is the sum of all electrical and mechanical delays. 
     The system thereafter writes out the values of TIME1 and TIME2 in microseconds on the video monitor and further writes a value for the system delay SDELAY in microseconds in blocks A637, A638. The variable SDELAY is then checked to determine if it greater than zero in block A643. If this condition is true then it is indicative of a good value for the delay measurement. If the value of the delay measurement is negative, in block B640 the program outputs an error message that the delay measurement product is negative. In block B642 the program waits for the operator to input a keyboard character from block B641 to continue. The program then returns to block A568 to redo the calibration. 
     If the system delay has a valid value then the system waits at block A644 for a keyboard input from block A645 to continue. The delay value in the header is cleared in the next step in block A646 before loading the new value for SDELAY into the header in block A647. Next bit 3 of the CALTYP byte is set in block A648 to indicate that a delay calibration has been accomplished before ending this portion of the program. 
     Thereafter, the program falls through to the velocity calibration part of the program where the label &#34;Calibrate Velocity&#34; is output to the video monitor in block A649. Next, the values in the array IBUF are loaded into the intermediate array in block A650 before continuing with a prompt in block A652, that asks the operator whether he desires to do a velocity calibration. Depending upon the keyboard response from block A652, the program continues to block A654 or returns. If the decision is to do a velocity calibration then the program reads the value SDELAY from the header in block A654 and converts it to a floating point number with a call to the subroutine DCDEF. Thereafter, the value for SDELAY is converted from a floating point number in units of microseconds to bits having units of counts per bit of resolution in block A655. These values for IDLY are then loaded into the memory in block A656 by calling the subroutine MEM with IDLYL and IDLYH. The switch settings of the ultrasonic circuit are now read by calling the subroutine RDMTEK in block A657, and the value for the switch setting IRSW1 is loaded into memory in block A658. 
     Next, in blocks A659-672 the internal resolution for the velocity calibration is set up in much the same way that the resolution for the delay calibration was performed. After the resolution steps have been accomplished the program waits at block A674 for a carriage return from block A673 before continuing. The ultrasonic circuit is then loaded with the parameter values which were set in memory in block A675. An error in loading is checked by reading IFLAG and testing it in block A676, where the program will exit if the value is not equal to zero. If, however, a good load has been accomplished the program continues at block A677 where the velocity calibration label is output by a call to the subroutine TIMDIS. The system is thereafter pulsed by a call to the subroutine PULSE in block A678. Next the result of the pulse is read by calling to the subroutine READTK in block A680 to generate the thickness and amplitude variables ITHK and IAMP. 
     Before continuing to the calculation for the velocity constant the program checks for an error by testing the value IERR. If the error is not equal to zero then the program prompts the operator with the message that there is an error in the thickness measurement in block A682. It further prompts the operator with a message requesting whether he desires to try again in block A683. Depending upon the keyboard response the program thereafter exits from block A685 or continues to block A677 where the system is pulsed again. 
     Upon indication of a good thickness measurement, the program continues to block A686 where a thickness measurement THICKM is calculated from the product of the variables ITHK and RESI. This is the product of the thickness reading from the pulsing of the transducer and the resolution of the system which yields a distance or thickness for comparison measurement. 
     A measured velocity constant VCM is then calculated by multiplying a nominal velocity constant (2.0) times the calibration block thickness CALBLK and dividing that product by the measured thickness variable THICKM in block A687. The measured velocity constant VCM is then converted to the variable IVCM in the correct units in block A688 of the program. Thereafter, the measured thickness variable THICKM, measured delay ITHK, and the measured velocity constant IVCM are output in the correct units to the video monitor in block A689. 
     The measured velocity constant IVCM is then reloaded into memory in block A691. Next, the system delay SDELAY is recalculated in counts per resolution by using the measured velocity constant in block A692. The result of the calculation is the variable IDLY which is converted into different units and reloaded into the memory by calling the subroutine MEM in block A693. Thereafter, the ultrasonic circuit is loaded with the calculated delay value and the calculated velocity constant by a call to the subroutine LDMTEK in block A694. 
     The system is then pulsed with these new values by a call to the subroutine READTK in block A695 which returns with the thickness variable ITHK and the amplitude variable IAMP. Thereafter, the error flag IERR is checked to determine whether it is equal to zero in block A696 and if it is the program continues to block B600. Otherwise, the program executes an error routine by prompting the operator that there is an error in the thickness measurement in block B696. It further questions whether he wishes to try again in block B696 and depending upon his from block A678 either returns or continues to block A695. At this point in the program, the label for the calibrate velocity mode is displayed on the video monitor and control is transferred to block A695 where the system is again pulsed. 
     After a valid reading for the system has been made, block B600 calculates a second thickness measurement THICKM from the variables ITHK and RESI. These variables are then written to the video monitor in block B602 before attempting a comparison between the measured value and actual calibration block value. An adjustment loop is entered via block B608, where initially measured thickness is tested to determine whether it is equal to or less than the calibration block thickness CALBLK in block B600. If the thicknesses are equal, control is transferred to block B610. Otherwise the variables THICKM and CALBLK are again compared in block A699 to determine which is larger. IF CALBLK is greater, the variable IVCM is incremented by one unit in block B604, or if THICKM is greater then the variable IVCM is decremented by one unit in block A698. Next, the number of tries stored in variable ITRY is incremented by one in block A697 before looping to block A691 where the system once again pulses the calibration block and does a thickness measurement. This produces an adjustment for the measured velocity constant to calibrate the velocity constant as closely as possible to the actual physical conditions under which the system operates. 
     In block B610, the velocity constant VCM is calculated and transmitted to the video monitor, along with the header velocity constant VCH for the calibration block material, the measured thickness THICKM and the calibration block thickness CALBLK. The program thereafter waits in block B616 for a keyboard character from block B614 before continuing. 
     After continuing, the CALTYP byte is loaded such that bit 4 is set in block B618, indicating that a velocity calibration has been accomplished. Thereafter, the velocity constant adjustment and maximum and minimum inspection depths are blanked out of the header in block B620. The variables VCM and IVCM are then loaded into the header into the correct places, and new minimum and maximum inspection depths are calculated in blocks B622 and B624, respectively. The new minimum inspection depth DMIN and the new maximum inspection depth DMAX are then loaded into the header in block B626. Next, the variable DMAX is tested to determine whether it is over range in block B628 and upon an affirmative response a warning is displayed in block B630. The program then waits in block 634 for a keyboard response from block 632 before continuing. Otherwise, for DMAX within range the program loads the intermediate buffer from the array IBUF in block B638 before returning to the calling routine. 
     The automatic calibration will now be more fully described with respect to FIG. 18A. To perform the automatic calibration of the system a calibration block of a known thickness, CALBLK, and of a known material is pulsed by the transducer 409. The ultrasonic pulse propagates through the material to the back surface where it is reflected back to the transducer for detection at 411. The ultrasonic wave is also reflected from the front surface where it is directed to the back surface once more. A second reflection of the waveform is thereafter also detected by the transducer at 413. 
     The detection of these two reflections, one from the back surface and the second after another traversal, are shown in FIG. 18B as an A-Scan display where the X-axis is time. The first large amplitude wavepeak 415 is the ultrasonic energy pulse entering the test block, the second wavepeak 417 is the first reflection, and the third wavepeak 419 is the second reflection. The time it takes for the ultrasonic energy to travel to the back surface and back to the detection point (first reflection) is recorded by a counter in the ultrasonic circuit by counting timing pulses and is illustrated as T 1 . The time it takes the ultrasonic energy to travel substantially twice that distance (second reflection) is recorded in a similar manner and is labeled T2. The A-scan display is used by the operator to adjust the gate delay GDLY1 and gate width GDW1 to capture the second pulse 417 for the recording of T1 and then to readjust the delay and width to GDLY2, GDW2 in order to capture the third pulse 149 for the recording of T2. 
     The calculations shown in the FIG. 18B are then made to determine the delay time caused by coupling of the ultrasonic waveform into the test material. The delay time may be extensive because of the use of a coupling block or a bath coupling of the transducer to the workpiece. In any event, this calculation provides the system with the sum of all electrical and mechanical delay times so they can be subtracted from a depth reading before its use. 
     The product of T1 and the system resolution R used for reading the calibration block is a value in units of thickness. This thickness is equal to the thickness of the calibration block CALBLK plus the delay DTH in units of thickness. Multiplying the second time T2 by the same resolution R yields a thickness equal to the delay thickness DTH times twice the calibration block thickness 2(CALBLK). Combining these two equations and solving for DTH produces the result. 
     
         DTH=R(2T1=T2)                                              (1). 
    
     Since the time for the preparation of an ultrasonic waveform through a medium can be determined by dividing the thickness traveled by the velocity constant, the delay time DT is equivalent to that shown in equation 2 where VC is the velocity constant. 
     
         DT=(R/VC)(2T1-T2)                                          (2). 
    
     If the resolution is chosen as 2 mills/bit and the velocity constant is 2×10 5  in/sec. then the delay time can be calculated from the difference of the values 2T1 and T2 multiplied by a factor which places the decimal point. This will calculate DT in units of time. 
     The delay factor is then used in the velocity constant calibration. First the method is used for calculating a measured velocity constant using a nominal velocity constant, a measured thickness for the calibration block, and the actual thickness. The measured velocity constant VCM is calculated as the ratio of the actual thickness of the block CALBLK over the measured thickness of the block (ITHK*RESI) multiplied by the nominal velocity constant (2.0) as seen in FIG. 18B. The thickness of the calibration block is again measured using measured velocity constant VCM. If the calculated calibration block thickness is different from the actual thickness, the measured velocity constant VCM is then adjusted unitl they are equal or within a small difference of each other. 
     The subroutine SCOLOR, which permits the operator to select the mapping colors for the scanning mode or for the display mode, will now be more fully explained with reference to the system flowchart in FIG. 19. The routine begins in block A700 where the initialization of flags, constants and common variables is accomplished. The program proceeds to block A702 where the value of the variable IOPT (transferred from the subroutine SETUP) is tested. Depending upon the value of IOPT, at block A708 the program branches to either a program sequence for a color selection in the display mode or for a color selection in the scan mode. If IOPT is equal to 2 as tested in block A704, the color mapping for the scanning mode is chosen, and if IOPT is equal to 3 as tested in block A702, the color mapping for the display is chosen. If the value of IOPT is equal to 1 or some other value, then the program immediately exits to the main menu for the mode list. 
     Assuming that the branch for the color selection of the scanning mode has been chosen, the program sequences to block A708 where the data label &#34;Set Up&#34; is written to the video screen by the subroutine TIMDIS. Next, two messages are written to the video screen which form the command selection options for the scan color choices in block A710. A message indicating that the operator should enter an option number, or a carriage return for no change, is then output to the video monitor from block A712. 
     The operator input in response to the prompt in block A714 is received by calling the subroutine READI which encodes the input ASCII character string into an integer variable ICNM in block A716. Continuing, the routine tests the value of the variable ICNM to determine which of the options the operator has chosen. In block A718, if ICNM is greater than one and less than or equal to six, then the operator has chosen one of the commands. Therefore, the program will transfer control to block A724 where these commands are decoded. Otherwise, if a carriage return is decoded in block A720, then the program returns to the calling routine. If a command or a carriage return is not recognized, then the program falls through to block A722 where the subroutine INPINV is called to output an invalid input character message. Thereafter, the program will loop back to block A712 where the prompt to enter the option number or carriage return is again given. 
     If a valid command has been given, the program begins the decoding process by determining if the variable ICNM is equal to 1 in block A724. If the answer is affirmative, the programs responds by branching to block A750 where the variable IOPT is set equal to 1. The program then exits and will cause a return to the command mode list. If the option chosen was not equal to 1, then in block A726 the third element of the VIEW array is set equal to the floating point value of the command ICNM. This stores the option input by the operator for use in the scan routine to produce real-time contrast imaging depending upon which option was selected. 
     In the subsequent block, A728, the subroutine tests for ICNM=2, which indicates that the option chosen is no color levels. If the test is affirmative, the programs exits; if negative, the program continues to block A730. At this point, the choice has been decoded into options 3, 4, 5 or 6, corresponding to the contrast displays. The programs then prompts the operator to input the low and high threshold values in blocks A730 and A734, respectively. He responds in blocks A736 and A738 by keyboard input and his input is displayed back to him in blocks A732 and A734, respectively, on the video monitor. The echo of his input allows him to determine if the values read by the system are those which were to be input. The inputs are validated for errors and if an error occurs in the input cycle, block A742 will intercept it by testing the error variable IERR. An error will cause block A744 to output an invalid input message before the program cycles back to redo the prompts in block A730. If the threshold values are found to be valid, then they are stored as the first and second elements of the array VIEW in blocks A746, A748, respectively, before the program returns to its calling routine. 
     The subroutine PULSE will now be more fully described with respect to the system flowchart in FIG. 20. Initially, the program chooses between blocks A754, A756 by testing the variable IPTH to determine whether it is equal to 1 in block A752. If IPTH does not equal 1, then the video monitor is cleared and the label &#34;pulse system&#34; is displayed in block A754. If IPTH is equal to 1, then the screen is not cleared and the operator is prompted with a message on the video display indicating that the system is in an internal pulse mode and he should enter a &#34;CR&#34; for an exit. Thereafter, the error value IERR is set equal to zero in block A758 before calling the subroutine MPULSE in block A760 which commands the ultrasonic circuit to pulse the transducer either at a rate previously set in the header or at a nominal 1 KHz rate. 
     Upon returning from the subroutine MPULSE the decisional block A762 is entered to determine if the value IERR is equal to zero. If the test is affirmative, then the pulsing routine has not detected an error and the system exits this routine. If a negative answer is given, the program continues in block A764 where the value IERR is tested to determine if it is equal to 11. If the condition is true, the program cycles back to block A760 where the system is again pulsed by calling the subroutine MPULSE. If at block A764 the value IERR is not equal to 11, then an output ITHK, and the amplitude IAMP, of the PULSE is displayed on the video screen in block A766 prior to returning to block A760. This gives the operator an option to display data points as they are being read and to determine why the system is not operating properly. To exit the pulse mode, the operator enters a carriage return, which produces an exit to the main command mode routine. 
     While a preferred embodiment of the invention has been illustrated, it will be obvious to those skilled in the art that various modifications and changes may be made thereto without departing from the spirit and scope of the invention as defined in the appended claims. ##SPC1##