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

Results 1 to 9 of 9

Thread: Typkonvertierung, EN/ENO in Codesys verwenden

  1. #1
    Join Date
    26.09.2018
    Posts
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Default


    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
    Reply With Quote Reply With Quote Typkonvertierung, EN/ENO in Codesys verwenden  

  2. #2
    Join Date
    25.06.2017
    Location
    Oerlinghausen
    Posts
    1,490
    Danke
    133
    Erhielt 273 Danke für 220 Beiträge

    Default

    Quote Originally Posted by StanS View Post
    Jemand ne Idee?
    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
    Du sprichst nur von TypKonvertierungen. BCD Code gehört wohl nicht dazu?

  3. #3
    StanS is offline Neuer Benutzer
    Themenstarter
    Join Date
    26.09.2018
    Posts
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Default

    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

  4. #4
    Join Date
    25.06.2017
    Location
    Oerlinghausen
    Posts
    1,490
    Danke
    133
    Erhielt 273 Danke für 220 Beiträge

    Default

    Quote Originally Posted by StanS View Post
    Ansonsten habe ich jetzt, wie du schon geschrieben hast, herausgefunden, dass wenn eine Konvertierung fehlerhaft war, eine 0 drin steht.
    . . .
    Werde demnach versuchen nach 0 abzufragen.
    Die 0 ist damit aber doppeldeutig - sie könnte auch Ergebnis einer zulässigen Umwandlung sein!?

  5. #5
    StanS is offline Neuer Benutzer
    Themenstarter
    Join Date
    26.09.2018
    Posts
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Default

    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

  6. #6
    Join Date
    25.06.2017
    Location
    Oerlinghausen
    Posts
    1,490
    Danke
    133
    Erhielt 273 Danke für 220 Beiträge

    Default

    Quote Originally Posted by StanS View Post
    Leider gibt es ja nicht sowas wie ne Abfrage, ob die Umwandlung erfolgreich war.
    In #1 hast Du aber doch ...
    Quote Originally Posted by StanS View Post
    Wenn ich es richtig verstehe, wird in SCL bei der Typkonvertierung ENO auf TRUE gesetzt, wenn sie erfolgreich war.
    … geschrieben!?

  7. #7
    StanS is offline Neuer Benutzer
    Themenstarter
    Join Date
    26.09.2018
    Posts
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Default

    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

  8. #8
    Join Date
    29.03.2004
    Posts
    6,574
    Danke
    161
    Erhielt 1,997 Danke für 1,419 Beiträge

    Default

    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.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  9. #9
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    13,604
    Danke
    1,094
    Erhielt 4,022 Danke für 3,250 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by StanS View Post
    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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Similar Threads

  1. Raspberry PI Systemzeit in Codesys verwenden
    By Eiken85 in forum CODESYS und IEC61131
    Replies: 5
    Last Post: 24.01.2019, 10:42
  2. Wago Bibliotheken in Codesys V3 verwenden
    By p-wedel in forum CODESYS und IEC61131
    Replies: 2
    Last Post: 05.03.2018, 19:29
  3. Typkonvertierung von DINT zu LREAL (TwinCAT/Beckhoff)
    By tammana in forum CODESYS und IEC61131
    Replies: 5
    Last Post: 04.11.2014, 12:16
  4. Codesys Wago-SPS Funktionsblock in ST verwenden
    By guwen in forum CODESYS und IEC61131
    Replies: 6
    Last Post: 08.06.2009, 13:39
  5. Typkonvertierung einfacher?!
    By Pimsti in forum Simatic
    Replies: 2
    Last Post: 14.06.2006, 08:40

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
  •