Mit Integerwert DB Bit setzen fortlaufend

mobileme

Level-1
Beiträge
30
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo. Ibn habe eine integer Variable und möchte mit dieser fortlaufend ein Bit in einem DB setzen. Bei dem Wert 1 soll zum Beispiel db120.dbx20.0, beim Wert 2 db120.dbx1 und so weiter gesetzt werden. Bis 2000 eventuell. Stehe leider auf dem schlauch. Es gibt doch bestimmt einen sfc dafür oder? Danke schon mal.
 
Hallo,
dafür gibt es m.W. keine SFC - wozu auch.
Das kannst du ganz einfach über indirekte Adressierung machen.
Z.B. so :
Code:
L #mein_Index
LAR1

AUF DB120
SET
= DBX[AR1,p#0.0]
... ist jetzt allerdings ungestest und demnach "quick'n'dirty" - Damit solltest du aber in der Step7-Hilfe weiterkommen ... ;)

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok. Super. Habe mit Pointern noch kaum was gemacht...was ist mein Index? Die integer variable? Und wird die fortlaufend gemacht bis der endwert der Variable erreich wird oder muss da noch eine Schleife gebastelt werden.
 
Nö ... das passt schon so.
Trägst du dort 0 ein, so adressierst du das Bit 0.0 des DB , bei 8 das Bit 1.0 und bei 1000 das 1000ste Bit des DB.
Du mußt nur bitte beachten, dass der DB dann auch so groß sein muss, wie du indexieren willst. Du mußt ihn also handisch so groß anlegen ... vielleicht als Array [0..2000] of Bool ...

Gruß
Larry
 
Ok. Verstanden. Muss dies ja so erledigen weil in wincc die bitmeldungen ja nur so funktionieren und man leider nicht den Wert einer Variablen auslesen kann um dann eine Meldung abzusetzen die in den eventbuffer eingetragen wird. Oder sehe ich das falsch? Danke für die prompte Hilfe.
 
Ich kann dir gerade nicht wirklich folgen ...
Auf diese Weise setze ich normalerweise keine Bit-Meldungen ...
 
Hallo,
dafür gibt es m.W. keine SFC - wozu auch.
Das kannst du ganz einfach über indirekte Adressierung machen.
Z.B. so :
Code:
L #mein_Index
LAR1

AUF DB120
SET
= DBX[AR1,p#0.0]
... ist jetzt allerdings ungestest und demnach "quick'n'dirty" - Damit solltest du aber in der Step7-Hilfe weiterkommen ... ;)

Gruß
Larry

Aber wehn "mein_Index" andert bleib das bit hoch.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie könnte ich denn die Daten besser zur Anzeige und Speicherung im op177b aufbereiten? Vielleicht analogmeldungen daraus machen? Mein_index>1 ergibt einen Text...>2den nächsten USW.?
 
Moin,

ich versteh irgendwie nicht den Sinn mit dem Integer und so... Kann denn immer nur ein Bit true sein in dem DB? Dann könntest du einfach bevor das Bit gesetzt wird den DB löschen.

Ansonsten kommst du um ein bisschen mehr code nicht herum.
 
Das Problem ist folgendes. Es wird ein Wort aus zwei Bytes zusammengefügt. Diese integerzahl entspricht dann genau einer Fehlermeldung. Sie reicht von 1-2000. Es kann immer nur ein Fehler vorkommen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sie konte fur Larry's lösung SFC 21 aufruffen und dass beriech in ihre DB fullen mit 0. und dass mit ihre index machen.
Oder sie programieren fur jede bitmelding ein paar regel um dass bit hoch zu machen.
Z.b.
UN steurung_Ein
= DBxx.DBXyyy.z // Meldung steurung ist aus

Joop
 
Und wieso nicht einfach den Integer auf ungleich 0 vergleichen und damit eine einzige Störmeldung auf dem OP177 auslösen und
in dieser einzigen Störmeldung eine Textliste anlegen die abhängig vom Integerwert ihren Text ändert?
So habe ich das unter anderem schon mit Störmeldungen aus Frequenzumrichtern gemacht.
Vorteile : Übersichtlich in WinCCflex und im S7-Code und kaum arbeit notwendig, außer das schreiben der Texte.
Aber die müssten sowieso für die Bitmeldungen geschrieben werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja. Nur hier wird der Text leider nicht in der alarmhistorie gespeichert. Denn der Fehler kommt von einer externen Steuerung und soll halt nur als kommend eingetragen werden und danach wieder direkt verschwinden. Also als gehend gekennzeichnet werden. Somit wird er gespeichert und steht in der Historie. Das funktioniert mit den textfeldern ja leider nicht oder?
 
Schon einmal an eine sinnvolle Schleife gedacht, die dir aus der Integer einzelne Bits setzt? So von 0 - 2 Millionen?
Dann musst du nur den Text in flex hinterlegen und du hast das, was du willst.


bike
 
Zurück
Oben