# AWL Anfängerfrage



## Merten1982 (29 April 2012)

Leider bin ich SCL verwöhnt, und komme mit AWL nicht mehr so recht klar.
Warum geht das nicht:

VAR
        ActualEntry    : INT := 0;
        MaximumEntrie  : INT := 128;
        Buffer : ARRAY[0..128] OF STRUCT
                wt_nummer : INT := 0;

                TPwt_zur_wartung   : BOOL := 0; //vom TouchPanel gesetzt
            END_STRUCT;
END_VAR


      U     #Buffer[ActualEntry].TPwt_zur_wartung // das wird nicht kompiliert
      U     #Buffer[0].TPwt_zur_wartung // das wird kompiliert


----------



## Deltal (29 April 2012)

Das geht nicht, weil AWL kein SCL ist.. 

Das Problem ist die indirekte Adressierung, welche in AWL über Pointer realisiert werden muss. 
http://www.sps-forum.de/showthread.php/8877-Index-in-S7-AWL

http://www.sps-forum.de/showthread.php/8887-Pointer-Zeiger-FIFO-LIFO


----------



## Merten1982 (29 April 2012)

so, ich habe jetzt fast alles hinbekommen, aber folgendes fehlt noch:

Also im AR1 steht die Adresse, wodie aktuelle Zeit hin soll, aber wie ist die 

L     P##Buffer                   //Anfangsadresse des Buffers
LAR1  


L     #ActualEntry
L     20                          // größe eines Eintrages im Buffer
*D    
SLD   3                           //die ersten der Bit sind für die BitAdresse
+AR1  


