Ultrasonic imaging system

An ultrasonic imaging system which is used to provide contact imaging of a component. A transducer is scanned across a workpiece to collect image data from a scan area comprising a plurality of pixels. Means for resiliently carrying the transducer with two separate degrees of freedom maintain a tight acoustic coupling between the workpiece surface and the transducer. The image data relating to each position in the scanned area describe the amplitude of a reflection and its depth from a reference. Means are provided for easily varying the size of the image area while the number of pixels remains constant. The system provides a real-time visual display of the scanned area while the transducer is moving over the area in contrast as either a grey scale or a color scale for each pixel. An automatic calibration mode for the sytem is provided as another feature to remove acoustic delay, caused by transducer coupling, from the image data. As an option to the calibration mode, the system provides for the translation of the scan area into a true proportional size for a radial mounting geometry of the workpiece.

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 "echoes" 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.

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" 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.times.200 array of locations for depth data and a 100.times.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.sub.t and an arm 
encoder 38 is used to determine the arm position P.sub.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 "PSM512P Multibus Parity DRAM User Guide", 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.times.1638 bit planes giving 
four bits per pixel of information. However, in the present configuration 
only 640.times.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 "Heurikon Video Display 
Controller User Manual", 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 
"MLZ-91A User Manual" 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 
-, 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.degree. 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.times.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.times.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 "F/P" to be loaded 
in the ICAL array. Similarly, the codes "DLY", "VC", "HCAL", and "Header" 
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 "SCAN" 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: "Do you wish to rescan?" 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 
"pre" 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.times.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 "Set U" 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 "Calibrate Scanner" prompt is issued in 
Block A406. Otherwise, for IPTH equal to 2, the message is "Calibrate 
Radial" 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 
"calibrate scanner" 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.times.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"33 4" and 20".times.40". 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 "FRONT PANEL" 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 
"Calibrate Front Panel" 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 "Calibrate Delay" 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).times.2.0.times.0.05] and the second product is 
(CALBLK.times.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 "Do Delay 
Calibration?" 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 
"Calibrate Delay" 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.times.10.sup.-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 
"Calibrate Delay" 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 "Calibrate 
Delay" 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 "Calibrate Velocity" 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.sub.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. 
EQU 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. 
EQU DT=(R/VC)(2T1-T2) (2). 
If the resolution is chosen as 2 mills/bit and the velocity constant is 
2.times.10.sup.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 "Set 
Up" 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 "pulse system" 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 "CR" 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##