FbDaliMacro Commands

jmal

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin
verwende den o.g Baustein um eine Abfrage zu machen.
Abfrage läuft und auch die Seriennummern stimmen.
An der Wago habe ich vier Klemmen, wobei bei drei Klemmen ein EVG anhängt.
Bei Klemme 2 und 3 werden die Nummern richtig ausgegeben.
Nur bei der ersten Klemme werden die Snummern auf [9,0] und [9.1] ausgegeben, also doppelt.
Zur Erklärung beigefügte Bilder und Code.
Vielleicht sieht jemand auf den ersten Blick, warum er bei der ersten Klemme diese doppelte Ausgabe macht.
Vielen Dank für Eure Hilfe und schon einmal ein schönes Wochenende..

____
VAR
oFbDaliMacroCommands : FbDaliMacroCommands;

END_VAR

----



oFbDaliMacroCommands( (*Funktionsbaustein für Makro*)



Serien_Nummer[Klemme]:='';
FOR Schleife := (*Auslesen und zusammensetzen
Zwischenspeicher :=
END_FOR;


IF Nummer[] <>'0000000000000000' THEN (*Abfrage
Ausgabe[ ] :=Nummer[];

ELSE
Ausgabe[ ] := ''; (
END_IF;



stop := TRUE;
END_IF;



END_IF;
 

Anhänge

  • 1.PNG
    1.PNG
    8,9 KB · Aufrufe: 6
  • bus2.PNG
    bus2.PNG
    5,1 KB · Aufrufe: 6
  • bus1.PNG
    bus1.PNG
    11,1 KB · Aufrufe: 5
Zuletzt bearbeitet:
IF NOT Durchlaufkontrolle THEN (* nur einmal durchlaufen *)
Serien_Nummer[welcheKlemme,Addressenzaehler]:='';
FOR Schleife := 2 TO 9 BY 1 DO (*Auslesen und zusammensetzen der 8 Bytes zur Seriennummer*)(*abValues[0] = Makronummer // [1] = anzahl gelesener Bytes [2] = Seriennummer Byte 8 .... [9] = Seriennummer Byte 1*)
Zwischenspeicher := BYTE_TO_STRH(RueckmeldungvomMakro[Schleife]); (*Speichern der Rückmeldung des Makros*)(*umwandeln des Array Rückmeldung - Byte- in String*)
Serien_Nummer[Addressenzaehler,welcheKlemme] := CONCAT (Serien_Nummer[Addressenzaehler,welcheKlemme] , Zwischenspeicher); (*zusammensetzen der einzelnen Bytes der Rückmeldung zur kompletten Seriennummer*)
END_FOR;
...
Durchlaufkontrolle := TRUE; (*wenn einmal schon durch *)
END_IF;
END_IF;
ELSE (*starten des nächsten durchlaufes*)
Durchlaufkontrolle := FALSE; (* freigabe für nächsten Durchlauf *)
END_IF;
paperclip.png

Sollte zwar nicht der Fehler sein, aber du hast da zumindest noch einen Dreher drin. (Rot/Grün)
Dass das Programm nicht in die Bereichsgrenzen des Arrays geht sollte an der Durchlaufkontrolle liegen. Die verhindert sowohl, dass nicht alle Einträge die Seriennummer enthalten, als auch dass nur beim jeweils ersten Durchlauf die Seriennummern mit '' überschrieben werden. Wahrscheinlich steht die Seriennummer noch von nem früheren Versuch darin und wird nie überschrieben.
Hab jetzt aber nur grob drübergeguckt. Kann für nichts garantieren.


Gruß,
Eri
 
Zurück
Oben