What does Google tell you if you type 'delay a signal in Simulink'?

Tidsforsinkelse i Simulink: En Dybdegående Guide

13/06/1999

Rating: 4.69 (5693 votes)

Modellering af dynamiske systemer kræver ofte, at man tager højde for tidsforsinkelser. Uanset om det drejer sig om signaltransmission, materialetransport eller beregningsmæssige latenser, er evnen til at simulere en forsinkelse afgørende for at skabe nøjagtige og realistiske modeller. Simulink®, et af de mest anvendte værktøjer til modellering og simulering, tilbyder en række forskellige blokke designet specifikt til dette formål. At forstå nuancerne mellem disse blokke er nøglen til at vælge det rigtige værktøj til opgaven og undgå almindelige faldgruber. Denne artikel vil guide dig gennem de mest almindelige metoder til at implementere en tidsforsinkelse i Simulink, fra simple faste forsinkelser til komplekse variable og diskrete forsinkelser.

How does Simulink find the transport delay?
Simulink software finds the transport delay, t d (t), by solving the following equation: This equation involves an instantaneous time delay, t i (t), given by the time delay (bottom, or right) input. Suppose that you want to use this block to model the fluid flow through a pipe where the fluid speed varies with time.
Indholdsfortegnelse

Den Grundlæggende: Transport Delay Blokken

Den mest ligefremme måde at introducere en forsinkelse i et kontinuerligt signal på er ved at bruge Transport Delay blokken. Som navnet antyder, simulerer denne blok den tid, det tager for et signal at 'rejse' fra et punkt til et andet. Den forsinker inputsignalet med en specificeret, fast mængde tid.

Når en simulering starter, vil blokken udsende en initialværdi, som du definerer i parameteren 'Initial output'. Denne værdi udsendes, indtil simuleringstiden overstiger den værdi, du har angivet i 'Time delay' parameteren. Først da begynder blokken at udsende det forsinkede inputsignal.

For at opnå dette gemmer blokken løbende par af tidspunkter og inputværdier i en intern buffer. Størrelsen af denne buffer specificeres med parameteren 'Initial buffer size'. Når output er påkrævet på et tidspunkt, der ikke præcist matcher et af de gemte tidspunkter, anvender blokken lineær interpolation mellem de nærmeste gemte punkter for at beregne en passende værdi. Dette gælder, når modellen bruger en kontinuerlig solver.

En vigtig adfærd at være opmærksom på er, hvad der sker, når den specificerede forsinkelse er mindre end simuleringens skridtstørrelse. I sådanne tilfælde kan blokken ikke se 'tilbage' til et gemt datapunkt. I stedet vil den udføre en fremadrettet ekstrapolation fra det sidst kendte punkt. Dette kan potentielt føre til unøjagtige resultater, da blokken ikke har direkte feedthrough og derfor ikke kan bruge den nuværende inputværdi til at beregne sit output. For diskrete signaler udfører blokken ikke interpolation; den returnerer i stedet den gemte værdi, der er tættest på det påkrævede tidspunkt.

Håndtering af Dynamiske Forsinkelser: Variable Time Delay

I mange virkelige systemer er forsinkelsen ikke konstant. Den kan variere afhængigt af systemets tilstand, input eller andre eksterne faktorer. Til disse scenarier tilbyder Simulink blokken Variable Transport Delay, som også kan findes under navnet Variable Time Delay. Selvom de vises som to separate blokke i biblioteket, er de i virkeligheden den samme blok med forskellige standardindstillinger.

I modsætning til Transport Delay-blokken har denne blok to inputporte: en til datasignalet (u) og en til det tidssignal (τ), der specificerer den aktuelle forsinkelse. Outputtet på et givet tidspunkt (t) er lig med inputværdien på et tidligere tidspunkt, specifikt (t - τ(t)).

Funktionaliteten er meget lig den faste forsinkelsesblok. Den vedligeholder også en intern buffer med tid- og inputværdipar. Ved simuleringens start udsendes 'Initial output', indtil tiden overstiger den første værdi fra forsinkelsesinputtet. Herefter beregnes outputtet ved at slå op i bufferen. Ligesom sin modpart med fast forsinkelse bruger den lineær interpolation for kontinuerlige solvere og ekstrapolation, hvis forsinkelsen er mindre end skridtstørrelsen.

Sammenligning af Forsinkelsesmetoder

For at give et klart overblik er her en tabel, der sammenligner de primære kontinuerlige forsinkelsesblokke med den diskrete Unit Delay-blok, som ofte forveksles med dem.

BloktypeForsinkelsestypeSignaltypeTypisk Anvendelse
Transport DelayFast tid (sekunder)KontinuerligSimulering af f.eks. rørflow, transmissionslinjer.
Variable Time DelayVariabel tid (inputsignal)KontinuerligSystemer med dynamisk latens, dopplereffekter.
Unit DelayEn enkelt sample-periodeDiskretImplementering af digitale filtre, diskrete tilstandsmaskiner.

