Logo Schaltzeit von HEX in Dezimal in Node Red umwandeln

emilio20

Level-1
Beiträge
835
Reaktionspunkte
20
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ich benötige mal eure Hilfe.

Ich versuche verzweifelt die Schaltzeit von einer Wochenschaltuhr einer Logo in Node Red richtig darzustellen. Z.b Soll 05:00 Uhr von der Logo in Node Red als 500 angezeigt werden.
Die Schaltzeit wird von der Logo in HEX bereitgestellt. In Node Red wird diese als dezimal Zahl angezeigt jedoch nicht richtig.
Beispiel: Logo Uhrzeit 05:00 Uhr in Node Red erhalte ich 1280.
Ich habe in einem anderen Forum einen Beitrag gefunden wo es um dasselbe Problem ging Link .
Hier wurde mit dieser Formel das Problem gelöst Formel . Dies habe ich in Node Red übernommen. Jedoch erhalte ich falsche Werte. Auf der Webseite funktioniert die Formel aber.

Kennt jemand eine Lösung wie ich die Schaltzeit der Logo in Node Red richtig angezeigt bekomme und wie ich eine Schaltzeit wieder im richtigen Format an die Logo übergeben kann?
 

Anhänge

  • Node Red Formel Uhrzeit.JPG
    Node Red Formel Uhrzeit.JPG
    22 KB · Aufrufe: 17
  • Node Red Formel Uhrzeit2.JPG
    Node Red Formel Uhrzeit2.JPG
    19,2 KB · Aufrufe: 18
  • Node Red Formel Uhrzeit3.JPG
    Node Red Formel Uhrzeit3.JPG
    57,2 KB · Aufrufe: 17
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Schaltzeit wird von der Logo in HEX bereitgestellt. In Node Red wird diese als dezimal Zahl angezeigt jedoch nicht richtig.
Beispiel: Logo Uhrzeit 05:00 Uhr in Node Red erhalte ich 1280.
1280 ist die dezimale Darstellung der hexadezimalen Zahl 500.
Anscheinend ist die Zahl in der LOGO doch nicht hexadezimal ("BCD") und die Umwandlung völlig überflüssig.
Es bleibt aber vermutlich/wahrscheinlich das Problem, dass die Uhrzeit mit ihren 60 s/min und 60 min/h keine Dezimalzahlen im üblichen Sinne sind.
Wie sieht die Zahl denn aus, wenn die Uhrzeit 4:59 übergeben wird? 459?
Was passiert, wenn Du 460 von NodeRed an die LOGO übergibst? Zeigt sie dies als 5:00 an?
 
Zuletzt bearbeitet:
Ich würde das in einen String konvertieren, andernfalls hast du bei einer Zeit von 00:03 Uhr den Wert 3, fänd ich etwas unschön.

Mit Umwandlung in Strings und wieder zurück wäre das aber z.B. so möglich:
Ergebnis = parseInt(X.toString(16), 10);
 
Die Zahl kommt von der Logo als Hex. Das selbe Problem gibt es auch über den Logo Web Editor LEW wie im Beitrag hier .

In Node Red verwende ich die Node node-red-contrib-s7 mit dieser lese ich DB1,WORD101 aus der Logo aus. Das Modul wandelt den HEX Wert in Dezimal um.
Wenn ich in der Logo 4:59 eingebe erhalte ich 1113. Das wurde genau wie in der Umrechnung 459 ergeben.

Es gibt mit dem S7 Modul keine Möglichkeit den HEX Wert direkt auszulesen. Der Dezimal wert müsste wieder in HEX umgewandelt werden damit ich die 459 erhalten. Hier ist genau das Problem
 

Anhänge

  • Node Red Formel Uhrzeit4.JPG
    Node Red Formel Uhrzeit4.JPG
    61,9 KB · Aufrufe: 10
  • Node Red Formel Uhrzeit5.JPG
    Node Red Formel Uhrzeit5.JPG
    17,9 KB · Aufrufe: 10
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde das in einen String konvertieren, andernfalls hast du bei einer Zeit von 00:03 Uhr den Wert 3, fänd ich etwas unschön.

Mit Umwandlung in Strings und wieder zurück wäre das aber z.B. so möglich:
Ergebnis = parseInt(X.toString(16), 10);
Hallo Thomas, super funktioniert. Das wäre das Lesen aus der Logo. Wie funktioniert jetzt die umwandlung beim schreiben in die Logo

Javascript:
msg.payload = parseInt((msg.payload).toString(16), 10);

return msg;


Gut wäre jetzt noch wenn ich die Stunden in eine Variable übergebe und die Minuten in eine weitere Variable schreiben. Dann könnte ich diese begrenzen
 

Anhänge

  • Node Red Formel Uhrzeit6.JPG
    Node Red Formel Uhrzeit6.JPG
    76,6 KB · Aufrufe: 9
Zuletzt bearbeitet:
Vielleicht hilft dir der Thread weiter.

 
Du musst nur bedenken, dass es schwer ist bei diesem einen Wert Fehleingaben abzufangen, 0 bis 59 sind gültig, 60 bis 99 nicht, ab 100 wieder usw.
Ja deswegen wäre es ja gut, wenn beim Lesen die Stunden und die Minuten in eine Variable geschrieben werden. Dann könnte ich für Stunden 0-23 begrenzen und für Minuten 0-60. Das Ganze dann wieder rückwärtig die Logo.

