-> Hier kostenlos registrieren
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Naja über die Funktion rechnest Du eine Spannung von 0-10V aus und diese rechnest Du dann mit einem Dreisatz in 0-27648 um.@R4m80 Und wie würde man diese Spannweite von 0-27648 deklarieren? Ich muss folgende Funktion programmieren
Anhang anzeigen 62337
Die Formel sieht auch recht merkwürdig aus.sind dies alle Informationen zu der Aufgabe? Denn es scheint als würde hier noch etwas fehlen, ...
Bei mir kommt bei ca. 0.25 am Eingang ca. (ein wenig mehr als) 2.5 am Ausgang heraus. Erwartungsgemäss.Hab es nur mal schnell gerechnet ca. 0.25V am Eingang = 10V am Ausgang?
Hab es nur mal schnell gerechnet ca. 0.25V am Eingang = 10V am Ausgang?
tmp_real:= sqr(int_to_real(x_loc)); // quadrieren der eingangsgroesse
tmp_real:= tmp_real * 0.075; // mal dem faktor
y_loc:= 6912 + real_to_int(tmp_real); // + 2,5V
tmp_ValueInVolt := (int_to_real(x_loc)*10.0)/27648; // saklieren auf 0..10V
tmp_real:= sqr(tmp_ValueInVolt); // quadrieren der eingangsgroesse
tmp_real:= tmp_real * 0.075; // mal dem faktor
tmp_real:= 2.5 + tmp_real; // + 2,5V
y_loc:= real_to_int((tmp_real/10)*27648); // rueckskalieren von 0..10V
Das geht gar nicht, den RohWert von der Karte (6912 ist ja "sinngemäss" 27648*0,25) mit in die Formel hineinzuschmuggeln!Code:tmp_real:= sqr(int_to_real(x_loc)); // quadrieren der eingangsgroesse tmp_real:= tmp_real * 0.075; // mal dem faktor y_loc:= 6912 + real_to_int(tmp_real); // + 2,5V
Übrigens kann man anstatt der spezial Siemens Quadrier-FunktionCode:tmp_real:= sqr(tmp_ValueInVolt); // quadrieren
sqr(Value)
auch einfach schreiben Value * Value
, dann ist der Code kompatibel mit Codesys und der IEC61131, und man versteht den Code vermutlich auch besser und ohne Verwechslungsgefahr mit sqrt()
(Quadratwurzel)Also:Übrigens kann man anstatt der spezial Siemens Quadrier-Funktionsqr(Value)
auch einfach schreibenValue * Value
,
tmp_real := int_to_real(x_loc) * int_to_real(x_loc);
tmp_real := int_to_real(x_loc * x_loc) ;
tmp_real := int_to_real(x_loc) ** 2.0 ;
#x_loc := SCALE_X(MIN:= 0, VALUE:=NORM_X(MIN := 0, VALUE := #X, MAX := 27648), MAX:=10); // Eingangsgröße der Karte (0-27648) erst normieren(0..1) und dann skalieren(0..10)
#y_loc := 2.5 + 0.075 * #x_loc * #x_loc; // Formel, was auch immer
#Y := SCALE_X(MIN := 0, VALUE := NORM_X(MIN := 0, VALUE := #y_loc, MAX := 10), MAX := 27648); // Ergebnis (2.5..10) erst normieren (0.25..1) und dann skalieren (xxx..26748)
Ich hatte mir gerade die Frage gestellt, warum Normierung und Skalierung? Beim Versuch, meine BildungsLücke zu schliessen, habe ich die Antwort in diesem Forum gefunden:Öhm, kann man Analogwerte nicht leichter per Normierung und Skalierung umrechnen und dann genau die oben genannte Formel damit füttern?
Das macht das ganze doch wesentlich übersichtlicher und verständlicher, oder nicht?
Wie heißt es so schön, automatisieren Sie jetzt mit 2 Bausteinen, wo Sie früher nur einen benötigt haben.![]()
Du hast vermutlich immer noch nicht begriffen, was bei einer SPS bei der Bearbeitung von Analogwerten passiert, oder ich habe Dich nicht begriffen.@Heinileini Vielen Dank für die AntwortenEine Frage noch: Im Zusammenhang mit Analogen und digitalen Werten wird immer viel konvertiert (in deinem Fall int_to_real). Was ist der Grund dafür? Warum kann man x_loc nicht vorher als Real deklarieren statt int? Dann wäre die Konvertierung nicht nötig.
Dein Beitrag #1 liest sich so, dass x_loc von einer "AnalogZuDigitalUmwandelHardware" angeliefert wird und y_loc an eine "DigitalZuAnalogUmwandelHardware" weitergereicht wird. Manchmal werden diese Dinger als "Karte" bezeichet mal als "Klemme" oder wie auch immer. Und den Begriff "Hardware" bitte ich nicht so ganz streng wörtlich zu nehmen. Diese Umwandler kommen heutzutage i.A. auch nicht mehr ohne MicroProcessor/MicroController aus und enthalten somit auch Software.Im Zusammenhang mit Analogen und digitalen Werten wird immer viel konvertiert (in deinem Fall int_to_real). Was ist der Grund dafür?
Bitte entschuldige, wenn ich was falsch gemacht habe^^ Ich komme aus der Automobilindustrie, und da hat man dank Standards leider nie wirklich mit Analogwertverarbeitung zu tun...."Ich hatte mir gerade die Frage gestellt, warum Normierung und Skalierung?"
"Ein wenig irritiert mich allenfalls die identische Reihenfolge von "erst normieren ... und dann skalieren" bei der Vor- und Nachbereitung.
Ich muss wohl doch noch etwas mehr gegen meine BildungsLücke tun ..."
Nein, das kann ich nicht. Das war doch keine Kritik an Dir.Magst du mir denn verraten, wie man es besser machen kann?=)
Absolut nichts gegen einzuwenden.Nein, das kann ich nicht. Das war doch keine Kritik an Dir.
Als ehemaliger S5- und ein Bisschen auch S7-Programmierer bin ich nur ein (nicht immer ganz) stiller Beobachter der heutigen "Szene".![]()
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen