En todelt arkitekturmodel for hændelsesstyrede signalbehandlingssystemer ved Hans Peter Jepsen, Danfoss Drives og hans_peter_jepsen@danfoss.com Finn Overgaard Hansen, Teknologisk Institut, Center for IT finn.overgaard.hansen@teknologisk.dk
COT/Case2 - pilotprojekt Indlægget vil præsentere resultater fra pilotprojekt 1. hos Danfoss Drives Et delprojekt i COT/Case2: OO udvikling af apparatsystemer (Bang & Olufsen & Danfoss) Deltagere i Danfoss Drives pilotprojektet: 6 personer fra Danfoss Drives 3 personer fra Århus Universitet, Devise gruppen 2 personer fra Teknologisk Institut, Center for IT 2
Indledning Hvad handler indlægget om Omridset af en to-delt arkitekturmodel for hændelsesstyrede signalbehandlingssystemer. Virker simpel, men har været til stor støtte, efter vi nåede frem til den Hvordan design patterns har vist sig nyttige i forbindelse med realisering Der vil blive snakket en del om frekvensomformere forhåbentlig ikke mere end nødvendigt
Systemer, der Hvad er et Fleksibelt hændelsesstyret signalbehandlingssystem? har til opgave at foretage kontinuert signalbehandling, skal reagere på hændelser, der påvirker og omkonfigurerer signalbehandlingen Signalbehandlingen kan foregå i software, hardware, både hardware og software fordelt på flere processorer
Eksempler på signalbehandlingssystemer Eksempler kan findes indenfor Måleinstrumenter (f.eks. flowmålere) Procesregulering (f.eks. frekvensomformere) Forbrugerelektronik (f.eks. CD-afspillere) 5
Eksempel - en frekvensomformer En frekvensomformer er et apparat, der kan styre en elektro-motor, så omdrejningshastigheden eller kraften den yder, er netop hvad der er behov for på et givet tidspunkt Kaldes også et drev deraf navnet Danfoss Drives VLT er produktnavnet for Danfoss frekvensomformere
Styring af transportbånd - eksempel på en hastighedsstyring Hvad ønsker man at styre båndets hastighed hastigheden skal holdes uanset belastning Andre hensyn start/stop skal være blød
Styring af ventilator - eksempel på en procesregulering Hvad ønsker man at styre temperaturen i et rum, f.eks. en lufthavnshal Andre hensyn motoren skal fanges eller stoppes, før man starter op
Opvikling af tråd - eksempel på en momentstyring Hvad ønsker man at styre trækket i tråden trækket skal holdes konstant uanset rullens diameter Andre hensyn start/stop skal være blød
Sådan virker en frekvensomformer Rectifier Intermed. Circuit Inverter Motor Control Circuit Enclosure
Architectural style: Process Control Architectural style - et mønster for en arkitektur for en gruppe af systemer Proces Control mønstret kan med fordel anvendes i forbindelse med kontinuert regulering af en proces Demonstreres i forb. m. VLT eksemplerne fra før Reference: Shaw, Garlan: Software Architecture (Prentice-Hall, 1996)
Ventilatorstyring som procesregulering Input variable: varmeproduktion, varmetab, temperatur udenfor, osv Setpunkt: Ønsket temperatur Controller: VLT Manipulerede variable: frekvens + spænding Proces: Motor + ventilator + rum Kontrolleret variabel: rumtemperatur Feedback: aktuel rumtemperatur Eksempel på closed-loop feedback regulering
Indmaden i VLT en er signalbehandling Controller: VLT Proces: Motor + ventilator + rum Reference Reference calculation PID Controller Output f Frequency f f f Resonance f Frequency Ramp Bypass Damping Limits Voltage calculation f U angle transangle PWM generation f U Feedback Calcualation Feedback
Transportbåndet igen Input variable: motorstrøm Setpunkt: Ønsket hastighed Controller: VLT Manipulerede variable: frekvens + spænding Proces: Motor + last Kontrolleret variabel: båndets hastighed Reference Reference calculation Slip compensation Output f Frequency f f f Resonance f Frequency Ramp Bypass Damping Limits Voltage calculation f U angle transangle PWM generation f U Slip estimation I Eksempel på closed-loop feedforward regulering
Kontinuert signalbehandling - realiseret i software Kendetegn: Periodisk i stedet for kontinuert normalt styret af periodisk interrupt Inputsignaler samples Periodelængde er en vigtig systemparameter Dataflowarkitektur Grundigt behandlet i reguleringsteorien Mangler bud på fornuftig realisering i SW
En VLT reagerer også på hændelser Hændelser kan være: kommandoer, eks: Start, Stop, Skift-Setup en parameter (mere end 200) kan få ændret værdi setpunkt ændres fra proces-lokalnet Kan komme fra digitale indgange betjeningspanel telegram fra proces-lokalnet
Hændelsesbehandlingen Kendetegn: Hændelser ankommer ofte uafhængigt af og asynkront i forhold til signalbehandlingen normalt via et interrupt Systemets reaktion vil meget ofte være styret af tilstandsmaskiner
Hændelsesbehandlingsdelen påvirker signalbehandlingsdelen Hver signalbehandlingsblok har sine konfigurerings-parametre eks. rampe: rampetid, type (lineær eller S-rampe) De fleste kommandoer og nogle parametre medfører ændret signalvej Start, Stop, Setup-skift Skift fra Speed-Open-Loop til Process-Closed-Loop
Signalbehandlingsdelen kan frembringe hændelser Eksempler: Setpunkt-signalet forsvinder => motoren skal stoppes eller regulator skiftes Motorhastigheden når ned på 0 => motorstyringstilstanden skal sættes til Stoppet Feedback udenfor brugerfastsatte grænser => der skal udløses en Warning
Den todelte arkitektur (meget simplificeret) Ramp Configuration LCP driver/ handler Bus driver/ handler Motor stopped Motor starting Motor running Ramping down DC braking Monitor Freq Limits Bypass Resonans damp Voltage calc PWM PID Slip komp Reference calc Feedback calc Motor Preheat Busreference Analog inputs RS- 485 Digital inputs
Fordele ved den todelte arkitektur De to dele af systemet stiller hver deres krav dvs. der er forskellige spørgsmål, der skal afklares og tilgangsvinklen vil være noget forskellig Systemet kan opbygges, så signalbehandlingsvejen dannes, når der sker en ændring i vores nuværende produkt danner vi vejen hver gang. Periodelængden for de forskellige blokke på signalvejen kan være forskellig. det ser vi heller ikke idag.
Anvendelighed Arkitekturen formodes at være anvendelig for mange indlejrede systemer signalbehandlingen kan distribueres på forskellige CPU er Signalbehandlingsblokkene kan flyttes mellem HW og SW.
Bidrag til udviklingsmetode Overvej at beskrive funktionalitet som Process control når der foregår kontinuert databehandling the execution of the software system is affected by external disturbances - forces or events, that are not directly visible or controllable by the software (Shaw+Garlan, p. 30) UseCases skal specialiseres til denne funktionalitet Måske skabelon udfra ventilatorstyrings-eksemplet (omend det kan diskuteres om det er en UseCase) Mindst en proces/tråd for hver af de to dele Kritisk region imellem dem
Anvendte design mønstre Til at undestøtte den to delte arkitektur er der anvendt følgende designmønstre: Filter (and Pipes) Strategy Command State Observer 24
Mønstre opdelt på de to arkitektur lag Det diskrete hændelsesbaserede lag VLT user Command, State Motorkontrol Strategy, Filter VLT & Motor overvågning Observer Det kontinuerte signalbehandlingslag Motor 25
Pakkediagram for en frekvensomformer (VLT) Hændelsesbaserede lag VLT user VLT kontrol Konfigurering Signalbehandlings lag Sensor VLT & Motor overvågning Motor kontrollering Motor 26
Blokdiagram for 2 forskellige anvendelser Speed Open loop: Reference Reference calculation Slip compensation Output f Frequency f f f Resonance f Frequency Ramp Bypass Damping Limits Voltage calculation f U angle transangle PWM generation f U Process Closed Loop: Slip estimation I Reference Reference calculation PID Controller Output f Frequency f f f Resonance f Frequency Ramp Bypass Damping Limits Voltage calculation f U angle transangle PWM generation f U Feedback Calcualation Feedback 27
Objektdiagram for Speed-Open-Loop input frekvens :SlipCompensator f= Output(f) Output(f) :SpeedOpenLoopController :BypassFilter Output(f) :FreqLimiterFilter Output(f) :RampFilter Output(f) :ResonanceDamperFilter output frekvens 28
Klassediagram for filter-mønster ApplicationModeController Generate_f(): freq 0..* ControllerComponent Output(freq): freq... Resonance DamperFilter Freq LimiterFilter RampFilter ProcessClosedLoop SpeedOpenLoop Bypass Filter PIDRegulator Controller Controller Generate_f(): freq SlipCompensator Output(freq): freq 29
Strategy Pattern - struktur Context ContextInterface() Strategy AlgorithmInterface() ConcreteStrategy AlgorithmInterface() ConcreteStrategyB AlgorithmInterface() ConcreteStrategy AlgorithmInterface() 30
Udsnit af VLT klassediagram med Strategy konfigurerer MotorOutputGenerator SetActiveController() GetMotorOutputData() activeoutputcontroller 1 AbstractOutputController Generate_f_and_U() kaldes periodisk OutputFrequencyController Generate_f_and_U() Generate_f(): freq StopController Generate_f_and_U() ApplicationModeController Generate_f(): freq FrequencyController Generate_f(): freq... SpeedOpenLoopController Generate_f(): freq ProcessClosedLoopController Generate_f(): freq 31
Objekt collaboration diagram for Motor data GetMotorOutputData :MotorOutputGenerator aktiv på et senere tidspunkt :StopController 1. Generate_f_and_U 1.2 Calculate Voltage :SpeedOpenLoopController 1.1 Generate_f 1.1.1 Output 1.1.2 Output :SlipCompensator Næste filterobjekt 32
Skitse af det hændelsesbaserede lag Hændelsesbaserede lag User If VLT user VLT kontrol Konfigurering 33
Konfigurering af motor output generatoren - 1. MotorControlSM 1 stopcontroller StopController Generate_f_and_U() 1 1 Configuration runcontroller 1 appmodecontroller OutputFrequencyController Generate_f_and_U() Generate_f(): freq Tilsvarende findes for start SpeedOpenLoopController (impl. vha. filter mønster) 34
Konfigurering af motor output generatoren - 2. MotorControlSM configurerer 1 MotorOutputGenerator SetActiveController() GetMotorOutputData() 1..* AbstractOutputController Generate_f_and_U() 1 activeoutputcontroller stopcontroller 1 StopController Generate_f_and_U() runcontroller 1 OutputFrequencyController Generate_f_and_U() Generate_f(): freq 35
Skitse af Command + State pattern MotorControlSM HandleCommand(Command *pc) actualstate 1 MotorState 1. HandleCommand(Command *pc) { pc->execute(actualstate); }... 2. RunCommand::execute(MotorState *ps) { ps->run(); } 3. MotorStopped::run() {...->SetActiveController(runController); } 36
Skitse af konfigurering vha. Observer mønster Subject * notify() attachobserver() Configuration Observer update() Controller Component data update() 37
Konklusion anvendelse af den 2 delte arkitektur har adskilt de hurtige behandlingsdele fra de langsomme det objektorienterede design har reduceret en tidligere meget stor tilstandsmaskine til en meget mindre med 5 tilstande anvendelsen af mønstre har givet en fleksibel objektmodel - der forventes at udvikle sig til et framework for frekvensomformere 38