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

Ergebnis 1 bis 6 von 6

Thema: Grundrechenarten lassen sich nicht übersetzen

  1. #1
    Registriert seit
    27.04.2016
    Beiträge
    12
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe ein laufendes Programm von einer ILC150ETH auf eine ILC350PN übertragen.
    Dabei kam beim Übersetzen der Fehler, dass sich Grundrechenarten mit WORD-Variablen nicht übersetzen lassen. ("prozessorspezifischer Codegenerator")
    Also z.B. WORD#A * WORD#B
    Ich habe alles auf INT umstellen müssen und dann lief es. Gibt es eine andere Möglichkeit?
    Zitieren Zitieren Grundrechenarten lassen sich nicht übersetzen  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.788
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Nein - es gibt keine andere Möglichkeit.
    BYTE, WORD und DWORD sind nur "Bit-Speicher" - die lassen sich vergleichen, verknüpfen (AND , OR , XOR) oder zuweisen. Rechnen kann man damit nicht.

    Gruß
    Larry

  3. #3
    SLe ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.04.2016
    Beiträge
    12
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Warum geht es dann mit einer ILC 150Eth? Und warum gibt die Hilfe von PCWorx die Möglichkeit an?
    Ist das nicht in der IEC61131 verankert?

  4. #4
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.367
    Danke
    457
    Erhielt 696 Danke für 521 Beiträge

    Standard

    Zitat Zitat von SLe Beitrag anzeigen
    Warum geht es dann mit einer ILC 150Eth? Und warum gibt die Hilfe von PCWorx die Möglichkeit an?
    Ist das nicht in der IEC61131 verankert?
    Eigentlich ist es schon in der IEC verankert, anscheinend hält sich auch Codesys nicht immer daran
    PN/DP hatte das in einem ähnlichen Thema schon mal schön erklärt.

    Zitat Zitat von PN/DP Beitrag anzeigen
    Das Problem ist: beim Speichern des DWORD in einen REAL darf der Wert des DWORD nicht konvertiert/verändert werden, weil es schon einen REAL enthält, Codesys tut es aber, weil es DWORD = UDINT gleichsetzt, was nach meiner Meinung ein Designfehler ist, der aber nun anscheinend nicht mehr beseitigt werden kann (oder nicht soll), weil es bereits tausende Programme gibt wo dieses dokumentierte Verhalten dummerweise genutzt wird.


    Empfehlung nach IEC 61131-3
    UDINT ist ein Datentyp = unsigned double INT = Ganzzahl 0 bis 4294967295
    Nach IEC 61131-3 gehört UDINT zur Gruppe der generischen Datentypen ANY_NUM, Untergruppe ANY_INT. ANY_INT kann man in Ganzzahl-Rechenoperationen direkt verwenden.
    DWORD ist eine Bitfolge (Bitstring) von 32 Bit, die 4 Byte Speichergröße belegt. Egal was für ein Datentyp in dem DWORD abgelegt ist, es wird nicht interpretiert. Codesys behandelt aber: DWORD = UDINT
    Nach IEC 61131-3 gehört DWORD zur Gruppe der generischen Datentypen ANY_BIT. Mit ANY_BIT kann man nicht rechnen, nur vergleichen, ob der Wert 0 oder <> 0 ist. Wenn man mit ANY_BIT rechnen will, dann müsste man immer erst den ANY_BIT in einen ANY_NUM typecasten (übernehmen, z.B. WORD_TO_INT), was lästig ist und zum nachdenken und verstehen zwingt. Und vielleicht deshalb von Codesys für die Bequemlichkeit der Programmierer ANY_BIT = unsigned ANY_INT als gleichwertig festgelegt wurde?
    Harald
    #WORD_A * WORD_B sollte also korrekterweise nicht zugelassen sein.
    Welche Steuerung sich dran hält und welche nicht, ist eine eigene Sache.
    Geändert von RONIN (26.06.2016 um 21:45 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  5. #5
    Registriert seit
    08.09.2010
    Ort
    Blomberg
    Beiträge
    423
    Danke
    1
    Erhielt 66 Danke für 63 Beiträge

    Standard

    Hallo,

    Das liegt an den unterschiedlichen Targets. Die ILC 1xx Arbeitet mit eCLR und ILC 3xx mit ProConOs.
    Leider unterstütz das ProConOs System kein bitweises Zählen, hier muss leider mit Beispielsweise int gerechnet werden.
    Gruß Uwe
    PHOENIX CONTACT Deutschland GmbH
    Hotline: 05281-946-2888
    automation-service@phoenixcontact.com
    www.phoenixcontact.de

  6. #6
    SLe ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.04.2016
    Beiträge
    12
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke an alle für die hilfreichen Antworten!

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 08.06.2016, 10:09
  2. Antworten: 4
    Letzter Beitrag: 27.05.2016, 06:39
  3. Antworten: 8
    Letzter Beitrag: 29.01.2015, 13:07
  4. Antworten: 15
    Letzter Beitrag: 26.11.2014, 00:15
  5. Antworten: 2
    Letzter Beitrag: 25.07.2010, 18:15

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •