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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Double Variable mit Wago 750-881 verarbeiten

  1. #1
    Registriert seit
    05.09.2013
    Beiträge
    28
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo liebes Forum,

    habe schon viel bei euch mitgelesen, was mir immer sehr geholfen hat.
    Nun habe ich jedoch ein Problem, für das ich bisher keine Lösung gefunden habe.

    Ich versuche mit einer Wago 750-881 über Modbus TCP einen Siemens Sentron PAC3200 Stromzähler / Multifunktionsmessgerät auszulesen.
    Hierbei werden die meisten Werte im Format "REAL" bereitgestellt, welche ich Problemlos empfangen und verarbeiten kann.

    Lediglich die Energiezähler (kWh) werden im Format "DOUBLE" übertragen, welches die Wago SPS, meines Wissens nach, nicht von Haus aus verarbeiten kann.
    Habe nun schon mit dem Oscat "REAL2" Typ experimentiert, jedoch bisher erfolglos
    Habt ihr noch eine Idee wie ich an diesen Wert rankomme ? Wenn ein paar Kommastellen flöten gehen, wäre das nicht schlimm

    Vielen Dank im Vorraus schonmal,
    Gruß eloee
    Zitieren Zitieren Gelöst: Double Variable mit Wago 750-881 verarbeiten  

  2. "Hallo D.K.,

    mittlerweile setze ich das ganze mit einem PFC200 in e!Cockpit um, da geht das deutlich einfacher da der PFC200 LREAL Variablen unterstützt.
    Habe mal mein altes 750-881 Projekt rausgesucht, die LREAL Problematik hatte ich damals nicht lösen können, die Kommunikation ansich war aber kein Problem.
    Habe die Bibliothek WagoLibModbus_IP_01.lib verwendet, genauer gesagt den Baustein ETHERNET_MODBUSMASTER_TCP.

    Anhang 32450

    sendbuffer und recievebuffer sind jeweils ARRAY[0..99] OF WORD.
    Mit diesem Aufruf habe ich im Empfangsbuffer dann an folgenden Stellen die Werte:
    - 0, 1 Spannung L1
    - 2, 3 Spannung L2
    - 4, 5 Spannung L3
    - 12, 13 Strom L1
    - 14, 15 Strom L2
    - 16, 17 Strom L3
    - 24, 25 Leistung L1
    - 26, 27 Leistung L2
    - 28, 29 Leistung L3
    - 64, 65 Leistung gesamt

    Der Zählerstand ist weiter hinten in den Registern, musst also noch einen zweiten Aufruf des Modbusmaster mit anderem Register bzw. wREAD_ADRESS von 801 starten, dann liegen die Werte im Empfangsbuffer an Stelle 0-3.

    Strom, Spannung, Leistung werden als DWORD übertragen, du musst die zwei Wörter also noch zu einem DWORD zusammenfügen, habe dazu mal einen Baustein geschrieben. Falls dus brauchst gib Bescheid, kann aber auch sein das es das bereits irgendwo in einer Lib gibt.

    Schöne Grüße
    Eloee"


  3. #2
    Registriert seit
    07.04.2015
    Beiträge
    7
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo eloee,

    Ich versuche ebenfalls eine Kommunikation zwischen Wago 750-881 und Sentron PAC3200 herzustellen.
    Allerdings gelingt mir das nicht.

    Beschreibe doch mal bitte wie du den Controller bzw. Multifunktionsmessgerät konfiguriert, bzw. programmiert hast.

    Vielen danke für deine Mühe.

    Gruß

  4. #3
    eloee ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    05.09.2013
    Beiträge
    28
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo D.K.,

    mittlerweile setze ich das ganze mit einem PFC200 in e!Cockpit um, da geht das deutlich einfacher da der PFC200 LREAL Variablen unterstützt.
    Habe mal mein altes 750-881 Projekt rausgesucht, die LREAL Problematik hatte ich damals nicht lösen können, die Kommunikation ansich war aber kein Problem.
    Habe die Bibliothek WagoLibModbus_IP_01.lib verwendet, genauer gesagt den Baustein ETHERNET_MODBUSMASTER_TCP.

    modbus1.jpg

    sendbuffer und recievebuffer sind jeweils ARRAY[0..99] OF WORD.
    Mit diesem Aufruf habe ich im Empfangsbuffer dann an folgenden Stellen die Werte:
    - 0, 1 Spannung L1
    - 2, 3 Spannung L2
    - 4, 5 Spannung L3
    - 12, 13 Strom L1
    - 14, 15 Strom L2
    - 16, 17 Strom L3
    - 24, 25 Leistung L1
    - 26, 27 Leistung L2
    - 28, 29 Leistung L3
    - 64, 65 Leistung gesamt

    Der Zählerstand ist weiter hinten in den Registern, musst also noch einen zweiten Aufruf des Modbusmaster mit anderem Register bzw. wREAD_ADRESS von 801 starten, dann liegen die Werte im Empfangsbuffer an Stelle 0-3.

    Strom, Spannung, Leistung werden als DWORD übertragen, du musst die zwei Wörter also noch zu einem DWORD zusammenfügen, habe dazu mal einen Baustein geschrieben. Falls dus brauchst gib Bescheid, kann aber auch sein das es das bereits irgendwo in einer Lib gibt.

    Schöne Grüße
    Eloee

  5. #4
    Registriert seit
    14.05.2014
    Beiträge
    5
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Moin Eloee,

    Strom, Spannung, Leistung werden als DWORD übertragen, du musst die zwei Wörter also noch zu einem DWORD zusammenfügen, habe dazu mal einen Baustein geschrieben. Falls dus brauchst gib Bescheid, kann aber auch sein das es das bereits irgendwo in einer Lib gibt.
    wäre super wenn du den Code hier zur Verfügung stellen könntest.

    Gruß
    PPX

  6. #5
    eloee ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    05.09.2013
    Beiträge
    28
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Klar hab den FC Code mal angehängt ... nicht besonders schön aber hat damals glaube funktioniert
    Code:
    FUNCTION_BLOCK Util_Convert_2_Word_to_div
    VAR_INPUT
        in_word0: WORD;    (*Word 1*)
        in_word1: WORD;    (*Word 2*)
    END_VAR
    VAR_OUTPUT
        out_real: REAL;
        out_int: INT;
    END_VAR
    VAR
        temp_dword: DWORD;
    END_VAR
    
    
    
    (*Umkopieren der Werte Word zu Doppelwort*)
    temp_dword.0 := in_word1.0;
    temp_dword.1 := in_word1.1;
    temp_dword.2 := in_word1.2;
    temp_dword.3 := in_word1.3;
    temp_dword.4 := in_word1.4;
    temp_dword.5 := in_word1.5;
    temp_dword.6 := in_word1.6;
    temp_dword.7 := in_word1.7;
    temp_dword.8 := in_word1.8;
    temp_dword.9 := in_word1.9;
    temp_dword.10 := in_word1.10;
    temp_dword.11 := in_word1.11;
    temp_dword.12 := in_word1.12;
    temp_dword.13 := in_word1.13;
    temp_dword.14 := in_word1.14;
    temp_dword.15 := in_word1.15;
    
    
    temp_dword.16 := in_word0.0;
    temp_dword.17 := in_word0.1;
    temp_dword.18 := in_word0.2;
    temp_dword.19 := in_word0.3;
    temp_dword.20 := in_word0.4;
    temp_dword.21 := in_word0.5;
    temp_dword.22 := in_word0.6;
    temp_dword.23 := in_word0.7;
    temp_dword.24 := in_word0.8;
    temp_dword.25 := in_word0.9;
    temp_dword.26 := in_word0.10;
    temp_dword.27 := in_word0.11;
    temp_dword.28 := in_word0.12;
    temp_dword.29 := in_word0.13;
    temp_dword.30 := in_word0.14;
    temp_dword.31 := in_word0.15;
    
    
    
    
    
    
    out_real := DW_TO_REAL(temp_dword);
    out_int := REAL_TO_INT(out_real);
    Schöne Grüße
    Eloee

  7. Folgender Benutzer sagt Danke zu eloee für den nützlichen Beitrag:

    paparadox (18.04.2016)

  8. #6
    Registriert seit
    24.02.2009
    Ort
    Garrel
    Beiträge
    36
    Danke
    2
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Moin,
    die Energiezähler (kWh) gibt es aber auch als 32 bit Werte ab Register 2801!

    Energiezähler als 32BIT Werte.JPG

    Schöne Grüße
    Michael

  9. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von eloee Beitrag anzeigen
    Code:
    (*Umkopieren der Werte Word zu Doppelwort*)
    temp_dword.0 := in_word1.0;
    temp_dword.1 := in_word1.1;
    temp_dword.2 := in_word1.2;
    temp_dword.3 := in_word1.3;
    temp_dword.4 := in_word1.4;
    temp_dword.5 := in_word1.5;
    temp_dword.6 := in_word1.6;
    temp_dword.7 := in_word1.7;
    temp_dword.8 := in_word1.8;
    temp_dword.9 := in_word1.9;
    temp_dword.10 := in_word1.10;
    temp_dword.11 := in_word1.11;
    temp_dword.12 := in_word1.12;
    temp_dword.13 := in_word1.13;
    temp_dword.14 := in_word1.14;
    temp_dword.15 := in_word1.15;
    
    
    temp_dword.16 := in_word0.0;
    temp_dword.17 := in_word0.1;
    temp_dword.18 := in_word0.2;
    temp_dword.19 := in_word0.3;
    temp_dword.20 := in_word0.4;
    temp_dword.21 := in_word0.5;
    temp_dword.22 := in_word0.6;
    temp_dword.23 := in_word0.7;
    temp_dword.24 := in_word0.8;
    temp_dword.25 := in_word0.9;
    temp_dword.26 := in_word0.10;
    temp_dword.27 := in_word0.11;
    temp_dword.28 := in_word0.12;
    temp_dword.29 := in_word0.13;
    temp_dword.30 := in_word0.14;
    temp_dword.31 := in_word0.15;
    Statt 32 Bits einzeln zu kopieren kann man 2 WORD auch gleich zu DWORD zusammenbasteln:
    Code:
    temp_dword := SHL(WORD_TO_DWORD(in_word0), 16) OR WORD_TO_DWORD(in_word1);
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #8
    Registriert seit
    07.04.2015
    Beiträge
    7
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo zusammen,

    Ich muss das Thema nochmal aufgreifen.

    Vielen Dank erstmal für die bisherige Hilfe. Die Kommunikation funktioniert und ist stabil.
    Allerdings habe ich Probleme bei der Auswertung der Werte/Worte.
    ich komme einfach nicht auf die Spannungswerte die mir im Display angezeigt werden.
    Code:
    word30:=SHL (BYTE_TO_WORD(pac3200.readdata[0].bWert2),8) + BYTE_TO_WORD(pac3200.readdata[0].bWert1);
    word31:=SHL (BYTE_TO_WORD(pac3200.readdata[0].bWert3),8) + BYTE_TO_WORD(pac3200.readdata[0].bWert4);
    word32:=SHL (word30,16) + word31;
    word33:=DWORD_TO_REAL(word32);
    word34:=REAL_TO_INT(word33);
    word35:=TRUNC(word33);
    die Umwandlung von Dword_to_real ergibt für mich kein sinnvollen Wert.

    Habe ich einen Denkfehler ? Oder seht ihr einen Fehler ?

    Vielen Dank im Vorraus.

    Gruss
    D.K

  11. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Warum vertauschst Du in einem Word die Bytes (H-Byte/L-Byte) und im anderen nicht?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  12. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    D.K (25.04.2016)

  13. #10
    Registriert seit
    07.04.2015
    Beiträge
    7
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Harald,

    Danke für die Antwort.
    Das war ein Fehler.

    Ich tausche die Bytes weil, wenn ich mich nicht täusche, Das PAC3200 das kleinerwertige Byte als erstes sendet. Also Intel Format bzw. Little Endian Format.
    Oder täusche ich mich da ?

    Ich glaube mein Problem ist die Umwandlung. Wenn ich mir mit Modbus Poll den Datenstrom als Float anzeigen lasse stimmt der Wert.

    Gruss
    D.K.

Ähnliche Themen

  1. Wago 750-881 mit Tochscreen an RS232
    Von egro im Forum WAGO
    Antworten: 0
    Letzter Beitrag: 25.08.2013, 14:16
  2. Datenaustausch Siemens S1200 mit Wago 750-881
    Von p2492 im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 05.05.2012, 22:34
  3. Sonos mit Wago 750-881 ansteuerbar?
    Von c.anhalter im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 11.02.2012, 22:17
  4. Retain und Persistent Variable auf wago 750-881
    Von Antoine Mayer im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 02.02.2012, 16:22
  5. Suche WAGO 750-841, 750-871 oder 750-881
    Von Controllfreak im Forum Suche - Biete
    Antworten: 1
    Letzter Beitrag: 05.10.2011, 11:19

Lesezeichen

Berechtigungen

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