Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Results 1 to 9 of 9

Thread: Kurvenberechnug

  1. #1
    Anonymous Gast

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo , gibt es einen Baustein , der einen Kurve etrapoliert, die durch eine bestimmte Anzahl von Stützstellen definiert wird.
    Ich möcht vermeiden dass ich einen Treppenfunktion bekomme, der Baustein soll die Treppe " glätten "

    Danke für die anregenden Antworten
    Reply With Quote Reply With Quote Answered: Kurvenberechnug  

  2. "Ich bin noch neu im AWL-Geschäft.

    Hat jemand zu diesem Thema einen funktionierenden Baustein, den man sich mal ansehen kann?

    @Ralf
    Nichts gegen Deinen Code, aber irgendwie ist das Ganze ja noch ziemlich unvollständig.
    Sollte der Baustein nicht in einer definierten Taktung aufgerufen/abgearbeitet werden?
    Wie kommen die Werte von Ordinate und Abszizze in den Baustein?
    Wie gesagt, ich bin noch Neuling. Deshalb Entschuldigung, falls meine Fragen zu "primi" sind.

    ---------------
    Eigentlich brauche ich eine Funktion, die folgendes macht:

    Es gibt eine Tabelle mit folgenden Werten:
    Zeit1[s], Sollwert1
    Zeit2[s], Sollwert2
    Zeit3[s], Sollwert3

    Innerhalb einer Zeit x soll ein Wert ausgegeben werden, der schrittweise von Sollwert y-1 auf Sollwert y angeglichen wird. Nach Ablauf von Zeit x hat der Ausgabewert den Wert Sollwert x. (Falls ich mich nicht zu umständlich ausgedrückt habe. )
    Beispiel:
    Zeit2 = 10s, Sollwert1 = 100, Sollwert2 = 200
    Innerhalb von 10 s soll der Ausgabewert vom 100 auf 200 angeglichen werden.

    Vielleicht kann mir jemand mit einem Lösungsansatz (oder gar einem ganzen FB ) helfen.

    Vielen Dank
    Sabine"


  3. #2
    Join Date
    25.05.2004
    Posts
    194
    Danke
    0
    Erhielt 46 Danke für 7 Beiträge

    Default

    Sowas ist verhältnismäßig einfach zu schreiben /sofern nicht mathematische wiederlichkeizen wie Splines gefragt sind.
    Wo hast Du denn Deine Stützpunkte abgelegt?

    Gruß

    Ralf

  4. #3
    sieprog Gast

    Default

    Hallo allerseits,
    ich hätte auch Interesse an eurer Kurvenberechnung. Vielleicht könntet ihr mir eure Lösung mal zukommen lassen.

    Besten Dank schon vorab
    meine e-mail adresse: heisat@freenet.de
    Reply With Quote Reply With Quote FB zur Kurvenberechnung  

  5. #4
    Join Date
    25.05.2004
    Posts
    194
    Danke
    0
    Erhielt 46 Danke für 7 Beiträge

    Default

    Nunja, hab mich gerade zuhause am Notepad versucht, so müßte es aber gehen
    Code:
    ABSZISSE 	ARRAY[0..9] of REAL // Die X-ACHSE Muß (!) aufsteigend eingegeben werden
    ORDINATE 	ARRAY[0..9] of REAL // Die Y-ACHSE
    
    * EINGANG *
    WERT_X 		REAL
    
    * AUSGANG *
    WERT_Y 		REAL
    
    * Temp *
    Rette1 		DWORD
    Step		WORD
    
    Programm:
    
    // Rette das Adressreg
    	TAR1 #Rette1
    
    	L	0		
    	T	#Step
    	L	9	// keine 10 Sonst gibts ja keine 2 Stützpunkte
    SLZ:	L	#step 	// Adresse 'Ordinate'
    	SLD 	3	// Mach Pointer 
    	LAR1
    	L 	D[AR1,P#0]
    	L	#WERT_X
    	<=R
    	SPB	RECH	// Ist der Wert-X kleiner od gleich Rechnen
    	L	#Step
    	L	1
    	LOOP	SLZ	// Sonst setze die Schleife fort
    RECH&#58;	L	Step
    	T	#Wert_Y	// Erstmal Differenz Zwischenspeichern
    	L 	D&#91;AR1,P#4&#93; // Den Größeren X-Wert laden
    	L	D&#91;AR1,P#0&#93; // Den kleineren 
    	-R	
    	T	#Wert_Y	// Erstmal Differenz Zwischenspeichern
    	L 	D&#91;AR1,P#44&#93; // Den Größeren Y-Wert laden
    	L	D&#91;AR1,P#40&#93; // Den kleineren 
    	-R
     	L	#Wert_Y	
    	/R		    // Jetzt hat man die Steigung 
    	T	#Wert_Y		 		
    	L	#Wert_X
    	L	D&#91;AR1,P#0&#93; 	
    	-R		// Und den Abstand zum Ersten Stützpunkt
    	L	#Wert_Y
    	*R		// Das ist dann jetzt der Abstand auf der Y-Achse
    	L	D&#91;AR1,P#40&#93;	
    	+R
    	T	#Wert_Y	// Rückschreiben Adressreg
    	L	#Rette1
    	LAR1
    	BE
    sollten Fehler drinsein, bitte melden

    Gruß

    Ralf

  6. #5
    Anonymous Gast

    Default

    Ich bin noch neu im AWL-Geschäft.

    Hat jemand zu diesem Thema einen funktionierenden Baustein, den man sich mal ansehen kann?

    @Ralf
    Nichts gegen Deinen Code, aber irgendwie ist das Ganze ja noch ziemlich unvollständig.
    Sollte der Baustein nicht in einer definierten Taktung aufgerufen/abgearbeitet werden?
    Wie kommen die Werte von Ordinate und Abszizze in den Baustein?
    Wie gesagt, ich bin noch Neuling. Deshalb Entschuldigung, falls meine Fragen zu "primi" sind.

    ---------------
    Eigentlich brauche ich eine Funktion, die folgendes macht:

    Es gibt eine Tabelle mit folgenden Werten:
    Zeit1[s], Sollwert1
    Zeit2[s], Sollwert2
    Zeit3[s], Sollwert3

    Innerhalb einer Zeit x soll ein Wert ausgegeben werden, der schrittweise von Sollwert y-1 auf Sollwert y angeglichen wird. Nach Ablauf von Zeit x hat der Ausgabewert den Wert Sollwert x. (Falls ich mich nicht zu umständlich ausgedrückt habe. )
    Beispiel:
    Zeit2 = 10s, Sollwert1 = 100, Sollwert2 = 200
    Innerhalb von 10 s soll der Ausgabewert vom 100 auf 200 angeglichen werden.

    Vielleicht kann mir jemand mit einem Lösungsansatz (oder gar einem ganzen FB ) helfen.

    Vielen Dank
    Sabine

  7. #6
    Join Date
    20.06.2003
    Location
    Sauerland.NRW.Deutschland
    Posts
    5,451
    Danke
    99
    Erhielt 923 Danke für 628 Beiträge

    Default

    Quote Originally Posted by Einsteiger
    Beispiel:
    Zeit2 = 10s, Sollwert1 = 100, Sollwert2 = 200
    Innerhalb von 10 s soll der Ausgabewert vom 100 auf 200 angeglichen werden.
    wie soll der wert denn angefahren werden? als gerade oder als kurve?

    als gerade
    soll2 - soll1 = diff
    diff / zeit2 = solländerung je sekunde
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download auf meiner HP
    zum Download im Internet (Backup nicht unbedingt aktuell)

  8. #7
    Anonymous Gast

    Default

    Als Gerade.
    Also z.B. wenn der Baustein jede Sekunde aufgerufen würde:
    0. Sekunde -> Sollwert1 = 100
    1. Sekunde -> Sollwert1 = 110
    2. Sekunde -> Sollwert1 = 120
    ...
    10. Sekunde -> Sollwert1 = 200

    Nach Ablauf der Zeit1, kommt dann Zeit2 dran usw. Damit kann man den Sollwert prima stetig verändern und nicht als Sprung.

  9. #8
    Join Date
    20.06.2003
    Location
    Sauerland.NRW.Deutschland
    Posts
    5,451
    Danke
    99
    Erhielt 923 Danke für 628 Beiträge

    Default

    gewünschtes habe ich dir doch aufgezeigt.

    Code:
    un impuls
    spb m001
    
    u erster_durchlauf
    spb init
    s  erster_durchlauf
    l sollwert1
    t sollwertaktuell
    spa m001
    
    l sollwert2
    l sollwert1
    -i
    t differenz
    l 10 //sekunden
    /i
    t diff_je_sekunde
    init&#58; nop 0
    
    l sollwertaktuell
    l diff_je_sekunde
    +i
    t sollwertaktuell
    m001&#58; nop 0
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download auf meiner HP
    zum Download im Internet (Backup nicht unbedingt aktuell)

  10. #9
    Anonymous Gast

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke. Ich probiers mal aus.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •