Kann man komplette Eingangsbytes auf Status überprüfen?

cyberlight

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo erstmal!
Auch ich fange gerade erst an. (MHJ WinSPS-S7)

In einer Programmieraufgabe sind viele Eingänge (Eingangsbytes 1-3) angegeben, die nur darauf untersucht werden müssten, ob eins oder mehrere Bits davon "1" sind.
Jetzt kam mir die Idee, ob man für den Fall nicht ein komplettes Eingangswort, meinetwegen EW 1 und EB 3 oder EB 1-3 nehmen kann und einfach schaut, ob eins davon >0 ist.

Ist das machbar oder muss ich jedes Bit einzelnd abfragen um ein Bit-Ergebnis zu bekommen?

Kann ich ohne Fehlermeldung/Fehlfunktion bei einem Wort-Komparator einen Eingang auf "0" setzen?
Bei WinSPS schickt der mir dann eine Warnung, dass die Verknüpfung in dem Netzwerk nicht abgeschlossen sei. Die Funktion stimmt allerdings.
Problem: Mit einem einzelnen Byte geht das nicht. (?)
 
Beispiel:
Code:
       O(
       L    EW        1
       L    0
       >I
       )
       O(
       L    EB        3
       L    0
       >I
       )

Wäre das schon eine gute Lösung?

(Einfach mal ganz wild drauflosprogrammiert... :oops: )
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
bei Wörtern auf >0 vergleichen geht, bei Byte mußt Du umwandeln.
Du kannst EW 0 z.B. auf 0 vergleichen, dann weißt du aber nicht in welchem Byte was gesetzt ist.
Bei dem Wort Komparator weiß nicht genau was Du meinst, erklär mal näher.

mfg

dietmar
 
Hallo,
ich habe das mal ausprobiert mit PLCsim und S7 hat nicht gemeckert, ob das bei einer richtigen CPU klappt???
So hab ich es geschrieben:
O(
L EW 1
L 0
>I
)
O(
L EB 3
L 0
>I
)
= A 0.0

also keine Probleme, und in der Simulation hat es Funktioniert.

mfg

dietmar
 
Du kannst EW 0 z.B. auf 0 vergleichen, dann weißt du aber nicht in welchem Byte was gesetzt ist.
In diesem Fall wäre das egal.

Bei mir hat es in der Simulation auch funktioniert, sonst hätte ich das hier gar nicht erst hingeschrieben. :)
Der Simulator meckert aber, dass ich "nur" EB3 genommen habe und auch, dass das "Netzwerk nicht abgeschlossen" ist.
Wir ein Byte nicht "automatisch" in ein Wort umgewandelt, wenn man es in den Akku lädt?
Somit sollte man das doch auch vergleichen können.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
im FUP oder KOP wird das auch absolut nicht hinhauen, denn da wollen die Vergleicher mindesten Int haben, und das muß ja nun ein Wort sein.
Meckern Netzwerk nicht abgeschloßen: wenn Du am Ende die Oder-Verknüpfung nicht abfragst, ergänze deinen Code um die Abfrage oder hattest Du schon und er meckert immer noch?


mfg

dietmar
 
Das Netzwerk lässt sich problemlos auch in FUP umwandeln, sogar ohne Zuordnung zu einem Merker.

Du hattest aber auch Recht, denn die Warnung bezog sich wirklich auf den nicht belegten Ausgang. :oops:
Die andere Meldung (EB3 war rot gekennzeichnet), ist allerdings auch verschwunden.

Läuft ja auch im Simulator einwandfrei, aber ob das nun auch einwandfrei programmiert ist, würde ich doch ganz gern wissen.
Vergleicher mindesten Int
Ist ein Byte denn kein int?

Gibt es auch noch eine andere/geeignetere Möglichkeit, das zu lösen?
 
Damit das ganze wirklich funktionieren kann, muß der Vergleicher
<>I heißen, denn wenn von deinem Eingangswort Bit 15, also E0.7 (kein Verschreiber, ist bei Siemens halt so)
High ist, dann würde das einen Vorzeichenwechsel bedeuten,
was bedeutet das dein Wort trotz gesetzter Bits kleiner 0 ist.

Der Vergleicher mit EB... funktioniert deshalb (zumindest in AWL) da die Sache ja sowieso in einen 16 bzw. 32 Bit Akku kopiert wird.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
cyberlight schrieb:
Das Netzwerk lässt sich problemlos auch in FUP umwandeln, sogar ohne Zuordnung zu einem Merker.
Vielleicht eine "Besonderheit" von MHJ in Step7 gehts jedenfalls nicht

