AWL-code

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo zusammen

ich schreibe doch mal mein code rein zur besseren verständlichkeit.
funktion: es soll 20 mal in dieser schleife bleiben solange kein fehler anliegt. falls ein fehler anliegt würde er dann nach B0 springen (noch nicht geschrieben)
wenn ich dieses programm auf meine simatic c7 steuerung lade gibt es immer ein SF fehler. wo liegt der fehler?



U "Start"
FR Z 3
A0: L B#16#0
T "Eingang".InputA0
T "Eingang".InputA1
T "Eingang".InputA2
T "Eingang".InputA3
T "Eingang".InputA4


U "WEITER"
S A 0.0
S A 0.1
S A 0.2
S A 0.3
S A 0.3
S A 0.4

U A 0.0
U A 0.1
U A 0.2
U A 0.3
U A 0.4
SPBN B0

L S5T#5S
SE T 3
U T 3
ZV Z 1
U "WEITER"
R A 0.0
R A 0.1
R A 0.2
R A 0.3
R A 0.4
L S5T#5S
SE T 3
U T 3



ZV Z 1
L 20
L Z 1
>I
SPB A0
 
Der Zähler wird hochgezählt, wenn das VKE von 0 auf 1 wechselt. Dies scheint so auf die Schnelle im Programmausschnitt nicht der Fall zu sein. D. h. kein Wechsel, kein Inkrementieren des Zähler, gleich Endlosschleife, gleich SF.
 
ich muss dieses programm über sprünge lösen. wie setzt man das VKE auf 1 das der zähler um 1 inkrementiert? wie müsste ich das an meinen programmcode anpassen?
 
OK. Zum Ersten sollte die Zählsequenz nur einmal vorkommen. Zum Zweiten verwenden Sie eine Zeit von 5 Sekunden * 20 Durchläufe = 100 Sekunden (etwas viel für einen SPS-Zyklus). Was soll das bewirken bzw. was möchten Sie eigentlich machen? Warum paßt das Beispiel aus dem anderen Thread für Sie nicht?
 
hey leute

ich brauche nägel mit köpfen und nicht solche theorie. solche sätze kann ich auche selber nachschlagen und mir dazu etwas reimen, aber ich bin hier, um von euch hilfe zu erhalten, darum wäre ich froh wenn mir jemand etwas handfestes bieten könnte!! sorry das musste jetzt einmal gesagt werden.

wo sind hier die fachmänner? ich wäre äusserst dankbar wenn mir jemand bei meinem programmcode helfen könnte.

wie muss ich den code abändern das mein zähler auf 20 zählt und danach diese schleife verlässt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hey leute

ich brauche nägel mit köpfen und nicht solche theorie. solche sätze kann ich auche selber nachschlagen und mir dazu etwas reimen, aber ich bin hier, um von euch hilfe zu erhalten, darum wäre ich froh wenn mir jemand etwas handfestes bieten könnte!! sorry das musste jetzt einmal gesagt werden.

wo sind hier die fachmänner? ich wäre äusserst dankbar wenn mir jemand bei meinem programmcode helfen könnte.

wie muss ich den code abändern das mein zähler auf 20 zählt und danach diese schleife verlässt?
 
warum taucht se t3 und zv z1 je 2 mal auf?
was soll die bedingung für den ablauf der zeit sein?
 
rüdiger schrieb:
ich brauche nägel mit köpfen und nicht solche theorie. solche sätze kann ich auche selber nachschlagen und mir dazu etwas reimen, aber ich bin hier, um von euch hilfe zu erhalten, darum wäre ich froh wenn mir jemand etwas handfestes bieten könnte!! sorry das musste jetzt einmal gesagt werden.
wie muss ich den code abändern das mein zähler auf 20 zählt und danach diese schleife verlässt?
Genau deshalb habe ich gefragt, was Sie genau machen wollen. Und nur mit einer einigermaßen exakten Beschreibung kann auch der passende Code eingestellt werden. Zudem gehen Sie nicht auf die Fragen ein. Warum passt der Code aus dem anderen Thread auf Ihre ursprüngliche Frage nicht? Dort ist doch eine Lösung enthalten. Und dies hat nichts mit zusammenreimen zu tun.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
okay zur verständlichkeit. ich muss 5 Leds 20 mal ein und ausschalten. falls bei der ansteuerung eine LED nicht brennt soll gesprungen werden, darum die U-verknüpfungen. die timer habe gesetzt damit die LED eine gewisse zeit sichtbar sind
 
was mir noch aufgefallen ist.

wenn der zähler durch die zeit hochgezählt werden soll und vorrausgesetzt die zeit läuft immer wieder ab, so wird die schleife 20 mal 5 sekunden durchlaufen.

