Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
PublisertJacob Olafsen Endret for 9 år siden
1
GORTO Prosessbeskrivelse Konseptvalg Modell oppbygging – oppdatering - størrelse Objektfunksjon, optimalitet, bruk av mellomprodukt tank MV / CV / DV Gruppeinndeling, prioritetshierarki, sensitivitetsmatrise Løsningsmetodikk SEPTIC Brukerforum 2007 Stig Strand, F&T PRA PROK
2
2 GORTO Kalundborg Optimalisering av gassolje (diesel) produksjon ved raffineriet i Kalundborg Kalundborg
3
3 Ideen bak GORTO prosjektet Hydrotreating 3 stk. pluss mellomprodukttank Fraksjonering 4 stk. pluss mellomprodukttanker Ferdigprodukter Inline Mixing, Sample Point Analyzers/Lab. 2 stk. pluss kombinert M Analyzers/ Sample M Min. 5 timer Prosessbeskrivelse for Kalundborgs gassolje produksjon:
4
4 GORTO systemerne
5
5 Konseptvalg Dynamisk eller stasjonær modell? – relativt hyppige endringer i fødesammensetning og produktspesifikasjoner – labmålinger av produktkvalitet hver 12. time – tilgjengelige pådrag har svært ulik dynamisk respons mot ferdig produkt, med spenn i tidskonstanter fra 4-5 timer til få minutt – viktig å kunne koordinere pådragene dynamisk optimalt slik at produktet hele tiden er nær spesifikasjon på de optimalt begrensende egenskapene – dersom en av fraksjonatorene ikke greier å ”henge med” lenger vil dette kreve ny optimalisering, og det skjer ofte og er ganske upredikerbart – konklusjon: dynamisk modell for optimalisering – MPC – RTO – DRTO? Lineær eller ulineær modell? – blandelikninger: noen egenskaper blander volumetrisk lineært (eks tetthet og svovel), noen blander ulineært (eks cloud, flash, viskositet), mens for destillasjon (eks temperatur der 85 vol% av blanding er destillert) må blandestrømmenes destillasjonskurver benyttes i iterativ blanding – konklusjon: ulineær modell – modellen må i tillegg være tilstandsbasert for å kunne representere et vell av oppliningsmuligheter, og for å muliggjøre intern oppdatering med propagering videre til produktene
6
6 Modell oppbygging (1)
7
7 GasOilStreamResponse LGO_LGO95MV GasOilStreamResponse LVGO_LVGO95MV GasOilStreamResponse VBGO_VBGO95MV GasOilStreamResponse LVGO_LGO95MV GasOilStream LGO GasOilStream LVGO GasOilStream VBGO GasOilStream GH010BL1 GasOilStream VP016BL1 GasOilStream VB638BL1 GasOilSplit LgoSplit LgoSplit.InStream = &LGO; LgoSplit.addOutStream(&GO001BL1); LgoSplit.addOutStream(&GH010BL1); LgoSplit.addOutStream(&GH010BL2); LgoSplit.addOutStream(&PS014BL1); LgoSplit.addOutStream(&PS014BL2); LgoSplit.addOutStream(&GH060BL1); LgoSplit.addOutStream(&PS227BL1); GH010BL1.Desc = "C-201 LGO to Sek800"; GH010BL1.LineUp = &(pm->GH010BL1_LUP); GH010BL1.Flow = &(pm->GH010BL1_FLOW); GH010BL1.FlowControlled = 1; Neste slide Deltabasert (som ExprModl) dvs endring inn endring ut
8
8 Modell oppbygging – Sek800 avsvovling GasOilMix MixFeed800 Statisk VB638BL1 VP016BL1 GH010BL1 PS202BL3 GB810BL1 GB810BL2 GasOilStream FeedMixSek800 GasOilStreamDynamics DynFeedSek800 GasOilStream FeedSek800 GasOilStream FeedSek800B FeedSek800B.Copy(&FeedSek800); *FeedSek800B.Rec95 += Sek800_DeltaRec95; *FeedSek800B.Rec90 += Sek800_DeltaRec90; *FeedSek800B.Rec85 += Sek800_DeltaRec85; *FeedSek800B.Rec80 += Sek800_DeltaRec80; *FeedSek800B.Rec50 += Sek800_DeltaRec50; *FeedSek800B.CloudPnt += Sek800_DeltaCloud; FeedSek800B.Calc(cmd); GasOilStreamDynamics Sek800 GasOilStream ProdSek800 void GasOilMix::Calc(int cmd) (et utsnitt) { *(OutStream->Rec95) = TempAtEvap(0.95); for (i=0;i<ninstreams;i++) { double voli = InStreams[i]->getFlow()/suminflows; cloud += pow(1.078,*(InStreams[i]->CloudPnt))*voli; density += *(InStreams[i]->Dens)*voli; } *(OutStream->CloudPnt) = min(gortobad,max(-100,log(cloud)/log(1.078))); *(OutStream->Dens) = min(gortobad,max(0,density)); } Deltabasert (som ExprModl) dvs endring inn endring ut
9
9 Modell oppbygging – Sek800 avsvovling (2) GasOilMix MixFeed800 Statisk VB638BL1 VP016BL1 GH010BL1 PS202BL3 GB810BL1 GB810BL2 GasOilStream FeedMixSek800 GasOilStreamDynamics DynFeedSek800 GasOilStream FeedSek800 GasOilStream FeedSek800B FeedSek800B.Copy(&FeedSek800); *FeedSek800B.Rec95 += Sek800_DeltaRec95; *FeedSek800B.Rec90 += Sek800_DeltaRec90; *FeedSek800B.Rec85 += Sek800_DeltaRec85; *FeedSek800B.Rec80 += Sek800_DeltaRec80; *FeedSek800B.Rec50 += Sek800_DeltaRec50; *FeedSek800B.CloudPnt += Sek800_DeltaCloud; FeedSek800B.Calc(cmd); GasOilStreamDynamics Sek800 GasOilStream ProdSek800 GasOilStreamResponse Prod800_SUL800 GasOilStreamResponse Prod800_GHR804 Strippedamp (MV) -> Flash SUL800 = exp(7.839-0.0693612*GHC021TA+0.0457378*REC95+0.0230973*Feed800); SiSoModel GHC021TA_GHTC013 SiSoModel GHC021TA_GHFC017 MV: GHTC013 MV: GHFC017 GHC021TAGHC021TA Meas Model::Calc(UPDT) SiSoModel GHQ023_GHTC013 SiSoModel GHQ023_GHFC017 CV: GHQ023 Sek800 modell: KlasseAntall GasOilMix1 GasOilStream4 SiSoModel8 GasOilStreamDynamics2 PropFilter3 GasOilStreamResponse3
10
10 Modell størrelse Variable – Svr: 169 – Evr: 101 – Tvr: 151 – Mvr: 23 – Cvr: 60 – 21 subgrupper – 38 prioritetsnivå Modellobjekt – GasOilStream: 73 – SiSoModel: 27 – GasOilStreamResponse: 22 – GasOilStreamDynamics: 13 – GasOilMix: 8 – PropFilter: 7 – GasOilSplit: 5
11
11 Objektfunksjon Planlegning: Gassoljetrekkene skal stilles inn slik at de har like marginale kvaliteter på den begrensende RunDown-kvalitet – dvs hvis Cloud er begrensende på RunDown så skal gassoljetrekkene ha lik marginal Cloud – dvs Cloud på den neste dråpen som trekkes ut som resultat av at det trekkes litt tyngre skal være lik for fraksjonatortrekkene Dette karakteriserer optimal løsning (under gitte betingelser) – praktisk objektfunksjon (direkte avledet av almen oppfatning): Maksimaliser totalt gassoljetrekk – CV: GBGOSUM = LAGO_FLOW + LGO_FLOW + LVGO_FLOW + VBGO_FLOW – Uten andre begrensninger enn blandet cloud < cloudmax, og uten kobling mellom fraksjonatortrekkene gir optimal løsning ens marginal cloud på trekkene Modifisert objektfunksjon – LVGO som dumpes krakkes på ny (hvis plass) og kommer dermed delvis tilbake som fraksjonatorføde, mens dumping i de andre fraksjonatorene går til fuel-produksjon – CV: GBGOSUM = LAGO_FLOW + LGO_FLOW + 0.6*LVGO_FLOW + VBGO_FLOW – Dermed vil ikke optimal løsning kunne karakteriseres med ens marginale egenskaper lenger – Objektfunksjonen gjør jobben, men det kan av og til være hardt å akseptere løsningen...., og å få den til å spille riktig i forhold til alle andre regulerings- og optimaliseringsønsker
12
12 T = 50 min, d = 5 min T = 40 min, d = 10 min T = 16 min, d = 10 min Prop: T1 = 10 min, T2 = 40 min, d = 110 min T = 10 min -langsom dynamikk mot RD -begrenset endringshastighet så fracs kan henge med -skal helst ikke ha for mye oversving i i forhold til SS opt Steady state opt: - ønsket mengde fra TK1337 (GBFC818.Iv) - bestemmer optimale frak-trekk for maks GBGOSUM - kvalitet SetPnt reberegnes til grense eller innenfor Calc: - SetPnt som beregnes til grense gis Fulf > 0 TK1337 reduserer give-away dynamisk Objektfunksjon – optimalitet – bruk av TK1337 - raskt håndtak mot RD - lett, godt stoff i forhold til de fleste egenskaper - skal i snitt ligge på PPL plan, styrt av fremtidig produksjon - brukes dynamisk aktivt for å redusere off-spec eller give-away
13
13 Sensitivitetsmatrise Standardapplikasjon med eksperimentelle modeller – fjerner noen modeller som er ”små” – fjerner noen modeller som er signifikant men som en ikke ønsker å utnytte – dupliserer noen MV’er som DV’er og overfører modeller dit GORTO beregner sensitivitetsmatrise (MV CV) ved MV endring modellsimulering – alle modellerte sammenhenger fremtrer i matrisa, alle muligheter ses dermed – alle små numeriske avvik (eks delta dynamiske modeller) vil opptre E-7 element i matrisa – prioritetsmekanismer og move penalties avhjelper problemet, men noen uønskete aksjoner (planer) ble observert Manipulasjon av matrise – Calc: subrmpcgain(CVRTAG,MVRTAG) gir steady state gain fra matrise – Calc: subrzerosens(CVRTAG,MVRTAG,ZEROFLAG) nuller sammenheng i matrise hvis ZEROFLAG = 1
14
14 Løsningsmetodikk for GORTO Prediksjonshorisonten simuleres med konstante MV’er (CONSTMVR) ”open loop” respons MV’er steppes etter tur simulering for hvert step over hele horisont antar samme respons for blokker lenger ut endring fra open-loop blir sensitivitet fra aktuell MV mot alle CV’er Nulling av små eller spesielle element i sensitivitetsmatrise Steady state optimalisering (inntil 40 ganger) for å løse prioritetshierarki Justering av spesifikasjoner internt i tråd med steady state løsning Dynamisk optimalisering en gang, ingen iterasjon Sett ut pådrag, vent 5 min før neste sample som starter med modelloppdatering eksekverer på 5 – 10 sek og virker
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.