Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

HTTP POST Telegramm versenden

M.Radlach
2009-10-19
2009-10-22
  • M.Radlach - 2009-10-19

    Hallo,

    ich arbeite mit einer Wago 750-841 und übertrage per To-Pass (WagoLibToPass_01.lib) Daten in eine Datenbank bzw. an ein Script. Der Puffer des Sendebausteins ist allerdings nur 24 Übertragungen groß. Das ist uns hier zu wenig. Falls die Einheit mal vom Netz getrennt wird, muss sie die Datensätze nachliefern können.

    Daher dachte ich daran, bei fehlgeschlagenen Übertragungen meine Datensätze in eine .csv Datei zu schreiben und das ganze dann - wenn die Verbindung wieder hergestellt ist - per HTTP POST Telegramm an das Script zu senden.

    Das Telegramm hat dabei folgendes Muster:

          POST /wago/savedataSP.php HTTP1.1
          Host: 85.220.143.234
          User-Agent: WAGO 750-841
          Connection: Keep-Alive
          Content-TYPE: application/x-www-form-urlencoded
          Content-length: 239
          ID=My841;12345&PA=0060;home;99&TI=08/10/07,10:30:49
          &D1=1;0&D2=0;1&D3=1;0&D4=0;0&D5=1;1&D6=0;0&D7=1;0&D8=1;1
          &A1=3.14;.C;0&A2=4711;%;1&A3=0.0;Volt;0&A4=0;kWh;0&A5=0.0;Watt;1&A6=0;Umin;0&A7=0.0;Amper;0&A8=0;qm/h;1
          &MV=AFFE;AFFE;AFFE;AFFE;AFFE
    

    Leider bin ich in Sachen Netzwerkthematik nicht sonderlich bewandert, weswegen ich gern einmal erklärt hätte, wie ich ein solches Telegramm mit Bordmitteln verschickt bekomme.

    Und wäre es vielleicht sogar möglich, diese Übertragung verschlüsselt zu realisieren? Das wäre ja quasi das Sahnehäubchen obendrauf.

    Vielen Dank und freundliche Grüße

    Marcus

     
  • cmoeller - 2009-10-19

    Hallo Marcus,

    die Größe des Buffers kannst du durch überschatten der globalen Konstanten "gc_uiTOPASS_BUFFERSIZE" mit einer gleichnamigen globale Konstante in deinem Projekt verändern.

    VAR_GLOBAL CONSTANT   
       gc_bTOPASS_ModbusDataCount : BYTE := 0;    (* Wenn  keine Modbusdaten benötigt werden*)
       gc_uiTOPASS_BUFFERSIZE : UINT := 100;      (* Wenn noch genug Speicher verfügbar ist auch mehr *)
    END_VAR
    

    Gruss cmoeller

     
  • M.Radlach - 2009-10-19

    Ah danke, dass man den Wert so einfach ändern kann, hätte ich nicht gedacht.

    Die Aufgabenstellung mit dem Telegramm bleibt aber dennoch bestehen, da teilweise sehr viel mehr als 8 Werte gleichzeitig übertragen werden sollen und dabei ein nacheinander aufrufen des To-Pass-Bausteins eher kontraproduktiv ist.

     
  • cmoeller - 2009-10-20

    Hallo Marcus,

    wenn mehr als acht Werte zu übertragen sind kannst du auf die Modbusdaten ausweichen.

    Der Name ist historisch bedingt, steht aber für ein schlichtes ARRAY OF WORD, dessen Größe du über 'gc_bTOPASS_ModbusDataCount ' festlegen kannst.

    Gruss cmoeller

     
  • Matze001 - 2009-10-20

    Oder, etwas bescheuert, mehrere Bausteine "parallel" die Daten senden lassen, wie gut das klappt kann ich aber nicht sagen.

    MfG

    Marcel

     
  • M.Radlach - 2009-10-20

    Matze001 hat geschrieben:
    Oder, etwas bescheuert, mehrere Bausteine "parallel" die Daten senden lassen, wie gut das klappt kann ich aber nicht sagen.
    MfG
    Marcel

    So ähnlich wird es im Moment gemacht. Zweimaliger Aufruf mit 10 Sekunden Abstand. Das Skript muss sich dann die Daten entsprechend zusammenbasteln und in die Datenbank schreiben.

    Bei zwei Aufrufen mag das noch gehen, wenn es mehr wird, wird das aber unnötig kompliziert.

     
  • cmoeller - 2009-10-20

    Hallo

    aus meiner Sicht spricht nicht dagegen mit mehreren Instanzen des ToPass-FB zu arbeiten. Es kommt halt darauf an in welcher Tabelle die Daten letztendlich landen sollen.

    A1..A8 --> Tabelle "messwerte"

    D1..D8 --> Tabelle "messwerte"

    ModbusData --> Tabelle "messwertemodbus"

    Gruss cmoeller

     
  • Matze001 - 2009-10-21

    ja z.B.

    man könnte aber auch alle in eine schreiben und durch den parameter "ToPassID" die Datensätze unterscheiden...

    MfG

    Marcel

     
  • M.Radlach - 2009-10-22

    So, ich hab jetzt noch ein bisschen rumprobiert und bin zu der Erkenntnis gekommen, dass es mit TOPASS nicht geht. Ich bekomm den Buffer-Wert bei Weitem nicht hoch genug. Wir müssen im Ernstfall an die 4000 Übertragungen zwischenspeichern können. Daher auch die Idee mit dem .csv File.

    Nun also nochmal die Frage: Wie schicke ich ein HTTP POST Request ab? Den Inhalt bastel ich mir dann schon zusammen, es geht eher um den netzwerktechnischen Aspekt dabei.

     
  • Matze001 - 2009-10-22

    Hallo,

    dann bau dir deinen Buffer selbst mit nem array und mach ne Funktion das er die Arrayeinträge mit der ToPass wegjagt....

    MfG

    Marcel

     

Log in to post a comment.