allein das führt schon zu einem fehler.
 
Anonymous schrieb:
falls bei der ansteuerung eine LED nicht brennt soll gesprungen werden
:?: :?: :?:
du setzt einen ausgang und fragst unmittelbar danach ab ob der da ist.
was soll das denn für einen sinn machen?.
wenn dann müsstest du diesen ausgang auf einen eingang zurückführen.

für deine funktion, meines erachtens der völlig falsche ansatz

Code:
FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1

BEGIN
NETWORK
TITLE =

      U(    ; 
      UN    M      1.1; 
      L     S5T#1S; 
      SE    T      1; 
      NOP   0; 
      NOP   0; 
      NOP   0; 
      U     T      1; 
      )     ; 
      L     S5T#1S; 
      SE    T      2; 
      NOP   0; 
      NOP   0; 
      NOP   0; 
      U     T      2; 
      =     M      1.1; 
NETWORK
TITLE =

      U     M      1.1; 
      ZR    Z      1; 
      BLD   101; 
      U     M      1.0; 
      L     C#20; 
      S     Z      1; 
      NOP   0; 
      NOP   0; 
      NOP   0; 
      NOP   0; 
NETWORK
TITLE =

      U     Z      1; 
      U     T      1; 
      =     A      0.0; 
      =     A      0.1; 
      =     A      0.2; 
      =     A      0.3; 
      =     A      0.4; 
END_FUNCTION
 
Zuviel Werbung?
-> Hier kostenlos registrieren
meine ausgänge sind mit einer schleife auf die eingänge geführt. das ziel meines testes ist es, einen print zu testen der 5 eingänge bzw. 5 ausgänge hat. im ersten testfall muss ich die ausgänge (LED's) auf High setzen und dann abfragen ob dieses signal am eingang angekommen ist.

darum frage ich immer gleich ab. wenn jetzt nun einer der ausgänge defekt ist, merke ich dies ja, denn es kommt kein signal zum eingang, da er geschlauft ist. in diesem fall müsst ich dann den fehler au dem simatic display sichtbar machen.

der test beinhaltet das ich die leds 20 mal ein und ausschalte und nach jedem ein-oder ausschalten abfrage ob der momentane zustand(high oder low) stimmt.
 
gut. dann kannst du meinen code schon mal zum blinken und zählen nehmen.

die abfrage ob der a ok ist dann so

Code:
u a0.0
un e0.0
= fehler_led_1
 
der erste teil ist in AWL-Quelle wie rufe ich diesen programmteil auf wenn ich mit bausteinen programmiere => wie rufe ich das z.B. im OB1 auf?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Unter Quellen kannst du eine AWL-Quelle einfügen. In diese kopierst du den Code. Dann übersetzt du diesen und erzeugst in diesem Fall den FC1. Der Aufruf wird dann mit call, wie gewohnt ausgeführt
 
okay vielen dank an volker und plc_tippser den code konnte ich erfolgreich kompilieren und testen.

@volker wie meinst du das mit deinem zusätzlichen fehlererkennungszeilen, wo soll ich denn einfügen? ich habe als fehler ausgabe ein display der Simatic C7, keine led. wie könnte man das sonst noch lösen.

bisher habe ich dem ausgabefeld attribute zugewiesen:

z.B.
L B#16#0 // 0 steht für weiss
T "Eingang".InputA0 // transferiert den wert zum feld

L B#16#1 // 1 steht für schwarz
T "Eingang".InputA1 // transferiert den wert zum feld
 
es gibt mehrere möglichkeiten das anzuzeigen. mit attributen kann man das machen. oder eine textliste.

z.b.
code für netzwerk 4
Code:
L 0 //vorbelegen mit nicht aaktiv

U A 0.0
U E 0.0
SPB m001
L 1 //fehler
m001: nop 0

U A 0.0
UN E 0.0
SPB m002
L 2 //ok
m002: nop 0

T DB10.DBB1

im hmi.

lege eine var vom typ byte an.
lege ein textausgabefeld an. darstellung als textsymbol.
in der textliste:
wert 0 Keine messung
wert 1 Fehler
wert 2 OK

am hmi sieht das dann ungefähr so aus.

Laser 1: {var}
abhängig vom wert (0,1,2) der var wird einer der 3 texte angezeigt.

----------------------------------------------------------------
du könntest das aber auch als fehlermeldung ausgeben.
definiere dazu einen breichszeiger störmeldungen. (z.b. M 10 länge 1 wort.)
der code um die fehlermeldung 1 zu bringen sähe so aus.

Code:
U A 0.0
UN E 0.0
= M 11.0
 
Zurück
Oben