Avanceret og Diskret Forsinkelse: 'Delay'-blokken

For diskrete systemer, især inden for områder som PLC-kodegenerering med Simulink PLC Coder™, findes en mere specialiseret blok kaldet Delay. Denne blok opererer fundamentalt anderledes end de tidsbaserede forsinkelsesblokke. I stedet for at forsinke med en bestemt tid i sekunder, forsinker den inputtet med et specificeret antal sample-perioder, defineret af parameteren 'Delay length'.

Denne blok er yderst konfigurerbar og tilbyder en række avancerede funktioner:

  • Variabel forsinkelseslængde: Forsinkelseslængden kan specificeres som et input, hvilket tillader en dynamisk ændring af forsinkelsen i antal samples.
  • Ekstern initialbetingelse: Startværdien kan leveres via en inputport (x0) i stedet for en fast parameter.
  • Ekstern nulstilling (Reset): En ekstern signalport kan bruges til at nulstille blokkens tilstand til initialbetingelsen under simuleringen.
  • Enable-port: En 'Enable'-port kan tilføjes for at styre, hvornår blokken skal udføre sin funktion. Når den er deaktiveret, holder blokken sin sidste outputværdi.
  • Understøttelse af Bus-signaler: Blokken kan håndtere både virtuelle og ikke-virtuelle bus-signaler, hvilket er essentielt i komplekse modelarkitekturer.

Blokkens opførsel ved simuleringens start afhænger af sample-tiden, forsinkelseslængden og simuleringens starttid. Det er vigtigt at konsultere dokumentationen for at forstå den præcise timing af outputtet i de første få tidsskridt.

Praktisk Anvendelse: Sådan starter du et signal efter 5 sekunder

Et almindeligt spørgsmål er, hvordan man kan forsinke starten af et signal. Forestil dig, at du har et sinus-signal, sin(5t), men du ønsker, at outputtet skal være 0 i de første 5 sekunder og derefter følge sinus-kurven. Dette kan opnås elegant med en Transport Delay-blok.

  1. Indsæt en Transport Delay-blok efter din sinus-generator.
  2. I blokkens parametre sætter du 'Time delay' til 5.
  3. Sæt 'Initial output' til 0.

Med denne konfiguration vil blokken udsende 0, indtil simuleringstiden når 5 sekunder. Herefter vil den begynde at udsende det forsinkede sinus-signal. Da sinus-signalet også er blevet forsinket med 5 sekunder, vil outputtet være præcis, hvad der ønskes: sin(5*(t-5)) for t ≥ 5, og 0 ellers.

Ofte Stillede Spørgsmål (FAQ)

Hvad er forskellen på 'Transport Delay' og 'Unit Delay'?

'Transport Delay' forsinker et signal med en specificeret tid (f.eks. 2,5 sekunder) og bruges typisk til kontinuerlige signaler. 'Unit Delay' forsinker et signal med præcis én sample-periode og er designet til diskrete systemer. Den holder outputtet konstant mellem sample-hits.

Hvad sker der, hvis min forsinkelse er mindre end simuleringens skridtstørrelse?

Hvis du bruger en tidsbaseret forsinkelsesblok (som Transport Delay) med en kontinuerlig solver, vil blokken forsøge at ekstrapolere en værdi baseret på det seneste gemte datapunkt. Dette kan føre til unøjagtigheder, så det er vigtigt at være opmærksom på, især i systemer med hurtige dynamikker.

Kan jeg forsinke et helt bussignal?

Ja, den specialiserede 'Delay'-blok (fra f.eks. Simulink PLC Coder™) understøtter fuldt ud både virtuelle og ikke-virtuelle bus-signaler. Dette gør det muligt at forsinke en hel datastruktur som en samlet enhed, hvilket er meget nyttigt i store, strukturerede modeller.

Hvordan vælger jeg den rigtige forsinkelsesblok?

Valget afhænger af din model:
- For en fast tidsforsinkelse i et kontinuerligt system: Brug Transport Delay.
- For en variabel tidsforsinkelse i et kontinuerligt system: Brug Variable Time Delay.
- For en forsinkelse på et fast antal samples i et diskret system: Brug Unit Delay (for 1 sample) eller Delay-blokken (for N samples).

At mestre tidsforsinkelse i Simulink åbner op for en mere præcis og realistisk modellering af den fysiske verden. Ved at forstå forskellene mellem de tilgængelige blokke og deres specifikke anvendelsesområder kan du bygge mere robuste og pålidelige simulationer, der nøjagtigt afspejler den dynamik, du ønsker at studere.

Hvis du vil læse andre artikler, der ligner Tidsforsinkelse i Simulink: En Dybdegående Guide, kan du besøge kategorien Teknologi.

Go up