-> Hier kostenlos registrieren
Hallo Forengemeinde,
bin neu hier, daher war ich mir nicht sicher ob das die richtige Rubrik ist und bitte Milde walten zu lassen, falls doch falsch... =)
folgendes Problem:
Ich nutze einen Inkrementalgeber für die Bestimmung von verschiedenen Wegepunkten. Die Wegepunkte werden in DBs (Array of Struct) gespeichert.
Setzwert Ink-Geber: 999.900.000
Endwert Ink-Geber: 1.000.000.000 (zu Testzwecken)
Nun habe ich eine Schleife in AWL programmiert, die bei einem Überlauf vom Inkrementalgeber, mal eben durch alle Arrays huscht und alle Werte die größer als 1.000.000.000 mal eben -100.000 rechnet.
Leider wird das nicht immer ganz korrekt ausgeführt. Wenn die Anlage an der Leistungsgrenze fährt, passiert es manchmal, dass an einer Position nicht -100.000 sondern -50.000 gerechnet wird.
Dieser Fehler tritt aber nur sporadisch auf, daher glaube ich das ich einen Fehler in der indirekten Adressierung habe.
Es ist auch nicht der letzte oder erste Schleifendurchlauf, sondern irgendwo mitten drin...
Hier mal der Code:
//Positive Flanke von "Überlauf Inkrementalgeber"
U "Ueberlauf_Inkgeber"
FP M 200.0
= L 0.0
//Reset "Überlaufeingang"
U L 0.0
= "Reset_Ueberlauf_Inkgeber"
///----------------Werte Station anpassen---------------------///
U L 0.0
SPBN _001
L 0
T #Zaehler
_002: NOP 0
//Station1 anpassen
L #Zaehler
L 10
*I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station1"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _003
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_003: NOP 0
//Station2 anpassen
L #Zaehler
L 4
*I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station2"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _004
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_004: NOP 0
//Station3_AN anpassen
L #Zaehler
L 8
*I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station3"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _005
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_005: NOP 0
//Station3_AUS anpassen
L #Zaehler
L 8
*I
L 4
+I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station3"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _006
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_006: NOP 0
//Station4_AN anpassen
L #Zaehler
L 8
*I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station4"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _007
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_007: NOP 0
//Station4_AUS anpassen
L #Zaehler
L 8
*I
L 4
+I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station4"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _008
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_008: NOP 0
//Station5_AN anpassen
L #Zaehler
L 8
*I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station5"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _009
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_009: NOP 0
//Station5_AUS anpassen
L #Zaehler
L 8
*I
L 4
+I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station5"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _010
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_010: NOP 0
L #Zaehler
+ 1
T #Zaehler
L #Zaehler
L "Inkrementverwaltung".Pos_MAX
<I
SPB _002
_001: NOP 0
Pos_MAX ist 512. Ich bin für jede Hilfe dankbar, da ich mit der SPS-Programmierung noch recht wenig Erfahrung habe.
bin neu hier, daher war ich mir nicht sicher ob das die richtige Rubrik ist und bitte Milde walten zu lassen, falls doch falsch... =)
folgendes Problem:
Ich nutze einen Inkrementalgeber für die Bestimmung von verschiedenen Wegepunkten. Die Wegepunkte werden in DBs (Array of Struct) gespeichert.
Setzwert Ink-Geber: 999.900.000
Endwert Ink-Geber: 1.000.000.000 (zu Testzwecken)
Nun habe ich eine Schleife in AWL programmiert, die bei einem Überlauf vom Inkrementalgeber, mal eben durch alle Arrays huscht und alle Werte die größer als 1.000.000.000 mal eben -100.000 rechnet.
Leider wird das nicht immer ganz korrekt ausgeführt. Wenn die Anlage an der Leistungsgrenze fährt, passiert es manchmal, dass an einer Position nicht -100.000 sondern -50.000 gerechnet wird.
Dieser Fehler tritt aber nur sporadisch auf, daher glaube ich das ich einen Fehler in der indirekten Adressierung habe.
Es ist auch nicht der letzte oder erste Schleifendurchlauf, sondern irgendwo mitten drin...
Hier mal der Code:
//Positive Flanke von "Überlauf Inkrementalgeber"
U "Ueberlauf_Inkgeber"
FP M 200.0
= L 0.0
//Reset "Überlaufeingang"
U L 0.0
= "Reset_Ueberlauf_Inkgeber"
///----------------Werte Station anpassen---------------------///
U L 0.0
SPBN _001
L 0
T #Zaehler
_002: NOP 0
//Station1 anpassen
L #Zaehler
L 10
*I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station1"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _003
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_003: NOP 0
//Station2 anpassen
L #Zaehler
L 4
*I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station2"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _004
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_004: NOP 0
//Station3_AN anpassen
L #Zaehler
L 8
*I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station3"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _005
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_005: NOP 0
//Station3_AUS anpassen
L #Zaehler
L 8
*I
L 4
+I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station3"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _006
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_006: NOP 0
//Station4_AN anpassen
L #Zaehler
L 8
*I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station4"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _007
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_007: NOP 0
//Station4_AUS anpassen
L #Zaehler
L 8
*I
L 4
+I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station4"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _008
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_008: NOP 0
//Station5_AN anpassen
L #Zaehler
L 8
*I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station5"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _009
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_009: NOP 0
//Station5_AUS anpassen
L #Zaehler
L 8
*I
L 4
+I
SLD 3
LAR1
AUF "Ink-Verwaltung_Station5"
L DBD [AR1,P#0.0]
L L#999999990
>=D
SPBN _010
L DBD [AR1,P#0.0]
L L#100000
-D
T DBD [AR1,P#0.0]
_010: NOP 0
L #Zaehler
+ 1
T #Zaehler
L #Zaehler
L "Inkrementverwaltung".Pos_MAX
<I
SPB _002
_001: NOP 0
Pos_MAX ist 512. Ich bin für jede Hilfe dankbar, da ich mit der SPS-Programmierung noch recht wenig Erfahrung habe.