Wäre super wenn du mir da noch kurz hälfen könntest.
 
Ich würde mal sehen ob es bei Nodered ein fertiges Element für die Eingabe von Uhrzeiten gibt, in Javascript existieren auch einige "Timepicker", und daraufhin die Konvertierungsfunktion auslegen. Die Umrechnung ist nämlich schneller und einfacher erledigt, als so ein GUI-Element.

Zum Testen solcher Funktionen kannst du übrigens einfacher den Javascript Interpreter auf der Kommandozeile verwenden, als das immer in NodeRed auszuprobieren (imho). Also eine Textdatei wie test.js erstellen in der du deine Testfunktionen eingibst, und dann node test.js aufrufen. Mit console.log("Hallo"); kannst du dann Informationen ausgeben lassen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas,
ich habe ein Zeitschaltfunktion "ui_scheduler" gefunden die ich später veröffentliche. Jedoch benötige ich nochmal deine Hilfe. Ich lese aus der Logo für die Wochentage ein Byte aus das vom S7 Modul in eine INT umgewandelt wird. Diese zerlege ich in einen Array damit ich die einzelnen Bits erhalte
Das funktioniert auch soweit mit folgenden code


Javascript:
function Wochentag(X) {
    /* Wochentag von int in Array schreiben */
    var days = [];
    for (var i = 0; i < 7; i++)
      days[i] = (X >> i) & 1;
      return days
}

Mein Problem ist jetzt wie kann ich das ganze wieder zurückwandeln also den Array mit der richtigen reinefolge in einen int ?

Ich habe hierfür folgenden code

Javascript:
a = msg.payload
b = a.reduce((res, x) => res << 1 | x)
msg.payload = b;
return msg;

Ich erhalte aber z.B Wenn SO und MO 1 ist die Nummer 96 alstelle einer 3
 

Anhänge

  • Node Red Formel Uhrzeit10.JPG
    Node Red Formel Uhrzeit10.JPG
    96,9 KB · Aufrufe: 11
Zuletzt bearbeitet:
Kann man sicher kürzer schreiben, aber wenn man das Prinzip deiner anderen Funktion fortsetzt, dann sollte es so funktionieren:

Javascript:
function WochentagArrToInt(days) {
    /* Wochentag von Array nach int schreiben */
    var x = 0;
    for (var i = 0; i < 7; i++) {
      if (days[i]) {
        x = x | (1 << i);
      }
    }
    return x;
}
 
Hallo @Thomas_v2.1 vilen Dank (y)

hier mal die fertige Lösung mit der es möglich ist Werte einer Zeitschaltuhr von einer Logo in Node Red zu lesen, diese über ui-time-scheduler zu bearbeiten und wieder zurück in die Logo zu schreiben.

Node Red wird nur als Bedienoberfläche genutzt nicht als Steueurng



Im Anhang die Node Red JSON
 

Anhänge

  • Node Red Zeitschaltuhr Logo 4.JPG
    Node Red Zeitschaltuhr Logo 4.JPG
    27,5 KB · Aufrufe: 11
  • Node Red Zeitschaltuhr Logo 3.JPG
    Node Red Zeitschaltuhr Logo 3.JPG
    28,2 KB · Aufrufe: 12
  • Node Red Zeitschaltuhr Logo 2.JPG
    Node Red Zeitschaltuhr Logo 2.JPG
    43,7 KB · Aufrufe: 12
  • Node Red Zeitschaltuhr Logo 1.JPG
    Node Red Zeitschaltuhr Logo 1.JPG
    83,7 KB · Aufrufe: 16
  • LogotoNodeRedScheduler1.zip
    21,1 KB · Aufrufe: 3
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo hier eine verbesserte Version mit der es möglich ist alle 3 Nocken eines Logo Wochenschaltuhr über Node Red oder der Logo zu ändern.
In Node Red muss node-red-contrib und ui-time-scheduler installiert werden. In der Logo muss die Parameter-VM-Zuordung eingestellt werden
 

Anhänge

  • Flow.JPG
    Flow.JPG
    126,2 KB · Aufrufe: 24
  • Logo Adressen.JPG
    Logo Adressen.JPG
    47,1 KB · Aufrufe: 21
  • LogoDisplay.JPG
    LogoDisplay.JPG
    86,4 KB · Aufrufe: 15
  • NodeRedGui.JPG
    NodeRedGui.JPG
    81,4 KB · Aufrufe: 13
  • Wochenschaltuhr.JPG
    Wochenschaltuhr.JPG
    54,4 KB · Aufrufe: 16
  • LogotoNodeRedSchedulerV2.zip
    3,1 KB · Aufrufe: 14
Ja genau ich nutze Node Red als Parametrieroberfläche. Time-scheduler konnte einen Netzwerk Eingang schalten aber dann kann man auch die gesamte Logik in Nod Red Programmieren und die Logo nur als E/A Baugruppe nutzen.
Das wollte ich aber nicht, die Logik soll in der Logo bleiben somit funktioniert das Ganze auch ohne Nod Red.

Die Bedienung ist von beide Seiten möglich. Ändere ich einen Wert an der Logo ändert sich der Wert auch in Node Red und umgekert.
 
Zurück
Oben