Fehler im Programm

Tompson

Level-1
Beiträge
40
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe folgendes Problem:

Ich benutze eine CPU 318-2 zusammen mit Step 7 V5.4 SP3 und habe folgendes programmiert:

U A 2.2
SPBN a
L 1
SPA d
a: U A 2.3
SPBN b
L 2
SPA d
b: U A 2.4
SPBN c
L 3
SPA d
c: L 0
d: T "DB_OP25_Anzeige".Anforderung_Hochdruckpum

Funktionieren sollte es wie folgt:
Wenn z.B. A 2.2 = 1 ist soll im DB eine 1 stehen, wenn A 2.3 = 1 eine 2, bei A2.3 eine 3 und wenn keiner der Ausgänge 1 ist soll dort eine 0 stehen. Da die Ausgänge an anderer Stelle verrigelt sind, ist es nicht möglch, daß mehr als einer 1 ist.
Problem ist folgendes: z.B. A2.2 = 1, CPU lädt 1, springt zu d und transferiert die 1 in den DB. So weit so gut. Wird der Ausgang aber nun wieder 0, bleibt die 1 im DB stehen, weil er nicht nach a springt, sondern weiter die 1 lädt und nach d springt.

Ich verstehe das nicht. Wahrscheinlich habe ich aber gerade so ein Brett vor dem Kopf und die Sache ist so einfach. :confused:

Die Sprungmarken sind übrigens nur einmal verwandt!

Wäre super, wenn mir einer da eine Erklärung für geben könnte.
 
Zuletzt bearbeitet:
wenn du es so programmiert hast, wie in deinem Beispiel, dann sollte es auch so funktionieren, wie von dir beschrieben ...

Code:
U A 2.2
SPBN a
Das Beispiel bewirkt, dass gesprungen wird, wenn der Ausgang NICHT da ist. Ist der Aiusgang da, so wird der Sprúngbefehl nicht ausgeführt ... Aber das ist ja auch das, was du willst ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn die Ausgänge sowieso verriegelt sind warum machst du nicht einfach ne Abfrage ob alle Ausgänge = 0 und schiebst dann ne "0" in den DB, und dann halt einfach die Schiebe-Funktion um abhängig von dem Status der Ausgänge 1,2 oder 3 in den DB zu laden...
 
Wenn die Ausgänge sowieso verriegelt sind warum machst du nicht einfach ne Abfrage ob alle Ausgänge = 0 und schiebst dann ne "0" in den DB, und dann halt einfach die Schiebe-Funktion um abhängig von dem Status der Ausgänge 1,2 oder 3 in den DB zu laden...

haha, schöne idee, hatte ich auch ABER: die 3 stört! wäre das ne vier :rolleyes:

Code:
*
      L     AB     2
      SRW   2
      L     W#16#7
      UW    
      T     "DB_OP25_Anzeige".Anforderung_Hochdruckpum
 
So tät's ich machen:

Code:
L 1
U A 2.2
SPB d
L 2
U A 2.3
SPB d
L 3
U A 2.4
SPB d
L 0
d: T "DB_OP25_Anzeige".Anforderung_Hochdruckpum
 
Zuviel Werbung?
-> Hier kostenlos registrieren
haha, schöne idee, hatte ich auch ABER: die 3 stört! wäre das ne vier :rolleyes:

Code:
*
      L     AB     2
      SRW   2
      L     W#16#7
      UW    
      T     "DB_OP25_Anzeige".Anforderung_Hochdruckpum

vier:confused::confused::confused:

Code:
*
UN A 2.2
UN A 2.3
UN A 2.4
L 0
T DB0815.DW4711
U A 2.2
L 1
T DB0815.DW4711
U A 2.3
L 2
T DB0815.DW4711
U A 2.4
L 3
T DB0815.DW4711

so hatt ich mir das gedacht...
 
vier:confused::confused::confused:

Code:
*
UN A 2.2
UN A 2.3
UN A 2.4
L 0
T DB0815.DW4711
U A 2.2
L 1
T DB0815.DW4711
U A 2.3
L 2
T DB0815.DW4711
U A 2.4
L 3
T DB0815.DW4711

so hatt ich mir das gedacht...

so wird das nicht funktionieren, die sprünge machen schon sinn :rolleyes: ... lade und transferbefehle sind VKE-unabhängig, werden also immer bearbeitet...

4 weil 1 0 0 (dual) eine 4 ist, 3 wäre 1 1, bei 2 und 1 passt es ja...

btw: mit [/code] abschließen ;)
 
hmm... Da ich hauptsächlich (auch vom Kunden aus) in KOP programmiere kann man da doch den Transferbefehl VKE-Abhängig machen, habe dies auch schon gemacht und es funzt...
 
Vielen Dank für Eure Antworten.
Wenn ich jetzt, wo ich die Lösung des Problems weiß, noch mal darüber nachdenke, hätte ich glaube ich den ganzen Baustein einfügen sollen. :cool:

Also der Baustein besteht aus 3 dieser Netzwerke. Und das Problem liegt darin, daß er das bei der Bildung des VKE´s für den Sprung auch noch die Zeile davor aus dem anderen NW berücksichtigt wird.

Also habe ich zu Beginn des NW einfach ein CLR eingefügt und jetzt sollte es gehen.

CLR
U A 2.2
SPBN a
L 1
SPA d
usw......

Gruß Tompson
 
Wenns klappt,

dann gut.

Sonst:

L 0
T DB0815.DBB4711

U A2.2
= DB0815.BDX4711.0

Hatt den Vorteil, das erstmal alles Null ist. Dann werden die Bits aktualisiert und sind dann als Byte/ Wort im DB verfügbar.

Greetz, Tom
 
Zurück
Oben