-> Hier kostenlos registrieren
Hallo ich habe ein Problem. Ich habe ein EA-Feld per Script an einen Tag angehängt. Dieser Tag hat ein Maximum und ein Minimum. Das Problem ist, wenn ich einen Wert über dem Maximum oder unter dem Minimum eingebe, bleibt der ungültige Wert auf dem EA-Feld stehen, aber das Tag im Hintergrund bleibt unverändert, was für jemanden, der sich nicht so gut auskennt, verwirrend sein kann, z.B. wenn man etwas testen will. Also wollte ich den Code so ändern, dass er den Wert des EA-Feldes auf den vorherigen Wert zurücksetzt, wenn eine ungültige Eingabe gemacht wurde. Das ist die Lösung die ich mir ausgedacht habe:
export function Umf_ersatzwertfeld_ProcessValue_OnPropertyChanged(item, value) {
Tags("UMF_ersatzwert").Write(value / Tags("UMF_scale").Read());
if(Tags("UMF_ersatzwert").Read() !== value / Tags("UMF_scale").Read()){
item.ProcessValue = Tags("UMF_ersatzwert").Read() * Tags("UMF_scale").Read();
}
}
"Hier ist der UMF_ersatzwert der Wert, den ich beschreiben möchte, er wird als DInt auf dem Tag gespeichert, aber als Zahl mit Dezimalstellen auf dem EA-Feld angezeigt, die Anzahl der Dezimalstellen wird durch UMF_scale angegeben, also muss ich das per Skript machen, weil ich es immer umrechnen muss"
Ich habe es zuerst mit einem Try and Catch versucht, aber das hat nicht funktioniert, da es keinen Laufzeitfehler gibt, wenn der Wert ungültig ist.
Diese Lösung hier funktioniert auch nicht, da die Read und Write Funktionen nicht direkt auf die SPS schreiben und somit der untere Read nicht den Wert des oberen Write bekommt, sondern den Wert, der vorher darauf geschrieben wurde. Es gibt aber für beide Parameter, die man übergeben kann, die das ermöglichen, aber die haben anscheinend einen speziellen Datentyp und ich verstehe nicht ganz wie das funktioniert. Wenn jemand weiß wie das funktioniert oder eine andere Lösung hat, wäre ich sehr dankbar.
export function Umf_ersatzwertfeld_ProcessValue_OnPropertyChanged(item, value) {
Tags("UMF_ersatzwert").Write(value / Tags("UMF_scale").Read());
if(Tags("UMF_ersatzwert").Read() !== value / Tags("UMF_scale").Read()){
item.ProcessValue = Tags("UMF_ersatzwert").Read() * Tags("UMF_scale").Read();
}
}
"Hier ist der UMF_ersatzwert der Wert, den ich beschreiben möchte, er wird als DInt auf dem Tag gespeichert, aber als Zahl mit Dezimalstellen auf dem EA-Feld angezeigt, die Anzahl der Dezimalstellen wird durch UMF_scale angegeben, also muss ich das per Skript machen, weil ich es immer umrechnen muss"
Ich habe es zuerst mit einem Try and Catch versucht, aber das hat nicht funktioniert, da es keinen Laufzeitfehler gibt, wenn der Wert ungültig ist.
Diese Lösung hier funktioniert auch nicht, da die Read und Write Funktionen nicht direkt auf die SPS schreiben und somit der untere Read nicht den Wert des oberen Write bekommt, sondern den Wert, der vorher darauf geschrieben wurde. Es gibt aber für beide Parameter, die man übergeben kann, die das ermöglichen, aber die haben anscheinend einen speziellen Datentyp und ich verstehe nicht ganz wie das funktioniert. Wenn jemand weiß wie das funktioniert oder eine andere Lösung hat, wäre ich sehr dankbar.