SCL - Problem mit ind. Adressierung

webholle

Level-1
Beiträge
53
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

irgendwie will mir das so nicht richtig gelingen........

Ich möchte einfach nur aus einem DB4002 in dem von DW2-92 diverse INT-Werte liegen den höchsten Wert ermitteln
und im DW0 ablegen. Das kann doch nicht so schwer sein :-(

Was mache ich falsch ? Darf ich die DB-Nummer nicht direkt angeben ?


Code:
FUNCTION FC10 : VOID

VAR_TEMP
   i          : INT;
END_VAR


BEGIN 

DB4002.DW[0]:=0;

     FOR i:= 2 TO 92 BY 2 DO
        IF DB4002.DW[i] > DB4002.DW[0] THEN DB4002.DW[0]:= DB4002.DW[i] ; END_IF;
     END_FOR;
 
END_FUNCTION




MfG,

Holger
 
So geht es:

Code:
FUNCTION FC10 : VOID


VAR_TEMP
   i          : INT;
END_VAR




BEGIN 


DB4002.DW[0]:=0;


     FOR i:= 2 TO 92 BY 2 DO
        IF (WORD_TO_INT(DB4002.DW[i]) > WORD_TO_INT(DB4002.DW[0])) THEN DB4002.DW[0]:= DB4002.DW[i] ; END_IF;
     END_FOR;
 
END_FUNCTION
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da du bei absoluter Adressierung keinerlei anhaltspunkt hat um was für ein Format es sich handelt müsstest du entweder die DB Adresse einer Variablen die als INT deklariert ist zuweisen. Oder mit Word_to_int(DB4002.DW) in Integer wandeln.

Ausserdem würde ich der Lesbarkeit wegen IF/THEN/ELSE immer untereinanderschreiben. Sonst gibt das so unleserliche lange Zeilen.

mfg Rene
 
Super, hat geklappt.

Vielen Dank.


2 Fragen hätte ich aber nun dennoch.

1.: Warum wird beim "in die CPU laden" der Datenbaustein ebenfalls übertragen ?

2.: Ich würde gerne (ausgehend vom Maximalwert der in DW0 steht) immer auf die nächste 100er aufrunden. hmmm, hört sich ja komisch an :)

also, in Max steht 44 dann soll der Max-Wert 100 betragen.
128 -> 200.......

Ich benutze den Maxwert für den maximalen Wert einer Balkenanzeige in WinCC flex.

Müsste doch mit einer einfachen Rechnung möglich sein ohne IF THEN und so......
 
ich würde das mal so versuchen:

iGerundet := ((iMyInt / 100) * 100) + 100;

Nur so als Ansatz.

Die Division/Multiplikation schneidet die Einer- und Zehnerstellen ab bei Int, Hundert addiert rundet somit auf.
 
Zurück
Oben