SPS Programm mit MOELLER

nUgg3t

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
bin im 2.Lehrjahr und haben jetzt mit SPS angefangen.

Sollen eine Ampelsteuerung als BYTE-Verarbeitung programmieren.

Habe jetzt mal es so programmiert wie ich denke, das es richtig sein könnte :p

Nur hab ich Syntaxfehler, und weiss nicht warum.

Vielleicht könnt ihr mir helfen!

Hier das Programm:
VAR
Eingang AT %IB0.0.0.0: BYTE;
Ausgang AT %QB0.0.0.0: BYTE;
END_VAR




LD Eingang
BYTE_TO_INT
EQ 0
OR 1
OR 2
OR 4
OR 8
JMPC Rot

LD Eingang
BYTE_TO_INT
EQ 3
OR 5
OR 6
OR 9
OR 10
OR 12
JMPC Gelb

LD Eingang
BYTE_TO_INT
EQ 7
OR 11
OR 13
OR 14
OR 15
JMPC Gruen


Rot: LD 1
ST Ausgang
JMP ENDE

Gelb: LD 2
ST Ausgang
JMP ENDE

Gruen: LD 4
ST Ausgang
JMP ENDE

ENDE:

Syntaxfehler:

Fehler => Anw, Ze: 5, Sp: 2 - Typkonflikt: Operand vom Typ BOOL erwartet
Fehler => Anw, Ze: 13, Sp: 2 - Typkonflikt: Operand vom Typ BOOL erwartet
Fehler => Anw, Ze: 23, Sp: 2 - Typkonflikt: Operand vom Typ BOOL erwartet
 
Hab das Ganze mal in TwinCAT versucht zu übersetzen. Bei mir meckert er die Zahlenwerte ungleich 0 bzw. 1 als Parameter des Operators OR an.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Bin jetzt nicht so der AWL Crack, aber Or ist normalerweise nen ein bitweiser Operator der nur Wahr oder Falsch Aussagen verbinden kann.

Vielleicht funktioniert es ja so:

LD Eingang
BYTE_TO_INT
EQ 0
OR (EQ 1)
OR (EQ 2)
OR (EQ 4)
OR (EQ 8 )
JMPC Rot

???
 
Wie soll ich es dann schreiben?

Statt:
LD Eingang
BYTE_TO_INT
EQ 0
OR 1
OR 2
OR 4
OR 8
JMPC Rot

So?:
LD Eingang
BYTE_TO_INT
EQ 0
OR EQ1
OR EQ2
OR EQ4
OR EQ8
JMPC Rot
 
Also die Version von MasterOhh funktioniert auch nicht. Bin zwar mit AWL nicht so vertraut, aber eine Möglichkeit hätte ich trotzdem (sie ist umständlich und es ginge bestimmt auch einfacher, aber sie funktioniert :cool:)

Code:
LD  Eingang
BYTE_TO_INT
LE  2
JMPC Rot
 
LD  Eingang
BYTE_TO_INT
EQ  3
JMPC Gelb
 
LD  Eingang
BYTE_TO_INT
EQ  4
JMPC Rot
 
LD  Eingang
BYTE_TO_INT
LE  6
JMPC Gelb
 
LD  Eingang
BYTE_TO_INT
EQ  7
JMPC Gruen
 
LD  Eingang
BYTE_TO_INT
EQ  8
JMPC Rot
 
LD  Eingang
BYTE_TO_INT
LE  10
JMPC Gelb
 
LD  Eingang
BYTE_TO_INT
EQ  11
JMPC Gruen
 
LD  Eingang
BYTE_TO_INT
EQ  12
JMPC Gelb
 
LD  Eingang
BYTE_TO_INT
LE  15
JMPC Gruen
 
Rot: LD  1
ST  Ausgang
JMP  ENDE
 
Gelb: LD  2
ST  Ausgang
JMP  ENDE
 
Gruen: LD  4
ST  Ausgang
JMP  ENDE
 
ENDE:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja so hätte ich es sonst notfalls auch gemacht ^^

Dachte nur, ich könnte mir durch das OR einige Zeilen sparen.
Sonst weiss keiner wie das doch mit OR gehen könnte?

Cerberus warum hast du in manchen Zeilen ein "LE" stehen? Was istdas genau? :)

Bin SPS Einsteiger ;)

Mfg
 
Das LE ist ein "Less than or equal" also ein kleiner gleich. Damit kannst du z.B. den Fall abdecken, dass 0, 1 und 2 alle drei zu Rot führen sollen.
 
1. Es gibt bei mir unter Sucosoft 4.0 keine Syntaxfehler.

2. OR erwartet eine Bitvariable.

3. Daher musst du eine Klammer setzen, wenn du ein Byte lädst

Probier's aus!
 
Zurück
Oben