rfe-p> exec fcad2nc relfun rfe-p> sp rfe-p> inter rfi-p> rfi-p> % Monolinguistic microCAD2NC: ;;; rfi-p> % A Deterministic RELFUN Application ;;; rfi-p> % Generating Abstract NC Programs ;;; rfi-p> % from CAD-like Geometries ;;; rfi-p> % (c) Michael Sintek September 1991 ;;; rfi-p> rfi-p> rfi-p> % This CAD-to-NC transformer monolinguistically completes the rfi-p> % RELFUN components of a hybrid COLAB version [Boley et al. 91] rfi-p> % by further RELFUN components, and profitted from preliminary rfi-p> % components written in RELFUN by Werner Stein. rfi-p> rfi-p> % The following dialog (produced by the batch file "fcad2nc.bat") rfi-p> % shows all intermediate steps of the NC-plan generation for this rfi-p> % lathe-turning sample workpiece: rfi-p> rfi-p> % | D E rfi-p> % 40 +--+ rfi-p> % | / | rfi-p> % 35 / | rfi-p> % | / | F rfi-p> % 30 / +----------------+ rfi-p> % | A B / | G H rfi-p> % 25--------------+ + C | +------------+ rfi-p> % | | | | | | rfi-p> % 20 +--+ +--+ | rfi-p> % | | rfi-p> % 15 | rfi-p> % | | rfi-p> % 10 | rfi-p> % | | rfi-p> % 5 | rfi-p> % | | rfi-p> % 0_______________________________________________________________ rfi-p> % 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 rfi-p> rfi-p> destroy rfi-p> consult library Reading file "/home/rfm/RELFUN/RFM/demo/fcad2nc/library.rfp" rfi-p> consult class-feat Reading file "/home/rfm/RELFUN/RFM/demo/fcad2nc/class-feat.rfp" rfi-p> consult rng2p Reading file "/home/rfm/RELFUN/RFM/demo/fcad2nc/rng2p.rfp" rfi-p> consult skeletal Reading file "/home/rfm/RELFUN/RFM/demo/fcad2nc/skeletal.rfp" rfi-p> consult anc-program Reading file "/home/rfm/RELFUN/RFM/demo/fcad2nc/anc-program.rfp" rfi-p> consult demo Reading file "/home/rfm/RELFUN/RFM/demo/fcad2nc/demo.rfp" rfi-p> rfi-p> pause() relfun rfi-p> bye true rfi-p> rfi-p> emul Collecting modules for the emulator: sortbase workspace rfe-p> compile rfe-p> rfe-p> cad2nc(exa()) Workpiece in rng notation (for raw CAD data): [rng[0,0,25], rng[40,25,20], rng[50,20,25], rng[60,40,40], rng[70,40,30], rng[110,30,20], rng[120,20,25], rng[150,25,0]] Classified workpiece in rng notation: cwp[40, [nft[rsh[grd[[rng[0,25,25],rng[50,25,25]]], flk[[rng[50,25,25],rng[60,40,40]]]], [nft[grv[flk[[rng[40,25,20]]], grd[[rng[40,20,20],rng[50,20,20]]], flk[[rng[50,20,25]]]], []]]], nft[lsh[flk[[rng[70,40,30],rng[110,30,25]]], grd[[rng[110,25,25],rng[150,25,25]]]], [nft[grv[flk[[rng[110,25,20]]], grd[[rng[110,20,20],rng[120,20,20]]], flk[[rng[120,20,25]]]], []]]]]] Classified workpiece: cwp[40, [nft[rsh[grd[[p[0,25],p[50,25]]],flk[[p[50,25],p[60,40]]]], [nft[grv[flk[[p[40,25],p[40,20]]], grd[[p[40,20],p[50,20]]], flk[[p[50,20],p[50,25]]]], []]]], nft[lsh[flk[[p[70,40],p[70,30],p[110,30],p[110,25]]], grd[[p[110,25],p[150,25]]]], [nft[grv[flk[[p[110,25],p[110,20]]], grd[[p[110,20],p[120,20]]], flk[[p[120,20],p[120,25]]]], []]]]]] Skeletal plan: skp[40, com[[seq[[alt[[roughing[tool[dnmm-71,tmaxp-pdr93], right, geo[[p[0,25],p[50,25],p[60,40]]]], roughing[tool[rcmx,tmaxp-prr40], right, geo[[p[0,25],p[50,25],p[60,40]]]]]], alt[[seq[[alt[[roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[40,25], p[40,20], p[50,20], p[50,25]]]], roughing[tool[rcmx,tmaxp-prl40], left, geo[[p[40,25], p[40,20], p[50,20], p[50,25]]]]]], alt[[roughing[tool[dnmm-71,tmaxp-pdr93], right, geo[[p[40,25], p[40,20], p[50,20], p[50,25]]]], roughing[tool[rcmx,tmaxp-prr40], right, geo[[p[40,25], p[40,20], p[50,20], p[50,25]]]]]]]], seq[[alt[[roughing[tool[dnmm-71,tmaxp-pdr93], right, geo[[p[40,25], p[40,20], p[50,20], p[50,25]]]], roughing[tool[rcmx,tmaxp-prr40], right, geo[[p[40,25], p[40,20], p[50,20], p[50,25]]]]]], alt[[roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[40,25], p[40,20], p[50,20], p[50,25]]]], roughing[tool[rcmx,tmaxp-prl40], left, geo[[p[40,25], p[40,20], p[50,20], p[50,25]]]]]]]]]]]], seq[[alt[[roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[70,40], p[70,30], p[110,30], p[110,25], p[150,25]]]], roughing[tool[rcmx,tmaxp-prl40], left, geo[[p[70,40], p[70,30], p[110,30], p[110,25], p[150,25]]]]]], alt[[seq[[alt[[roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]], roughing[tool[rcmx,tmaxp-prl40], left, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]]]], alt[[roughing[tool[dnmm-71,tmaxp-pdr93], right, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]], roughing[tool[rcmx,tmaxp-prr40], right, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]]]]]], seq[[alt[[roughing[tool[dnmm-71,tmaxp-pdr93], right, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]], roughing[tool[rcmx,tmaxp-prr40], right, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]]]], alt[[roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]], roughing[tool[rcmx,tmaxp-prl40], left, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]]]]]]]]]]]]] Qualitative simulation: [roughing[tool[dnmm-71,tmaxp-pdr93], right, geo[[p[0,25],p[50,25],p[60,40]]]], roughing[tool[dnmm-71,tmaxp-pdr93], right, geo[[p[40,25],p[40,20],p[50,20],p[50,25]]]]] 3.4-> skp[40, com[[alt[[roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[40,25],p[40,20],p[50,20],p[50,25]]]], roughing[tool[rcmx,tmaxp-prl40], left, geo[[p[40,25],p[40,20],p[50,20],p[50,25]]]]]], seq[[alt[[roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[70,40], p[70,30], p[110,30], p[110,25], p[150,25]]]], roughing[tool[rcmx,tmaxp-prl40], left, geo[[p[70,40], p[70,30], p[110,30], p[110,25], p[150,25]]]]]], alt[[seq[[alt[[roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]], roughing[tool[rcmx,tmaxp-prl40], left, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]]]], alt[[roughing[tool[dnmm-71,tmaxp-pdr93], right, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]], roughing[tool[rcmx,tmaxp-prr40], right, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]]]]]], seq[[alt[[roughing[tool[dnmm-71,tmaxp-pdr93], right, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]], roughing[tool[rcmx,tmaxp-prr40], right, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]]]], alt[[roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]], roughing[tool[rcmx,tmaxp-prl40], left, geo[[p[110,25], p[110,20], p[120,20], p[120,25]]]]]]]]]]]]]]] [roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[40,25],p[40,20],p[50,20],p[50,25]]]], roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[70,40],p[70,30],p[110,30],p[110,25],p[150,25]]]], roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[110,25],p[110,20],p[120,20],p[120,25]]]]] 3.7-> skp[40, alt[[roughing[tool[dnmm-71,tmaxp-pdr93], right, geo[[p[110,25],p[110,20],p[120,20],p[120,25]]]], roughing[tool[rcmx,tmaxp-prr40], right, geo[[p[110,25],p[110,20],p[120,20],p[120,25]]]]]]] [roughing[tool[dnmm-71,tmaxp-pdr93], right, geo[[p[110,25],p[110,20],p[120,20],p[120,25]]]]] 1.0-> skp[40,[]] ANC program (for Abstract NC-lathe turning): [roughing[tool[dnmm-71,tmaxp-pdr93], right, geo[[p[0,25],p[50,25],p[60,40]]]], roughing[tool[dnmm-71,tmaxp-pdr93], right, geo[[p[40,25],p[40,20],p[50,20],p[50,25]]]], roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[40,25],p[40,20],p[50,20],p[50,25]]]], roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[70,40],p[70,30],p[110,30],p[110,25],p[150,25]]]], roughing[tool[dnmm-71,tmaxp-pdl93], left, geo[[p[110,25],p[110,20],p[120,20],p[120,25]]]], roughing[tool[dnmm-71,tmaxp-pdr93], right, geo[[p[110,25],p[110,20],p[120,20],p[120,25]]]]]