Step 7 AWL ohne Syntaxfehler ohne Funktion

19Rico84

Level-2
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag zusammen,

ich habe das letze Ma großartig mit AWL in der Lehre 2001 gearbeitet - wir haben bei uns eine Anlage aus dem Jahre 2016 - der Hersteller hat einige / viele Passagen per AWL programmiert.

Auf den Screenshots verstehe ich nicht, weshalb das Statusbit aus dem FC 141 NW5 mittlere Bedingung:

Code:
U(
UN    "DB1 ASi-Bus E/A" .Asi_IN_30_2
U     "DB1 ASi-Bus E/A" .Asi_IN_30_1
U    "M124.3"
)

permanent "1" ist, obwohl "M124.3" nicht True ist.

Ein weiteres Phänomen ist, das die Aktualwerte (rechts im DB140) des links im Bild sichtbaren FC142

Code:
U(    
      L     "DB 1299 akt Prg DePal".Programmdaten.Produkttyp
      L     1
      ==I   
      )     

      SPBN  M100

      L     "DB 140 Pos Abschiebtisch".Ist_Pos_Abschiebetisch
      L     "DB 140 Pos Abschiebtisch".Weg_vor_nach_Ablegen_5L
      >=I   

M100: NOP   0

      L     "DB 140 Pos Abschiebtisch".Ist_Pos_Abschiebetisch
      L     "DB 140 Pos Abschiebtisch".Weg_vor_nach_Ablegen_1L
      >=I   


      =     "M 124.3"

weit über den geforderten Sets stehen und trotzdem als VKE keine "1" erscheint.

Der Baustein FC142 bzw. diese Operation im NW 8 zeigt beim Beobachten auch keine VKE's

Auch ist mit unbekannt, weshalb man den folgenden Code aus dem FC141 so schreiben kann / darf:
Code:
 U     "M 200.7"
 O     "M 122.3"
 R     "M 122.2"

Ist es an dieser Stelle egal, welches Logische Symbol hier in der ersten Anweisung steht?

Vielen Dank für eure Unterstützung.
 

Anhänge

  • UN_1.PNG
    UN_1.PNG
    102,1 KB · Aufrufe: 121
  • UN_2.PNG
    UN_2.PNG
    443,3 KB · Aufrufe: 116
Wie schon geschrieben, ist das VKE interessant.

Zur Info noch was zu deiner Frage?

1714736215438.png

1714736141893.png

Noch aus Interesse, hat das Programm der Hersteller so hinterlassen?
 
Was steht denn vor dem ersten "U("?
Bitte entschuldigt. Meine Finger waren zu schnell. Habe jetzt auch den Screenshot gesehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Code in NW 8 ist schon komisch, aber funktioniert vlt. sogar, je nachdem wo die beiden Wegpukte liegen. Möglicherweise ist das so gewollt, aber echt unschön ausgeführt.
in einem Fall wird eine Vergleichsoperation ausgeführt (die 2. ) im anderen Fall beide!
Was auf jeden Fall falsch und gefährlich ist, das DInt-Werte mit >=I verglichen werden, also 32 Bit-Werte mit einer 16-Bit Operation. Hätte eigentlich >=D dein sollen. Solange kleine Werte verglichen werden geht das, aber wenn die Werte aus dem Int-Bereich rauslaufen, kanns krachen.
 
Zuletzt bearbeitet:
Guten Tag zusammen,

ich war leider verhindert.

Ich habe noch einmal Screenshots eingestellt.

Bin ganz deiner Meinung @circlehook , leider ist es aber wie @ducati schreibt, nur mit Hilfe der Kommentare ersichtlich.

@Ralle dieser Vergleich ist es ja, welcher mich irritiert - scheinbar funktioniert dieser nicht, daher habe ich nun einen 3sec Timer hinzugefügt.

 

