MP 277 an S5-115U ----> E / A / M um ein Byte verschoben DB Bereiche nicht

matziane

Level-1
Beiträge
120
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen liebe Leute,

habe ein MP 277 10'' Touch über eine IM 308 C mit einer S5-115 U verbunden.
Läuft alles soweit super.
Verbindung steht, Datentransfer haut hin, tausche im Moment Daten über DBs mit dem Panel aus, auch das funktioniert tadellos.
Wollte direkt nen Merker abfragen, der Merker war 1 jedoch im Panel kam nichts.
Diagnose Fenster im Panel angeschmissen, auch da war er 0.
Mal das ganze Wort überprüft und da musste ich feststellen, mein Panel schaut nicht auf das Byte welches ich ihm vorgebe, sondern auf ein Byte weiter.
Soll heissen, ich will mir über das Panel den Zustand von Eingang 0.0 anschauen, geht nicht.
Schaue ich mir über das Panel den Zustand von Eingang 1.0 an und schalte an der Steuerung Eingang 0.0 so sehe ich den Zustand auf dem Panel wechseln.
Verdrahtet ist alles richtig, habe ich gecheckt.
Habe mal Spasseshalber, in einem DB das Bit 0.0 vom Eingang 0.0 setzen lassen, frage ich über das Panel den Zustand vom Bit 0.0 im DB ab, funktioniert es richtig.
Das ganze verhällt sich so bei Eingängen, Ausgängen und Merkern.


Hat von euch jemand eine Idee was der Hintergrund sein könnte und wie ich das beheben kann?
 
wie hast du denn die variable definiert? als byte oder als wort?
wie benutzt du bit.
so z.b.? mw0 bit2 <- das wäre m1.2 wegen mw0 = mb0 mb1

bei dw funktioniert das weil db's wortorientiert sind und nicht wie in s7 byteorientiert
 
Ich habe in den Variablen das ganze als Datentyp "Bit im Wort" definiert, also EW 0 Bit 0, da würde ich ja noch mit gehen, dass vielleicht Probleme geben könnte.
Macht aber keinen Sinn, da ich es mit den Bits in den Datenbausteinen genauso handhabe und da bekomme ich exakt den Zustand des Bits das ich anspreche.
Im Panel kann man ja noch dieses Status/Steuern Fenster einfügen, dort kann man ja die Verbindung wählen und mittels Bool direkt eine Adresse abfragen.
Wenn ich dort Bool wähle und E 1.0 eingebe sehe ich den Zustand von E0.0.
Gebe ich dort Bool ein und wähle Beispielsweise DB 0 DBX0.0 so bekomme ich exakt den Zustand dieses Bits und muss da nicht DB 0 DBX1.0 abfragen.
 
Das Problem hast du aber auch bei einer S7 ...
Ich nehme an, du machst es so :
- du hast eine Variable vom Typ Wort und die adressiert das EW 0 (z.b.)
- hier benutzt du zur Animation im Bild den E0.0 und sagst vom EW0 das Bit 0 verwenden. Das adressiert dann aber den E1.0 (wegen der von Softmachine schon genannten Byte-Verdrehung bei E, A, M - High-Byte und Low-Byte werden vertauscht). Du müßtest also Bit 8 verwenden oder alternativ nicht ein Wort, sondern ein Byte adressieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein, mache ich nicht so.
Wenn ichs so machen würde wie du es beschreibst wäre es so, da hast du vollkommen recht.

Ich mache es so,
Ich kann den Datentyp meiner Variablen als KF, KH, KM, KY, KG, KC, KZ, KT, Bit in D, Bit in W, DF oder in DH deklarieren.
Für mich habe ich "Bit in W" gewählt, dadurch kann ich unter Adresse den Bereich festlegen (in diesem Fall "EW") dann kann ich das EW festlegen (hier "0") und unter Bit wähle ich 0.
Ich kann hier von Bit 0 bis 15 auswählen, wegen der Highbyte Lowbyte Geschichte müsste ich logischerweise ja das 8te Bit ansprechen um Bit 0.0 zu bekommen.
Mein Chef meinte aber den Tag, das muss so funktionieren, dass ich direkt das Bit eingebe welches ich anspreche und dann bekomm ichs ausgegeben.

Habs eben mal getestet, wenn ich hier anstatt Bit 0, Bit 8 wähle dann wird mir der korrekte Zustand ausgegeben, was ja von der Sache her auch Sinn macht.
Aber so muss ich ja bei der Variablendeklaration jedesmal um die Ecke denken, ist ja auch doof.

Verwirren tut mich nur dieses STATUS/STEUER Fenster im Panel, das kennt ihr doch sicherlich.
Da kann ich Datentyp BOOL wählen, was ja einer Bitabfrage entspricht.
Gebe ich hier Typ E wie Eingang ein, Offset 0, Bit 0 bekomme ich den Zustand nicht.
Schalte ich jetzt E1.0 sehe ich den Zustand wechseln, hier könnte ich mir ja nie Eingang 0.0 anschauen, außer ich frage das Wort 0 ab und schaue mir das 8te Bit an.

So, hoffe jetzt seid ihr nicht noch verwirrter als vorher ;)
 
So, hoffe jetzt seid ihr nicht noch verwirrter als vorher ;)

Nöööö - denn du hast ja das bestätigt, was schon beschrieben wurde. Was generell für das Auslesen gilt, das gilt natürlich genau für das Beschreiben. Es hat etwas mit dem Byte-im-Wort-Aufbau bei Siemens zu tun. Hier mal ein Schlagwort : Little-Endian bzw. Big-Endian.
Wenn du das Verhalten umgehen willst dann empfehle ich dir, nicht mit Worten an der Stelle zu arbeiten, sondern mit Bytes. Dann klappt es auch, wie gewünscht.
 
Würd ja mit den Bytes arbeiten, geht ja aber nicht kann ja nur Bit in Wort oder Bit in Doppelwort, KM würde ja auch gehen bezieht sich aber dummerweise auch aufs Wort.
 
Zurück
Oben