Typkonvertierung, EN/ENO in Codesys verwenden

StanS

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich bin neu in der Welt der SPS-Programmierung und habe die Aufgabe bekommen ein SCL-Programm in Codesys zu portieren.

Ich stoße derzeit an ein Problem bei Typkonvertierungen bzw. der Verwendung von EN/ENO.

Ich dem mir zur Verfügung gestellten Programm wird Folgendes gemacht:
Code:
tmp_DINT := STRING_TO_DINT(tmp_Str);
IF ENO THEN

//irgendein Code

END_IF


Wenn ich es richtig verstehe, wird in SCL bei der Typkonvertierung ENO auf TRUE gesetzt, wenn sie erfolgreich war. Jetzt gibt es in ST keine EN/ENO, sondern nur in FUP.

Leider war ich unfähig eine Dokumentation zu den Typkonvertierungen zu finden, in der Online-Hilfe, als auch im Internet. Was ich bräuchte ist also, nachzufragen, ob die Konvertierung durchgeführt werden konnte, oder irgendwie auf die EN/ENO Ein-/Ausgänge in ST zuzugreifen.

Jemand ne Idee?

VG
Stan
 
Leider viele Ideen.
Überlegen, welche Konvertierungen nicht zu Fehlern führen können und über diese nicht weiter nachdenken.
Überlegen, welche können zu Fehlern führen, kommen aber in dem zu übersetzenden Code nicht vor - ignorieren.
Bei den restlichen Konvertierungen müsste geprüft werden, ob das Verhalten bei SCL und ST gleich ist bzw. welche Unterschiede existieren.
Bei STRING_TO_DINT wäre z.B. interessant, ob ein String, der keine Ziffern enthält, "fehlertolerant" in 0 gewandelt wird oder nicht.
Das klingt nach viel Arbeit und ist es auch. Ich hoffe deshalb, Dein SCL-Programm enthält nur eine begrenzte, überschaubare Anzahl "kritischer" Fälle :ROFLMAO:
Du sprichst nur von TypKonvertierungen. BCD Code gehört wohl nicht dazu?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey,

BCD-Code gehört glaube ich nicht dazu, weiß ich aber nicht genau... Der Code lief vorher auf einer s7-1200.

Ansonsten habe ich jetzt, wie du schon geschrieben hast, herausgefunden, dass wenn eine Konvertierung fehlerhaft war, eine 0 drin steht. Das ist immerhin etwas. Damit kann ich wenigstens etwas machen.

Werde demnach versuchen nach 0 abzufragen.

Vielen Dank erstmal
Stan
 
Ja. Grundsätzlich erstmal schon.

Leider gibt es ja nicht sowas wie ne Abfrage, ob die Umwandlung erfolgreich war. Werde gegeben falls eine Funktion schreiben müssen, die überprüft ob die Konvertierung im gewollten Bereich liegt.

Schritt für Schritt... Wollte erstmal wissen, ob es vielleicht sowas gibt oder jemand schon auf das selbe Problem gestoßen ist.

VG
Stan
 
Hey,
entschuldige, dass ich so unregelmäßig schreibe.

Dieses Verhalten gibt es in SCL ja, aber ich will ja aus SCL code in ST machen. Also andersherum. =)

Daher meine Frage, kann man Überprüfen ob eine Konvertierung erfolgreich war und kann ich den FB "ausschalten"? :)

VG
Stan
 
Wenn STRING_TO_DINT bei Fehler den Wert 0 zurückgibt, dann musst du nur noch testen ob 0 wirklich der Wert im String oder ein Fehlerwert war.
Das könntest du prüfen indem du den String wieder in einen DINT zurückwandeltst (DINT_TO_STRING) und dann die beiden Strings auf Gleichheit prüfst.
Es ist zwar etwas umständlich, aber wenn du das auf den Fall 0 beschränkst dann ist das noch im Rahmen.

Das ist bei atoi() aus der C-Standard-Bibliothek übrigens genau so, diese Funktion besitzt auch keinerlei Fehlerbehandlung sondern gibt 0 bei Fehler zurück. Hier hat man sich wohl leider an den schlechten Dingen aus C orientiert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Leider war ich unfähig eine Dokumentation zu den Typkonvertierungen zu finden, in der Online-Hilfe, als auch im Internet. Was ich bräuchte ist also, nachzufragen, ob die Konvertierung durchgeführt werden konnte, oder irgendwie auf die EN/ENO Ein-/Ausgänge in ST zuzugreifen.
Handbuch für SPS Programmierung mit CoDeSys 2.3, Kapitel 10.8 Typkonvertierungen..., Seite 10-19
STRING_TO-Konvertierungen
Konvertierung vom Typ STRING zu einem anderen Typ: Der Operand vom Typ STRING muss einen gültigen Wert des Zieltyps haben, sonst ist das Ergebnis 0.
Auch in FUP haben die Typkonvertierungen keinen ENO-Ausgang. Da gibt es also nie was zum zugreifen.

Harald
 
Zurück
Oben