26-Feb-88 22:08:02-EST,63574;000000000001 Mail-From: WNSLOAN created at 26-Feb-88 20:05:42 Date: Fri 26 Feb 88 20:05:42-EST From: Bill Sloan Subject: AC-ALL-FILES.LSP (Part I) <-- new, improved formatting To: dcbrown@ELWOOD Message-ID: <12377927352.24.WNSLOAN@ELWOOD> {; *********************************************** AC-ALL-FILES.LSP } {; ************************ AirCylinder Design Agents *********************** } {; This file contains all the user-defined design agents required by DSPL for } {; the Air Cylinder problem. Minor ommissions and spelling errors have been } {; corrected, and warnings have been added to comments where necessary. The } {; file comments have been retained, indicating the original file sources. } {; Note the use of the system dummy value *** for required fields whose value } {; could not be decided. - Bill Sloan Oct. 22 1987 } {; To use this file as input to the DSPL interpreter, type "y" when asked if } {; you would like to load the design knowledge, and then type the name of } {; this file when asked for the name of the knowledge file. } {; ********************************************* File: AC-SPECIALISTS.LSP } {; Declarations of Specialists} (SPECIALIST (NAME AirCylinder) (USED-BY USER) (USES Spring Head Rest) (DESIGN-PLANS AirCylinderDP1) (DESIGN-PLAN-SELECTOR ACDPSelector) (ROUGH-DESIGN-PLANS AirCylinderRDP1) (ROUGH-DESIGN-PLAN-SELECTOR ACRDPSelector) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None)) (SPECIALIST (NAME Spring) (USED-BY AirCylinder) (USES None) (DESIGN-PLANS SpringDP1) (ROUGH-DESIGN-PLANS SpringRDP1)) (SPECIALIST (NAME Head) (USED-BY AirCylinder) (USES None) (DESIGN-PLANS HeadDP1) (ROUGH-DESIGN-PLANS HeadRDP1)) (SPECIALIST (NAME Rest) (USED-BY AirCylinder) (USES PistonAndRod Cap Tube Bumper) (DESIGN-PLANS RestDP1) (ROUGH-DESIGN-PLANS RestRDP1)) (SPECIALIST (NAME PistonAndRod) (USED-BY Rest) (USES None) (DESIGN-PLANS PistonAndRodDP1 PistonAndRodDP2) (ROUGH-DESIGN-PLANS PistonAndRodRDP1)) (SPECIALIST (NAME Cap) (USED-BY Rest) (USES None) (DESIGN-PLANS CapDP1) (ROUGH-DESIGN-PLANS CapRDP1)) (SPECIALIST (NAME Tube) (USED-BY Rest) (USES None) (DESIGN-PLANS TubeDP1) (ROUGH-DESIGN-PLANS TubeRDP1)) (SPECIALIST (NAME Bumper) (USED-BY Rest) (USES None) (DESIGN-PLANS BumperDP1 BumperDP2) (ROUGH-DESIGN-PLANS BumperRDP1)) {; *********************************************** AC-SELECTORS.LSP } (SELECTOR (NAME ACDPSelector) (TYPE Design) (USED-BY AirCylinder) (USES ACDP1Sponsor) (BODY REPLY (IF PERFECT-PLANS THEN (DESIGNER-PREFERENCE PERFECT-PLANS) ELSE (IF SUITABLE-PLANS THEN (DESIGNER-PREFERENCE SUITABLE-PLANS) ELSE NO-PLANS-APPLICABLE)))) (SELECTOR (NAME ACRDPSelector) (TYPE RoughDesign) (USED-BY AirCylinder) (BODY REPLY (DESIGNER-PREFERENCE PERFECT-PLANS))) {; ******************************************** AC-SPONSORS.LSP } (SPONSOR (NAME ACDP1Sponsor) (USED-BY ACDPSelector) (PLAN AirCylinderDP1) (BODY REPLY (IF (ALREADY-TRIED? PLAN) THEN RULE-OUT) REPLY SUITABLE)) {; ************************************************ AC-PLANS-AND-RD.LSP } {; *** second half in AC-DESIGN-TASKS.LSP } {; !!!!!!!!!!!!!!!!!!! D E S I G N P L A N S !!!!!!!!!!!!!!!!!!!} (PLAN (NAME AirCylinderDP1) (TYPE Design) (USED-BY AirCylinder) (USES Spring Head Rest) (SPONSOR ACDP1Sponsor) (QUALITIES Cheap) (HISTORY None) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY CheckRequirements (ROUGH-DESIGN AirCylinder) (PARALLEL (DESIGN Spring) (DESIGN Head)) (TEST-CONSTRAINT Dummy) (DESIGN Rest))) (PLAN (NAME RestDP1) (TYPE Design) (USED-BY Rest) (USES PistonAndRod Cap Tube Bumper) (QUALITIES Cheap) (HISTORY None) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY (PARALLEL (DESIGN PistonAndRod) (DESIGN Cap)) (PARALLEL (DESIGN Tube) (DESIGN Bumper)) TieRods)) (PLAN (NAME HeadDP1) (TYPE Design) (USED-BY Head) (QUALITIES Cheap) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY HeadTubeSeat MountingHoles Bearings SealAndWiper AirCavity AirInlet TieRodHoles (REPORT-ON Head))) (PLAN (NAME SpringDP1) (TYPE Design) (USED-BY Spring) (QUALITIES Reliable) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY SpringLengths SpringDesign (REPORT-ON Spring))) (PLAN (NAME PistonAndRodDP1) (TYPE Design) (USED-BY PistonAndRod) (QUALITIES Reliable) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY PistonSize PistonRodHole PistonBrazeSeat PistonSpringSeat PistonSeal PistonBreakawayCut PistonNotches (REPORT-ON Piston) RodSize RodThread RodPistonMount (REPORT-ON Rod))) (PLAN (NAME PistonAndRodDP2) (COMMENT "used to explore failure handling") (TYPE Design) (USED-BY PistonAndRod) (QUALITIES Reliable) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY PistonSize PistonRodHole PistonBrazeSeat PistonSpringSeat PistonSealSmaller PistonBreakawayCut PistonNotches (REPORT-ON Piston) RodSize RodThread RodPistonMount (REPORT-ON Rod))) (PLAN (NAME CapDP1) (TYPE Design) (USED-BY Cap) (QUALITIES Strong) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY CapTubeSeat CapInternal CapAirHole CapTieRodHoles (REPORT-ON Cap))) (PLAN (NAME TubeDP1) (TYPE Design) (USED-BY Tube) (QUALITIES Strong) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY TubeBevel TubeInnerSurface (REPORT-ON Tube))) (PLAN (NAME BumperDP1) (TYPE Design) (USED-BY Bumper) (QUALITIES Strong) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY BumperFlange BumperWall (REPORT-ON Bumper))) (PLAN (NAME BumperDP2) (TYPE Design) (USED-BY Bumper) (QUALITIES Strong) (BODY BumperFlange2 BumperWall (REPORT-ON Bumper))) {; *************************************************************} {; !!!!!!!!!!!!! R O U G H D E S I G N P L A N S !!!!!!!!!!!!!!} (PLAN (NAME AirCylinderRDP1) (TYPE RoughDesign) (USED-BY AirCylinder) (USES Head Rest Spring) (QUALITIES ) (HISTORY None) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY (ROUGH-DESIGN Head) (ROUGH-DESIGN Rest) (ROUGH-DESIGN Spring))) (PLAN (NAME SpringRDP1) (TYPE RoughDesign) (USED-BY Spring) (USES None) (QUALITIES ) (HISTORY None) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY SpringDiameters)) (PLAN (NAME HeadRDP1) (TYPE RoughDesign) (USED-BY Head) (USES None) (QUALITIES ) (HISTORY None) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY HeadMaterial HeadDimensions)) (PLAN (NAME RestRDP1) (TYPE RoughDesign) (USED-BY Rest) (USES PistonAndRod Cap Tube Bumper) (QUALITIES ) (HISTORY None) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY TieRodsRough (ROUGH-DESIGN Cap) (ROUGH-DESIGN Tube) (ROUGH-DESIGN PistonAndRod) (ROUGH-DESIGN Bumper))) (PLAN (NAME PistonAndRodRDP1) (TYPE RoughDesign) (USED-BY PistonAndRod) (USES None) (QUALITIES ) (HISTORY None) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY PistonMaterial RodMaterial)) (PLAN (NAME CapRDP1) (TYPE RoughDesign) (USED-BY Cap) (USES None) (QUALITIES ) (HISTORY None) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY CapMaterial CapDimensions)) (PLAN (NAME TubeRDP1) (TYPE RoughDesign) (USED-BY Tube) (USES None) (QUALITIES ) (HISTORY None) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY TubeMaterial TubeDimensions)) (PLAN (NAME BumperRDP1) (TYPE RoughDesign) (USED-BY Bumper) (USES None) (QUALITIES ) (HISTORY None) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY BumperMaterial BumperFlangeRough)) {; *********************************************************************} {; !!!!!! A I R C Y L R O U G H D E S I G N T A S K S !!!!!!!!!!!!!} (TASK (NAME HeadMaterial) (USED-BY HeadRDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY ChooseHeadMaterial)) (STEP (NAME ChooseHeadMaterial) (ATTRIBUTE-NAME HeadMaterial) (USED-BY HeadMaterial) (BODY (KNOWN MaxTemperature (KB-FETCH 'Requirements 'MaxTemperature) Quality (KB-FETCH 'Requirements 'Quality) Environment (KB-FETCH 'Requirements 'Environment) OpPressureMax (KB-FETCH 'Requirements 'OperatingPressureMax) RodLoad (KB-FETCH 'Requirements 'RodLoad)) (DECISIONS Material (TABLE (DEPENDING-ON MaxTemperature Quality Environment OpPressureMax RodLoad) (MATCH (IF ((<= 250) Reliable Corrosive (<= 60) (<= 1.5)) THEN StainlessSteel) (IF ((<= 200) ? NonCorrosive (<= 60) (<= 1.0)) THEN Aluminum)) (OTHERWISE StainlessSteel)) REPLY (KB-STORE 'Head 'HeadMaterial Material)))) {; ----Head-----------------------------------------------------------------} (TASK (NAME HeadDimensions) (USED-BY HeadRDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY HeadDepth HeadHeight HeadWidth)) (STEP (NAME HeadDepth) (ATTRIBUTE-NAME HeadDepth) (USED-BY HeadDimensions) (BODY (KNOWN EnvelopeLength (KB-FETCH 'Requirements 'EnvelopeLength) Factor 0.1239) (DECISIONS HeadDepth (TWO-DP (* Factor EnvelopeLength)) REPLY (KB-STORE 'Head 'HeadDepth HeadDepth)))) (STEP (NAME HeadHeight) (ATTRIBUTE-NAME HeadHeight) (USED-BY HeadDimensions) (BODY (KNOWN EnvelopeHeight (KB-FETCH 'Requirements 'EnvelopeHeight) EnvelopeWidth (KB-FETCH 'Requirements 'EnvelopeWidth)) (DECISIONS HeadHeight (TWO-DP (SMALLER EnvelopeHeight EnvelopeWidth)) REPLY (KB-STORE 'Head 'HeadHeight HeadHeight)))) (STEP (NAME HeadWidth) (ATTRIBUTE-NAME HeadWidth) (USED-BY HeadDimensions) (BODY (KNOWN HeadHeight (KB-FETCH 'Head 'HeadHeight)) (DECISIONS HeadWidth HeadHeight REPLY (KB-STORE 'Head 'HeadWidth HeadWidth)))) {; ----Cap-------------------------------------------------------------} (TASK (NAME CapMaterial) (USED-BY CapRDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY ChooseCapMaterial)) (STEP (NAME ChooseCapMaterial) (ATTRIBUTE-NAME CapMaterial) (USED-BY CapMaterial) (BODY (KNOWN MaxTemp (KB-FETCH 'Requirements 'MaxTemperature) Quality (KB-FETCH 'Requirements 'Quality) Envir (KB-FETCH 'Requirements 'Environment) OpPressureMax (KB-FETCH 'Requirements 'OperatingPressureMax) RodLoad (KB-FETCH 'Requirements 'RodLoad)) (DECISIONS Material (TABLE (DEPENDING-ON MaxTemp Quality Envir OpPressureMax RodLoad) (MATCH (IF ((<= 250) Reliable Corrosive (<= 60) (<= 1.5)) THEN StainlessSteel) (IF ((<= 200) ? NonCorrosive (<= 60) (<= 1.0)) THEN Aluminum)) (OTHERWISE StainlessSteel)) REPLY (KB-STORE 'Cap 'CapMaterial Material)))) {; ----Cap----------------------------------------------------------------} (TASK (NAME CapDimensions) (USED-BY CapRDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY CapDepth CapHeight CapWidth)) (STEP (NAME CapDepth) (COMMENT "attempt to maintain the same ratio of lengths") (ATTRIBUTE-NAME CapDepth) (USED-BY CapDimensions) (BODY (KNOWN EnvelopeLength (KB-FETCH 'Requirements 'EnvelopeLength) Factor 0.0798) (DECISIONS CapDepth (THREE-DP (* Factor EnvelopeLength)) REPLY (KB-STORE 'Cap 'CapDepth CapDepth)))) (STEP (NAME CapHeight) (ATTRIBUTE-NAME CapHeight) (USED-BY CapDimensions) (BODY (KNOWN HeadHeight (KB-FETCH 'Head 'HeadHeight)) (DECISIONS CapHeight HeadHeight REPLY (KB-STORE 'Cap 'CapHeight CapHeight)))) (STEP (NAME CapWidth) (ATTRIBUTE-NAME CapWidth) (USED-BY CapDimensions) (BODY (KNOWN HeadWidth (KB-FETCH 'Head 'HeadWidth)) (DECISIONS CapWidth HeadWidth REPLY (KB-STORE 'Cap 'CapWidth CapWidth)))) {; ----Tube-----------------------------------------------------------} (TASK (NAME TubeMaterial) (USED-BY TubeRDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY ChooseTubeMaterial)) (STEP (NAME ChooseTubeMaterial) (ATTRIBUTE-NAME TubeMaterial) (USED-BY TubeMaterial) (BODY (KNOWN MaxTemp (KB-FETCH 'Requirements 'MaxTemperature) Quality (KB-FETCH 'Requirements 'Quality) Envir (KB-FETCH 'Requirements 'Environment) OpPressureMax (KB-FETCH 'Requirements 'OperatingPressureMax) RodLoad (KB-FETCH 'Requirements 'RodLoad)) (DECISIONS Material (TABLE (DEPENDING-ON MaxTemp Quality Envir OpPressureMax RodLoad) (MATCH (IF ((<= 250) Reliable Corrosive (<= 60) (<= 1.5)) THEN StainlessSteel) (IF ((<= 200) ? NonCorrosive (<= 60) (<= 1.0)) THEN Aluminum)) (OTHERWISE StainlessSteel)) REPLY (KB-STORE 'Tube 'TubeMaterial Material)))) {; ----Tube-----------------------------------------------------------------} (TASK (NAME TubeDimensions) (USED-BY TubeRDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY TubeLength TubeOD TubeID TubeBore)) (STEP (NAME TubeLength) (ATTRIBUTE-NAME TubeLength) (USED-BY TubeDimensions) (BODY (KNOWN EnvelopeLength (KB-FETCH 'Requirements 'EnvelopeLength) Factor 0.4473) (DECISIONS Length (TWO-DP (* Factor EnvelopeLength)) REPLY (KB-STORE 'Tube 'TubeLength Length)))) (STEP (NAME TubeOD) (ATTRIBUTE-NAME TubeOD) (USED-BY TubeDimensions) (BODY (KNOWN TRDiameter (KB-FETCH 'TieRod 'TieRodDiameter) Material (KB-FETCH 'Tube 'TubeMaterial) MinThickness (KB-FETCH Material 'MinThickness) Width (KB-FETCH 'Head 'HeadWidth) Height (KB-FETCH 'Head 'HeadHeight) Clearance2 0.015) (DECISIONS Diam TRDiameter w (- Width (+ (DOUBLE MinThickness) Diam)) h (- Height (+ (DOUBLE MinThickness) Diam)) Diag (SQRT (+ (^ w 2) (^ h 2))) Outer (- Diag (+ (DOUBLE MinThickness) Diam)) COMMENT "reasonable max tube OD" COMMENT "allow for tube seat clearance" TubeOD (THREE-DP (STANDARDIZE-NEAREST (- Outer Clearance2))) REPLY (KB-STORE 'Tube 'TubeOD TubeOD)))) (STEP (NAME TubeID) (ATTRIBUTE-NAME TubeID) (USED-BY TubeDimensions) (BODY (KNOWN Pressure (KB-FETCH 'Requirements 'OperatingPressureMax) Length (KB-FETCH 'Tube 'TubeLength) TubeOD (KB-FETCH 'Tube 'TubeOD)) (DECISIONS Thickness (TABLE (DEPENDING-ON Pressure Length) (MATCH (IF ((<= 60) (<= 4)) THEN 0.065) (IF (? ?) THEN 0.1))) TubeID (THREE-DP (- TubeOD (DOUBLE Thickness))) REPLY (KB-STORE 'Tube 'TubeID TubeID)))) (STEP (NAME TubeBore) (COMMENT "estimate of tube volume") (ATTRIBUTE-NAME ***) (USED-BY TubeDimensions) (BODY (KNOWN ID (KB-FETCH 'Tube 'TubeID) Length (KB-FETCH 'Tube 'TubeLength) Pi 3.1415927) (DECISIONS IRadius (HALF (VALUE- ID)) Vol (* Pi (* (^ IRadius 2) Length)) REPLY (ASK-USER "Tube rough volume is " (THREE-DP Vol) " is this OK for this design? ")))) {; ----Piston------------------------------------------------------------} (TASK (NAME PistonMaterial) (USED-BY PistonAndRodRDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY ChoosePistonMaterial)) (STEP (NAME ChoosePistonMaterial) (ATTRIBUTE-NAME PistonMaterial) (USED-BY PistonMaterial) (BODY (KNOWN TubeMaterial (KB-FETCH 'Tube 'TubeMaterial) Pressure (KB-FETCH 'Requirements 'OperatingPressureMax)) (DECISIONS Material (TABLE (DEPENDING-ON TubeMaterial Pressure) (MATCH (IF (StainlessSteel (<= 60)) THEN Brass) (IF (Aluminum (<= 60)) THEN Aluminum)) (OTHERWISE StainlessSteel)) REPLY (KB-STORE 'Piston 'PistonMaterial Material)))) {; ----Rod---------------------------------------------------------------} (TASK (NAME RodMaterial) (USED-BY PistonAndRodRDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY ChooseRodMaterial)) (STEP (NAME ChooseRodMaterial) (ATTRIBUTE-NAME RodMaterial) (USED-BY RodMaterial) (BODY (KNOWN Stroke (KB-FETCH 'Requirements 'Stroke) RodLoad (KB-FETCH 'Requirements 'RodLoad)) (DECISIONS Material (TABLE (DEPENDING-ON Stroke RodLoad) (MATCH (IF ((<= 1.75) (<= 1.5)) THEN StainlessSteel)) (OTHERWISE (FAILURE "Rod Material choice"))) REPLY (KB-STORE 'Rod 'RodMaterial Material)))) {; -----Bumper-----------------------------------------------------------} (TASK (NAME BumperMaterial) (USED-BY BumperRDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY ChooseBumperMaterial)) (STEP (NAME ChooseBumperMaterial) (ATTRIBUTE-NAME BumperMaterial) (USED-BY BumperMaterial) (BODY (KNOWN PressMax (KB-FETCH 'Requirements 'OperatingPressureMax) Stroke (KB-FETCH 'Requirements 'Stroke) RodLoad (KB-FETCH 'Requirements 'RodLoad)) (DECISIONS Material (TABLE (DEPENDING-ON PressMax Stroke RodLoad) (MATCH (IF ((<= 30) (<= 1) ?) THEN Aluminum) (IF ((<= 60) (<= 2) (<= 2)) THEN StainlessSteel)) (OTHERWISE (FAILURE "Bumper Material choice"))) REPLY (KB-STORE 'Bumper 'BumperMaterial Material)))) {; -----Bumper----------------------------------------------------------} (TASK (NAME BumperFlangeRough) (USED-BY BumperRDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY BumperFlangeThicknessRough)) (STEP (NAME BumperFlangeThicknessRough) (ATTRIBUTE-NAME BumperFlangeThickness) (USED-BY BumperFlangeRough) (BODY (KNOWN EnvelopeLength (KB-FETCH 'Requirements 'EnvelopeLength) Factor 0.0077) (DECISIONS Thickness (TWO-DP (* Factor EnvelopeLength)) REPLY (KB-STORE 'Bumper 'BumperFlangeThickness Thickness)))) {; ----TieRods--------------------------------------------------------------} (TASK (NAME TieRodsRough) (USED-BY RestRDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY TieRodLengthRough TieRodDiameterRough)) (STEP (NAME TieRodLengthRough) (ATTRIBUTE-NAME TieRodLength) (USED-BY TieRodsRough) (BODY (KNOWN EnvelopeLength (KB-FETCH 'Requirements 'EnvelopeLength) Factor 0.6419) (DECISIONS Length (ONE-DP (* Factor EnvelopeLength)) COMMENT "rough cap to head length" Length (TABLE (DEPENDING-ON Length) (MATCH (IF ((<= 3.0)) THEN (FAILURE "Too short for TR")) (IF ((<= 3.5)) THEN 3.0) (IF ((<= 4.0)) THEN 3.5) (IF ((<= 4.5)) THEN 4.0) (IF ((<= 5.0)) THEN 4.5) (IF ((<= 5.5)) THEN 5.0)) (OTHERWISE (FAILURE "Too long for TR"))) REPLY (KB-STORE 'TieRod 'TieRodLength Length)))) (STEP (NAME TieRodDiameterRough) (ATTRIBUTE-NAME TieRodDiameter) (USED-BY TieRodsRough) (BODY (KNOWN Pressure (KB-FETCH 'Requirements 'OperatingPressureMax) RodLoad (KB-FETCH 'Requirements 'RodLoad) TRLength (KB-FETCH 'TieRod 'TieRodLength)) (DECISIONS Diameter (TABLE (DEPENDING-ON Pressure RodLoad TRLength) (MATCH (IF ((<= 30) (<= 1.0) (<= 4)) THEN 0.164) (IF ((<= 60) (<= 1.5) (<= 5)) THEN 0.19) (IF ((<= 90) (<= 2.0) (<= 6)) THEN 0.216)) (OTHERWISE (FAILURE "Rough TR Diameter"))) REPLY (KB-STORE 'TieRod 'TieRodDiameter Diameter)))) {; ************************************************* AC-DESIGN-TASKS.LSP } {; *** first half in AC-PLANS-AND-RD.LSP } {; ********************************************************************} {; !!!!!! A I R C Y L D E S I G N T A S K S !!!!!!!!!!!!!!!!!!!!!} (TASK (NAME CheckRequirements) (USED-BY AirCylinderDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY CheckEnvelope CheckMaxTemperature CheckOperating CheckEnvironment CheckQuality CheckMTBF CheckStroke CheckRodLoad CheckRodDiameter CheckMounting CheckAirInletDiameter CheckRodThread)) (STEP (NAME CheckEnvelope) (ATTRIBUTE-NAME ***) (USED-BY CheckRequirements) (BODY (KNOWN Length (KB-FETCH 'Requirements 'EnvelopeLength) Height (KB-FETCH 'Requirements 'EnvelopeHeight) Width (KB-FETCH 'Requirements 'EnvelopeWidth)) (DECISIONS REPLY (TABLE (DEPENDING-ON Length Height Width) (MATCH (IF ((7.0 >=< 8.0) (1.0 >=< 2.0) (1.0 >=< 2.0)) THEN OK) (IF ((6.0 >=< 7.0) (1.0 >=< 2.0) (1.0 >=< 2.0)) THEN OK) (IF ((8.0 >=< 9.0) (2.0 >=< 3.0) (2.0 >=< 3.0)) THEN OK)) (OTHERWISE (FAILURE "Envelope size error")))))) (STEP (NAME CheckMaxTemperature) (ATTRIBUTE-NAME ***) (USED-BY CheckRequirements) (BODY (KNOWN Temp (KB-FETCH 'Requirements 'MaxTemperature)) (DECISIONS REPLY (IF (< Temp 300) THEN OK ELSE (FAILURE "Max Temperature error"))))) (STEP (NAME CheckOperating) (ATTRIBUTE-NAME ***) (USED-BY CheckRequirements) (BODY (KNOWN Medium (KB-FETCH 'Requirements 'OperatingMedium) Max (KB-FETCH 'Requirements 'OperatingPressureMax) Min (KB-FETCH 'Requirements 'OperatingPressureMin)) (DECISIONS REPLY (IF (EQ Medium 'Air) THEN OK ELSE (FAILURE "Operating Medium error")) REPLY (TABLE (DEPENDING-ON Max Min) (MATCH (IF ((< 40) ?) THEN (FAILURE "Operating Pressure error")) (IF ((<= 70) (> 20)) THEN OK) (IF ((> 70) ?) THEN (FAILURE "Operating Pressure error"))))))) (STEP (NAME CheckEnvironment) (ATTRIBUTE-NAME ***) (USED-BY CheckRequirements) (BODY (KNOWN Envir (KB-FETCH 'Requirements 'Environment)) (DECISIONS REPLY (IF (MEMBER Envir '(Corrosive NonCorrosive)) THEN OK ELSE (FAILURE "Environment error"))))) (STEP (NAME CheckQuality) (ATTRIBUTE-NAME ***) (USED-BY CheckRequirements) (BODY (KNOWN Quality (KB-FETCH 'Requirements 'Quality)) (DECISIONS REPLY (IF (MEMBER Quality '(Reliable Cheap Strong Anything)) THEN OK ELSE (FAILURE "Quality error"))))) (STEP (NAME CheckMTBF) (ATTRIBUTE-NAME ***) (USED-BY CheckRequirements) (BODY (KNOWN MTBF (KB-FETCH 'Requirements 'MTBF)) (DECISIONS REPLY (IF (< MTBF 150000) THEN OK ELSE (FAILURE "MTBF error"))))) (STEP (NAME CheckStroke) (ATTRIBUTE-NAME ***) (USED-BY CheckRequirements) (BODY (KNOWN Stroke (KB-FETCH 'Requirements 'Stroke) Length (KB-FETCH 'Requirements 'EnvelopeLength)) (DECISIONS REPLY (IF (OR (= Stroke 1.5) (= Stroke 1.75)) THEN OK ELSE (FAILURE "Stroke error")) REPLY (IF (> Length (DOUBLE Stroke)) THEN OK ELSE (FAILURE "Stroke/Envelope error"))))) (STEP (NAME CheckRodLoad) (ATTRIBUTE-NAME ***) (USED-BY CheckRequirements) (BODY (KNOWN RodLoad (KB-FETCH 'Requirements 'RodLoad)) (DECISIONS REPLY (IF (AND (<= RodLoad 2.0) (>= RodLoad 0.5)) THEN OK ELSE (FAILURE "Rod Load error"))))) (STEP (NAME CheckRodDiameter) (COMMENT "Alters a requirement") (ATTRIBUTE-NAME RodDiameter) (USED-BY CheckRequirements) (BODY (KNOWN Diam (KB-FETCH 'Requirements 'RodDiameter) Width (KB-FETCH 'Requirements 'EnvelopeWidth) Height (KB-FETCH 'Requirements 'EnvelopeHeight)) (DECISIONS REPLY (IF (AND (>= Diam 0.1) (<= Diam 0.5)) THEN OK ELSE (FAILURE "Rod Diameter error")) REPLY (IF (< (* 3.0 Diam) (SMALLER Width Height)) THEN OK ELSE (FAILURE "Rod/Envelope error")) REPLY (KB-STORE 'Rod 'RodDiameter Diam)))) (STEP (NAME CheckMounting) (COMMENT "Decides multiple attributes") (ATTRIBUTE-NAME ***) (USED-BY CheckRequirements) (BODY (KNOWN ScrewSize (KB-FETCH 'Requirements 'MountingScrewSize) Stroke (KB-FETCH 'Requirements 'Stroke) RodDiameter (KB-FETCH 'Requirements 'RodDiameter) Max (KB-FETCH 'Requirements 'MaxFaceToMountingHoles) HtoH (KB-FETCH 'Requirements 'MountingHoleToHole) Width (KB-FETCH 'Requirements 'EnvelopeWidth) Height (KB-FETCH 'Requirements 'EnvelopeHeight)) (DECISIONS REPLY (IF (MEMBER (VALUE ScrewSize) '(0.164 0.19 0.216)) THEN OK ELSE (FAILURE "Screw Size error")) REPLY (IF (AND (> HtoH ScrewSize) (< HtoH (SMALLER Width Height)) (> HtoH 0.0625) (> HtoH RodDiameter)) THEN OK ELSE (FAILURE "Mounting Hole to Hole error")) REPLY (IF (AND (> Max 0.0625) (> Max ScrewSize) (< Max Stroke)) THEN OK ELSE (FAILURE "Max Face to Mounting error")) REPLY (KB-STORE 'Head 'HeadScrewSize ScrewSize) REPLY (KB-STORE 'Head 'HeadCenterCenterDistance HtoH) REPLY (KB-STORE 'Head 'HeadMaxHtoFDistance Max)))) (STEP (NAME CheckAirInletDiameter) (COMMENT "Decides multiple attributes") (ATTRIBUTE-NAME ***) (USED-BY CheckRequirements) (BODY (KNOWN Diam (KB-FETCH 'Requirements 'AirInletDiameter)) (DECISIONS REPLY (IF (MEMBER (VALUE Diam) '(0.281 0.374 0.492)) THEN OK ELSE (FAILURE "Air Inlet error")) REPLY (KB-STORE 'Head 'HeadAirHoleDiameter Diam) REPLY (KB-STORE 'Cap 'CapAirHoleDiameter Diam)))) (STEP (NAME CheckRodThread) (COMMENT "Alters multiple requirements") (ATTRIBUTE-NAME ***) (USED-BY CheckRequirements) (BODY (KNOWN Length (KB-FETCH 'Requirements 'RodThreadLength) Type (KB-FETCH 'Requirements 'RodThreadType) Stroke (KB-FETCH 'Requirements 'Stroke) Diam (KB-FETCH 'Requirements 'RodDiameter)) (DECISIONS REPLY (IF (AND (> Length 0.5) (< Length 2.0) (< Length Stroke)) THEN OK ELSE (FAILURE "Rod Thread Length error")) Diam (VALUE Diam) REPLY (TABLE (DEPENDING-ON Type Diam) (MATCH (IF (UNF48 0.112) THEN OK) (IF (UNF44 0.125) THEN OK) (IF (UNF40 0.138) THEN OK) (IF (UNF36 0.164) THEN OK) (IF (UNF32 0.19) THEN OK) (IF (UNF28 0.216) THEN OK) (IF (UNF28 0.25) THEN OK) (IF (UNF24 0.312) THEN OK) (IF (UNF24 0.375) THEN OK) (IF (UNF20 0.437) THEN OK) (IF (UNF20 0.5) THEN OK)) (OTHERWISE (FAILURE "Thread type error"))) REPLY (KB-STORE 'Rod 'RodThreadLength Length) REPLY (KB-STORE 'Rod 'RodThreadType Type)))) {; -----------------------------------------------------------------} {; !!!!!!!! H E A D D E S I G N T A S K S !!!!!!!!!!!!!!!!!!!!!} (TASK (NAME HeadTubeSeat) (USED-BY HeadDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY HeadTubeSeatID HeadTubeSeatOD HeadTubeSeatDepth)) (STEP (NAME HeadTubeSeatID) (COMMENT "tube fixed by reqs and rough design") (ATTRIBUTE-NAME HeadTubeSeatID) (USED-BY HeadTubeSeat) (BODY (KNOWN TubeID (KB-FETCH 'Tube 'TubeID) Clearance (LNGTH 0.004 0.006 0.003)) (DECISION TubeSeatID (- TubeID Clearance) REPLY (KB-STORE 'Head 'HeadTubeSeatID TubeSeatID)))) (STEP (NAME HeadTubeSeatOD) (ATTRIBUTE-NAME HeadTubeSeatOD) (USED-BY HeadTubeSeat) (BODY (KNOWNS TubeOD (KB-FETCH 'Tube 'TubeOD) Clearance (LNGTH 0.015 0.01 0.01)) (DECISION TubeSeatOD (+ TubeOD Clearance) REPLY (KB-STORE 'Head 'HeadTubeSeatOD TubeSeatOD)))) (STEP (NAME HeadTubeSeatDepth) (COMMENT "this depends on seal -- need std seal size too!") (ATTRIBUTE-NAME HeadTubeSeatDepth) (USED-BY HeadTubeSeat) (BODY (KNOWN BodySealThickness (KB-FETCH 'BodySeal 'BodySealThickness)) (DECISION TubeSeatDepth (STANDARDIZE-NEAREST (DOUBLE BodySealThickness)) REPLY (KB-STORE 'Head 'HeadTubeSeatDepth TubeSeatDepth)))) {; -------------------------------------------------------------} (TASK (NAME MountingHoles) (USED-BY HeadDP1) (BODY HoleSize HolesToFaceDistance)) (STEP (NAME HoleSize) (COMMENT "Decide Mounting Hole Size") (ATTRIBUTE-NAME HeadMountingHoleDiameter) (USED-BY MountingHoles) (REDESIGN NOT-POSSIBLE) (FAILURE-SUGGESTIONS (SUGGEST (INCREASE HeadWidth))) (BODY (KNOWNS CenterCenterDistance (KB-FETCH 'Head 'HeadCenterCenterDistance) ScrewSize (KB-FETCH 'Head 'HeadScrewSize) HoleTolerance 0.003) (DECISIONS ScrewRadius (HALF (VALUE ScrewSize)) ScrewPstvTolerance (HALF (+TOLERANCE ScrewSize)) MaxScrewRadius (+ ScrewRadius ScrewPstvTolerance) MaxHoleShift (HALF (MAX-TOLERANCE CenterCenterDistance)) MinHoleRadius (+ HoleTolerance (+ MaxHoleShift MaxScrewRadius)) MountingHoleDiameter (LNGTH (* MinHoleRadius 2.0) HoleTolerance 0.0) REPLY (TEST-CONSTRAINT HoleSizeC1) REPLY (TEST-CONSTRAINT HoleSizeC2) REPLY (KB-STORE 'Head 'HeadMountingHoleDiameter MountingHoleDiameter)))) (STEP (NAME HolesToFaceDistance) (COMMENT "Decide front face to mounting holes distance") (ATTRIBUTE-NAME HeadMountingHolesToFaceDistance) (USED-BY MountingHoles) (REDESIGNER HtoFDistanceRedesigner) (FAILURE-SUGGESTIONS (SUGGEST (INCREASE HeadMaxHtoFDistance)) (SUGGEST (DECREASE HeadMountingHoleDiameter))) (BODY (KNOWNS CounterSinkDiameter (KB-FETCH 'Head 'HeadCounterSinkDiameter) HeadMaterial (KB-FETCH 'Head 'HeadMaterial) MinThickness (KB-FETCH HeadMaterial 'MinThickness) MaxHtoFDistance (KB-FETCH 'Head 'HeadMaxHtoFDistance)) (DECISIONS CounterSinkRadius (HALF CounterSinkDiameter) MinCSRadius (VALUE- CounterSinkRadius) MinHtoFDistance (+ MinCSRadius 0.001) MidHtoFDistance (HALF (+ MinHtoFDistance MaxHtoFDistance)) REPLY (TEST-CONSTRAINT MHtoFDist) REPLY (KB-STORE 'Head 'HeadMountingHolesToFaceDistance MidHtoFDistance)))) {; --------------------------------------------------} (TASK (NAME Bearings) (USED-BY HeadDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY ChooseBearingThickness WiperSeatDepth WiperSeatDiameter SealSeatTempPosition Bearing2Size SealSeatPosition Bearing1Size)) (STEP (NAME ChooseBearingThickness) (COMMENT "Pick appropriate Thickness for both bearings") (ATTRIBUTE-NAME HeadBearingThickness) (USED-BY Bearings) (BODY (KNOWNS MHDiameter (KB-FETCH 'Head 'HeadMountingHoleDiameter) CCDistance (KB-FETCH 'Head 'HeadCenterCenterDistance) RodDiameter (KB-FETCH 'Rod 'RodDiameter) Clearance 0.001) (DECISIONS MinHalfCCDistance (VALUE- (HALF CCDistance)) MaxRodRadius (VALUE+ (HALF RodDiameter)) MaxMHRadius (VALUE+ (HALF MHDiameter)) BearingAllowedThickness (- MinHalfCCDistance (+ MaxRodRadius (+ MaxMHRadius Clearance))) COMMENT "Table Lookup here" REPLY (KB-STORE 'Head 'HeadBearingThickness BearingAllowedThickness)))) (STEP (NAME WiperSeatDepth) (COMMENT "Choose Wiper Seat Depth") (ATTRIBUTE-NAME HeadWiperSeatDepth) (USED-BY Bearings) (BODY (KNOWN WiperType (KB-FETCH 'Head 'HeadWiperType) HtoFDistance (KB-FETCH 'Head 'HeadMountingHolesToFaceDistance) MHDiameter (KB-FETCH 'Head 'HeadMountingHoleDiameter) CCDistance (KB-FETCH 'Head 'HeadCenterCenterDistance)) (DECISIONS MHRadius (HALF MHDiameter) MinHoleFaceClearance (- (VALUE- HtoFDistance) (VALUE+ MHRadius)) WiperSeatDepth1 MinHoleFaceClearance COMMENT "The following is approximate" HalfCCDistance (HALF CCDistance) Clearance 0.001 xyRatio 1.30745 c1 (+ (^ (VALUE- HalfCCDistance) 2) (^ (VALUE- HtoFDistance) 2)) c2 (+ (^ (VALUE+ MHRadius) 2) (^ Clearance 2)) c (- c1 c2) b (+ (* 2.0 (* (VALUE- HalfCCDistance) xyRatio)) (* 2.0 (VALUE- HtoFDistance))) a (+ (^ xyRatio 2) 1.0) b^2-4ac (- (^ b 2) (* 4.0 (* a c))) b-root (- b (SQRT b^2-4ac)) WiperSeatDepth (// b-root (* 2.0 a)) REPLY (KB-STORE 'Head 'HeadWiperSeatDepth WiperSeatDepth)))) (STEP (NAME WiperSeatDiameter) (ATTRIBUTE-NAME HeadWiperSeatDiameter) (USED-BY Bearings) (BODY (KNOWN WiperSeatDepth (KB-FETCH 'Head 'HeadWiperSeatDepth)) (DECISION xyRatio 1.30745 WiperSeatRadius (* xyRatio WiperSeatDepth) WiperSeatDiameter (DOUBLE WiperSeatRadius) REPLY (KB-STORE 'Head 'HeadWiperSeatDiameter WiperSeatDiameter)))) (STEP (NAME SealSeatTempPosition) (COMMENT "Pick temporary position for Seal Seat") (ATTRIBUTE-NAME HeadSealSeatToFaceDistance) (USED-BY Bearings) (BODY (KNOWN HoleToFaceDistance (KB-FETCH 'Head 'HeadMountingHolesToFaceDistance) MHDiameter (KB-FETCH 'Head 'HeadMountingHoleDiameter) Clearance 0.001) (DECISIONS MHRadius (HALF MHDiameter) SStoFaceDistance (+ (VALUE+ HoleToFaceDistance) (+ (VALUE+ MHRadius) Clearance)) REPLY (KB-STORE 'Head 'HeadSealSeatToFaceDistance SStoFaceDistance)))) (STEP (NAME Bearing2Size) (COMMENT "Choose length of bearing nearest front face") (ATTRIBUTE-NAME HeadBearing2Length) (USED-BY Bearings) (BODY (KNOWNS SStoFaceDistance (KB-FETCH 'Head 'HeadSealSeatToFaceDistance) RodDiameter (KB-FETCH 'Rod 'RodDiameter) WiperSeatDepth (KB-FETCH 'Head 'HeadWiperSeatDepth)) (DECISIONS MinAvailable (- (VALUE- SStoFaceDistance) (VALUE+ WiperSeatDepth)) COMMENT "Table lookup goes here" Bearing2Length (+ MinAvailable 0.005) REPLY (KB-STORE 'Head 'HeadBearing2Length Bearing2Length)))) (STEP (NAME SealSeatPosition) (COMMENT "Fix the position of the Seal Seat") (ATTRIBUTE-NAME HeadSealSeatToFaceDistance) (USED-BY Bearings) (BODY (KNOWN Bearing2Length (KB-FETCH 'Head 'HeadBearing2Length) WiperSeatDepth (KB-FETCH 'Head 'HeadWiperSeatDepth)) (DECISIONS SStoFaceDistance (+ WiperSeatDepth Bearing2Length) REPLY (KB-STORE 'Head 'HeadSealSeatToFaceDistance SStoFaceDistance)))) (STEP (NAME Bearing1Size) (COMMENT "Choose length of bearing nearest tube") (ATTRIBUTE-NAME HeadBearing1Length) (USED-BY Bearings) (BODY (KNOWN SStoFaceDistance (KB-FETCH 'Head 'HeadSealSeatToFaceDistance) SealSeatWidth (KB-FETCH 'Head 'HeadSealSeatWidth) HeadDepth (KB-FETCH 'Head 'HeadDepth)) (DECISIONS ApproxBearing1Length (- (VALUE- HeadDepth) (+ (VALUE+ SStoFaceDistance) (VALUE+ SealSeatWidth))) COMMENTS "Table lookup goes here" Bearing1Length (- ApproxBearing1Length 0.005) REPLY (KB-STORE 'Head 'HeadBearing1Length Bearing1Length)))) {; -----------------------------------------------------------} (TASK (NAME SealAndWiper) (USED-BY HeadDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY SelectWiper SelectSeal)) (STEP (NAME SelectWiper) (COMMENT "Decide on wiper") (ATTRIBUTE-NAME HeadWiperType) (USED-BY SealAndWiper) (BODY (KNOWN WiperType (KB-FETCH 'Head 'HeadWiperType) WiperSeatDepth (KB-FETCH 'Head 'HeadWiperSeatDepth) WiperSeatDiameter (KB-FETCH 'Head 'HeadWiperSeatDiameter)) (DECISIONS COMMENTS "a dummy step, need lookup" REPLY (KB-STORE 'Head 'HeadWiperType WiperType)))) (STEP (NAME SelectSeal) (COMMENT "Decide on Seal") (ATTRIBUTE-NAME HeadSealSeatDiameter) (USED-BY SealAndWiper) (BODY (KNOWN SealSeatWidth (KB-FETCH 'Head 'HeadSealSeatWidth)) (DECISIONS COMMENT "Width is estimate, depth not known" COMMENT "Approx instead of table lookup" RadiusWidthRatio 2.0 SealSeatRadius (* RadiusWidthRatio SealSeatWidth) SealSeatDiameter (DOUBLE SealSeatRadius) REPLY (KB-STORE 'Head 'HeadSealSeatDiameter (LNGTH SealSeatDiameter 0.003 0.0))))) {; -----------------------------------------------------} (TASK (NAME AirCavity) (USED-BY HeadDP1) (BODY AirCavityDepth AirCavityID AirCavityOD CheckAirCavity)) (STEP (NAME AirCavityDepth) (COMMENT "Find the safe depth to maximize the air cavity") (ATTRIBUTE-NAME HeadAirCavityDepth) (USED-BY AirCavity) (REDESIGNER AirCavityDepthRedesigner) (FAILURE-SUGGESTIONS (SUGGEST (INCREASE HeadDepth))) (BODY (KNOWN Bearing1Length (KB-FETCH 'Head 'HeadBearing1Length) HeadMaterial (KB-FETCH 'Head 'HeadMaterial) MinThickness (KB-FETCH HeadMaterial 'MinThickness) Clearance 0.02) (DECISIONS AirCavityDepth (- (VALUE- Bearing1Length) Clearance) REPLY (KB-STORE 'Head 'HeadAirCavityDepth AirCavityDepth)))) (STEP (NAME AirCavityID) (COMMENT "Find air cavity internal diameter. Suggests a requirement") (ATTRIBUTE-NAME HeadAirCavityID) (USED-BY AirCavity) (REDESIGNER AirCavityIDRedesigner) (FAILURE-SUGGESTIONS (SUGGEST (DECREASE RodDiameter)) (SUGGEST (DECREASE HeadBearingThickness)) (SUGGEST (CHANGE HeadMaterial TO DECREASE MinThickness))) (BODY (KNOWN BearingThickness (KB-FETCH 'Head 'HeadBearingThickness) RodDiameter (KB-FETCH 'Rod 'RodDiameter) HeadMaterial (KB-FETCH 'Head 'HeadMaterial) MinThickness (KB-FETCH HeadMaterial 'MinThickness)) (DECISIONS MaxRodRadius (VALUE+ (HALF RodDiameter)) MaxBearingThickness (VALUE+ BearingThickness) AirCavityRadius (+ MinThickness (+ MaxRodRadius MaxBearingThickness)) AirCavityID (DOUBLE AirCavityRadius) REPLY (TEST-CONSTRAINT ACID) REPLY (KB-STORE 'Head 'HeadAirCavityID AirCavityID)))) (STEP (NAME AirCavityOD) (COMMENT "Find air cavity outside diameter") (ATTRIBUTE-NAME HeadAirCavityOD) (USED-BY AirCavity) (REDESIGNER AirCavityODRedesigner) (FAILURE-SUGGESTIONS (SUGGEST (INCREASE TubeID))) (BODY (KNOWN TubeID (KB-FETCH 'Tube 'TubeID) HeadMaterial (KB-FETCH 'Head 'HeadMaterial) MinThickness (KB-FETCH HeadMaterial 'MinThickness)) (DECISIONS AirCavityOD (- TubeID (DOUBLE MinThickness)) REPLY (TEST-CONSTRAINT ACOD>ACID) REPLY (KB-STORE 'Head 'HeadAirCavityOD AirCavityOD)))) (STEP (NAME CheckAirCavity) (COMMENT "Check adequacy -- poss use calc module") (ATTRIBUTE-NAME ***) (USED-BY AirCavity) (REDESIGN NOT-POSSIBLE) (FAILURE-HANDLER USER-ASK-USER-FAILURE-FH IS CheckAirCavityFH) (FAILURE-SUGGESTIONS (SUGGEST (INCREASE HeadAirCavityDepth)) (SUGGEST (INCREASE HeadAirCavityOD)) (SUGGEST (DECREASE HeadAirCavityID))) (BODY (KNOWN AirCavityDepth (KB-FETCH 'Head 'HeadAirCavityDepth) AirCavityID (KB-FETCH 'Head 'HeadAirCavityID) AirCavityOD (KB-FETCH 'Head 'HeadAirCavityOD) Pi 3.1415927) (DECISIONS AirCavityIRadius (VALUE+ (HALF AirCavityID)) AirCavityORadius (VALUE+ (HALF AirCavityOD)) VolO (* Pi (* (^ AirCavityORadius 2) (VALUE- AirCavityDepth))) VolI (* Pi (* (^ AirCavityIRadius 2) (VALUE- AirCavityDepth))) MinAirCavityVol (- VolO VolI) REPLY (ASK-USER "Head Air Cavity volume is " (THREE-DP MinAirCavityVol) " Is this OK for this design?")))) {; ----------------------------------------------------} (TASK (NAME AirInlet) (USED-BY HeadDP1) (BODY AirHoleLateral AirHoleLongitudinal AirHoleDepth)) (STEP (NAME AirHoleLateral) (COMMENT "Put Air Hole on center line of head") (ATTRIBUTE-NAME HeadAirHoleToSideDistance) (USED-BY AirInlet) (REDESIGN NOT-POSSIBLE) (FAILURE-SUGGESTIONS (SUGGEST (INCREASE HeadWidth))) (BODY (KNOWN AirHoleDiameter (KB-FETCH 'Head 'HeadAirHoleDiameter) HeadWidth (KB-FETCH 'Head 'HeadWidth)) (DECISIONS HalfHeadWidth (HALF HeadWidth) REPLY (TEST-CONSTRAINT AHLateral) REPLY (KB-STORE 'Head 'HeadAirHoleToSideDistance HalfHeadWidth)))) (STEP (NAME AirHoleLongitudinal) (COMMENT "Find longitudinal position for air hole") (ATTRIBUTE-NAME HeadAirHoleToFaceDistance) (USED-BY AirInlet) (FAILURE-SUGGESTIONS (SUGGEST (DECREASE HeadTubeSeatDepth)) (SUGGEST (INCREASE HeadAirCavityDepth))) (BODY (KNOWN AirCavityDepth (KB-FETCH 'Head 'HeadAirCavityDepth) TubeSeatDepth (KB-FETCH 'Head 'HeadTubeSeatDepth) AirHoleDiameter (KB-FETCH 'Head 'HeadAirHoleDiameter) HeadDepth (KB-FETCH 'Head 'HeadDepth) HeadMaterial (KB-FETCH 'Head 'HeadMaterial) MinThickness (KB-FETCH HeadMaterial 'MinThickness)) (DECISIONS REPLY (TEST-CONSTRAINT AHLongitRange) InnerLimit (VALUE- AirCavityDepth) HoleToInsideFaceDistance (- InnerLimit (HALF AirHoleDiameter)) AirHoleToFaceDistance (THREE-DP (- HeadDepth HoleToInsideFaceDistance)) REPLY (KB-STORE 'Head 'HeadAirHoleToFaceDistance AirHoleToFaceDistance)))) (STEP (NAME AirHoleDepth) (COMMENT "Find depth of air hole") (ATTRIBUTE-NAME HeadAirHoleDepth) (USED-BY AirInlet) (BODY (KNOWN AirCavityOD (KB-FETCH 'Head 'HeadAirCavityOD) HeadHeight (KB-FETCH 'Head 'HeadHeight)) (DECISIONS HalfHeadHeight (HALF HeadHeight) AirCavityORadius (HALF AirCavityOD) AirHoleDepth (+ 0.005 (- HalfHeadHeight AirCavityORadius)) REPLY (KB-STORE 'Head 'HeadAirHoleDepth AirHoleDepth)))) {; ---------------------------------------------------} (TASK (NAME TieRodHoles) (USED-BY HeadDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY TRHDiameter TRHCenterCenterDistance TRHDepth)) (STEP (NAME TRHDiameter) (COMMENT "Rod diameter is fixed") (ATTRIBUTE-NAME HeadTRHDiameter) (USED-BY TieRodHoles) (BODY (KNOWN TRDiameter (KB-FETCH 'TieRod 'TieRodDiameter)) (DECISIONS REPLY (KB-STORE 'Head 'HeadTRHDiameter TRDiameter)))) (STEP (NAME TRHCenterCenterDistance) (COMMENT "To clear mounting holes and tube seat") (ATTRIBUTE-NAME HeadTRHCenterCenterDistance) (USED-BY TieRodHoles) (BODY (KNOWN HeadWidth (KB-FETCH 'Head 'HeadWidth) HeadDepth (KB-FETCH 'Head 'HeadDepth) CCDistance (KB-FETCH 'Head 'HeadCenterCenterDistance) MHDiameter (KB-FETCH 'Head 'HeadMountingHoleDiameter) HeadMaterial (KB-FETCH 'Head 'HeadMaterial) MinThickness (KB-FETCH HeadMaterial 'MinThickness) TubeSeatOD (KB-FETCH 'Head 'HeadTubeSeatOD)) (DECISIONS COMMENT "Method 1 : to clear mounting holes" MinHalfHeadWidth (VALUE- (HALF HeadWidth)) MaxHalfCCDistance (VALUE+ (HALF CCDistance)) MaxMHRadius (VALUE+ (HALF MHDiameter)) Range1 (- MinHalfHeadWidth (+ MaxHalfCCDistance (+ MaxMHRadius (DOUBLE MinThickness)))) COMMENT "Method 2 : to clear tube seat ID" HalfDiagonal (SQRT (DOUBLE (^ MinHalfHeadWidth 2))) MaxTubeSeatORadius (VALUE+ (HALF TubeSeatOD)) Range2Diag+ (- HalfDiagonal (+ MaxTubeSeatORadius MinThickness)) MinThicknessDiag (SQRT (DOUBLE (^ MinThickness 2))) Range2Diag (- Range2Diag+ MinThicknessDiag) Range2 (// Range2Diag 1.4142136) COMMENT "Now find hole center" TRHCC1 (DOUBLE (+ (HALF CCDistance) (+ (HALF MHDiameter) (+ MinThickness (HALF Range1))))) TRHCC2 (DOUBLE (+ (HALF CCDistance) (+ (HALF MHDiameter) (+ MinThickness (HALF Range2))))) COMMENT "smaller value may allow for weight reduction" TRHCenterCenter (THREE-DP (SMALLER TRHCC1 TRHCC2)) REPLY (KB-STORE 'Head 'HeadTRHCenterCenterDistance TRHCenterCenter)))) {; ----------------------------------------------------------------------} {; !!!!!!!!!! S P R I N G D E S I G N T A S K S !!!!!!!!!!!!!!!!!!!!!} (TASK (NAME SpringLengths) (USED-BY SpringDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY InstalledLength CompressedLength)) (STEP (NAME InstalledLength) (COMMENT " ") (ATTRIBUTE-NAME ***) (USED-BY SpringLengths) (BODY (KNOWN ***) (DECISIONS ***))) (STEP (NAME CompressedLength) (COMMENT " ") (ATTRIBUTE-NAME ***) (USED-BY SpringLengths) (BODY (KNOWN ***) (DECISIONS ***))) {; ---------------------------------------------------------------------} (TASK (NAME SpringDesign) (USED-BY SpringDP1) (BODY SpringWireDiameter NumberOfCoils)) (STEP (NAME SpringWireDiameter) (COMMENT dummy) (ATTRIBUTE-NAME SpringWireDiameter) (USED-BY SpringDesign) (BODY (KNOWN ***) (DECISIONS SpringWireDiameter (ASK-VALUE "Spring Wire Diameter") REPLY (KB-STORE 'Spring 'SpringWireDiameter SpringWireDiameter)))) (STEP (NAME NumberOfCoils) (COMMENT dummy) (ATTRIBUTE-NAME SpringNumberOfCoils) (USED-BY SpringDesign) (BODY (KNOWN ***) (DECISIONS NumberOfCoils (ASK-VALUE "Number of Coils") REPLY (KB-STORE 'Spring 'SpringNumberOfCoils NumberOfCoils)))) {; ---------------------------------------------------------------------} {; !!!!!!!!!!!!! C A P D E S I G N T A S K S !!!!!!!!!!!!!!!!!!!!} (TASK (NAME CapTubeSeat) (USED-BY CapDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY CapTubeSeatID CapTubeSeatOD CapTubeSeatDepth)) (STEP (NAME CapTubeSeatID) (COMMENT "use same values as for Head") (ATTRIBUTE-NAME CapTubeSeatID) (USED-BY CapTubeSeat) (BODY (KNOWN TubeSeatID (KB-FETCH 'Head 'HeadTubeSeatID)) (DECISION REPLY (KB-STORE 'Cap 'CapTubeSeatID TubeSeatID)))) (STEP (NAME CapTubeSeatOD) (ATTRIBUTE-NAME CapTubeSeatOD) (USED-BY CapTubeSeat) (BODY (KNOWNS TubeSeatOD (KB-FETCH 'Head 'HeadTubeSeatOD)) (DECISION REPLY (KB-STORE 'Cap 'CapTubeSeatOD TubeSeatOD)))) (STEP (NAME CapTubeSeatDepth) (COMMENT "use same as for Head") (ATTRIBUTE-NAME CapTubeSeatDepth) (USED-BY CapTubeSeat) (BODY (KNOWN TubeSeatDepth (KB-FETCH 'Head 'HeadTubeSeatDepth)) (DECISION REPLY (KB-STORE 'Cap 'CapTubeSeatDepth TubeSeatDepth)))) {; -----------------------------------------------------------} (TASK (NAME CapInternal) (USED-BY CapDP1) (BODY CapInternalDiameter CapInternalDepth)) (STEP (NAME CapInternalDiameter) (COMMENT "spring and tube dependent") (ATTRIBUTE-NAME CapInternalDiameter) (USED-BY CapInternal) (REDESIGNER CapIDRedesigner) (FAILURE-HANDLER USER-DECISION-CONSTRAINT-FH IS CapIDFH) (FAILURE-SUGGESTIONS (SUGGEST (INCREASE TubeID)) (SUGGEST (DECREASE SpringOD)) ) (BODY (KNOWN TubeID (KB-FETCH 'Tube 'TubeID) SpringOD (KB-FETCH 'Spring 'SpringOD) CapMaterial (KB-FETCH 'Cap 'CapMaterial) MinThickness (KB-FETCH CapMaterial 'MinThickness)) (DECISION InternalDiameter (- TubeID (DOUBLE MinThickness)) COMMENT "should check for greater than spring OD" REPLY (TEST-CONSTRAINT CapID>SpringOD) REPLY (KB-STORE 'Cap 'CapInternalDiameter InternalDiameter)))) (STEP (NAME CapInternalDepth) (COMMENT "also contributes to spring length") (ATTRIBUTE-NAME CapInternalDepth) (USED-BY CapInternal) (REDESIGNER CapIDepthRedesigner) (FAILURE-SUGGESTIONS (SUGGEST (DECREASE CapTubeSeatDepth)) (SUGGEST (DECREASE CapAirHoleDiameter)) (SUGGEST (CHANGE CapMaterial TO INCREASE MinThickness))) (BODY (KNOWN AirHoleDiameter (KB-FETCH 'Cap 'CapAirHoleDiameter) TubeSeatDepth (KB-FETCH 'Cap 'CapTubeSeatDepth) CapMaterial (KB-FETCH 'Cap 'CapMaterial) MinThickness (KB-FETCH CapMaterial 'MinThickness)) (DECISION InternalDepth (THREE-DP (+ TubeSeatDepth (+ MinThickness AirHoleDiameter))) COMMENT "auto fail test !!!!!!!!!!!!!!!!!!!!!!!!" REPLY (TEST-CONSTRAINT CapIDFailTest) REPLY (TEST-CONSTRAINT CapWall>MinTh) REPLY (KB-STORE 'Cap 'CapInternalDepth InternalDepth)))) {; -------------------------------------------------------} (TASK (NAME CapAirHole) (USED-BY CapDP1) (BODY CapAHLongit CapAHDepth)) (STEP (NAME CapAHLongit) (COMMENT "measured to back face from AH center") (ATTRIBUTE-NAME CapAirHoleCenterToBackDistance) (USED-BY CapAirHole) (REDESIGNER CapAHLongitRedesigner) (FAILURE-SUGGESTIONS (SUGGEST (INCREASE CapDepth)) (SUGGEST (DECREASE CapAirHoleDiameter)) (SUGGEST (DECREASE CapTubeSeatDepth))) (BODY (KNOWN TubeSeatDepth (KB-FETCH 'Cap 'CapTubeSeatDepth) Material (KB-FETCH 'Cap 'CapMaterial) MinThickness (KB-FETCH Material 'MinThickness) AirHoleDiameter (KB-FETCH 'Cap 'CapAirHoleDiameter) CapDepth (KB-FETCH 'Cap 'CapDepth)) (DECISION AHRadius (HALF AirHoleDiameter) CapAHLongit (+ TubeSeatDepth (+ MinThickness AHRadius)) AHCenterToBack (THREE-DP (- CapDepth CapAHLongit)) COMMENT "should be about half of depth" REPLY (TEST-CONSTRAINT AHCtoB>MinTh) REPLY (KB-STORE 'Cap 'CapAirHoleCenterToBackDistance AHCenterToBack)))) (STEP (NAME CapAHDepth) (COMMENT "for completeness") (ATTRIBUTE-NAME CapAirHoleDepth) (USED-BY CapAirHole) (BODY (KNOWNS Height (KB-FETCH 'Cap 'CapHeight) InternalDiam (KB-FETCH 'Cap 'CapInternalDiameter)) (DECISION AHDepth (HALF (- Height InternalDiam)) REPLY (KB-STORE 'Cap 'CapAirHoleDepth AHDepth)))) {; ------------------------------------------------------} (TASK (NAME CapTieRodHoles) (USED-BY CapDP1) (INITIAL-CONSTRAINTS None) (FINAL-CONSTRAINTS None) (BODY CapTRHDiameter CapTRHCenterCenterDistance CapTRRecessDepth CapTRRecessRadius CapTRHDepth)) (STEP (NAME CapTRHDiameter) (ATTRIBUTE-NAME CapTRDiameter) (USED-BY CapTieRodHoles) (BODY (KNOWN TRDiameter (KB-FETCH 'TieRod 'TieRodDiameter)) (DECISION CapTRDiameter (+ (LNGTH 0.013 0.005 0.005 'ThreeDP) TRDiameter) REPLY (KB-STORE 'Cap 'CapTRDiameter CapTRDiameter)))) (STEP (NAME CapTRHCenterCenterDistance) (COMMENT "assume cap and head have same height and width") (ATTRIBUTE-NAME CapTRtoTRDistance) (USED-BY CapTieRodHoles) (BODY (KNOWN HeadTRHCCD (KB-FETCH 'Head 'HeadTRHCenterCenterDistance)) (DECISION REPLY (KB-STORE 'Cap 'CapTRtoTRDistance HeadTRHCCD)))) (STEP (NAME CapTRRecessDepth) (COMMENT "prob depends on Thickness of head on TR, and Tube length") (ATTRIBUTE-NAME CapTRRecessDepth) (USED-BY CapTieRodHoles) (BODY (KNOWN TRHeadThickness (KB-FETCH 'TieRod 'TieRodHeadThickness) CapDepth (KB-FETCH 'Cap 'CapDepth)) (DECISION HalfCD (HALF CapDepth) Clearance 0.01 TRHT (+ TRHeadThickness Clearance) RecessDepth (LARGER TRHT HalfCD) REPLY (TEST-CONSTRAINT RDMinTh) REPLY (KB-STORE 'Cap 'CapBackFaceThickness Thickness))))