Läuft ja auch im Simulator einwandfrei, aber ob das nun auch einwandfrei programmiert ist, würde ich doch ganz gern wissen.
Also ich mach das im Prinzip auch immer so.
Ist ein Byte denn kein int?
Nein ein Byte, ist "eben nur" ein Byte, ein INT ist als Wort (16Bit) definiert!

Mfg
Manuels
 
ein INT ist als Wort (16Bit) definiert!
Aus der Informatik hatte ich das noch anders in Erinnerung. Nun gut, kann man sich merken...
wenn von deinem Eingangswort Bit 15, also E0.7 (kein Verschreiber, ist bei Siemens halt so)
High ist, dann würde das einen Vorzeichenwechsel bedeuten,
was bedeutet das dein Wort trotz gesetzter Bits kleiner 0 ist.
Hatte ich gar nicht bemerkt. Funktioniert so, wie vorgeschlagen. Danke sehr!
Da kann man sehr schnell drauf reinfallen.

Bei EW1 wäre es übrigens E1.7 und nicht E0.7
Wie ich gelernt habe, sollte man aber besser keine ungeraden Bezeichnungen für Wörter benutzen, deswegen könnte man besser EW2 und EB1 benutzen.
Damit keine Verwirrung aufkommt, belassen wir die Bezeichnungen aber erstmal so.
Wandlung in Fup oder KOP geht in Step 7 nicht.
Das liegt vermutlich an der "0". Hatte mich selbst gewundert, dass der das so annimmt. Schonmal mit einem Operanden (Wort) versucht?
Man könnte ja einen zwangsweise 0 setzen, aber dadurch wird es nicht unbedingt schöner.
 
Erstmal meine letzte Lösung für heute:
Code:
       O(
       L    EB        1
       L    MW        0
       >I
       )
       O(
       L    EW2
       L    MW        0
       <>I
       )
       =    M         0.0
MW0 ist und bleibt natürlich 0.
Laut meinen Unterlagen sollte " L 0 " statt " L MW 0" allerdings auch immer funktionieren, dann lädt er die 0 als int-Zahl (16bit), wie er es ja auch soll.
Der Vergleicher mit EB... funktioniert deshalb (zumindest in AWL) da die Sache ja sowieso in einen 16 bzw. 32 Bit Akku kopiert wird.
Wieso würde das in FUP evtl. nicht gehen?
 
Das mit Lade 0 funktioniert auf jeden Fall,
was allerdings in KOP/FUP an einem Vergleicher nicht funktioniert,
ist das EB ...
Dieses mußt du vorher in ein Wort transferieren.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
jetzt hast Du Dir den nächsten Fehler eingebaut, weil Du am Ende M0.0 setzt, ist dein MW0 = 256, und danach dürfte die Sache nicht funktionieren.
Warum es im FUP oder KOP nicht geht: weil wenn Du EB3 versuchst am Eingang vom Vergleicher zu setzen, wird er meckern, er will eine INT-Größe. Hier ein Beispiel wie es in allen 3 Darstellungsarten sich übersetzen läßt:
 

Anhänge

  • vergleicher.jpg
    vergleicher.jpg
    13,5 KB · Aufrufe: 95
Wieso würde das in FUP evtl. nicht gehen?

Aus Grunden die nur Siemens bekannt sind, werden in FUP und KOP die Datentypen genauer kontrolliert. AWL dagegen geht etwas lockerer mit den Datentypen um - zum Vorteil wenn man weiß was man tut, aber sonst zum Nachteil!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

@RMA
Die Kontrolle der Datentzpe in KOP/FUP läßt sich abschalten.
(KOP/AWL/FUP Editor -> Einstellungen -> Registerkarte KOP/FUP ->
Typüberprüfung von Operanden)

@KaffeeSaufenderKamin
besser OW anstatt +I
sonst kann das passieren: +1 + -1 = 0

vill Jröß (viele Grüße)
Peter
 
Hallo,
@ Peter Wahlen: Ist die Programmierung dann sauber (bei der Abschaltung)? Funktion ist gegeben, aber könnten da irgendwo Probleme auftauchen?

mfg

dietmar
 
lorenz2512 schrieb:
Hallo,
@ Peter Wahlen: Ist die Programmierung dann sauber (bei der Abschaltung)? Funktion ist gegeben, aber könnten da irgendwo Probleme auftauchen?

mfg

dietmar

Ich wurde vermuten, dass es sich dann verhält wie in AWL und deswegen wurde ich erwarten, dass man nicht mehr und nicht weniger Problemen damit hat als wenn man es direkt in AWL schreiben würde.

@Peter Wahlen, danke für die Info, man learnt immer dazu! :)
 
Zurück
Oben