Hallo zusammen, auf Arbeit möchte ich Ein/Ausgangskarten vom Prozessleitsystem testen, bevor sie in die laufende Anlage eingebaut werden. Es geht um zwei Typen von E/A-Karten, einmal 4 Analogeingänge und 4 Analogaugänge und einmal 8 Analogeingänge. Zum Testen habe ich jeweils die 4 Ausgänge auf die Eingänge zurückgeführt und für die andere Karte die auch die 4 Ausgänge auf die Eingänge 1&5, 2&6, 3&7 und 4&8 zurückgeführt. Das klappt auch prima. Nun möchte ich aus den Ausgängen ein Sinus Signal raus geben. Welches man dann an den Eingängen wieder sehen kann. Im Leitsystem wollte ich folgendes programmieren: z.B. Ausgang 1 = 100 * sin(2π*(0bis100%=Eingang1/100) Ausgang wir ausgegeben und gleich wieder als Eingang 1 eingelesen. Wenn ich die Gleichung in Excel berechnne kommt auch ein Sinus raus aber wenn ich mir den Trend vom Aus- oder Eingang ansehe ist das nicht wirklich ein Sinus obwohl der Messwert nur Werte zwischen 0 und 100% annimmt. Die allgemeine Form der Funktion ist ja folgende: f(x)=a*sin(b*(x-c)+d) (a und b dürfen nicht 0 werden) wobei man mit: a die Funktion senkrecht streckt (x-Achse) b die Funktion waagerecht streckt (y-Achse) c die Funktion waagerecht verschieben (y-Achse) d die Funktion senkrecht verschieben (x-Achse) Was mache ich verkehrt? Normalerweise wird die Berchnung, die Ausgabe und Eingabe jeweils mit 1 Sekunde ausgeführt. Wenn ich auf den Eingang einen Filter lege wird das Signal gedämpft, wenn er groß (mehrere Sekunden größer 10) genug ist bekomme ich eine Linie bei 50% im Trend. Es scheint also so als ob die Ausgabe ein Signal ist und es nur nicht richtig im Trend angezeigt werden kann. Ein Oszi hatte ich noch nicht dran. Der Sinus sollte zwischen 0 und 100% pendeln wenn eine Periode 10 Sekunden dauert reicht das ja, das müsste im Trend problemlos angezeigt werden können.
> f(x)=a*sin(b*(x-c)+d)
Hier ist "d" eine Phasenverschiebung.
Entweder:
f(x)=a*(sin(b*(x-c))+d)
oder:
f(x)=a*sin(b*x-c)+d
Bei d=0 wird f natürlich auch negativ - können das deine DACs/ADCs?
Falls f auch Werte zwischen 0 und 100 liefern soll, muß a=50 und d=1
resp d=a sein.
L(S)inus schrieb: > f(x)=a*sin(b*(x-c)+d) (a und b dürfen nicht 0 werden) > d die Funktion senkrecht verschieben (x-Achse) Sicher? Also zum einen war zu meiner Schulzeit die senkrechte Achse im Koordinatensystem die Y-Achse. Und wenn Du mit der Addition von d den Funktionswert in der Vertikalen verschieben willst, dann sollte d nicht im Argument der Sinus-Funktion stehen... Grüßle Volker
L(S)inus schrieb: > f(x)=asin(b(x-c)+d) Früher (tm) stand "asin" für Arkus Sinus, also die Umkehrfunktion von Sinus. Wenn du in deinem Code genauso schludrig schreibst, ist fast jeder Unsinn möglich.
Wolfgang schrieb: > L(S)inus schrieb: >> f(x)=asin(b(x-c)+d) > > Früher (tm) stand "asin" für Arkus Sinus, also die Umkehrfunktion von > Sinus. Wenn du in deinem Code genauso schludrig schreibst, ist fast > jeder Unsinn möglich. Schau mal, ob bei dir das „sin(b“ kursiv (oder fett) ist. Dann liegt es am Formatsyntax des Forums.
Dirk B. schrieb: > Schau mal, ob bei dir das „sin(b“ kursiv (oder fett) ist Alles normale Schrift. Um die Formatierungsfunktion des Forums zu umgehen, empfiehlt es sie, die pre-Tags zu verwenden.
Kann der Ausgang negative Werte? Sonst fehlt ein Offset damit das Signal positiv bleibt...
foobar schrieb: >> f(x)=a*sin(b*(x-c)+d) > > Hier ist "d" eine Phasenverschiebung. > > Entweder: > f(x)=a*(sin(b*(x-c))+d) > oder: > f(x)=a*sin(b*x-c)+d > > Bei d=0 wird f natürlich auch negativ - können das deine DACs/ADCs? > Falls f auch Werte zwischen 0 und 100 liefern soll, muß a=50 und d=1 > resp d=a sein. Danke, die Gleichung f(x)=a*(sin(b*(x-c))+d) ist für meinen Fall die Richtige mit a=50 und a=b=c=1. also effektiv rechne ich: Ausgang = sin(π*1,9*Merker/100-1)+1*50 Dann den Merker + Faktor(z.B.4,5 irgendwas zwische 0,2 und 1,9*π)=Merker Dann prüfen ob (1.9*π-Merker)*(-1) positv ist, falls Ja dann den Merker löschen sonst wieder von voen beginnen. Bei genau 2π hatte ich immer einen aussetzer alle 2 Perioden, deshalb habe ich 1,9*π genommen dann ging es. Das muss ich mir aber am Montag nochmal ansehen es kann auch daran liegen das ich für die Prüfung nicht 2(1.9) sondern 100 genommen hatte, ich hatte den falschen Merker genommen. Zumindest habe ich jetzt das Ergebnis was ich wollte. Das rückführen der Ausgänge ist gar nicht notwendig, da reicht ja die Anzeige der eingelesenen Werte. Das hochzählen mit dem Faktor hat dann die Lösung gebracht. Schönes Wochenende.
> Volker schrieb > Sicher? Nein ich hatte eine Klammer vergessen. > Wolfgang schrieb: > L(S)inus schrieb: >> f(x)=asin(b(x-c)+d) > > Früher (tm) stand "asin" für Arkus Sinus, also die Umkehrfunktion von > Sinus. Wenn du in deinem Code genauso schludrig schreibst, ist fast > jeder Unsinn möglich. Ich meinte sin also die Sinusfunktion nicht Arkus Sinus a mal sin... Ich hatte aber die Klammern falsch gesetzt. StefG schrieb: > Kann der Ausgang negative Werte? > Sonst fehlt ein Offset damit das Signal positiv bleibt... Ja den Ausgang könnte ich auch auf jeden gewünschten Messbereich skalieren, aber ich möchte, dass ein Bereich von 0 bis 100% ausgegeben wird. Dann kann man schön sehen ob alle Kanäle den gleichen Wert rausgeben bzw. einlesen.
> Danke, die Gleichung f(x)=a*(sin(b*(x-c))+d) ist für meinen Fall die > Richtige mit a=50 und a=b=c=1. Was denn nun? a=50 oder a=1? > also effektiv rechne ich: > Ausgang = sin(π*1,9*Merker/100-1)+1*50 Da fehlen wieder die Klammern. Du solltest beim Programmieren etwas sorgfältiger vorgehen, sonst wird das nix. Und das mit der 1.9 solltest du dir etwas genauer anschauen und nach der Ursache suchen - sonst mogelst du dir deine Daten nur zurecht.
foobar schrieb: >> Danke, die Gleichung f(x)=a*(sin(b*(x-c))+d) ist für meinen Fall die >> Richtige mit a=50 und a=b=c=1. > > Was denn nun? a=50 oder a=1? a=50 es war kurz vor Feierabend tut mir leid. > >> also effektiv rechne ich: >> Ausgang = sin(π*1,9*Merker/100-1)+1*50 > > Da fehlen wieder die Klammern. Du solltest beim Programmieren etwas > sorgfältiger vorgehen, sonst wird das nix. Ich musste die Gleichung wieder für das Forum "übersetzten", da in einer Anweisungsliste programmiert wird, so eine Art Assembler. Dabei habe ich die Klammer wieder übersehen. Bei Minute 3:16 und 6:25 im folgenden Video kannst Du vielleicht das Prinzip wie programmiert wird sehen. In dem Video wird erklärt wie ein einfacher Regelkreis aufgebaut wird. Weil er kein realen Prozess hat bildet er ihn mit einer Gleichung ab. https://www.youtube.com/watch?v=0vUrL_7VA6o > > Und das mit der 1.9 solltest du dir etwas genauer anschauen und nach der > Ursache suchen - sonst mogelst du dir deine Daten nur zurecht. Ja das schaue ich mir am Montag nochmal an.
L(S)inus schrieb: > Ja das schaue ich mir am Montag nochmal an. Also ich habe es mir nochmal angesehen und vereinfacht ich hatte von 0-100% in 0-2π umgerechnet und wieder zurück. Das war unnötig. Ich habe mal das Ergebnis im Foto festgehalten und hier angehangen. Links ist die Umsetzung der Funktionsgleichung und rechts das Ergebnis im Trend. Danke an foobar, StefG, Volker B., Dirk B. und Wolfgang.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.