CALL  "READ_CLK"
    RET_VAL:=#dummy_int
    CDT    :=   [AR1,P#0.0]


----------



## martin1988 (30 April 2012)

Du kannst an den Ausgang "CDT" nur eine Variable dran schreiben, keinen Pointer!

_Sprich du musst dir den Wert aus der Clock in ner Variable ablegen_

CALL "READ_CLK"
RET_VAL:=#dummy_int
CDT:=#Dummy_Zeit // Format DATE_AND_TIME

_und dann über:_

L DBD X // ersten 4 Byte von Date_and_Time-Format
T DBD[AR1,P#0.0]

L DBD X+4 // zweiten 4 Byte von Date_And_Time-Format
T DBD[AR1,P#4.0] // mit Offset von 4 Byte damits an der richtigen Stelle landet, kann sein das du hier eventuel auf P#3.7 gehen musst ... manchmal spackt das damit auch ein wenig ...

Dürfte funktionieren ... bin mir aber nicht 100%ig sicher ... hab mir auf die Art und Weise auf jeden fall auch schon viele Werte hin und her kopiert, ohne Probleme (jedoch nicht mit Date_and_Time als Format).


----------



## Schmidt-Dasing (21 Mai 2012)

Hallo.
Ich glaube, das ich hier nicht ganz richtig bin. Aber vielleicht kann mir hier geholfen werden.
Ich habe das Problem als Anfänger, das ich die Klammerregelungen nicht ganz verstehe.
Folgendes:  Eine Lampe soll leuchten, wenn immer eine ungerade Anzahl der Eingänge e1, e2 und e3 betätigt sind.
Als Schaltbild habe ich folgendes: u e1 un e2 un e3 o u e2 un e1 un e3 o e3 un e1 un e2 o e1 u e2 u e3 = a1

Nun sollen hier die Kontakt mit Klammern so abgeändert werden ,das am Ende statt 12 nur noch 10 Kontakte benötigt werden.
Das Schlaucht mich sehr. Distributives oder Morgansche oder was auch immer für Gesetze.

Danke für Euro Hilfe.

Schönen Abend

Rainer


----------



## 190B (21 Mai 2012)

Mein Lösungsvorschlag wäre folgender:


```
U(    
      X     E      0.0
      X     E      0.1
      X     E      0.2
      )     
      O     
      U     E      0.0
      U     E      0.1
      U     E      0.2
      =     A      0.0
```


----------



## SoftMachine (21 Mai 2012)

Schmidt-Dasing schrieb:


> Als Schaltbild habe ich folgendes: u e1 un e2 un e3 o u e2 un e1 un e3 o e3 un e1 un e2 o e1 u e2 u e3 = a1
> 
> Nun sollen hier die Kontakt mit Klammern so abgeändert werden ,das am Ende* statt 12 nur noch 10 Kontakte benötigt* werden.



@190B
der Rainer braucht doch eine Änderung seines Schaltbilds *mit 10 Kontakten *!


----------



## Ralle (21 Mai 2012)

Darf man denn vorher die Kontakte innerhalb der Oder-Verknüpfungen ein wenig vertauschen? (Was die Logik ja nicht verändert)
Dann würde ich das ein klein wenig umordnen und KOP/FUP-gerecht schreiben:


```
[COLOR=#ff0000]U     E      1.0[/COLOR]
      UN    E      2.0
      UN    E      3.0
      O     
     [COLOR=#0000ff] UN    E      1.0[/COLOR]
      U     E      2.0
      UN    E      3.0
      O     
      [COLOR=#0000ff]UN    E      1.0[/COLOR]
      UN    E      2.0
      U     E      3.0
      O     
      [COLOR=#ff0000]U     E      1.0[/COLOR]
      U     E      2.0
      U     E      3.0
      =     A      1.0
```

Das kann man dann um 2 Kontakte vereinfachen:


```
[COLOR=#ff0000]U     E      1.0[/COLOR]
      U(    
      UN    E      2.0
      UN    E      3.0
      O     
      U     E      2.0
      U     E      3.0
      )     
      O     
     [COLOR=#0000ff] UN    E      1.0[/COLOR]
      U(    
      U     E      2.0
      UN    E      3.0
      O     
      UN    E      2.0
      U     E      3.0
      )     
      =     A      1.0
```


----------



## SoftMachine (21 Mai 2012)

Hallo Ralle,
mit dem geforderten Ausklammern usw. habe ich folgende Lösung mit 10 Kontakten gefunden (gibt aber derer 3, je nachdem, was ausgeklammert wird):

```
o( 
u e1 
o(
u  e2 
u  e3
) 
o( 
un e2 
un e3
)
) 
o(
un e1 
o(
u  e2 
un e3
) 
o(
un e2 
u  e3
)
) 
= a1
```


----------



## Ralle (21 Mai 2012)

SoftMachine schrieb:


> Hallo Ralle,
> mit dem geforderten Ausklammern usw. habe ich folgende Lösung mit 10 Kontakten gefunden (gibt aber derer 3, je nachdem, was ausgeklammert wird):
> 
> ```
> ...



Ja, es gibt mehrere Möglichkeiten!


----------



## SoftMachine (21 Mai 2012)

danke, so isses


----------



## Schmidt-Dasing (22 Mai 2012)

Hallo an alle, die mir eine Lösung mitgeteilt haben.

erst mal vielen Dank. Ich werde jetzt erst mal darüber brüten:idea: und mir gedannken machen, wie das mit der Klammerei genau funktioniert.
Das ist das große Handycap.

Aber wie gesagt, erstmal danke.

Gruß

Rainer


----------



## Ralle (22 Mai 2012)

Schmidt-Dasing schrieb:


> Hallo an alle, die mir eine Lösung mitgeteilt haben.
> 
> erst mal vielen Dank. Ich werde jetzt erst mal darüber brüten:idea: und mir gedannken machen, wie das mit der Klammerei genau funktioniert.
> Das ist das große Handycap.
> ...



Sieh dir, den Code, den ich dir für zwei Netzwerke gepostet habe, mal in KOP oder FUP an. Da sieh man sehr schön, was man mit den Klammern erreicht. Im Grunde ist es ähnlich, wie beim Ausklammern aus einer mathematischen Formel.


----------

