SAND TESTING METHOD AND APPARATUS

Abstract: An apparatus (10) and method for testing the quality of foundry green sand. The apparatus includes three testing stations where filling (60), compaction (80), weighing (94), gas permeability testing (120), moisture testing (40), fracture testing (160), and shear testing (180) occur. Each station is automated and controlled by a computer programmed control system or controller (200). Known foundry sand testing formulas are entered into the system or controller which in turn receives input from each of the testing stations. The condition and quality of the foundry sand is output. A method for testing is also disclosed.

Description: --SAND TESTING METHOD AND APPARATUS-- Background of the Invention This invention relates generally to granular material testing structures and methods and refers more specifically to an automatic structure for performing a plurality of tests for foundry sand including determining the compactability and moisture content of a sample of foundry sand. It is a further development of the inventions of U.S. Patents 4,699,011 and 4,930,354. This invention provides a more comprehensive device to more fully automate sand testing. The applicant is not aware of any prior art that either teaches or shows the advantages of the invention disclosed and claimed herein. Summary of the Invention A granular material testing apparatus is disclosed comprising three test stations, a green sand cylinder having a load cell and a spring located underneath it mounted to a rail movement mechanism, and a computer program controlled system for controlling the various tests performed, interpreting the data resulting from each test, and providing foundry personnel with a print out of the sand's condition. The objective of the invention is to duplicate standard test methods with an automated testing apparatus. The computer program of the control system is used to control and conduct the various tests on the sand. It should be noted that the various tests, using the structure and methodology disclosed herein absent the computer program controlled system, may still be performed manually without departing from the structure and method disclosed herein. At the first test station the green sand cylinder is filled by a funnel filling mechanism or riddle to an overflowing condition with green or wet sand. At the bottom of the green sand cylinder is a piston mechanism which includes a spring and a load cell. After the green sand cylinder is filled to overflowing, the control program causes the green sand cylinder to be moved on its track so that it passes under an excess sand wiper which removes the excess sand so that the green sand cylinder is completely filled top to bottom and there is now a known volume of sand in the cylinder. The cylinder continues to move from the excess sand wiper to the green sand compacting station or second test station. At the green sand compacting station the green sand cylinder is positioned under a compacting cylinder having a piston. The piston is extended into the cylinder and the sand is compacted. The piston is extended at a known or predetermined pressure. The piston stops extending when the sand's resistance to compaction is equal to the predetermined extension pressure of the piston. The compaction of the sand is determined by measuring the amount of linear extension of the piston into the green sand cylinder. During compaction a significant amount of pressure is applied to the sand within the green sand cylinder and through the sand to the bottom of the green sand cylinder. As previously noted there is a load cell located at the bottom of the green sand cylinder. The load cell has a maximum mass capacity which is typically less than that of the force or pressure applied to the sand during compaction. To prevent damage to the load cell during compaction a spring is positioned under the bottom of the green sand cylinder. The spring, based upon the probable maximum pressure which could be produced during compaction, deflects sufficient pressure to prevent damage to the load cell. Springs of different k value may be used if it is desired to increase or decrease the amount of deflection. After compaction, the green sand compaction piston is retracted, and the gross mass of the cylinder and the sand is determined by allowing the cylinder to float freely on the load cell. The mass of the empty cylinder is a known quantity. Accordingly, the difference between the mass of the cylinder empty and the mass of the cylinder full is the mass of the sand. This mass is input into the computer programmed control system and is factored into the equations used to provide necessary information regarding the sand. After the mass of the sand has been determined the sample of compacted green sand in the green sand cylinder is raised approximately .5 inches (1.27 centimeters) in the green sand cylinder by extending the piston located beneath the green sand cylinder. The piston is then retracted. The bottom of the green sand - c cylinder is now open to atmosphere. Accordingly, the entire bottom surface of the compacted sand sample is exposed to atmospheric air pressure. At this point a compacted green sand gas/air permeability test is performed. After the green sand compression piston has been retracted a sealing plate is mechanically positioned over the top of the green sand cylinder. The plate is placed on top of the green sand cylinder and the compaction piston is again extended to press the sealing plate against the top of the green sand testing cylinder. This prevents air from escaping through the top opening of the green sand testing cylinder. Accordingly, the only exit for air from the green sand cylinder at this time is through the sample and out the cylinder bottom which is open to the atmosphere. Air/gas is now supplied to the top portion of the cylinder above the compacted green sand sample. The air/gas is supplied at a fixed or known or predetermined pressure and the rate at which it passes from the top of the green sand sample, through the green sand sample, and to the bottom of the green sand sample is measured. Please note that while it is preferred that the sand sample be raised in the green sand cylinder so that the entire bottom surface is exposed to atmospheric air pressure, this need not be done to practice this part of the present invention because a calibration constant could be introduced into the permeability equation to take into account the fact that the entire bottom surface area of the green sand sample is not exposed to atmosphere. At the end of the gas permeability test the gas is turned off, the green sand compaction piston is retracted, and the sealing plate is removed from the top of the green sand cylinder. The green sand cylinder containing the sample is then moved to the green sand compression strength and moisture testing station. At this station a predetermined portion of the compacted green sand sample is extruded from the cylinder by extending the piston located beneath the green sand cylinder so that the predetermined portion of the sample is positioned in front of at least one microwave projector. It should be noted that a single microwave projector capable of performing in a manner which provides a result equivalent to the microwave projectors disclosed in the detailed description may also be used. A microwave signal is projected at the extruded portion of the green sand sample. If there is moisture in the sample it will absorb the microwave signal energy. This will cause the attenuation of the microwave signal (i.e. reduction in the signal amplitude). The reduction is proportional to the amount of water in the sample. This information is recorded in the computer and reported as a moisture level number based upon the formula disclosed below in the program controlling the apparatus. After the moisture level test, either a green sand shear test or a green sand compression test may be performed. If the shear test is desired, a shear test piston contacts the side of the extruded sample. Again pressure is increased until the sample is sheared and destroyed. The result is recorded by the computer. Alternatively, or additionally, the green sand compression or strength test may also be performed wherein a green sand compression piston is applied to the upper or top surface of the extruded sample and pressure is applied to deform the sample. This deformation is measured in real time by a linear transducer, which measures the displacement of the cylinder extension or piston extension, to measure the deformation of the sample sand plug when increasing pressure is applied. Consequently, the deformation characteristics of the sample may be measured in real time while the sample is under pressure before fracturing at the green strength limit. Additionally, the linear transducer may be used to measure the height of the sand plug (the compacted green sand sample) to within plus or minus .0002 inches (.000508 centimeters). The linear transducer may be used to do this in at least one of two ways. The first way includes having a separate linear transducer connected to the piston located beneath the green sand cylinder so that as the predetermined portion of the sample is extruded from the cylinder, the extension of the piston located beneath the green sand cylinder is measured and controlled so that only two inches (5.08 centimeters) of the green sand sample plug is extruded. Alternatively, the linear transducer connected to the green sand compression piston may be used where the piston head to which the linear transducer is connected is placed on the top opening of the green sand cylinder and this position is noted via the linear transducer in a computer program. The piston head is held in this position either by gravity or with just sufficient retractive force so that while the piston head is not lifted away from the opening its effective weight is relatively small so that as the sample is extruded the piston head is lifted and the linear transducer continuously communicates to the computer program the distance the sample has been extruded by constantly recording the relative position of the piston head. This information is continuously fed into the computer. The computer causes a signal to be sent to the green sand cylinder when the position of the cylinder head is determined to be, from the data supplied by the linear transducer, that two inches (5.08 centimeters) of sample have been extruded. A third alternative is that two linear transducers, one connected to the cylinder head above the green sand cylinder and one connected to the piston in the green sand cylinder could be used simultaneously as previously described above to measure the amount of sample extruded. Upon contact with the green sand sample by the cylinder head the relative deformation increase is noted by the linear transducer continuously as extension of the piston occurs and pressure within the cylinder increases until fracture or final deformation of the sample occurs. This also allows constant monitoring of the deformation and rate of deformation of the sample so that a distinction may be drawn empirically between deformation and sample fracture. Alternatively, or additionally, the linear transducer of the present invention could also be used in an additional test wherein the compressive force caused by the extension of the cylinder is modulated such that initial pressure is applied to the green sand sample and then released and then applied again and released therby continuously measuring the elastic reaction of the sand sample plug in real time by noting the springiness or expansion after compression of the sample plug in response to the modulation of the pressure applied to the plug. This compressive force is used to determine the limits on the elastic range of the plug by applying the modulated compressive force until there is no longer an elastic reaction from the green sand sample. The information recorded by the linear transducer in real time is communicated in real time to a computer control system. The program is capable of producing an output to provide real time information regarding the deformation of the sample prior to fracturing of the sample as well as providing an extremely accurate reading of the size of the sample. The green sand cylinder is then returned to its starting position underneath the filling station and the remaining sand sample in the cylinder is discharged so that the cylinder is empty and ready for a new test. The present invention is fully automated and simple to operate. The 5 automatic nature of the apparatus increases efficiency and frees the tester for other functions. However, these tests could be done using the mechanical apparatus only independent of the computer program control. Accordingly, practicing the present invention is not dependent upon using the unique structure and method disclosed herein only in conjunction with the computer program. The use of the computer l o control program is preferred because it increases the speed of the testing to a level that is faster than if done manually. These and other benefits will become evident to one skilled in the art from the following descriptions. Description of the Drawings Figure 1 is a perspective view of the sand testing apparatus. 15 Figure 1A is a front elevational view of the and testing apparatus. Figure 2 is a front elevational view of the sand testing apparatus filling station. Figure 3 is a front elevational view of the sand testing apparatus compacting station including a partial cutaway section of the sand sample raising mechanism. Figure 4 is an exploded view of a portion of the partial cutaway section of Figure 3. 0 Figure 5 is a front elevational view of the sand testing apparatus compacting station. Figure 6 is a front elevational view of the sand testing apparatus compacting station showing the sealing plate in position. Figure 7 is a sectional view of the sand container showing the raising piston moving 5 in an upward direction. Figure 8 is a sectional view of the sand container showing the raising position in a retracted position. Figure 9 is a partially cutaway view of the sand container showing the sealing plate in place. 0 Figure 10 is a partially cutaway view of the sand container showing the introduction of gas above the sample. Figure 11 is a partially cutaway view of the sand container showing the sand sample and microwave projectors. Figure 12 is a partially cutaway view of the sand container showing the sample and compacting tool just prior to sample destruction. Figure 13 is a side elevational view of the sand testing apparatus including the control panel. Figure 14 is a rear elevational view of back of the sand testing apparatus. Figure 15 is a schematic view of the microwave equipment of the sand testing apparatus. Figure 16 is a side elevational view of the green strength testing station showing a linear transducer coupled to said station. Detailed Description Although the disclosure hereof is detailed and exact to enable those skilled in the art to practice the invention, the physical embodiments herein disclosed merely exemplify the invention which may be embodied in other specific structure. While the preferred embodiment has been described, the details may be changed without departing from the invention, which is defined by the claims. The present invention comprises a sand testing apparatus and method for testing sand. The invention functions by testing a sample from a bath of foundry green sand. The characteristics and quality of the sand are determined. This data output is then compared with the desired characteristics and quality level desired in the sand and is used to initiate the necessary changes to achieve the optimum foundry green sand, if necessary. The invention and its related structure is shown generally at 10 in the Figures. The sand testing apparatus 10 includes a frame 30, a moving mechanism 40, a sand container 50, a filling station 60, a wiping station 70, a compacting station 80, a moisture testing station 140, a fracture testing station 160 and a shear testing station 180. The invention 10 can be seen as a whole generally in Figures 1, 1A, 13, and 14. Each of the above noted testing stations and their respective components are shown in detail in Figures 2 through 12 and 16. Figure 15 is a schematic diagram of the moisture testing apparatus using microwave projectors. Referring to Figure 1, it can be seen that sand testing apparatus 10 includes a frame 30 upon which is located a moving mechanism 40. Moving mechanism 40 includes a table 42, a pneumatic cylinder 44, a pair of table guides 46, and a pair of rails 48. The table guides 46 are attached to the underside of the table 42. The rails 48 pass through the table guides 46. When pneumatic cylinder 44 is extended or retracted, table 42 moves along rails 48 accordingly. Situated upon table 42 is a sand container or specimen tube 50. In the preferred embodiment, the sand container 50 has a cylindrical interior chamber. However, it should be noted that the interior chamber could comprise any suitable geometric shape. The walls 52 of container 50 must be of suitable thickness so that when the contents of the container 50 are placed under pressure, the container 50 will not fracture. The container 50 furthermore has an open top 54 and an open bottom 56. Now referring to Figure 2, the filling station 60 of the sand testing apparatus 10 is shown. Filling station 60 includes a riddle 62 into which green sand 22 to be tested is placed. The riddle 62 has a funnel-like design including an open top 64 and a smaller output chute 66. When the container 50 is located in the filling station 60, output chute 66 is located directly above open top 54 of container 50. A valve 68 is located in output chute 66. When valve 68 is opened, green sand 22 is dispensed from riddle 62 into container 50. The valve 68 is left open long enough for the sand 22 to fill container 50 to an overflowing condition. Once container 50 has been filled to an overflowing condition with sand 22, valve 68 is closed. Next, moving mechanism 40 is engaged and table 42 moves in a linear direction on rails 48 such that the top 54 of container 50 passes against wiping station 70 in wiping contact. Wiping station 70 comprises a wiping blade 72 having a wiping edge 74. Wiping edge 74 comes within substantial wiping contact with top 54 of container 50. Thus, the green sand 22 that resides above and outside of container 50 is wiped away off of the top 54 of container 50 by wiping edge 74. The excess green sand 22 falls into a collection bin which is located within sand testing apparatus 10 just below filling station 60 on frame 30. The wiping station 70 assures the reliability of each test performed since the amount of sand 22 place in the container 50 will always be of the same volume. As moving mechanism 40 continues to move table 42 upon which container 50 is permanently attached, container 50 moves to a second position directly beneath the compacting station 80 Figure 1 shows container 50 in the compacting station 80. When container 50 reaches this location, moving mechanism 40 stops. At the compacting station 80, the sand container 50 is positioned directly beneath a compacting cylinder 82 Compacting cylinder 82 includes a cylinder ram 84 and a compacting tool 86. Compacting tool 86 is located on the end of cylinder ram 84. The cylinder ram 84 and compacting tool 86 are extended downward and outward from compacting cylinder 82 and into container 50. As compacting tool 86 enters container 50, the sand 22 is compacted into a sand sample 20. The cylinder ram 84 and compacting tool 86 stop extending when the compacted sand 22 exhibits a resistance to the compaction that is equal to the predetermined extension pressure of the compacting cylinder 82 This position is maintained for a predetermined period of time. The compaction of the sand 22 is determined by measuring the linear extension of the compacting tool 86 into the sand container 50. The pressure of compaction is a constant In the preferred embodiment, the specific dimensions of the sand container are 4.75 inches (12.06 cm) in height and 2.0 inches (5.08 cm) in diameter. If the compacting tool 86 has extended 2.375 inches (6.03 cm) into the container 50, then the compression of the sand 22 is considered to be 50%. Now referring to Figures 3 and 4, it can be seen that container 50 further includes a plate-like floor 90 which fits shdably with container walls 52. Floor plate 90 can be raised and lowered by rod 104 which extends and retracts into cylinder 102 of rising mechanism 100. Cylinder 102 is mounted on table 42 and extends downward therefrom. Floor plate 90 in turn is supported above rising mechanism 100 by a spring 92 and load cell 94. To stabilize the load cell 94 and provide a flat surface upon which the load cell rests, a dowel 93 may be inserted between the spring 92 and load cell 94. During compaction, a significant amount of pressure is applied to the sand 22 within the container 50. Said pressure passes through the sand 22 to the floor plate 90 of the sand container 50. This pressure is measured by the load cell 94 located just beneath bottom plate 90. In the preferred embodiment, the load cell 94 has a maximum capacity of 1000 grams. To prevent damage to the load cell 94 during compression or compaction, a spring 92 having a k value of 44 lbs. per inch (19.98 kilograms per 2.54 centimeters) is positioned under the bottom plate 90 of the sand container 50. The spring 92 deflects sufficient pressure to prevent damage to the load cell 94. After the compacting cylinder 82 completes compaction, the compacting cylinder ram 84 and compacting tool 86 are retracted as shown in Figure 5. At this point the sand testing apparatus 10 measures the mass of the sand sample 20 in container 50. The gross mass of the container 50 and sand sample 20 is determined by allowing the filled container 50 to float freely on load cell 94. The mass of the container 50 is known quantity. Accordingly, the differences between the mass of the container in an empty state and the mass of the container in a full state equals the mass of the sand sample 20. This mass is input into the controller 200 of the sand testing apparatus 10. Now referring to Figure 6 through 10, a gas permeability test is next performed on the sand sample 20. The equation utilized is Permeability = h /(p x a) x (v / 1) where h is the specimen height calculated from compactability, p_ is the pressure head (a constant), a is the specimen area (a constant), and v / 1 is the air volume flow rate. This equation is found in the American Foundrymen's Association Mold and Core Test Handbook and is incorporated by reference into this specification. This is the accepted industry standard with respect to green sand testing. The air volume flow rate is measured by a mass flow meter calibrated to read out in standard liters per minute (SLM). The operating principal of the mass flow meter is based on heat transfer and on conservation of energy. A constant known heat is applied to the flow stream whose change in temperature is measured. Since the thermodynamic state and rate of energy addition to the flow stream is known, the rate of mass flow can be calculated. Given the mass flow rate and assuming standard atmospheric conditions, the volume rate of flow can be calculated by the controller 200. Referring specifically to Figure 6, after compacting tool 86 has retracted a predetermined distance, sealing plate 120 is positioned between compacting tool 86 and container top 54. Sealing plate 120 is connected to sealing plate ram 122 which is in turn connected to sealing plate pneumatic cylinder 124. When cylinder 124 is activated, ram 122 is extended from cylinder 124 and sealing plate 120 is moved into position between compacting tool 86 and container 50 top 54. Now referring to Figure 3 and 7, it can be seen that a sample raising mechanism 100 is located beneath sand container 50. Sample raising mechanism 100 includes a pneumatic cylinder 102, cylinder ram 104, and slidable floor plate 90. The sand sample 20 is next raised within sand container 50 approximately .5 inches (1.27 cm) by plate 90. This is shown in Figure 7. Now referring to Figure 8, plate 90 is retracted from the bottom of the sand sample 20 which is still located within sand container 50. When plate 90 is retracted, the bottom of the sand container 50 is open to atmosphere. Accordingly, the entire bottom surface of the compacted sand sample 20 is exposed to atmospheric air pressure. Now referring to Figure 9, the position of sealing plate 120 covering the top 54 of container 50 is shown. As shown in Figure 10, compacting tool 86 holds sealing plate 120 in sealed contact with container 50. This prevents air from escaping through top opening 54 of the sand container 50. Accordingly, the only exit for air from the sand container 50 at this time is the bottom 56 of container 50 which is opened to atmosphere. As shown by the arrows in Figure 10, air/gas is now supplied to the top portion of the container 50 above the compacted sand sample 20. The air/gas is supplied at a fixed or known pressure and the rate at which it passes from the top of the sand sample 20, through sand sample 20, and to the bottom of the sand sample 20 is measured by the mass flow meter. While it is preferred that the sand sample 20 be raised in the container 50 so that the entire bottom surface of the sample 20 is exposed to atmospheric air pressure, it is not necessary that the sample 20 be raised to practice this part of the invention because a calibration constant could be introduced into the gas permeability equation utilized by the controller 200 to take into account the fact that the entire bottom surface area of the sand sample 20 is not exposed to atmospheric pressure. At the end of the air/gas permeability test, the air/gas is turned off, the compacting tool 86 is further retracted, and the sealing plate 120 is removed from the top of the sand container 50. The moving mechanism 40 is again energized and the table 42 upon which the container 50 is fixedly attached is moved to the third station or sand moisture testing station 140. Now referring to Figure 11, it can be seen that plate 90 is again energized and raised thereby extruding approximately 2.0 inches (5.08 cm) of the sand sample 20 from the sand container 50. The extruded portion 24 is positioned between a pair of microwave projectors, 142. A microwave signal in the frequency range of 10.525 Gigahertz and having a power of 10 milliwatts is projected at the extruded sand sample 24. A MACOM part number MA86751 X Band gun oscillator generates the microwave signal. A MACOM part number 8R22G-5001 Isolator having a range of 10.425 - 10.625 Gigahertz is mounted to the transmitter to provide protection for the transmitter for any reflected microwaves. A MACOM part number MA86654 X Band horn is attached to a MACOM part number MA86562 X Band sensor that receives the microwave signal. A MACOM part number MA40194 super sensitive Schottky diode is substituted for the standard diode that comes with the MACOM part number MA865562 X Band sensor. The moisture in the extruded sand sample 24 is sensitive to the 10.525 Gigahertz frequency. The moisture attenuates the signal being transmitted to the receiver. The attenuated signal has a logarithmic relationship to the amount of water in the extruded sand sample 24. The Schottky diode converts the microwave signal to an electric signal that is massaged and processed through an electronic circuit board to provide a signal back to the controller 200. The invention 10 uses the signal from the microwave and the density (as previously calculated) to finally determine the percentage of moisture in the sand sample 24. If there is moisture in the extruded sample 24, it will absorb the microwave energy. This will cause the attenuation of the microwave to change in a manner that is proportional to the amount of water in the extruded sample 24. This information is recorded by the controller 200 and is reported as a moisture level amount based upon the above noted formula utilized by the controller 200. Next, either the fracture or shear of the extruded sample 24 is measured by the sand testing apparatus 10. If the fracturing test is chosen, the fracture testing apparatus 160 fractures the extruded sample and records the fracture pressure. Apparatus 160 includes a pneumatic cylinder 162, located above microwave projectors 142, having a piston 164. The cylinder 162 is energized and its piston 164 begins to lower toward extruded sample 24. The piston 165 of the cylinder 162 continues to extend until it makes contact with the upper or top surface of the extruded sample 24. The pressure in the cylinder 162 is increased until the sample 24 is fractured. This test destroys the sample 24. The pressure at fracture is recorded by the controller 200. Referring to Figure 16, the green sand compression test may also be performed wherein a green sand compression piston 86 is applied to the upper or top surface of the extruded sample 24 and pressure is applied to deform the sample 24. This deformation is measured in real time by a linear transducer 302, which measures the displacement of the cylinder extension or piston extension, to measure the deformation of the sample sand plug 24 when increasing pressure is applied. Consequently, the deformation characteristics of the sample 24 may be measured in real time while the sample 24 is under pressure before fracturing at the green strength limit. Additionally, the linear transducer 302 may be used to measure the height of the sand plug 24 (the compacted green sand sample) to within plus or minus .0002 inches (.000508 centimeters). The linear transducer 302 may be used to do this in at least one of two ways. The first way includes having a separate linear transducer (not shown) connected to the piston located beneath the green sand cylinder so that as the predetermined portion of the sample 24 is extruded from the cylinder 50, the extension of the piston 90 located beneath the green sand cylinder 50 is measured and controlled so that only two inches (5.08 centimeters) of the green sand sample plug 24 is extruded. Alternatively, the linear transducer 302 connected to the green sand compression piston may be used where the piston head 86 to which the linear transducer 302 is connected is placed on the top opening of the green sand cylinder 50 and this position is noted via the linear transducer in a computer. Following is the preferred computer program: /• 4 12 96 SANDMAN Im nth logic ulϋ.ing 2 position testing Ihe 10 usoge a os follows - 6 onαiog nputs (ol ore 1 bit in the processor) 1 Compoctαbilily Ineor transducer 12 bit AI -0 2. Compαclobility pressure transducer (0-60 psi) 12 bit A1C-1 1. Green Strength pressure transducer (0-60 psi) 12 bit AIC-2 4. Moisture 12 bit A1C-J 5. Weight signal 12 bit AJC-4 6. Permeability (low meter (0-10 SLPU) 12 bit AC-5 7. Permeobilrty pressure (0-5 W.C.) 12 bit A1C-6 8. Green Oeloimotion ϋneor Ironsducer 12 bit AIC-7 - i onolog outputs 1 Permeobilily lest pressure (0-5 C ) 17 bit A C-0 2 CoπpoctabiMy lesl pressure (0-60 psi) 12 l.il AOC-I i. Green strength test pressure (0-60 psi) 12 bit AOC-2 4. Spore - 7 digital outputs (the numbers refer to the bit number on Ihe output word) 1. lable travel 0-0 2. Stop ot eject 0-1 4. Permeobiltty seal 0-2 8. [itend test cy&ider 0-3 16. Eject cytader 0-4 32. Hold ot eject level 0-5 64. Clean off cylinder 0-6 128. PermcobiUif Pressure 0-7 - 2 d.ijϋol inputs (when the input is on, the processor sees the bit as off) 1. 2" limit swfch 1-0 2. Plug broke Emit switch 1-1 4. Start Cycle 1-2 8. Spare •/ include <8051M.h> include <80S1blh> include <805l».h> include <805lreg.h> define IcdjlataJr ((unsigned choπ)0ιa080 define laUotaJr "(unsigned char<)0ιa081 define Icd-readJr '(unsigned dιon)Oxo082 define lcd-xontrol •(unsigned chon)0ιa090 define tιputs.1 '(unsigned chart )0ze000 define outputs- 1 '(unsigned chaπ)0ιe010 , define modeport.1 '(unsigned chor«)0ιe003 /define modeporL2 '(unsigned chor')OιeOI3 ' define keypad '(unsigned char<)0xo0o0 define seconds I '(unsigned char>)0>c070 define secondslO '(unsigned chor')0xc07l define minutes! '(char')0_c072 define minuteslO ι(chon)0xc073 deline hours I ι(chor')0ιcO74 define hours 10 •(char«)0-c075 define doyl »(chor')0ιe076 deline doylO '(chor')0ιe077 define monlhl ι(chor»)Oιc078 define monthlO '(chor')Oιc079 define clock-f '(unsigned chor«)0xc07( define pcrm-press-out '(unsigned chor<)0xc040 deline pcrm_prcss__)ul_msb '(unsigned c ar<)Oιc0.1 deline gs.prcss.oul '(unsigned chor')OxcOGO define g__-P.es___xuLn.sb '(unsigned c or>)0ιc061 define comp-__p.tss.ou! '(unsigned char<)0xc042 define comp-pressjuLmsb '[unsigned chor>)0xc043 define dummy.wnte.oi '(unsigned chan)0ιc010 /' this is the end of conversion register for Ihe AN/ deline dummy.wπl-Lcol '(unsigned chof>)0xc020 /• this is the end of conversion register lor Ihe Λl>/ define dummy.wπlejiichonncl '(unsigned chor<)0xc000 /' Ihis is lospccify what channel is going lo be rcod voluc is posscd bock in (his register'/ deline dummy.wnte.ooJ) I '(unsigned chonlOicOSO /' Ihis is the register lo write to lo transfer ΛO dolo chonnels Oil '/ define dun_my.wnlc.aoJ3 '(unsigned chor')θxc070 /> this is the register lo wπlc lo lo transfer AO dote channels 2Λ3'/ deline LSIZE 2 /' 32 bit numbers •/ register int tempi [LSIZC). tcmp2[LSIZ[]. lcmp3(lSIZEj. ml entered-value, enlered-counter, entry-wos-tralid, ml key_pressed, blonLspace. vJength. overalUenglh, ml comp-slopc. compjnlercepl.comp-prcss. moisture-slope, moisture-intercept, ml hi, h2. h3, h4, value, loop, stπngJength, counter ml vip.value. coLpressurc. reading, ml somples, quiclϋimcr, holding. plug-brco psi. ml channel-selected, test, enoble_dιsploy, mt specmerLdensity, 5pec_T.en___he.qhl, calibratcdilow.pcrcenLheight, mt heιght__xJtow,peπτun,perm__out.perτπ-sp.ιntegral.kι,kp,pιd-oul.busy,dcf_jot-L_mo<, ml moιsϋιgg.moιsL_ιno-θq,seπaLcount.ncgot-ve,dcf nlercepl,def-jlόpe, ml lwo nchJιmιt.plug-brokcJιmιt,comp.press nιn, unsigned ml analogJemp nsb, onolog-lempJsb. onalogjnax, dummy.onolog, somplcwcight, unsigned mt βvcweight, ovc-wcighLsiς. weight-slope, weighϋnt. specimen-weight, unsigned mt mes-comp, meunoisture, mcs_green_strength, mes__permeabιlιly. unsigned mt mulleulficiency, working-bond, ovaιloble-bond,anolog, unsigned mt delormolιon,toughness,pcπτLflow-sum.av__peιm__/low l mo O lmer(l), horoclers •/ '/ addrress on LCD >/ ======== ./ chcc busyJcdO lcd.pnnt(messαge,vonoble,decιmol,center) /• Routine to display characters in 'messoςe' ■/ mt vofwble, decimal, center; char mcssoqc[20], /* (ollowcd by o number 'vanable' with «/ I /' not pπnl ony niinibcrs/dccimols Ihe bnc con •/ /• be centered be cnlcrmg a I as Ihe ccnlci ■ /• variable Ihis wiH olso give a line leed •/ /' Determine the number of the choroclers •/ /' Determine the length ol the number to print i/ /• Determine the length of the entire string •/ /• If a decimal is used, odd 1 to the length ■/ blon space=(20-ovcroiUcngth)/2. '• Determine the spoces needed for centering >/ il (cenler==1)| / '' check if cenleπng is asked for •/ lor (kjop- 1, loop<=blonLspoce. ioop++)| /' loop lor adding spaces to left ol string •/ Icd-ιjota--lr=0ι20, /' Output a "space" to the LCD ■/ strobcJcd-dataQ, chccLbusyJcdt), /' Loop lo print the 'message' by choroclers •/ /• Loop to print the entire 'varnble' /• Print deci ol at desired location /• Calculate Ihe 4th digit Irani nghl •/ I ::=:;r;:::::::::sti&iss3iiEit:: " 'I /■ Wort for o menu item (1-4) to be selected •/ k>b__ycle() /• inaψit TRAVEL 10 TEST POSmOlf loknoid ./ /' Calculate the measured coiπpaclobilily /■loop insures strain gage equilibrium'/ /•difference bclwwen consccluive readings < OOJVOC'/ /• 335 get onolog for specimen weight </ /• Start permeobility test /• Stαit permeability lest •/ /• Eject Is to raise plug for perm •/ /. Extend 'PERMEABILITY SEAL" /• Start permeability test •/ /' Cleor permeability flow "fifo" sum '/ 7cm2 '/ •/ /> Retrod 'PE UEAϋlUFY SEAL /. Extend STOP AT EJECT cylinder /• Allow toble to trovel towards sample /' Start electing plug /• Energize HOLD AT EJECT LEVEL oir/oil 4 (counter<20)) /• Wait lor the 2" limit switch uie •/ '/ /• start pπnl out pidJoopO mt loop,tempLin.error; lor(loop=0,loop<13,loop++) systemjnfoO syslenunenu cleαr-dsplσyO. /' deploy system mlormαtion menu •/ nrtnle-enlryf), tcd_pπnl("Syste_n Info Uenu",-l,0,l), lcd-prml "2 - lest NumberVI.O.I). ki pπnl "I - r«ne/0ole",-l.0.1), lclpπnt("3 - Cαlib Report",- 1,0,1), enoNe_dιsploy=0, while ((key_pressed>0«32Ikey^ressed<0x30))| /. woit for I -3 to be pressed •/ i (key-pressed==0x3e) goto syslenunenu, /■ i PREV UENU is pressed, return to main menu •/ if (key.pressed"0x3o) goto system-end, /' deploy time/dote menu '/ /• wait for 1-3 to be pressed •/ /■ i PREY MENU is pressed, ran system info menu'/ /■ enter time subroutine ' reset data entry value / ' ' enter Ihe hour in ifitory fomiot /■ pressing CLR will reset Ihe entry /> check if Ihe hour has 2 digits /• set the 10s digit lor Ihe hour lime /• set Ihe Is digit lor the hour lime /• hour has only I digit /• set the hour lime 10s and Is digit reset data entry value / • ' enter Ihe minute /■ pressing CLR will reset the entry /• check if Ihe minute has 2 digits •/ /• set the 10s digit lor the minute time /• set the 1s digit for Ihe minute time /• minute has only 1 digit /• set the minute time 10s and Is digit /• return lo system info menu /• enter date subroutine '• reset the data entry value / '< enter the month /■ pressing CLR will reset the entry /• check to see if the month has 2 digits /• set the 10s digit of the month /■ set the Is digit ol the month /• the month has only 1 digit /' set the month 10s and Is digit reset the data entry value / • ' enter the dale/day of month /• pressing CLR will reset the entry ■ i /• check to see if the dole has 2 digits '/ /• set the 10s digit of the dale /' sel the I digit of the dole /■ the date has only I digit day 10=0, day Centered. value, /• set the date 10; and Is digit goto syslenunenu, /• return lo system info menu if /• display lime/dote subroutine goto system-end, /• test number features /• wait for 1 or 2 to be pressed '/ /• display test number subroutine •/ /• wait for PREV UENU to be pressed systemjnd, /> reset test counter subroutine •/ Iιmeι.2). l \ ι:ιιι tt ιι::xs:xιx: E i CE iι:t 3 i:s(s 3 i--:sE:szi 3 i_:sιs 3 iιιιιιi 3 :- E i tEt sxι: 3 >sxs 3G iιιιι:ι_:i3tιι»:::ιtiιιtι:ιιιsειιι:jιιi ϊtt ssι iHini %j E3t3:333t3tsH£s:s»sxx:s:Extι:3i3i:3:::3s:E:sxtt:3:3Z3i333i3st:i3sι:zιi33tιι:::ι:::::sιsExιt:sιctS3S3x»tH£ttιιι • I /' Wait for 35PSI to be reod Irom the transducer'/ /•loop insures strom gage equilibrium'/ /•difference betwwen consectuwe readings <.003VDC'/ fctprml(" cvcr Stobili-ed".- !.0. ! ), ! else cleor j JisployO, Icd-pnnt ("Specimen Weight",- 1 ,0, 1 ), lcd_pππt("",spec-τιeruwcιghl,0,1), lcd-pπnt("Crαms".-1,0,l). kd_pnnt("Λnolog ".ove-weighLsig.O, I ). outpuls.1i=~1, t.mcrflO) outputs_1|= 16, tιmer(15). outputs.14:=- 16. c-cαr.dιsploy(). Icy pressed =0. colibrotonQ I cαlib-rnenu cleor-dιsp.oy(), /• deploy calibration menu initiαte-enlryO. enoble_dιsplαy=0, lcd-prιnl("1-Compoclobιlιly".- 1,0,1). lcd_prιnl( * 3-Crecn Slrcnglh",-1.0.1). lcd_prιnl("2-Mooture",-1.0,l). Icdjinnt -Weight".- 1,0.1), while ((key-pressed>0x33)||(key.pressed <0ι30))| /> wail for 1 -3 to be pressed </ i ((key-pressed==0 3e)|(kcy-pιessed==0x3α)) goto colib-end, /• if PREV MWU is pressed, return to mom menu '/ il (key-pressed==0_30)| /• compoctobility cokbrolion is chosen ■ / cleαr-displαyQ, /• display co p calibration menu '/ initntuntry , enαble-dιsploy=0, lclpπnt(Tompoctobιlιly".- 1 ,0.1), _cd_pnnl("l-Slp/lnt/P_s",-1,0,1), chec busyJcdt). Icd-pπnl ( "Cαϋbrαt ion Menu".- 1.0.1 ). k ( __prιnt|"2-Check Plug",-1.0.1). while ((key_presscd>0x31)||(kcy_prcsscd<0 30))| /' choose slope/intercept or check plug ιl (key-ptcsscd==0x30)| /• slope intercept is chosen •/ cieαr-disployO, /' disploy compoctobility slope/intercept menu '/ imtnte-enlryO. enoble__dιsploy=0, lcιLprιnl("Coπ.poctαbιlιly" - 1 ,0, 1 ), Ictpπnl "1-Sct Slp/lnt/Prs",- 1,0.1), lcd_pπnl("Slopc/lnler Menu", -1,0.1). Icd_prιnt("2 -Check Slope/Inter". - 1 ,0, 1 ), while ((key-pressed>0x31)li(kcy-presscd<0ι30))j /' choose sci siopc/int or check slope/mt ■/ /' set compαctcbility slope/mlcrccpt is chosen •/ reset data entry value •/ enter compoctobility slope 100 from keypad •/ /' pressing CLR will reset the entry •/ • reset the dota entry volue •/ ■' enler compoclabilty intercept from keypad ■/ /• pressing CLR will reset the entry •/ /• reset the dota entry value •/ /• enter compaclobrlty pressure Irom keypod '/ /• pressing CLR will reset the entry •/ /• check compactobrlity slope/mt is chosen /■ display compoctobility slope/intercept •/ /• display info until PREV MENU is pressed •/ if (key_pressed==0x31)| /> check compoclabilty plug subroutine cleauJBpleyO, mitpate j ntryO, fcd-pnnl("Ploce a plug ιnlo",-1,0,1), fcd_pnnl("STΛRT when reody".-1.0.l). Icd_pπnt("the tester and press",- 1,0,1 ). whιle(«ιpu heck(4)!= l)|| cleor-display(J, /' move table to test position /• check to see if 35 PSI hos been generoled '/ /' increment counter every second and slop test '/ /■ alter 20 seconds due to low lest pressure •/ /• calculotc plug compoctobility •/ /• retract test cylinder / /ιι mmoovvee ttaabbllee bboocckk lloo ssoample position /• display results until PREV MENU is pressed ./ /• moisture calibration is chosen /• deploy moisture calibration menu while ((key_prcsscd>0x 1 )||(key__presscd <0_30))J /' choose sci slope/mt or check slope/mt "/ if /• set moisture slope/intercept is chosen •/ • rescl dαlo entry value ■/ > enter moisture slope'100 from keypod ■/ Slope"), /• pressing CLR will reset entry voluc •/ reset data entry volue ■/ i' enter moisture intercept Irom keypod •/ Intercept"), /• pressing CLR will reset entry volue •/ ιl (kcy.prcsscd==0s3l)| /' check moisture slope/intercept is chosen •/ cleor JisployO. kt mntrnaSTURE SLOPE/INTER", - 1.0.1 ). IctLpnnlrSlope - ",mosture-slopc,0,l), Icd-pnnt " ".-1,0,1). kd_pnnt("lnter - ".moisturcjnlercept.O.I), while (kcy-presscd'=0ι3e)| /• display info until PREV UENU is pressed '/ goto colib-menu, if /• green strength calibration is chosen •/ /• disploy CS calibration menu •/ while ((key_pressed>0ι31 )||(key_prcsscd<0x30))| /> choose set pressure or check pressure /• set pressure is chosen ' reset data entry value / • >' eein " ter G " S pressure from keypod /• pressing CIR will reset the entry value :/ dummy-wrιte-ao-23=C. ιl /> check measured pressure is chosen ■/ /' disploy pressure until PREV UENU is pressed '/ goto cαl-b-mcnu, it (kcy.prcssed==0ι33)| /• weight calibration is chosen clcor.disployft, /• display weight calibration menu inilnte-cnliyt), enabled ιsploy=0. lcd_prιnt("Weιght",-1.0,1). Icd-pnnt "1-Scl Slope/lnterc",- 1.0.1). lcd_pπnl("Colιb.olιon cnu".- 1 ,0,1 ). Icd-pnnl("2 -Check Slopc/lntcrc".- 1.0, 1), while ((kcy-pressed>0ι3l)||(kcy.prcsscd<0ι30))! /• choose set slopc/int or check slopc/inl if /' set weight slope/intercept is chosen /' reset data entry volue /■ enter weight slope' 100 Irom keypad /• pressing CLR will reset entry value ' reset doto entry value •/ ' enter weight intercept from keypod •/ /• pressing CLR will reset entry value •/ if (key-pressed==0ι3l)| /• check weight sEopc/sntercept is chosen •/ deor_dtspkiy0. kd_pnnt("Weιght SLOPE/INTER".-1.0.1). kd-pπnt("S >pe - ",weιghLslope,0,l), kr pnnt " ".-1.0.1). kd-pπnl("lnler - ",weιςh l.0.1), while (key_pressed!=0ι3c)| /• disploy info until PREV MENU is pressed •/ goto colib-menu. /■ wait for ready •/ /• wait lor ready •/ /• woit lor rcody ■/ /' wart for ready '/ /' woil for ready '/ /• wait for ready •/ /• wait for ready •/ /' wait lor ready >/ /< wait (or ready •/ /• wail for read '/ /• woit lor reody •/ /' chonnel is written to, all channels hove >/ check-pressf) to check system press •/ keypod-entιγ(ιnessoqe) /• Routine to allow doto entry, 'messoge' will •/ char mcssoge[22]. /• be displayed before the input is asked for >/ /' display the desired message '/ /> Print blank spaces to center the input •/ /• Wait for 'enter' or 'clear' to be hit •/ /■ If 'clear' hit, return - 1 to re-enter value •/ /' If 'enter' hit, return Ihe value entered '/ pulseO /• generate a short pause for pulsing info /• to the printer for holding .-)! Ihe following is o list of the bits in the piogrαm that trigger inputs lo the printer porollcl-prιnl(message,varιable.dccιmal,lιnefecd) /• Routine to print the characters in 'message' •/ mt vanoble. decimal, linefeed, char messoge[20], /• followed by a number '.enable' with •/ /• not print ony numbers/decimals A linefeed ■/ hl=0, h2=0, h3=0. h4=0. /• con be generated by entering a 1 as the '/ /• 'indeed' variable vJen9lh=4, /• dertermine the length of the number to print •/ if (vonoble OOO) vJengllι=3. if (vorιoble<100) vJenglh=2. if (vonobleOOJ .Jcnglh=l, lor (loop=0, loop<=strlen(message)- l. loop++)| /• Loop lo print Ihe 'message by choroclers •/ if Imessage loop 4 0x01) setbil PI 0 /• eoch bit in the character hos its awn output •/ ιl (message loop 4 0x02 setbitl Pl I I , /• in the parallel cable port connector •/ if (message loop 4 0x04 setbitl Pl I.2 , t (message loop 4 0x08) setbit PI.3), message loop 4 0x10 sctbill PH , 'message k»P. 4 0x20 sctbιtι PI.5 , messoge loo 4 0x40) setbit! PI 6 , (messoqe loop 4 0x80) setbit P1.7 clrbιt(P S). /• clear strobe bit - octree low lo output dolo >/ pulsei), /' to printer ■/ clear j -ota-bitsO, if (vonoble'=-1)| /• bop to pnnl the entire vanoble /• loop to pnnt the decimal point /• calculate the 41h digit from Ihe nghl •/ /• calculate the 3rd digit from Ihe nghl •/ /• colculote Ihe second digit from the right •/ /• colculote the first digit from the right •/ ifvo.ue.-48) I 4 0x01) selbιt(PI.O), /• set appropriate bits to print the desired •/ [fvolue+48] I 4 0x0 setbιlfPI.1 , /' number lo Ihe printer •/ (volue+48) l 4 0x04) selbitl PI.2). (volue 4-48) I 4 0x08 setbιt(PI.3,' Yvolue+48) I 4 OxlO) setbit Pt.4 . ,(vo__e+48) I 4 0x20 setbitl PI 5 . '(vorue+46) 4 0x40) setbιl(PI.6), ((vokιe+48) 4 0x80) sctbιl(P1.7), cfrbιlfPJ.5). /• clear strobe bit - active low to output the •/ pube(), /' date to the pnnter '/ cleαrJolo-bilsO, if (linefeed" 1) camoguτlurnO. deor-doto-Msf) /• routine to clear all data bits in the printer'/ /• between characters •/ sttbit(P3.5); /• set strobe bit - active low '/ clr ιt(PI.O), clrbitfPI 1) dibit PI 2 dibit PI 3 dibit PI rbillPl ~>) clrbil P1 6 clrb.t(P1 7) /. routine to generole o corπαge return cαrnoge-relurnO setbH(P1 0) setbit PI 2 . setbilfPl 3) dιbιl(P3 S) pulsct) /ι Quorter second pouse qu.UimerU)! /. o form teed - |usl 6 cαrnog t turns lo •/ /. bπnq the paper out for enough for t e I ser '/ loπrϋeedO /, lo see all Ihe data and tear i. off if they • comogejetumO. /« choose cαrnoge-retumll. cαrπαge-reluml). comoge-ietumjj. comαqejeluml). cαrnoge-returnO. corπoge-xetumj), comoge-retumO. I /. Print Ihe time ond dote to the printer pnnUieαdcrO porα-eLprml Time- '.hours 10,0,0). porelleLpπnir.houπl.00) porollet-pnnl ".".mmuleslO.O.O), pαroHeLprmtl -'.inmutKl.O.I). porollel-pnnt "Dote- " monlhlO.0.0). poro_et_pnnlt"" monthl,0.0). pαrα-eLprait T.*>yW.O.O). porolleL_pnnir -. , d H "o"y , l. n 0, n 1), comoge-relumO, senoLprml prιnllf"ZdZd.ZdZd Zd n ,hours10,hours1,minutesl0,mιnulesl.test), pπnllFZd Zd Zd ".mts-comp.mes-moislure.mes^retn-strength). pnnlfFZd Zd Zd Zd ",mes_perτncαbιlιty,worl(ing-bond.ovαιlαble__)θnd.mulleufficiency), prιnlf("Zd Zi Zd Zd\n",sompl_.weιght,specuncn_densιty,deformαtιon,toughness), onorog.prιnl() pnnllf" Λ.WCIIT AJ'CRU AJβT CA TIO ΛCCJIT Vi"). pnntll" Z4u Z4d S-d".ov_-wcιi]lι _ifj,ovc_pcιιuJlo».π)oι;Lonαlog), prinllf" Z4d Z5d\n''.coltbrαlcdJlow.rnoιsl-ogg), The piston head 86 is held in this position either by gravity or with just sufficient retractive force so that while the piston head 86 is not lifted away from the opening its effective weight is relatively small so that as the sample is extruded the piston head 86 is lifted and the linear transducer 302 continuously communicates to the computer program the distance the sample 24 has been extruded by constantly recording the relative position of the piston head 86. This information is continuously fed into the computer. The computer causes a signal to be sent to the green sand cylinder 50 when the position of the cylinder head 86 is determined to be, from the data supplied by the linear transducer, that two inches (5.08 centimeters) of sample have been extruded. A third alternative is that two linear transducers, one connected to the cylinder head 86 above the green sand cylinder 50 and one connected to the piston 90 in the green sand cylinder 50 could be used simultaneously as previously described above to measure the amount of sample extruded. Upon contact with the green sand sample 24 by the cylinder head 86 the relative deformation increase is noted by the linear transducer 302 continuously as extension of the piston 90 occurs and pressure within the cylinder 50 increases until fracture or final deformation of the sample 24 occurs. This also allows constant monitoring of the deformation and rate of deformation of the sample so that a distinction may be drawn empirically between deformation and sample fracture. Alternatively, or additionally, the linear transducer 302 of the present invention could also be used in an additional test wherein the compressive force caused by the extension of the cylinder 50 is modulated such that initial pressure is applied to the green sand sample 24 and then released and then applied again and released thereby continuously measuring the elastic reaction of the sand sample plug 24 in real time by noting the springiness or expansion after compression of the sample plug 24 in response to the modulation of the pressure applied to the plug 24. This compressive force is used to determine the limits on the elastic range of the plug 24 by applying the modulated compressive force until there is no longer an elastic reaction from the green sand sample 24. The information recorded by the linear transducer in real time is communicated in real time to a computer control system running a program. The program utilized in the preferred embodiment follows Hartley Controls Corp. - AUTOIAB.C AUTOIAB with logic utilizing 2~posιtιon testing The 10 usage s as follows - 6 analog inputs (some are 8 bit some are 12 bit in the processor) 1. Compactabil ty linear transducer 12 bit ΛIC-0 2. Compactability pressure transducer (0-60 ps ) 8 bit AI8-1 3. Green Strength pressure transducer (0-60 psi) 12 bit AIC-2 4. Moisture 12 bit AIC-3 5. Weight signal 12 bit AIC-4 6. Permeability flow meter (0-10 SLPM) 12 bit AIC-5 7. Permeability pressure (0-1 psi) 12 bit AIC-6 - 3 analog outputs 1. Compactability test pressure (0-60 ps ) 8 bit AO8-0 2. Permeability test pressure (0-1 psi) 12 bit AOC-0 3. Green strength test pressure (0-60 psi) 8 bit A08-2 4. Spare - 7 digital outputs (the numbers refer to the bit number on the output word) 1. Table travel O-O 2. Stop at eject O-l 4. Permeability seal 0-2 8. Extend test cylinder 0-3 16. Eje cylinder 0-4 32. Hold at eject level 0-5 64. Clean off cylinder 0-6 128. Spare 2 digital inputs (when the input s on, the processor sees the bit as off) 1. 2" Limit switch 1-0 2. Plug broke limit switch 1-1 . spare 8. spare •include <8051mt.h> •include <80Slb t.h> •include <8051ιo.h> •include <80Slreg.h> •define lcd_data_ιr * (unsigned char*)0xa0θ0 ♦define lcd~data_dr '(unsigned char')0xa081 •define lcd_read_ιr * (unsigned char*)0xa082 •define lcd_control '(unsigned char*)0xa090 •define ιnputs_l * (unsigned char'lOxeOOO •define outputϊ_l ♦ (unsigned char')0xe010 •define modeport_l '(unsigned char')0xe003 •define modeport^∑ '(unsigned char*)0xe013 •define keypad '(unsigned char')0xa0a0 •define secondsl '(unsigned char*)0xc070 •define secondslO '(unsigned char*)0xc071 •define minutes1 • (char*)0xc072 •define minutes10 * (char')0κc073 •define hoursl • (char*)0κc074 •define hourslO • (char') 0xc075 •define dayl ♦ (char') 0xc076 •define daylO * (char*)0xc077 •define monthl * (char*) 0xc078 •define monthlO • (char*)0κc079 •define clock_f '(unsigned char*)0xc07f •define compactabili y '(unsigned char*)0xc020 •define coπtpactabιlιty_msb '(unsigned char* )0xc030 •define comp_press_ιn '(unsigned char*)0κc051 •define gs_press_ιn '(unsigned char*)0xc022 •define g3~p_ress_ιn_msb '(unsigned char')0xc032 •define moisture '(Unsigned char*)0xc023 •define moιsture_msb '(unsigned char') 0_cc033 •define weight 'Tunsigned char*)0xc024 •define weight nsb '(unsigned char*)0xc034 •define perm_fϊow '(unsigned char*)0xc025 •define perm_flow_ιnsb '(unsigned char')0xc03S Hartley Controls Corp. - AUTO AB.C •define perm_press_ιn '(unsigned char*)0xc026 •define perm~press_ιn_msb '(unsigned char*)0xc036 •define comp~press_out '(unsigned char')0xc060 •define perm~press_out '(unsigned char'lOxeOOO •define perm_press_out_msb '(unsigned char*)0xc001 •define dummy_wrιte '(unsigned char'IOxcOlO •define gs_press out '(unsigned char*)0xc062 •define LSIZE 3 /' 32 bit numbers */ register int tempi [LSIZE! . temp2(LSIZE) , temp3(LSIZE1 ; int entered_value, entered_counter, entry_was_valιd; int key_pressed, blank_space, v_length, overall_lenαth; int comp_slope, comp_ιntercept, moιsture_slope, moιsture_ιntercept; unsigned int mes_comp, mes_moιsture, mes_green_strength, mes_permeabιlιty; unsigned int muller_efficiency, workιng_bond, avaιlable_bond,analog; int hi, h2, h3, h4, " value, loop, strιng_length, counter; int vιp_value, cal_pressure, reading, ave_perm_flow; int samples, quιck_tιmer, holding, perm_ low_sum, plug_break_psι; int channel_selected, table_state, stop_at_eject_state; int permseal_state, extend_state, eject_state, clean_o _state; inc hold_at_e_ ect_state, test, enable_dιsplay; unsigned inc analog_temp_msb, analog_temp_lsb, analog_max, dummy_ana og; unsigned int ave_we ghc, ave_weιght_sιg, weιght_slope, weιght_ιnt, specιmen_weιght; int spec men_densιty, spec men_heιght, calιbrated_flow,percent_heιght; mt heιght_x_flow,perm_ιn,perm_out,perm_sp, integral, ki, kp,pιd_out,busy; int moi3t_raw,moιst_analog, serιal_count; main!) timer(1) ; modeport_l«0x9b; /' Set Jl, J2, J3 as inputs */ modeport~2-0x80 ; /* Set J4, J5, J6 as outputs ♦ / clock_f-0x04 ; /* Set clock to 24 hour mode ♦ / setbit ( IE.2 ) ; /' Enable interrupt IE1 */ /• Enable the use of interrupts /* 3.94 ιnH20 3365 V /'Display 8-bit, 2-line, 5x7 characters ♦ / /* Enable LCD display • / /* Enable auto increment cursor addrress LCD */ Hartley Controls Corp. - AUTOLAB.C IMTEPPUPT(_IE1_) key_hιt() / ♦ Any key pressed will generate interrupt IE1. */ { /* and this routine will automatically run */ key_pressed- eypad; f (keypad>-0x30 i t, keypad<-0x39) / ♦ Check to see if 0-9 was hit */ entered_counter++; /' Keep track of how many numbers are entered '/ if (keypad»-0x39) holdιng-0; /* Zero was pressed */ else holdιng-keypad-47; /* Determine which number was pressed */ if (enable_dιsplay--l) ( /* If the display is enabled, echo the entered */ lcd_pπntT"",holding,0, 0) ; /* key to the LCD • / if (entered_counter»-0) entered_value-holdιng; if (entered~counter>0) entered_value-(entered_value*10)+holdιng; timer(1) ; strobe_lcd data ( ) /* P.outine to strobe any data sent to the LCD */ ( /• with a time delay before and after the •/ int a; /* data is sent. This is the short strobe for */ lcd_control-0x01; for (a-1; a<»30; a++) ( ) led control-OxOO; ) long strobe lcd_data|) /• Routine to strobe any data sent to the LCD */ ( /* with a time delay before and after the data int a.' /• is sent. This is the long strobe for LCD */ for (a-1; a<-80; at-*) ( /' initialization */ ) lcd_control-0x01; for (a-1; a<»80; a++) ( I Icd_control-Ox00; for (a-1; a<-ΘO; a++) ( clear_dιsplay() /* Routine to clear the LCD display */ ( lcd_data_ιr-0x01; /* 0x01 13 the control code to clear the LCD •/ strobe led data(); ) check_busy_lc () I busy»lcd_re ad_ι r ; lcd_control»0x01 ; busy»lcd_read_ιr t 0x80; wh le (busy »- 0x80) ( busy»lcd_read_ιr - 0x80; ) led control-OxOO; lcd_pπnt (message , van able , decimal , center) /* Routine to display characters in 'message' V int variable , decimal , center; char message (20) ; /* followed by a number 'variable' with V ( /* not print any numbers/decimals. The line can •/ hl-0; h2»0 ; h3-0; h4 -0 ; v_length-0; / • be centered be entering a 1 as the 'center' */ / • variable. This will also give a line feed */ strιng_length-strlen(message) ; / • Determine the number of the characters */ v_length»4; /* Determine the length of the number to print */ ii (varιable<1000) v_length-3; if (varιable<100) " v_length-2; if (varιable<10) v_length-l; if (variable<0) v_length-0; overall_length-strιng_length+v_length; /' Determine the length of the entire string */ Hartley Controls Corp. - AUTOLAB.C if (decιmal>0) overall_length+»l; /* If a decimal is used, add 1 to the length •/ blank_space-(20-overall_length) 12 ; Determine the spaces needed for centering */ if (center«l) ( check if centering is asked for */ for (loop-1; loop<«blank_space; loop-t--. ) ( /* loop for adding spaces to left of string */ lcd_data_dr-0x20; /* Output a "space" to the LCD strobe_lcd_data () check_busy_lcd() ; for (loop»0; loop<-strιng_length-l; loop-n-) ( / • Loop to print the 'message' by characters • / lcd_data_dr-message(loop) ; strobe_lcd_data ( ) ; check_busy_lcd() ; ) if (variable 1 —1) ( /* Loop to print the entire 'variable' */ for (loop-v_length; loop>-1; loop—) ( if (loop—decimal -S decιmal>0) { lcd_data_dr-0x2e; strobe_lcd_data() ; Print decimal at desired location check_busy_lcd() ; ) If (loop—4) ( value-variable/1000; M-value; /• Calculate the -1th digit from right */ if (loop«3) ( value-(varιable-(h4'1000) ) /100; h3-value; /• Calculate the 3rd digit from right */ ) if (loop«2) ( value-(variable- (h4*1000) -<h3*100) )/10; h2-value; / ♦ Calculate the 2nd digit from right */ if (loop—1) ( value-variable- (h-t*1000)-(h3'100)-(h2*10) ; hl-value; /• Calculate the 1st digit from right */ ) 1cd_data_dr-va1ue+48; /* Print the calculated digit */ strobe_lcd_data( ) ; check_busy_lc () ; I if (center—1) ( /* check if centering is asked for */ for (loop«l; loop<-blank_space; loop++) ( /• loop for adding spaces to right of string */ lcd_data_dr«0x20; /* Output a "space" to the LCD */ strobe_lcd_data () ; check_busy_lcd( ) ; ) if (overall_length+blank_space+blank_space«19) ( - /• determine if the string length is odd lcd_data_dr-0x20; /* output a space */ strobe_lcd_data () ; check_busy_lcd() ; I m_menu() I clear_dιsplay( ) ; while (1) I lcd_prιnt ("1-Complete Lab Cycle", -1, 0, 1) ; / • Display main menu / start program '/ lcd_prιnt ("3- eιght Calibration", -1,0,1); Hartley Controls Corp. - AUTOLAB.C lcd_pπnt ("2-System Information", -1,0,1); lcd_prιnt ("4-Calιbratιon", -1,0,1); enable_display-0; whlle(Tkey_pressed<48) I I (key pressed>Sl) ) ( /* Wait for a menu item (1-4) to be selected */ ) if (key_pressed— 8) lab_cycle(); if (key_pressed«49) system_ιnfo() ; if (key~pressed«50) weιght_calιb0 ; if (key_pressed—51) calibration! ) ; ) lab_cycle ( ) unsigned int l,current, last,difference; clear_di3play () ; mιtιate_entry() ; led print ("Riddle sand into", -1, 0, 1) ; lcd~prιn ("START", -1,0,1) ; lcd_pπnt ("the tester and press", -1, 0, 1) ; key_pressed-0; while (key_pres3ed'-0x3d) ( /* Wait for the START button to be pressed ♦ / ) key_pressed-0; check_press () ; clear ' displa () ; outpuϊs_ll-l; / ♦ Energize 'TRAVEL TO TEST POSITION' solenoid */ timer(8) ; comp_pres3_out-152; /* Output 41 PSI to test cylinder */ outputs_l I -8; led print("Compactability", -1,0, 1) ; lcd~prιnt("", -1,0,1) ; /* 11-1 Raised from 179 to 199 to match Dietert * l lcd_prmt ("Test", -1, 0, 1) ; time (S) ; countβr-0; holding-seconds1; while (update_analog(2) <148 t_ counter<35) ( ~ /* Wait for 41PSI to be read from the transducer*/ timer(1) ; counter+-l; ) if (counter'«35) ( timer(3) ; longse (tempi,update_analog(l) ) ; longset (tetπp2, comp_slope) ; longmul (tempi, emp2) ; longse (temp2, 1000) ; longdi f empi, temp2) ; longset (temp2,comp_ιntercept) ; longsubl empi, tempi) ; mes comp- em i[0] ; / • Calculate the measured compactability •/ > if (counter«-35) ( parallel_prιnt ("Bad Test Pressure", -1, 0, 1) ; clear_dιsplay() ; lcd_pr n ("Bad Test Pressure", -1, 0, 1) ; mes_comp-0; ) else lcd_prιn ("Measured - ",mes_comp, 1, 1) ; outputs_lt—θ; ~ comp_press_out«0; timer(8) ; 1-0; do ( current-update_analog(5) ; /* loop insures strain gage equilibrium */ tιmer(2); last-current; current»update_analog(5) ; difference-abs (current-last1 ; ι++; Hartley Controls Corp. - AUTOLAB.C I while ( (dιfference>2) 14 (ι<301); /* difference betwwen consectuive readings <.003VDC •/ ave_weight_sig-0 ; for (3amples-0; sample3<10 ; sample3+ ) /* 335 get analog for specimen weight •/ ave_weιght_sιg+-update_analog ( 5 ) ; ave_weιght_sιg/-10; specimen_weight-0 ; if (ave weight sιg>weιght_ιnt) ( longset(tempi, ave_weιght_sιg) ; longset (temp2, eιght_slope| ; longmul Itempi, temp2) ; longset (temp2, 1000) ; longdιv( empi, temp2) ; specιmen_weιαht«tempi [0] -weιght_mt; I if (1—30) I clear_dιsplay( ) ; lcd_prιnt ("Specimen Weight", -1, 0, 1) ; / ♦ Start permeability test */ lcd~prιn ("Never Stabilized", -1, 0, 1) , ) else ( clear_dιspla () ; lcd_prιnt ("Specimen Weight", -1,0.1) ; /• Start permeability test ♦ / lcd_prιnt ("", specιmen_weιght, 0,1); lcd_prιn ("Grama", -1,0,1); ) percent_heιght-1000-mβ3_comp; longsetTtempl,percent_heιght) ; longset (temp2, 12065) ; longmul(tempi, temp2) , longset(temp2, 10000) , longdivltempi, temp2) , specimen_height«templ(0) ; longse (tempi, specιmen_heιght) ; longse (temp2,2027) ; longmul (tempi, temp2) ; longset (temp2, specιmen_weιght) ; longset<temp3, 1000) ; ~ longmul (temp2, temp3) ; longset(temp3, 1000) ; longdi l empi, temp3) ; longdιv(temp2, tempi) ; spec men_den3ity-temp2 (0) ; outputs_lI-16; /' E]ect Is to raise plug for perm */ timer(l7; outputs_l4--16; time (2) ; while(update_analog(l) > 780) ( timer(1); I outputs_l I - ; / ♦ Extend 'PERMEABILITY SEAL' */ timer (2) ; comp_press_out-200; /* Apply 10 psi to seal the perm seal */ outputs_l I -8; timer (5) ; clear_dιspla ( ) ; lcd_prιnt("Permeability", -1,0,1); /• Start permeability test • / lcd_prιnt("" ,-1,0,1), • lcd_pπnt("Test", -1,0,1) ; perm_ low_sum-0; Clear permeability flow "fifo" sum • / for (samples-0;samples<3;samples++) ( pid loop( ) ; I for (samples-1; samples<-5; samples-f+l l pιd_loop() ; perm_flow sumt—update_analog(6) ; /' Add measured flow to "fi o" sum */ I perm_press_out_m3b-0.- Hartley Controls Corp. AUTOLAB.C perm_press_out-0; dummy_write-0; ave_perm_flow-perm_flow_sum/5; longset (tempi, ave_perm_flow) ; longset (temp2, 55) ; longsub(tempi, emp2) ; longse (temp2,200) ; longmul ( empi, emp ) ; longset (temp2, 2457) ; / ♦ calculate ave flow rate in cm3/sec */ longdivltempi, temp2) ; calιbrated_flow-tempi (0] ; longset (temp2, specιmen_heιghtI longmul (tempi, temp2) ; longse (temp3, 100) ; lonαdi (tempi , temp3) ; heιght_x_flow-tempi [0) ; longset (temp3, £0) ; longmul (tempi, temp3) ; longse (temp2, 03) ; /* pressure * cross section * time 10g/cm2, 20.27cm2 longdi ltempi, temp2) ; mes_permeabιlιty-templ (0] ; /* Calculate the permeability */ lcd_prιnt ("Measured mes_permeabιlιty, 0,1); comp_press_out-0; / ♦ exhaust compactability pressure transducer */ g3_press_out-20; /* Apply 10 PSI to test cylinder to raise plug */ timer(5) ; output3_l4—8; while (update_analog(l) >7Θ0) ( timer(1) ; timer(2) ; outputs_l___—4; /' Retract 'PERMEABILITY SEAL' */ timer(3) ; outputs_l I -2; / ♦ Extend STOP AT EJECT cylinder */ outputs It—1; /* Allow table to travel towards sample */ timer(37; outputs_l|-l€; /* Start ejecting plug */ outputs^l 1-32; /' Energize HOLD AT EJECT LEVEL air/oil ♦ / counter-0; holding-seconds1; while ( !ιnput_check(l) &l counter<20) ( /* Wait for the 2" limit switch */ i (secondsl !-holding) ( counter*-1; hoiding-seconds1; ) if (counter—20) ( clear_dιsplay() ; lcd_pπnt ("",-1,0, 1) ; led print("Make in time",-1,0, 1) ; lcd~pπnt ("2 Inch limit didn't", -1, 0, 1) ; mβ3_green_strength-0; mes moιsture-0; I else( outputs_l4--16; timer(l7; clear_dιsplay( ) ; lcd_prιnt ("Moisture Test",-1,0,1); timer(2) ; moιst_analog-update_analog(4) ; longse (tempi,specιmen_densιty) ; longset (temp2,mo st_analog) ; longmul (tempi, emp2) ; longset (temp2, 10) ; longdi ltempi, temp2) ; moιst_raw-templ (0) ; longset(temp2,moιsture_slopel ; longmul ( empi, temp2) ; longset (temp2, 10000) ; longdivltempl, temp2) ; longset (temp2,moιsture_ιnterceptI ; Hartley Controls Corp. - AUTOLAB.C longad (tempi, temp2) ; mes_moιsture»templ (0) ; lcd ptinc ("Measured = ",me3_moιsture, 2, 1) ; timer ( ) ; clear_dιsplay() ; lcd_pπnt ("Green Strength", -1, 0, 1) ; /' Start green strength test */ lcd_prιnt("", -1,0,1); lcd_prιnt ("Test", -1,0,1); vιp_value«42; plug_break_psi-0; whιle( ( 'ιnput_check(2) ) it (vιp_value<240) ) ( /* Wait for plug break LS or full VIP pressure */ dummy_analog-update_analog(3) ; if ( (dummy analog>plug_break_psι) it (dummy_analog<4094) ) ~ /* Check to see if GS Pressure has increased */ plug_break_psι-dummy_analog; /* Update break pressure */ vιp_value-vιp_value+l; / ♦ Increment VIP pressure • / gs_press_out-vιp_value; for (quιck_tιmer-l; quιck_tιmer<-3162; quιck_tιmer++) ( /* Quarter second pause */ ) ! longset (tempi,plug_break_psι) ; longset ( emp2, 112l7; longmul ( empi, temp ) ; longset Itemp2, 10000) ; longdi ltempi, temp2) ; mes_green_strength-templtO]; ," Calculate the measured green strength */ if (mes_green_strength<75) mes_green_strength-7S; lcd_prιnt ("Measured » ",mes green_strength, 1, 1) ; outputs 11-16; ~ /* Eject plug */ delay(5000) ; ) /'END ELSE'/ outputs 1&—16; /* disengage eject */ delay(2000) ; outputs_lt--32; delay(1500) ; outputs_l I -32; outputs_ll-l; /* travel to test '/ delay(lOOO); outputs_ —2; /* release STOP AT EJECT cylinder • / outputs_li—1; outputs_l1-16; delay(5000) ; outputs 11-64; delay(5000) ; outputs_ll--64; outputs_li--32; outputs_14--16; workιng~bond-(mes_green_strength*153) / (132- (mes_comp/10) ) /10; /• Calculate working bond */ avaιlable_bond-( (21*mes_green_strength) /200)+ ( ( 3*mes_moιsture) /250) ; /• Calculate available bond • / muller efficiency-( (workιng_bond*100) /ava lable_bond) ; ~ /* Calculate muller efficiency • / gs_press_out-0; /* exhaust green strength pressure transducer */ test+-l; /* increase test counter • / clear_dιsplay( ) ; parallel_prιnt ("Test II ", test,0,11; /' start print out ♦ / pπnt_header ( ) ; parallel_prιn ("Compactabili y- " ,mes_comp, 1,1); parallel_prιnt ("Moisture- ",mes_mo sture,2,0); parallel_prιnt ("»", -1, 0, 1) ; parallel_prιn ("Green Str- ",mes_green_strength, 1, 0) ; parallel_prιnt ("psi",-1,0, 1) ; parallel_prιn ("Permeability- ",mes_permeabιlιty, 0,1) ; parallel_pπnt ("Working Bond- ",workιng_bond, 1, 0) ; parallel_prιnt ("'",-1,0,1) ; parallel_prιnt ("Avail Bond- ", avaιlable_bond, 1, 01 ; parallel_prιnt ("V, -1,0,1); parallel_prιnt ("Muller Eff= ",muller_efficiency, 0, 0 ) ; Hartley Controls Corp. - AUTOLAB.C parallel_prιnt("V\ -1,0, 1) ; parallel_prιn ("Specimen Wght- ", specιmen_weιght, 0, 0) , parallel_prιnt ("g", -1, 0, 1) ; parallel_prιnt ("Density- ", specιmen_densιty, 2,0); parallel~prιn ("g/cm3", -1,0,1); - form_feed() ; seπal_prιnt ( ) ; analog_prιnt () ; system ιnfo() ( system_menu: clear_dιsplay() ; /* display system information menu */ ιnιtιate_entry() ; lcdjprint ("System Info Menu", -1, 0, 1) ; lcd_prιnt("2 - Test Number", -1 , 0, 1) ; lcd~pr nt("l - Time/Date", -1, 0, 1) ; lcd_prιnt("3 - Calib Report", -1, 0, 1) ; enable_display-0; while ( (key_pressed>0x32) I I (key_pressed<0x30) ) I /* wait for 1-3 to be pressed */ if (key_pressed—0x3e) goto system_menu; /* if PREV MENU is pressed, return to main menu ♦ / if (key pressed—0x3a) goto system end; ) if (key_pressed—0x30) ( clear_dιsplay( ) ; /• display time/date menu */ initiate entry)); lcd_prιn ("TIME/DATE MENU", -1, 0, 1) ; lcd~prιnt ("2-Enter Date", -1, 0, 1) ; lcd~prιnt ("1-Enter Time", -1,0,1); lcd_prιnt ("3-D splay Time/Date",-1,0, 1) ; enable_display-0; while ( (key_pressed>0x32) I I (key_pressed<0x30l ) ( /* wait for 1-3 to be pressed */ f (key_pressed—0x3e) goto system_menu; /' if PREV MENU is pressed, run system info menu*/ if (key pressed—0x3a) goto system_end; ) if (key_pressed—0x30) ( /* enter time subroutine */ entry_was_valιd—1; /* reset data entry value */ while (entry_was_valid<0) ( /* enter the hour in military format •/ entry_was_valιd-keypad_entr ("Enter Hour (1-24)"); /* pressing CLR will reset the entry •/ ) if (entered_value>9) ( /* check if the hour has 2 digits */ hoursl0-entered_value/10; /* set the 10s digit for the hour time */ hours -entered value- (10'hourslO) ; /* set the Is digit for the hour time */ ) else! /* hour has only 1 digit */ hourslO-0; hoursl-entered_value; /* set the hour time 10s and Is digit */ ) entry_was_valιd—1; /* reset data entry value */ while (entry_was_valid<0) ( / • enter the minute */ entry_was_valιd-keypad_entry("Enter Minute (0-59) "I,- /* pressing CLR will reset the entry */ 1 if (entered_value>9) ( / • check if the minute has 2 digits •/ mιnuteslδ-entered_value/10; /* set the 10s digit for the minute time */ mιnutesl-entered_value- (10*mιnutesl0) ; / • set the Is digit for the minute time */ ) else( / • minute has only 1 digit */ mmuteslO-O; minutesl-entered_value; / • set the minute time 10s and Is diαit */ ) goto system_menu; /* return to system info menu • / ) Hartley Controls Corp. AUTOLAB.C if (key_pressed—0x31) ( /* enter date subroutine */ entry was_valιd—1; /* reset the data entry value • / while-(entry_was_valιd<0) ( /• enter the month */ entry_was~valιd-keypad_entry("Enter Month (1-12)"); ~ ~ /* pressing CLR will reset the entry */ if (entered_value>9) ( /• check to see if the month has 2 digits */ monthl0-entered_value/10; /* set the 10s digit of the month */ monthl-entered_value- (10'monthlO) , /* set the Is digit of the month */ 1 else( /* the month has only 1 digit */ monthl0=0; monthl-entered value; /• set the month 10s and Is digit ♦ / 1 entry_was_valιd—1; /* reset the data entry value • / while (entry_was_valid<0) ( /* enter the date/day of month '/ entry_was_valιd»keypad_entry("Enter Date (1-31)"); ~ /* pressing CLR will reset the entry */ ) if (entered_value>9) | /• check to see if the date has 2 digits */ dayl0«entered_value/10; /• set the 10s digit of the date */ dayl-entered_value- (10'daylO) ; /* set the Is digit of the date */ ) else( /* the date has only 1 digit */ dayl0»0; dayl-entered value; /* set the date 10s and Is digit */ ) goto system menu; / ♦ return to system info menu */ ) if (key_pressed—0x32) ( / /' display time/date subroutine ♦ / clear_dιsplay( ) ; en«ble_display-0; lcd_prιnt(" ",-1,0,1); lcd_prιnt(" Date: ",monthlO, 0,0) ; lcd-prιnt("",monthl,0,0) ; Icd~prιnt("/",dayl0,0,0) ; lcd_pπnt ("", da l, 0,0) ; lcd_prιnt[" Time: ",hours10, 0, 0) ; lcd_prι t ("",hours1,0, 0) ,- lcd_prιnt(":".minutes10, 0,0) ; lcd_prιnt ("".minutes1,0,0) ; while (key_pressed!-0x3e) ( if (key_pressed—0x3a) goto system_end ) goto system_menu; ) if (key_pressed—0x31) ( / • test number features */ clear display( ) ; lcd_prmt("TEST NUMBER MENU", -1, 0, 1) ; lcd~pc_-'- t ("1-Check Test Number", -1, 0, 1) ; lcd_prmt("",-l,0, 1) ; lcd~prιnt ("2-Reset Test Number", -1, 0, 1) ; ιnιtιate_entry() ; enable_display-0; while ( (key_pressed>0x31) I I (key_pressed<0x30) ) ( ~ ~ / ♦ wait for 1 or 2 to be pressed */ I if (key_pressed«0x30) ( /* display test number subroutine */ clear_dιsplay( ) ; ιnιtιate_entry0 ; led printC'The system ιs",-l,0,l); Icd-pnnt ("TEST « ", test, 0,1); lcd~pπnt ("Currently On", -1,0,1) ; while ((key pressed<0x30) I I (key_pressed>0x3f) ) ( /• wait for PP.EV MENU to be pressed */ if (key pressed—0x3a) goto system_end; ) goto system_menu; I if (key_pressed—0x31) ( /' reset test counter subroutine • / clear_d spla ( ) ; Hartley Controls Corp. - AUTOLAB.C led print ("", -1,0, 1) ; lcd^pnnt ("Will Now Be Reset", -1, 0, 1) ; lcd ' print ("The Test Counter", -1.0, 1) ; timer (2) ; test-0; ! goto system end; I if (key_pres3ed—0x32) ( /* calibration report subroutine ♦ / clear_dιsplay() ; lcd_prιnt ("", -1,0, 1) ; lcd_prιn ("PLEASE WAIT", -1,0,1)/ lcd_prιnt ("Printing Report... ", -1, 0, 1) ; prιnt_header ( ) ; parallel_prιnt ("Comp Slope: ", comp_slope, 0, 1) ; parallel_prιnt ("Comp Inter: ", comp_ιntercept, 0, 1) ; parallel_print ("Moisture Slope: ",moιsture_slope, 0, 1) ; parallel_prιnt ("Moisture Inter: ",moιsture_ιntercept, 0, 1) ; form_feed() ; ) system_end: clear_display() ; key_pressed-0; /•.-___—.._..... /' diagnostics 0 ( clear_d splay( ) ; /* display diagnostics menu */ ιnιtιate_entry() ; lcd_prιnt("Diagnostics Menu", -1,0, 1) ; lcd~prιnt("l - Automatic", -1, 0, 1) ; lcd~prιnt(" ", -1,0, 1) ; lcd~prιnt("2 - Manual", -1, 0, 1) ; enable_dlspla -0; while ( (key_pressed>0x31) I I (key_pressed<0x30) ) choose manual or automatic */ if (key_pressed—0y.3e) m_menu() ; if PP.EV MENU is pressed, return to main menu */ I if (key_pressed—0x30) ( /* automatic diagnstics subroutine readιng-0; clear_dιspla () ; parallel_prιnt("Automatic Diagnostic", -1,0, 1) ; parallel^print (" report", -1,0,1); parallel_prιnt ("——————",-1,0,1); prιnt_header ( ) ; lcd_prιnt(" ",-1,0,1); lcd_prιnt ("Transducer", -1, 0, 1) ; lcd~pπnt ("Checking Linear", -1,0,1); comp_press_out-152; /* apply 35 PSI to the test cylinder •/ outputs_l I -8; timer (8) ; if (update_analog(l) <220) ( /* check for full extension of the test cylinder */ clear display() ; lcd_prιnt(" ",-1,0,1); lcd_prιnt ("extend properly", -1,0,1); lcd_prιnt ("Transducer didn' t", -1,0, 1) ; carrιage_returnI) ; parallel_prιnt("The compactability", -1,0,1) ; parallel_prιnt ("linear transducer",-1,0,1); parallel_prιnt ("didn 1 extend", -1,0,1); parallel~prιnt ("properly. ", -1, 0, 1) ; parallel_prιn ("analog n - ", update_analog(1) , 0, 1) ; readιng-1; tιmer(l) ; clear_dιsplay( ) ; lcd_prmt ("Checking", -1,0,1) ; lcd_prιnt ("Pressure Transducer", -1,0,11 lcd_prιnt ( "Test Cylinder" ,-1,0,1); timer(15) ; 5Θ Hartley Controls Corp. - AUTOLAB.C if (update_analog(2)<148 I I update_analog(2) >-156) ( /* check for measured pressure back near 35 PSI */ clear_dιsplay( ) ; lcd_pϊιnt ( "Test Cyliner" ,-1,0,1); lcd_prιnt Cisn' t operational", -1,0,1) ; lcd_prιnt ("Pressure Transducer", -1,0,1); carrιage_return( ) ; parallel_prmt ("The compactability", -1,0,1); parallel_prιn ("pressure transducer", -1, 0, 1' ; parallel_prιnt ("isn' operational .",-1,0,1); parallel_prιnt ("analog out - 152" , -1, 0, 1) ; parallel_pπnt ("analog in - " ,update_analog (2) , 0, 1) ; reading-1; timer (1) ; clear_dιsplay() ; lcd_prιnt(" ", -1,0,1); lcd_p ιnt ("Transducer", -1,0,1) ; lcd_prmt ( "Checking Linear" , - 1, 0, 1 ) ; comp_press_out«0; /* exhaust compactability pressure transducer */ outputs_lt—θ; /* retract test cylinder*/ timer(15) ; if (update_analog(l) >55) ( /* make sure the test cylinder retracted */ clear_dιsplay() ; lcd_pπnt(" ",-1,0,1); lcd_prιnt ("retract properly",-1,0,1); lcd_prιnt ("Transducer didn' t", -1, 0, 1) ; carrιage_return( ) ; parallel_prιnt ("The compactability", -1,0,1) parallel_pπnt ("linear transducer", -1, G, lj ; parallel~pπnt("didn't retract", -1, 0, 1) ; parallel_prιnt ("properly 1,0,1); parallel_pπnt("analog in .update analog(1), 0, 1) ; readmg-1; timer(1) ; ) if (update_analog(2) >10) ( check for 0 pressure at transducer clear_dιsplay () ; lcd_prιn ("Test Cylinder" ,-1.0,1); lcd_prιnt ("isn" t accurate ',-1,0,1); lcd_prιnt ("Zero Pressure" ,-1.0,1); carrιage_return() ; parallel~prιnt ("The compactability", -1, 0, 1) ; parallel_print ("pressure transducer", -1,0,1): parallel prιnt("zero pressure is", -1,0,1); parallel_prιnt ("incorrect. -1,0,1); parallel_prιnt ("analog in - ',update_analog(2) 0,1), reading-1; time (1) ; ) clear_dιsplay() ; lcd_prιnt ("Checking", -1,0,1); lcd_prιnt ("Pressure Transducer", -1 0,1) lcd_prιnt ("Green Strength", -1,0,1) gs_press_out-127; / • apply 30 PSI to gs pressure transducer */ timer (5) ; if (update_analog(3) <1911 I I update_analog(J) >2ιB4) I /* check for roadiππ near 30 PSI clear_dιsplay( ) ; lcd_prιn ("Green Strength", -1,0, 1) ; lcd_prιnt ("not operational",-1,0,1); lcd_prιnt ("Pressure Transducer", -1,0,1); carrιage_return( ) ; parallel~p«ht ("The green strength", -1, 0, 1) ; parallel_prιnt("pressure transducer", -1,0,1) ; parallel_prιnt ("isn' t operational. ",-1,0,1) ; parallel_prιnt ("analog out - 127" , -1, 0, 1) ; parallel_prιnt ("analog in - " , update_analoα (3) , C,li . reading-1; timer(1) ; ) Hartley Controls Corp . - AUTOLAB. C gs_press_out-0; / exhaust green strength pressure transducer */ timer (lθ7; if (update_analog(3)>170) ( ," check for < 2.5 PSI from transducer */ clβar_dιs * play( ) ; lcd_prιnt ("Green Strength", -1, 0, 1) ; lcd_pπnt ("isn" t accurate", -1,0,1); lcd^print ("ZERO Pressure", -1,0, 1) ; carrιage_return<) ; parallel_prιnt ("The green strength", -1, 0, 1) ; parallel_prιnt ("zero pressure", -1, 0, 1) ; parallel_prιn ("isn' accurate.",-1,0,1); parallel_prιnt ("analog in ',update_analog(3) ,0,1); readιng-1; timer(1) ; 8 PSI to perm pressure transducer */ flow meter perm_press_out-0; exhaust perm pressure transducer if (reading—0) ( parallel_prιnt ("The SANDMAN tested", -1,0,1); parallel_prιn ("O.K. on all systems' ,-1,0,1); ) parallel_prιnt ("-——————— •• ,-1,0,1); form_feed() ; outpϋts_l-0; ) if * / n to main menu */ • / (0-255) •/ Hartley Controls Corp. - AUTOLAB.C rea ; ) if (key_pressed—0x31) ( /* set analog outputs subroutine •/ clear_dιsplay ( ) ; mιtιate_entry ( ) ; lcd_prιnt ("Select Channel", -1,0,1); lcd~pπnt("2 - Perm Test" , -1, 0, 1) . • lcd_prιnt("l - Comp Cylinder", -1, 0, 1) ; lcd_pπnt ("3 - GS Test" , -1, 0, 1) , while ( (key_pressed<0x30) I I (key_pressed>0x32) ) ( / ♦ choose which analog output to set */ ) if (key_pressed—0x30) ( /* set compactablility pressure (0-60) ♦ / entry_was_valιd--l; while (entry_was_valid<0) ( entry was valιd»keypad_entry ("Comp Pressure 0-60") ; ) comp_press_out-entered_value*425/lC0; timer 11) , ) if (key_pressed—0x31) ( /* set permeability pressure (0-2.00) ♦ / entry_was_valιd—1; /' do not enter the decimal • / Hartley Controls Corp. - AUTOLAB.C while (entry_was_valid<0) ( /* 1.00 is entered as 100 • / entry_was_valιd-keypad_entr ("Perm Pressure 0-2.00"); ) perm_press_out-(entered_value*78) /100; timer (1) ; I if (key_pressed—0x32) ( /* set GS pressure (0-60) */ entry_was_valιd—1; while (entry_was_valid<0) ( entry_was_valιd-keypad_entry("GS Pressure 0-60"); ) gs_press_out-entered_value* 25/100; timer (1)7 if (key_pressed—0x32) ( /* toggle outputs subroutine ♦ / table_state-0; stop_at_eject_state-0; permseal_sta e-0; /* reset all manual states to off */ extend_state-0; eject_state«0; hold_at_e 3 ect_state«0; clean_o f_sta β-0; outputs_l-b; / • 0-off 1-on clear_dιsplay() ; ιnιtιate_entr () ; lcd_prιnt ("Select Output", -1,0,1); lcd_prιnt("2-StpTabl 5-E]ect ",-1,0,0); lcd_prιnt ("1-Table 4-Extend", -1, 0, 1) ; lcd~pπnt ("3-Pβrm 6-HoldEjec", -1,0, 0) ; while (key_pressed!-0x3e) ( /* toggle outputs until PREV MENU is pressed •/ ιnιtιate_entry() ; /* wait for an output 1-7 to be selected */ if (key_pressed>-0x30 tl key_pressed<-0x36) ( ~ /* CLEAN OFF is accessible but is not displayed ♦ / if (key_pressed—0x30) ( /' toggle TABLE TRAVEL state */ table_state+-l; if (table_state—1) outputs_l+-1; f (table state—2) ( outputs_l--l; table state-0; ) ) if (key_pressed"0x31) ( /* toggle STOP AT EJECT state • / stop_at_eject_state+-l; if (stop_at_eject_state—1) outputs 1+-2; if (stop~at_eject~state—2) ( outputs " _l--2; 3top_at_eject_state-0; ) if (key_pressed—0x32) ( /* toggle PERM SEAL state */ permseal_state+-l; if (permseal_state—1) outputs_i+-4; if (per seal~state—2) ( ~ outputs_l--4; permseal state-0; I ) if (key_pressed—0x33) ( / ♦ torgle RETRACT TEST CYLINDER state •/ extend_state+-l; if (extend_state—1) ( comp_press_out-225; outputs_l+»8; ) if (extend_state—2) ( outputs_r—θ; comp_press_out-0; extend state-0; ) ) if (key_pressed—0x34) ( /* toggle EJECT CYLINDER state Hartley Controls Corp. - AUTOLAB.C eject_state+-1; if (eject_state«l) outputs_l+-16; if (eject_state—2) ( ~ outputs_l-=16; eject_state-0; I ) if (key_pressed»-0x35) ( / ♦ toggle HOLD AT EJECT LEVEL state ♦ / hold_at_eject_state+-l; if (hold_at_eject_state—1) outputs_l+-32; if (hold_at~eject_state«2) ( outputs_l- r -32; hold_at_e 3 ect_state-0; 1 1 if (key_pressed-=0x36) ( /• toggle CLEAN OFF CYLINDER state clean_o f_state+-l; if (cTean_off_state—1) outputs_l+-64; if (clean_of _state—2) | outputs_l--64; clean_of _state-0; ) timer(1) ; /* pause 1 second then repeat loop */ ) clear_dιsplay( ) ; weιght_calιb() ( unsigned int i, current, las ,difference; clear_dιsplay() ; ιnιtιate_entry( ) ; led print ("Riddle sand nto", -1,0, 1) ; lcd~pπnt ("START", -1,0,1); lcd_prιn ("the tester and press", -1, 0, 1) ; key_pressed-0; while (key pressed'-OxSd) ( /* Wait for the START button to be pressed */ ) key_pressed-0; check_press () ; outputs_l I -1; /* Energize 'TRAVEL TO TEST POSITION' solenoid */ timer(β) ; comp_press_out»152; /* Output 35 PSI to test cylinder */ outputs_lI-8; clear_dιsplay() ; led print ("Specimen Weight", -1, 0, 1) ; lcd~prιnt ("",-1,0, 1) ; lcd_pπnt ("Calibration", -1, 0, 1) ; timer (5) ; counter-0; while (update_analog(2) <14θ 44 counter<35) l /• Wait for 35PSI to be read from the transducer*/ timer(1) ; counter+-l; ) if (counter—35) ( parallel_prιnt ("Bad Test Pressure", -1, 0, 1) ; clear_dιspla () ; lcd_prιnt ("Bad Test Pressure", -1,0, 1) ; mes comp-0; ) outputs_l4—8; eomp_press_out-0; timer(8) ; 1-0; Hartley Controls Corp. - AUTOLAB.C do ( current-update_analo (5) ; /'loop insures strain gage equilibrium*/ timer(2) ; last-current; current-update_analog(5) ; difference-abs(current-last) ; ι++; I while ( (dιfference>2) 4 (ι<30) ) ; /*dιfference betwwen consectuive readings <.003VDC*/ ave_weight_sig-0; for ( 3ample3-0;samples<10; samples ++) ave_weιght_sιg+ »update_analoα ( 5 ) ; ave_weιght_sιg/-10; specιmen_weιght-0; lf (ave_weιght_sιg>weιght_ιnt) ( longset (tempi, ave_weιght_sιg) ; longset ( temp2, weιght_slopel ; longmul ( tempi , temp 2 ) ; longset (temp2, 1000) ; longdi l tempi, temp2) ; specimen weight-tempi [0] -weight int; ) if (1—30) ( clear_dιsplay() ; lcd_prιnt ("Specimen Weight", -1,0,1); lcd~p*_-nε ("Never Stabilized", -1,0,1); ) else ( clear_dιsplay() ; lcd_prιnt ("Specimen Weight", -1,0, 1) ; / • Start permeability test */ lcd_prιnt ("", specιmen_weιght, 0,1); lcd_pπnt ("Grams", -1,0,1); lcd_prιnt ("Analog ",ave_weιght sιg,0,l); ) outputs_l4—1; timer!10) ; outputs_l 1-16; timer(15) ; outputs_14»-16; clear_dlsplay() ; ) calibration! ) ( cal b_menu: clear~dιspla () ; /* display calibration menu */ ιnιtιate_entry() ; enable_display-0; lcd_prιn ("Calibration Menu", -1,0,1); lcd ' prin ("2-Moιsture", -1,0,1); lcd~prιnt ("1-Compactability", -1,0,1); lcd~prιnt ("3-Green Strength", -1,0,1); while ( (key_pressed>0x32) I I (key_pressed<0x30) ) ( /• wait for 1-3 to be pressed • / if ( (key_pressed—0x3e) I I (key_pressed—0x3a) ) αoto calιb_end; /* if PREV MENU is pressed, return to main menu */ ) if (key_pressed—0x30) ( /* compactability calibration is chos clear_dιsplay() ; /* display comp calibration menu */ ιnιtιate_entr ( ) ; enable_display-0; lcd_prιnt ("Compactability",-1,0,1); lcd_prιnt("1-Slope/Intercept", -1,0,1); check_busy_lcd() ; lcd_prιnt ("Calibration Menu", -1,0,1); Hartley Controls Corp. - AUTOLAB.C lcd_prιnt ("2-Check Plug", -1, 0, 1) ; while ((key pressed>0x31) I I (key_pre3sed<0x30) ) ( /* choose slope/intercept or check plug •/ ) if (key_pressed«0x30) ( / ♦ slope intercept is chosen */ clear_dιsplay() ; / ♦ display compactability slope/intercept menu */ ιmtιate_entry() ; enable_display-0; lcd_prϊnt ("Compactability", -1, 0, 1) ; lcd_prιn ("1-Set Slope/Inter", -1,0,1); lcd_prιnt ("Slope/Inter Menu", -1,0,1); lcd_prιnt ("2-Check Slope/Inter", -1,0,1) ; while ( (key_pressed>0x31) I I (key_pressed<0x30) ) I /* choose set slope/int or check slope/int */ ) if (key_pressed—0x30) ( /* set compactability slope/intercept is chosen */ entry_was_valιd—1; /* reset data entry value */ while (entry_was_valid<0) ( / ♦ enter compactability slope'100 from keypad */ entry_was_valιd-keypad entry("Enter Slope"); /* pressing CLR will reset the entry ♦ / ) comp_slope-entered_value, • entry_was_valιd—1; / ♦ reset the data entry value */ while (entry_was_valid<0) { /* enter compactabilty intercept from keypad • / entry_was_valιd-keypad_entry("Enter Intercept") ; ~ /• pressing CLR will reset the entry */ ) comp_ιntercept-entered value; ) if (key_ptessed—0x31) ( / ♦ check compactability 3lope/ιnt is chosen */ clear_dιsplay() ; / ♦ display compactability slope/intercept '/ lcd_pr nt("COMP SLOPE/INTER", -1,0, 1) ; lcd_prιnt ("Slope - ",comp slope, 0,1); lcd_prιnt(" ",-1,0,1); lcd_prιnt ("Inter - ", comp intercept,0, 1) ; while (key pressed'-0x3e)T /• display info until PREV MENU s pressed ♦ / ) ) goto calιb_menu; ) if (key_pressed—0x31) ( /• check compactabilty plug subroutine */ clear_dιsplay() ; ιnιtιate_entry() ; lcd_prιnt ("Place a plug into", -1, 0, 1) ; lcd_prιnt("START when ready", -1, 0, 1) ; lcd~prιnt ("the tester and press", -1,0, 1) ; while (key pres3ed'«0x3d) ( /* wait for START to be pressed */ ) clear_dιsplay() ; outputs_l»l; /* move table to test position */ timer(8) ; comp_press_out-152; /• apply 35 psi to the test cylinder */ outputs_l 1-8; timer(57; counter-0; holding-secondsl; wh le (update_analog(2) <148 4 counter<25) ( / • check to see if 35 PSI has been generated */ if(secondsl '-holding) ( counter*-1; /* increment counter every second and stop test */ holdinα-secondsl; /* aftsr 20 seconds due to low test pressure */ ) if (counter—25) comp_press out-154; /' increase pressure after 15 seconds */ ) longset(tempi,update_analog(1) ) ; longset (temp2, comp_slope) ; lonαmul (tempi, temp2) ; longset(temD2, 1000) ; longdi l empi, temo2) ; longset(temp2,comp_ιntercept) ; longsub(tempi, temp2) ; Hartley Controls Corp. AUTOLAB.C mes_comp-templ [0] ; /* calculate plug compactability lcd_prιnt ( "Test Results " , - 1 , 0, 1 ) ; lcd~pπnt ( "Analog - " , update_analog ( 1 ) , 0 , 1 ) ; i f ( counter— 25 ) lcd_pπnt("Bad Test Pressure", -1,0, 1) ; else lcd_prιnt(" ",-1,0,1); lcd_pπnt ("Meas Comp-",mes_comp, 1,1); comp_press_out-0; exhaust compactability pressure trasnducer */ outputs_l4—8; retract test cylinder */ timer(7) ; outputs_l-0; move table back to sample position */ while (key_pressed l -0x3e) ( display results until PREV MENU is pressed */ goto calib menu; ) ] if (key_pressed—0x31) ( / • moisture calibration is chosen */ clear_dιspla () ; /* display moisture calibration menu */ ιnιtιate_entry( ) ; enable_display-0; lcd_pπnt ("Moisture", -1,0,1); lcdjarint ("1-Set Slope/Interc", -1,0, 1) ; lcd~prιnt ("Calibration Menu", -1,0,1); lcd~prιnt ("2-Check Slope/Interc", -1,0, 1) ; while ( (key_pressed>0x31) I I ( ey_pressed<0x30) ) ( choose set slope/int or check slope/mt */ ) if (kβy_pressed—0x30) ( /* set moisture slope/intercept is chosen */ eπtry was_valιd—1; /* reset data entry value */ while (entry_was_valid<0) ( /* enter moisture slope'100 from keypad ♦ / entry_was_valιd-keypad_entry("Enter Slope") ; /* pressing CLR will reset entry value */ ) moιsture_slopβ"βntβred_value; entry_was_valιd—1; ~ /* reset data entry value */ while (entry_was_valid<0) ( /* enter moisture intercept from keypad */ entry_was~valιd-keypad_entry("Enter Intercept") ; ~ - /* pressing CLR will reset entry value */ I moιsture_ιntercept-entered_value; ) if (key_pressed—0x31) ( / check moisture slope/intercept is chosen */ clear display)) ; lcd_prιnt ("MOISTURE SLOPE/INTER", -1, 0, 1) ; led print ("Slope - ",moιsture_slopβ, 0, 1) ; lcd~prιnt(" ",-1,0,1); lcd_pπnt ( "Inter - " , moιsture_ιntercept, 0 1); while ( key pressed ! -0x3e) ( /* display info until PREV MENU is pressed */ ) ) goto calib menu; I if (key_pressed—0x32) ( /' green strength calibration is chosen */ cal_pressure»0; clear_dιsplay() ; /' display GS calibration menu */ ιnιtιate_entry() ; enable_display-0; lcd_prιnt ("Green Strength", -1,0,1); lcd_prιnt ("1-Pressure - ", cal_pressure, 0, 1) ; lcd~prιnt ("Pressure Check", -1, 0,1); led prin ("2-Measured Pressure", -1,0, ) ; while ( (key_pressed>0x31) I I (key_pressed<0x30) ) ( I ~ /'choose set pressure or check pressure •/ if (key_pressed—0x30) ( /* set pressure is chosen */ entry_was_valιd--l; /* reset data entry value */ while (entry_was_valid<0) I /* enter GS pressure from keypad */ entry_was_valιd»keypad_entry("Enter Pressure") ; " - / • pressing CLR will reset the entry value cal_pressure-entered_value; g3_pres3_out»cal_pressure; Hartley Controls Corp. - AUTOLAB.C if (key_pressed—0x31) ( /• check measured pressure is chosen */ ιnιtιate_entry() ; while (key_pressed!-0x3e) ( /* display pressure until PREV MENU is pressed •/ clear_dιspla ( ) ; lcd_pπnt ("", -1,0,1) ; lcd~pπnt ("",update_analog(3) ,0,1); lcd~pπnt ("Measured Pressure", -1, 0, 1) ; timer(1) ; ) ) goto calib j nenu; ) calιb_end: clear _ιsplay( ) ; I / — — ——————— —— ——————— • / /............... —————.————————————.— ..... / timer(preset) /* Routine for a time delay of 'preset' seconds • / int preset; int b, c; for (c-1; c<-preset; C++) ( for (b-1; b<-12650; b++) ( /* A loop of length 12650 scans for 1 second */ ) ιnput_check(input) /* subroutine to check for a specific input */ int input; /* returns 1 if the input is on and 0 if off */ ( /* All inputs are updated as 1 if off and 0 if • / int holding; /* on so we inverse (-) the input word and check*/ holding—ιnputs_l; /' it against the desired input with a bitwise */ if ((holding 4 Input)" •input) return(l) ; /• AND (4) statement. Enter the bit nuber of */ else return(0) ; /* desired input to check in the function call ♦ / ιnιtιate_entry() Prepare the keypad for an entry */ ( entered_value—1; key_pressed-0; entered counter—1; int update_analog(channel) /* Routine to update an analog input channel */ int channel; ( switch(channel) ( /* Select which analog channel to update case 1: analog-0; analogjnax-0; for (loop-0;loop<5;loop++) eompactability-OxOO; while ( (compactabilityjnsb 4 0x80) !=0x00) ( ) wait for ready while ( (compactabilityjnsb 4 0x80) '-0x80) ( ) wait Cor busy while ( (compactabilityjnsb 4 0x80) !«0x00) | ) wait for ready analog value now available analog :empjnsb«compactabilityjnsb; analog _emp_lsb-compactability; analogJ:emp nsb4-0x0f; analog-analog_tempjnsb*256+analog_temp_lsb; if (analog>analog nax) analogjnax-analog; return(analogjnax) ; case 2 : comp ress in-OxOO; for (quιck_tιmer«l; quιck_tιmer<-100; quick :ιmer++) Hartley Controls Corp. - AUTOLAB.C / ♦ Generate a time delay to let the controller ) return ! comp sress in) ; case 3 : wait for ready wait for busy wait for ready analog value now available c analog-0; analogjnax-0; timer (10) ; for (loop»0;loop<25;loop++) I moisture-OxOO; while ( (moisturejnsb 4 0x80) ' -0x00) ( ) / • wait for ready */ while ( (moisture j nsb 4 0x80 ) ' -0x80 ) ( ) /* wait for busy */ while ( (moisturejnsb 4 0x80) 1 -0x00 ) 1 ) /* wait for ready analog value now available */ analog :emp j nsb-moι 3 ture πsb; analog ;emp_lsb-moι s ture ; analog_temp j nsb4-0x0f; analog-analog_tempjnsb*256+analog_temp_lsb; if (analog>analogjnax) analog max-analog; ) returnIanalog j nax) ; case 5: analog-0; analogjnax-0; for (loop-0;loop<5;loop++) ( weight-OxOO; uhile ( (weight j nsb 4 0x80) '-0x00) ( ) wait for ready */ while ((weightjnsb 4 0x80) '«0x80) ( ) wait for busy */ while ((weightjnsb 4 0x80) '-0x00) ( ) wait for ready analog value now available */ analog_tempjn3b»weιght j t.3b; analog~temp~lsb-weιght7 analog_tβmp~msb4-0x0f; analog-analogJ:empjnsb*256+analog_temp_lsb; if ( nalog>an logjnax) analog max-analog; ) return(analog j nax) ; case 6: an log-0; analogjnax-0; for (loop-0;loop<5;loop++) ( perm_flow«0x00 ; while ( (pβrm_flow msb 4 0x80) ' -0x00) ( 1 /* wait for ready */ while ( (perm tlowjnsb 4 0x80) ' -OxβO) ( ) /* wait for busy */ while ( (perm Tlowjnsb 4 0x80) ' -0x00) ( ) /* wait for ready analog value now available */ ana 1 og _t emp jnsb-pe rm T 1 ow jns b ; anal og :emp_lsb-pe rm T low; analog :emp j nsb4-0x0f ; analog-analog :empjn3b*256+analog :emp_lsb; if (analog>analog j nax) analog max- analog; Hartley Controls Corp. - AUTOLAB.C return I analogjnax) ; case 7: analog-0; analogjnax-0 ; for (loop-0;loop<5;loop++) 1 perm press_ιn-OxO0; while ((perm press_in j nsb 4 0x80) '-0x00) ( ) /* wait for ready ♦ / while ( (perm~press_ιn j nsb 4 0x80) '-0x80) ( ) /* wait for busy */ while ( (perπTpress Ln j nsb 4 0x80) ' -0x00) ( 1 /* wait for ready analog value now available analog J_.empjn3b«perm j>r ess .njnsb; analog ;emp_lsb»perm J3ress .n ; analog :em jnsb4-0x0£ ; analog-analog ;emp j nsb* 256+ analog ;emp_lsb; if (analog>analogjnax) analogjnax-analog; ) return (analogjnax) ; ) ) /* channel is written to, all channels have •/ p d loop!) [ int loop, temp in; perm press sut jnsb- (pιd jut/256) ; perm aress jut- )pid 3 ut~(perm re33 3ut j nsb*256) ) ; dummy rfri te-0 ; timer! 1) ; 1 ) /* the same reading as the desired channel */ checkjjjress () I gs jress sut-192 ; timer (2) ; while (update _nalog(3)<2730) ( clear jiisplay () ; led print (" ",-1,0,1) ; lcd~prιnt( "CHECK LINE PRESSURE", -1, 0, 1) ; timer (1) ; clear jiisplay ( ) ; timer (1) ; I gs press 3Ut-0; ) keypa »ntry(message) /* Routine to allow data entry. 'message' will */ char message[22]; /* be displayed before the input is asked for */ t clear display!) ; led princ (message, -1,0,1); /* display the desired message */ lcd jj jrintt" ",-1,0,0); /* Print blank spaces to center the input */ enable iιsplay-1 ; initiate entry () ; while (keyjpressed'-0x3f 44 key ^ressed' -0x3b) ( Hartley Controls Corp. AUTOLAB.C / ♦ Wait for 'enter' or 'clear' to be hit */ I if (key pressed—0x3b) return (-1); /* If 'clear' hit, return -1 to re-enter value ♦ / else( return(entered alue) ; /* If 'enter' hit, return the value entered */ enable display—1; ) pulse () /* generate a short pause for pulsing info */ I /* to the printer '/ for (holding-!; holdιng<-750; holdιng++) ( ) I The following is a list of the bits in the program that trigger inputs to the printer I PRINTER PROCESSOR I DESCR PIN* parallel rint (message,variable, decimal,linefeed) /* Routine to print the characters in 'message' int variable, decimal, linefeed; char message(20); followed by a number 'variable' with */ not print any numbers/decimals. A linefeed */ hl-O; h2-0; h3-0; h4-0; can be generated by entering a 1 as the */ 'linefeed' variable */ v_length-4; dertermine the length of the number to print */ if (varιable<1000) v_length>3; if (varι ble<100) v_length-2; if (varιable<10) v_Iength»l; for (loop-0; loop<-strlen(message)-1; loop++) ( Loop to print the 'message' by characters */ each bit in the character has ts own output */ in the parallel cable port connector. */ clear strobe bit - active low to output data */ to printer */ ) if (variable 1 —1) { /* loop to print the entire variable */ for (loop»v_length; loop>-l; loop--) ( if Iloop-^decimal 44 dec mal>0) { /* loop to print the decimal point */ setbitlPl.1) , setbitlPl.2) setbitlPl. ) Hartley Controls Corp . - AUTOLAB . C setbitlPl.5) ; clrb t(P3.5) ; pulsed ; clrbi (Pl.l) ; clrbit (P1.2) ; clrbιt(P1.3) ; clrbit (PI.5) ; pulse () ; setbit (P3.5) ; ) if (loop—4) ( value-variable/1000; h4»value; /• calculate the 4th digit from the right */ 1 if (loop—3) ( value-(variable- (h4*1000))/100; h3-value; /* calculate the 3rd digit from the right */ 1 if (loop—2) ( vvaalue- (variable- (h4*1000)- (h3*100) ) /10 h2-value; calculate the second digit from the right ) if (loop—1) ( value-variable- (h4'1000) - (h3*100) -(h2*10) ; hl-value; /* calculate the first digit from the right */ setbitlPl.0) /' set appropriate bits to print the desired */ setbιt(Pl.l) /* number to the printer */ setbitlPl.2) setbitlPl. ) setbitlPl. setbitlPl. setbitlPl. setbitlPl, /* clear strobe bit - active low to output the /* data to the printer */ ) if ( linefeed— 1 ) camage_return ( ) ; clear data bits ( ) / ♦ routine to clear all data bits in the printer */ /* between characters */ setbit (P3.5) /* set strobe bit - active low */ clrbit(PI clrbit(Pl clrbit(Pl clrbit (PI clrbit (PI clrbιt(P1.5) clrbιt(Pl.β) clrb t(P1.7) carriage return( ) /* routine to generate a carriage return */ ( setbιt(Pl.O) ; setbιt(P1.2) ; setbitlPl.3) ; clrbit (P3.5) ; pulse() ; setbit (P3.5) ; clrbιt(Pl.O) ; clrbιt(P1.2); clrbιt(P1.3) ; timer (1) ; for (quιck :ιmer-l; quιck_tιmer<-3162; quick :κner++) ( / • Quarter second pause */ Hartley Controls Corp. - AUTOLAB.C form feβdd /* a form feed s just 6 carriage returns to */ ( /* bring the paper out far enough for the user */ carriage re urn() ; /* to see all the data and tear it off if they */ carriage return() ; /* choose */ carriage return() ; carrιage_return() ; earnage ' return() ; carrιage_return() ; carrιage_return() ; carriage return() ; print header!) /* Print the time and date to the printer •/ ( parallel rιnt("Time- ".hourslO, 0,0) , ρarallel~pnnt ("",hoursl, 0,0) ; par*llel~pπnt ( " : " , minutes 10, 0,0); parallel r nt ("".minutesl, 0, 1) ; parallel jarint ("Date- ".monthlO, 0, 0) , parallel j>rιnt("",monthl, 0,0) ; parallel rint("/",dayl0,0,0) ; parallel r nt("",dayl,0,1); carrιagβ_return() ; serial πnt() t if (serial count -- 9) ( print ("Date- idtd/tdtd ,monthl0,monthl,dayl0,dayl) , print!. (* SandmanNn") , print ("Time Test Comp Moist GrnStr Perm WkgBnd AvlBnd MlrEff Dnsty\n"), serial count-0; print ("%d%d: did 43d", hours 10, hours 1, minutes 10, minutes 1, test) ; print (" 43u %3u *3u",mes :omp,mes j no sture,mes jreen -trength) ; print (" I3u %3u Ϊ3u",mes~pβrmeabιl ty, working jond, available oond) , print (" »3u %3d\n", muller sfficiency, specimenjiens ty) ; serial count++; ) analog print 0 ( prxntfC A_WCHT A PERM A_MST R_MST \n") I printf (" »4u *4d « d",ave_weιght ιg,ave_peπn Tlow, mois »nalog) , print (" »5d\n", moist raw); ~ The program is capable of producing an output to provide real time information regarding the deformation of the sample prior to fracturing of the sample as well as providing an extremely accurate reading of the size of the sample. Alternatively, the shear strength of the extruded sample 24 could be measured. Again, the table 42 and container 50 remain in position below the moisture testing apparatus 140. Shear testing apparatus 180 includes a pneumatic cylinder 182, cylinder ram 184, and shear test plate 186. Ram 184 is extended from cylinder 182 until shear test plate 186 makes contact with extruded sample 24. As shear test plate 186 continues in its path of motion, the pressure required by cylinder 182 is increased until the sample 24 is sheared. This test also destroys the sample 24. The resulting maximum pressure is recorded by the controller 200. Finally, floor plate 90 is raised to its uppermost position which is approximately equal with the top 54 of container 50. Table 42 is energized and moves to its initial position below filling station 60. As top 54 of container 50 passes just below wiping station 70, wiping blade 72 removes all sand 22 supported on floor plate 90. Thus when floor plate 90 subsequently retracts, container 50 will be empty. Alternatively, this invention 10 could comprise a method for testing sand. The method comprises an automated series of coordinated events including the following steps: sifting of the granular material by an agitator through a screen in the riddle, delivery of the granular material to a container or specimen tube, leveling of the granular material in the container as it traverses to the compaction station, compression of the granular material to determine its compatibility, translation of the linear motion of compression to the controller 200, measuring the mass of the granular material, translation of the mass to the controller 200, measure the gas/air permeability of the granular material, translation of the gas/air permeability to the controller 200, measuring the moisture content of the granular material, translation of the moisture content to the controller 200, measuring either the fracture strength or shear strength of the granular material, translation of the selected strength to the controller 200, and output of the granular material's quality by the controller 200. The programming language is C. Specifically, the computer program disclosed was made by using a package call MICRO C sold by Dunfield Development Systems of Toronto, Canada. The foregoing is considered as illustrative only of the principles of the invention. Furthermore, since numerous modifications and changes will readily occur to those skilled in the art, it is not desired to limit the invention to the exact construction and operation shown and described. While the preferred embodiment has been described, the details may be changed without departing from the invention, which is defined by the claims.

Claims: What is claimed is: 1. A and testing apparatus for testing foundry sand, the sand testing apparatus comprising a plurality of testing stations and a green sand cylinder having a base and mounted to a rail movement mechanism; the green sand cylinder including a load cell mechanism and a spring mechanism located at its base; the sand testing apparatus further including a computer program control system for controlling a plurality of predetermined tests and interpreting the resulting data from each test whereby the foundry is provided with a print out of the condition of the sand sample tested; the testing stations of the sand testing apparatus including a first station in which a green sand cylinder is filled to overflowing with green or wet sand from a green sand source; the sand testing apparatus further including an excess and wiper mechanism for removing excess sand from the green sand cylinder so that the green sand cylinder is completely and evenly filled top to bottom whereby a known volume of sand in the green sand cylinder is determined; the green sand cylinder capable of moving under the excess green sand wiper to a green sand compacting station; the green sand compacting station comprising a cylinder positioned over the green sand cylinder having a piston; the compaction cylinder positioned over the green sand cylinder including a piston capable of being extended into the green sand cylinder and compacting the sand; the piston being capable of being extended at a known or predetermined pressure; the green sand testing apparatus further including an air/gas permeability test mechanism including a plate mechanism capable of being place on top of the green sand cylinder so that the compression piston may be pressed against the sealing plate at the top of the green sand testing cylinder and air passed through the green and test sample; the green sand testing apparatus further including a moisture testing apparatus comprising at least one microwave projector; said microwave projector capable of projecting a microwave signal in a frequency range to which water is sensitive; said signal of said microwave projector attenuating in the presence of moisture; said attenuation being proportional to the amount of moisture in the sample; 2. The device of claim 1 further including a green sand compression piston for performing a green sand compression test on the green sand sample. 3. The device of claim 1 further including a green sand sheer mechanism for performing a green sand sheer test on the green sand test sample. 4. A method for testing green foundry sand using a sand testing apparatus comprising a plurality of sand testing stations and a green sand cylinder mounted to a rail movement mechanism; the green sand cylinder including a load cell and spring located beneath the load cell; the apparatus being controlled by a computer program control system for controlling the various tests performed and interpreting the data resulting from each test to provide the foundry with a print out of the sands condition, the process comprising; filling the green sand cylinder at the first test station until the green sand cylinder is overflowing with wet or green sand; moving sand green sand cylinder from said filling position underneath an excess sand wiper which removes the excess sand from the top of the green sand cylinder so that the green sand cylinder is now completely filled top to bottom and there is a known volume of sand in the cylinder; continuing to move the green sand cylinder to a green sand compaction station in which the green sand cylinder is positioned under a compaction cylinder having a compaction piston; the compaction piston having extended into the green sand cylinder and the green sand being compacted; the piston being extended at a known or predetermined pressure; the piston stopping its extension when the sands resistance to compaction is equal to the predetermined extension of pressure of the piston; the compaction of the green sand being determined by measuring the linear extension of the piston into the green sand cylinder; retracting the green sand compaction piston and measuring the gross mass of the green sand by subtracting the known mass of the cylinder from the total mass of the cylinder and the green sand; raising the green sand sample approximately one-half inch in the green sand cylinder by extending a raised piston located beneath the green sand cylinder and then retracting the raised piston; the bottom of the green said sample being exposed to atmospheric pressure; performing a gas permeability test on the green sand sample by mechanically sealing the upper opening of the green said compression compaction cylinder with a plate mechanism so that the only air exit from the green sand cylinder is through the bottom of the green sand cylinder; supply air or gas at the top of the green sand cylinder so that said air or gas is supplied at a fixed or known pressure and the rate at which it passes from the top of the green sand sample to the bottom of the green sand sample is measured and a gas permeability determination is made; turning the gas off and retracting the sealing plate from the top of the green sand cylinder and then moving the green sand cylinder to a green sand compression strength and moisture testing station; extending a predetermined portion of the compacted green sand sample from the cylinder by extending the piston located beneath the green sand cylinder so that the predetermined portion is positioned in front of a microwave projecting mechanisms; projecting a microwave signal from said microwave projecting mechanism in a frequency range to which moisture is sensitive and measuring the change in attenuation of the microwave signal; applying a green sand compression piston to the upper or top surface of the sample; increasing pressure until the sample is fractured; returning the green sand cylinder to its starting position and discharging the remaining sample from the cylinder; 5. The process of claim 4 in which the predetermined portion of the green sand sample extruded from the cylinder during the moisture test is two inches. 6. The process claim 4 wherein the spring mechanism has a K value of 44 pounds per inch and the load cell has a maximum capacity of 1000 grams. 5 7. A moisture testing apparatus for testing the moisture content of a green foundry sand sample and providing a read out of the moisture content, the moisture testing apparatus comprising: a microwave projection mechanism aimed at the green foundry sand sample; and a recording apparatus connected to the microwave projection mechanism; said l o microwave projection mechanism capable of projecting a microwave of a predetermined frequency range; said recording apparatus capable of recording any change in the energy level of the microwave. 8. A method for measuring moisture in the green foundry sand using a moisture testing apparatus for testing the moisture content of a green foundry sand sample 15 and providing a read out for the moisture content, the moisture testing apparatus having a microwave projection mechanism aimed at the green foundry sand sample; and a recording apparatus connected to the microwave projection mechanism; said microwave projection mechanism capable of projecting a microwave of a predetermined frequency range; said recording apparatus capable of recording any 0 change in the energy level of the microwave; the method comprising: placing the sample in front of the microwave projector; firing a microwave of a predetermined frequency at the sample; recording the change in the energy level of the microwave. 9. A foundry sand compressive test unit using a linear transducer to record in 5 real time the deformation of a predetermined green sand sample for a period of time, the green sand sample having said deformation and said range of deformations being recorded or noted by said linear transducer and being communicated to a computer program for compilation and recordation and reporting to an operator the range of deformation on the green sand sample up to and 0 including the deformation at the time of fracturing the sample. 10. The device of claim 9 wherein the computer program also notes the pressure at the moment of fracturing and the moment of fracture is also recorded. 11. The device of claim 9 wherein the linear transducer is programmed via a computer control to modulate the green compressive force applied to the plug or sand sample to measure the elastic range of the sample prior to fracturing of the sample. 12. A method for measuring the green strength of a sample of green foundry sand of a predetermined size wherein a sample of green foundry sand is extruded such that the sample is of a predetermined size; measuring the deformation applied to the sample via a linear transducer continuously; recording the continuous real time measurement of the deformation applied to said sample; communicating said information from said linear transducer to a computer program; recording said deformation in real time up to and including the point of sample fracture; communicating said information to said computer program.

Inventors: ROETHLISBERGER RONALD W, THOMAS PERRY L, ROETHLISBERGER, RONALD, W., THOMAS, PERRY, L.
Applicants: HARTLEY CONTROLS CORP, ROETHLISBERGER RONALD W, THOMAS PERRY L, HARTLEY CONTROLS CORPORATION, ROETHLISBERGER, RONALD, W., THOMAS, PERRY, L.
Application year: 1996
Main classification: G01N3
IPC codes: G01N3, G01N15, G01N33, G01N35