-> Hier kostenlos registrieren
Hallo zusammen,
habe einige Probleme bei der Umsetzung meiner Überlegung.Ich möchte,dass die Zustände von Tastern in einem Merkerwort abgelegt werden und mit den vorherigen Zuständen verglichen werden --> falls ungleich --> dann sollen beide Wörter ODER verknüpft werden,damit ich den aktuellen Zustand habe.
Folgendes Programm habe ich geschrieben:
Die Kommentare sind so verfasst,wie ich es gern hätte,nicht wie es das Programm umsetzt.
Entschuldige mich im Vorraus, ich weiss nicht wie ich mein Programmcode hier rein lade,habe es deshalb kopiert.
Bitte um genaue Erläuterung der Fehlermeldungen
PROGRAM PLC_PRG
VAR
Taster0: BOOL;
Taster1: BOOL;
Taster2: BOOL;
MWT: WORD; (*Merkerwort Taster*)
MWS: WORD; (*Merkerwort Speicher*)
comm: MBM_COMMUNICATE; (*Fertiger Kommunikationsbaustein von Modbus TCP/IP*)
WriteCoils:ARRAY[0..MB_MAXDATABOOLVALUE] OF BOOL; (*Data-Array*)
END_VAR
LD Taster0 (*Lade Taster0 und ...*)
ST MWT.0 (*...speicher den Zustand an die Stelle .0 des Merkerwortes Taster*)
LD Taster1 (*------ ||-------*)
ST MWT.1 (*------ ||-------*)
LD Taster2 (*------ ||-------*)
ST MWT.2 (*------ ||-------*)
LD MWT (*Lade das Merkerwort Taster und ...*)
EQ MWS (*...vergleiche es mit Merkerwort Speicher*)
JMPC ENDE (*Wenn MWT = MWS, dann springe zu "ENDE"*)
LD MWT (*Lade das Merkerwort Taster*)
LD MWS (*Lade das Merkerwort Speicher*)
OR (*Verknüpfe beide Wörter ODER und ...*)
ST MWS (*...und speicher das Ergebnis wieder im MWS*)
LD MWS.0 (*Lade den Zustand der Stelle ".0" und ...*)
ST WriteCoils[0] (*...speicher ihn in den "Data-Array"*)
LD MWS.1 (*------ ||-------*)
ST WriteCoils[1] (*------ ||-------*)
LD MWS.2 (*------ ||-------*)
ST WriteCoils[2] (*------ ||-------*)
S comm.xStrobe (*Setze den Eingang xStrobe des Bausteins "comm"*)
(*xStrobe = Eine pos. Flanke startet den Baustein*)
ENDE:
ANDN comm.xBusy (*Wenn der Ausgang comm.xBusy = FALSE dann...*)
R comm.xStrobe (*...setze den Eingang xStrobe des Bausteins "comm" zurück*)
(*xBusy = TRUE : Baustein ist noch beschäftigt*)
Fehlermeldungen:
Warnung 1500LC_PRG(12) : Diese Expression enthält keine Zuweisung.Es wird ein Code generiert.
Fehler 4022LC_PRG(16) :Operand erwartet
Fehler 4032LC_PRG(18 ) :1 Operanden sind zu wenige für 'OR'.Es werden min. 2 erwartet.
Fehler 4200LC_PRG(27) :'LD' erwartet
Ich hoffe ihr steigt da durch...brauche dringend hilfe
LG
habe einige Probleme bei der Umsetzung meiner Überlegung.Ich möchte,dass die Zustände von Tastern in einem Merkerwort abgelegt werden und mit den vorherigen Zuständen verglichen werden --> falls ungleich --> dann sollen beide Wörter ODER verknüpft werden,damit ich den aktuellen Zustand habe.
Folgendes Programm habe ich geschrieben:
Die Kommentare sind so verfasst,wie ich es gern hätte,nicht wie es das Programm umsetzt.
Entschuldige mich im Vorraus, ich weiss nicht wie ich mein Programmcode hier rein lade,habe es deshalb kopiert.
Bitte um genaue Erläuterung der Fehlermeldungen
PROGRAM PLC_PRG
VAR
Taster0: BOOL;
Taster1: BOOL;
Taster2: BOOL;
MWT: WORD; (*Merkerwort Taster*)
MWS: WORD; (*Merkerwort Speicher*)
comm: MBM_COMMUNICATE; (*Fertiger Kommunikationsbaustein von Modbus TCP/IP*)
WriteCoils:ARRAY[0..MB_MAXDATABOOLVALUE] OF BOOL; (*Data-Array*)
END_VAR
LD Taster0 (*Lade Taster0 und ...*)
ST MWT.0 (*...speicher den Zustand an die Stelle .0 des Merkerwortes Taster*)
LD Taster1 (*------ ||-------*)
ST MWT.1 (*------ ||-------*)
LD Taster2 (*------ ||-------*)
ST MWT.2 (*------ ||-------*)
LD MWT (*Lade das Merkerwort Taster und ...*)
EQ MWS (*...vergleiche es mit Merkerwort Speicher*)
JMPC ENDE (*Wenn MWT = MWS, dann springe zu "ENDE"*)
LD MWT (*Lade das Merkerwort Taster*)
LD MWS (*Lade das Merkerwort Speicher*)
OR (*Verknüpfe beide Wörter ODER und ...*)
ST MWS (*...und speicher das Ergebnis wieder im MWS*)
LD MWS.0 (*Lade den Zustand der Stelle ".0" und ...*)
ST WriteCoils[0] (*...speicher ihn in den "Data-Array"*)
LD MWS.1 (*------ ||-------*)
ST WriteCoils[1] (*------ ||-------*)
LD MWS.2 (*------ ||-------*)
ST WriteCoils[2] (*------ ||-------*)
S comm.xStrobe (*Setze den Eingang xStrobe des Bausteins "comm"*)
(*xStrobe = Eine pos. Flanke startet den Baustein*)
ENDE:
ANDN comm.xBusy (*Wenn der Ausgang comm.xBusy = FALSE dann...*)
R comm.xStrobe (*...setze den Eingang xStrobe des Bausteins "comm" zurück*)
(*xBusy = TRUE : Baustein ist noch beschäftigt*)
Fehlermeldungen:
Fehler 4022LC_PRG(16) :Operand erwartet
Fehler 4032LC_PRG(18 ) :1 Operanden sind zu wenige für 'OR'.Es werden min. 2 erwartet.
Fehler 4200LC_PRG(27) :'LD' erwartet
Ich hoffe ihr steigt da durch...brauche dringend hilfe
LG