Hilfe zu SCL

JensWi.

Level-1
Beiträge
32
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Leute,

kann mir einer von euch helfen wie ich die unten sethenden Zeilen in SCL Programmiere . Strehe grade ein wenig auf dem Schlauch

LAR1 P##IpFirstAdress_1
TAR2
+AR1
L W [AR1,P#0.0]
T #DB_nr1
L W [AR1,P#4.0]
T #pDBB0_DB

MFG JEns
 
Ich möchte Daten aus einem DB bereich in eine bestimmten anderen bereich kopieren

Hallo Jens,
innerhalb des I-DB's von deinem FB oder eines anderen DB's ?

Innerhalb wäre :
Code:
InternVar_2 := Intern_Var_1 ;
Das kann man dann auch mit ARRAY's und Schleifen würzen. Das geht dann ganz leicht.

Extern wäre (z.B.) :
Code:
DB10.DBW[10] := DB20.DBW[100] ;  // hier müssen beide Variablen vom Typ WORD sein

Ich denke, das beantwortet deine Frage noch nicht vollständig. Mehr lies sich (für mich) mit deinen Info's aber nicht anstellen.

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... jetzt bin ich immer noch nicht schlauer.
Schön wäre gewesen (z.B.) von einem DBx die Bytes 0..99 nach dem DBy auf Byte 100 ff. oder nach DBz Byte 150 ff. oder so.

Gruß
LL
 
Moin Leute,

kann mir einer von euch helfen wie ich die unten sethenden Zeilen in SCL Programmiere . Strehe grade ein wenig auf dem Schlauch

LAR1 P##IpFirstAdress_1
TAR2
+AR1
L W [AR1,P#0.0]
T #DB_nr1
L W [AR1,P#4.0]
T #pDBB0_DB

MFG JEns

Ich würde sagen, er bekommt einen Any (Kann ja auch ein Array, String o.ä. sein am Input) und zerlegt diesen in DB-Nummer und Pointer zum ersten Eintrag. In SCL brauchst du da gar nichts machen, du nimmst den Input direkt.

SCL:

Code:
FUNCTION FC110 : INT

VAR_INPUT
    TestArray: ARRAY[0..100] of INT;
END_VAR
VAR_TEMP
    // temporäre Variablen
    I: INT;
END_VAR
VAR_OUTPUT
    ERG: INT;    
END_VAR    

    // Anweisungsteil
    I := 10;
    ERG := TestARRAY[i];
    
    
    ;
    FC110 := 100;
END_FUNCTION
macht daraus in AWL:
Code:
      SET   
      SAVE  
      =     L      2.1
      L     10
      T     #I
      L     #I
      ITD   
      L     L#0
      +D    
      L     L#16
      *D    
      L     P##TestArray
      LAR1  
      TAK   
      T     LD     4
      TAK   
      L     W [AR1,P#0.0]
      T     LW     8
      AUF   DB [LW 8]
      L     D [AR1,P#2.0]
      L     LD     4
      +D    
      LAR1  
      L     W [AR1,P#0.0]
      T     #ERG
      L     100
      T     #RET_VAL
      SAVE  
      BE
Was du brauchst ist wohl eher BlockMove, also SFC20, falls es mehr als 10 DW sind, ansonsten einfach:

MyOUTArray[1] := MyInArray[1];
MyOUTArray[2] := MyInArray[2];

usw.

Such mal im Forum nach SFC20 oder BLKMOVE.

PS. Prima lassen sich in SCL Stirngs kopieren:

MyOutString := MyInString;
 
..., dann trifft ja Ralle's Vermutung zu ...
Hier wäre dann mein Ansatz :
Quelle und Ziel als ANY-Pointer angeben. In der FC (oder FB) denselben zerlegen und dann die Bereiche per Schleife (wie schon beschrieben) bearbeiten.
Oder, wie von Ralle schon genannt, der BlockMove - der kann das schon von selbst ...

Gruß
LL
 
Zurück
Oben