Anhänge

  • UN_3.PNG
    UN_3.PNG
    55,7 KB · Aufrufe: 54
  • UN_4.PNG
    UN_4.PNG
    25,8 KB · Aufrufe: 52
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist das Phänomen/Anlagenverhalten denn neu?
Wenn dein Vergleicher wie von dir oben beschrieben nicht funktioniert und nie "true" wird, hilft dir doch dein Timer auch nichts?

Dein Merker wird nur "true", wenn die letzte Bedingung erfüllt wird. (sogar unabhängig von dem Code oberhalb)
1715161138697.png
 
Das Verhalten soll wohl schon länger ( oder evtl. schon immer ) so sein.

Da aber - wie auf dem Online-Screenshot "UN_2" zu sehen, das VKE scheinbar beim Vergleich nie "TRUE" wird (zumindest wird der Merker scheinbar nie TRUE) - weißt du dazu mehr @Ralle bzw. wie hättest du den Vergleicher geschrieben?

Seltsam ist auch, das ich den Baustein mit dem Vergleicher nicht beobachten kann, obwohl dieser identisch mit dem Onlineprojekt ist.
 
Seltsam ist auch, das ich den Baustein mit dem Vergleicher nicht beobachten kann, obwohl dieser identisch mit dem Onlineprojekt ist.
Passiert wenn den Zeitstempel neu generiert wurde, warum auch immer.
Wenn die Code 100% identisch ist, kannst du den Baustein wieder laden damit den Zeitstempel passt und du es online beobachten kannst.

edit: Offline/Online Vergleich meldet vermutlich 'Zeitstempel unterschiedlich, Code identisch'.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Code sieht so aus, als ob zwisachen 2 Fällen unterschieden werden soll.
Der erste Teil des Vergleichers wird ausgeführt, wenn der Prosukttyp 1 ist.
Der zweite Teil wird ausgeführt wenn der Produkttyp nicht 1 ist.
D.h. einmal wird der Istweg >800, das andere mal >1000 vergleichen.
Wenn der Weg >1000 wird, sollte auch bisher schon der M124.3 True werden,
Wie groß wird denn der Istweg maximal?

Ich hätte das so geschrieben:

Code:
      U(   
      L     "DB 1299 akt Prg DePal".Programmdaten.Produkttyp
      L     1
      ==I   
      )     
      SPBN  M100

      U(
      L     "DB 140 Pos Abschiebtisch".Ist_Pos_Abschiebetisch
      L     "DB 140 Pos Abschiebtisch".Weg_vor_nach_Ablegen_5L
      >=I   
      )
      =     "M 124.3"
      SPA M00X
      
M100: NOP   0

      U(
      L     "DB 140 Pos Abschiebtisch".Ist_Pos_Abschiebetisch
      L     "DB 140 Pos Abschiebtisch".Weg_vor_nach_Ablegen_1L
      >=I   
      )
      =     "M 124.3"
      
M00X: NOP 0

Ich mach immer gern Klammern und schreibe lieber mal eine Zeile zu viel, damit der Code für nachfolgende Programmierer später auch ganz klar ist.
 
@Ralle der Weg war vorher auf dem Wert 300 und 1000 - die 1k stehen für 1l Flaschen, welche aber laut Bediener nie gefahren wurden.

Aber auch bei 300 wurde der Merker nie gesetzt.
 
Wo kommen jetzt die 300 her?
In den Screenshots aus dem ersten Post waren die Werte 800 & 1000 als Start- als auch als Aktualwert zu sehen.

Kannst du vielleicht nochmal einen Screenshot nur von dem Vergleicher im Vollbild machen, wenn du ihn online beobachtest?
 
Was auf jeden Fall falsch und gefährlich ist, das DInt-Werte mit >=I verglichen werden, also 32 Bit-Werte mit einer 16-Bit Operation. Hätte eigentlich >=D dein sollen. Solange kleine Werte verglichen werden geht das, aber wenn die Werte aus dem Int-Bereich rauslaufen, kanns krachen.
Hast Du darüber eigentlich schonmal nachgedacht ?
 

Anhänge

  • Pic_00.png
    Pic_00.png
    162 KB · Aufrufe: 32
Zurück
Oben