DB Durchsuchen und Bits hochzählen

renesan

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten morgen SPS Gemeinde!

Ich habe ein Array im Datenbaustein geschrieben und möchte jeweils das erste Bit (wenn 1) hochzählen um zu wissen wie oft das die Anlage aufgrund diesen Fehler Ausschuss produziert hat. (Im Anhang ist ein Auszug des DB´s)

So nun zu meinem Problem:
Mein Programm zählt nicht Prozessicher hoch.
D.h wenn zb DBX2.0 DBX4.0 und DBX6.0 high wären würde er nur um eins hochzählen.

Programm:
NW1

U #Trigger
FP #fp2
SPBN m100
R #Init
S #Ges_Trigger
m100: NOP 0

NW2

L #DBNR
T #DBNR_intern
AUF DB [#DBNR_intern]

U #Ges_Trigger
UN #Init
FP #FP1
SPBN m001
R #Ges_Trigger
L #Datenende
T #Laenge_intern

L #Laenge_intern
L 2
-I
T #Adresse
T #Laenge_intern
L #Adresse
==I

SPBN m001
S #Init
m001: NOP 0

U #Init

SPBN m002
L #Adresse

SLW 3

LAR1

U DBX [AR1,P#0.0]
FP #fp3
SPBN m007
L Zähler
L 1
+I
T Zähler
m007: NOP 0


L #Adresse
L #Datenanfang
==I
SPB m002


L #Adresse
L 2
-I
T #Adresse

m002: NOP 0

Vielleicht sieht von euch einer den Fehler den ich nicht sehe.

Mit freundlichen Grüssen und Danke im vorraus.

Rene
 

Anhänge

  • DB.jpg
    DB.jpg
    179,5 KB · Aufrufe: 28
Hallo Rene!

Du musst für jedes Bit, dass Du mit einer Flanke prüfen willst einen eigenen Flankenmerker haben:
U DBX [AR1,P#0.0]
FP #fp3 // vllt. ersetzen durch DBX[AR1, p#0.5] (Ist in Deinem DB ja noch frei!
SPBN m007
L Zähler
L 1
+I
T Zähler
m007: NOP 0

Wird dieser Baustein nur einmal pro Zyklus durchlaufen?
Dann wird auch nur ein Bit pro Zyklus abgefragt. => Schleife basteln.

Dann ist mir noch was aufgefallen:
L #Laenge_intern
L 2
-I
T #Adresse
T #Laenge_intern
L #Adresse
==I // Hier ist das VKE immer 1! Denn Du vergleichst hier eine Variable mit sich selbst.

SPBN m001
S #Init
m001: NOP 0

Ich hoffe es hilft Dir weiter.

Grüße
Gebs
 
Hallo!

Als erstes danke für die Hilfe :TOOL:. Das Problem ist gelöst.:ROFLMAO:
Es sind sicher noch kleine Bug´s drin aber prinzipiell funktioniert es so.:rolleyes:

NW1
U #Trigger
FP #fp2
SPBN m100
R #Init
S #Ges_Trigger
m100: NOP 0

NW2

L #DBNR
T #DBNR_intern
AUF DB [#DBNR_intern]

U #Ges_Trigger
UN #Init
FP #FP1
SPBN m111
R #Ges_Trigger

L 0
T #NIO_Zaehler

L #Datenende
T #Laenge_intern
T #Adresse
T #Adresse_FP_reset
S #Init

m111: NOP 0
U #Init
SPBN m002

L #Adresse

SLW 3
LAR1

U DBX [AR1,P#0.0]
FP DBX [AR1,P#0.7]
SPBN m007
L #NIO_Zaehler
L 1
+I
T #NIO_Zaehler
m007: NOP 0

TAR1

L #Adresse
L #Datenanfang
==I
SPB m003

L #Adresse
L 2
-I
T #Adresse

m002: NOP 0
m003: NOP 0

NW3

U(
L #Adresse
L #Datenanfang
==I
)
L S5T#400MS

SE #Zeitglied
U #Zeitglied
= #Daten_verschoben

U #Zeitglied
SPBN m010
R #Init
m010: NOP 0
NOP 0

NW4

U #Zeitglied
UN #HM2
SPBN m112

L #Adresse_FP_reset
SLW 3
LAR1

R DBX [AR1,P#0.7]

TAR1
L #Adresse_FP_reset
L #Datenanfang
==I
SPB m112

L #Adresse_FP_reset
L 2
-I
T #Adresse_FP_reset

m112: NOP 0

MFG
Rene
 
Und nächstes mal benutze bitte den Code-Button. (#)
Code:
U E0.0
U E0.1
= A4.0

Das macht das ganze besser leserlich.
Viel Spaß hier im Forum!

Gruß wolder
 
Zurück
Oben