Multi FC mit flexiblen Word Zugriff...

AndreK

Level-1
Beiträge
415
Reaktionspunkte
27
Zuviel Werbung?
-> Hier kostenlos registrieren
Dafür ist die Kopfzeile ein wenig eng um das Sinnvoll zu umschreiben...

Was ich möchte:
1. Einen FC erstellen, für mehrmalingen Aufruf
2. Über IN/Schnittstelle ein Word übergeben
3. die einzelnen Bits des WORD bearbeiten können

Bisher bin ich soweit und hänge fest:
L #MW // Lade Word, flexible Vorgabe
LAR2 // schreibe Akku 1 in Adressregister 2
S [AR2,P#0.0] // setze im AR2 das Bit 0.0

Das scheint mir so nicht richtig zu sein...
Wenn ich das WORD genau kenne ist das mit dem Bitzugriff ja kein Problem, aber wie greife ich auf ein Variables WORD zu? Oder soll ich das WORD vorher enfach in einen Puffer legen, innerhalb des Bausteins diesen Bearbeiten, und denn am Bausteinende in das Variable WORD zurückschreiben ?

Das ganze soll für einen Störmeldebaustein sein, ich habe da ein paar Ideen... ist aber nicht 100% durchdacht...

Bin für Tipps, Anregungen usw. immer dankbar (ich hoffe ich habe mich verständlich ausgedrückt...:rolleyes: )
 
variables Word heißt, dass da unterschiedliche Signalzustände in den einzelnen Bits sein können? die Word länge ist mit 16bits festgelegt und auf diese kannst du wie bei einem Merker-Word, Eingangs-Word, Ausgangs-Word auch lokal in einem FC zugreifen. Dafür brauchst du die Lokale-StartAdresse des Words und kannst dann z.b. über die Adresse L0.4 (bei start Adresse 0 des Words) auf das 5 bit des High-Teils deines Words zugreifen mit L1.1 auf das 2te Bit des Low-Teils und so weiter....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist wohl der Befehl der mir fehlte...

Ja richtig, WORD mit "flexiblen" Einzelbits...

L war mir immer nur für "lade" bekannt. Nicht als binäre Verknüpfung. Wie heißt dieser Befehl, dann könnt eich mir das zur verinnerlichung in der Hilfe nochmal durchlesen... habe ich jetzt auf Anhieb nicht gefunden.
 
such mal in der Hilfe nach "Speicherbereiche" oder "Zusammenfassung der Bit-, Byte-, Wort- und Doppelwortkennungen" ... Anfangsadresse in einem FC findest du übrigens über die Objekteigenschaften der Variablen...

unterscheide Befehl und Adressierung... ;-)
 
Zuletzt bearbeitet:
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das geht zwar, aber Vorsicht: Der_Admin_schätzt_das_garnicht
Der ist im Moment sowieso nicht so gut drauf und schmeißt mit Kraftausdrücken im Proll-Slang um sich.

Also Achtung: Es kann Mecker geben!!!

nun, was soll ich sagen, wenn der baustein fertig ist und funktioniert, dann brauch da keiner mehr bei und solange man vernünftig kommentiert und sinnvolle titel vergibt, sehe ich in einer abgeschlossenen funktion keine probleme...
 
Das mag jetzt sehr naiv wirken. Wenn hier einer eine Frage stellt und was lernen will sollte man ihn nicht mit unsauberen Quick and Dirty Lösungen bedienen. Der direkte Zugriff auf den Tempbereich ist keine schöne Lösung.

Aussagen wie:
...
wenn der baustein fertig ist und funktioniert, dann brauch da keiner mehr bei und solange man vernünftig kommentiert und sinnvolle titel vergibt, sehe ich in einer abgeschlossenen funktion keine probleme...
Sind nicht zielführend. Da man ja nicht beurteilen kann ob diese Aussage beim Fragesteller auch zutrifft. IMHO sollte man diese des Zugriffs meiden wo es nur geht (und es geht immer).

Wenn man hier im Forum mittels der Suchfunktion nach dem Zugriff auf einzelne Bits aus einem Word sucht findet man unter anderem den Beitrag aus dem der werte Kollege OHGN zitiert hat. Es gibt einige Threads dazu und auch schöne Lösungen.
 
Aussagen wie:

Sind nicht zielführend. Da man ja nicht beurteilen kann ob diese Aussage beim Fragesteller auch zutrifft. IMHO sollte man diese des Zugriffs meiden wo es nur geht (und es geht immer).

dachte, dafür ist es ein forum...also dafür, das unterschiedliche herangehensweisen diskutiert werden können und unterschiedliche lösungsvarianten aufgezeigt werden, aus denen dann der fragensteller die auf ihn zutreffendste lösung filtert...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
dachte, dafür ist es ein forum...also dafür, das unterschiedliche herangehensweisen diskutiert werden können und unterschiedliche lösungsvarianten aufgezeigt werden, aus denen dann der fragensteller die auf ihn zutreffendste lösung filtert...

Das ist KEIN Widerspruch zu dem was Zotos geschrieben hat.
Wenn ich hier einen Beitrag hereinstelle und um Tips (oder so bitte), dann möchte ich am liebsten die professionellste Antwort.

Im Übrigen hat sich AndreK ja schon Gedanken darüber gemacht, sein Wort irgendwo zwischenzuspeichern und hinterher wieder zurüchzuschreiben - also im Grunde schon die Sache mit dem Lokalbits (oder Merkerbits oder Datenbits ...).

@AndreK:
Du möchtest, wenn ich das recht verstanden habe, eine Funktion, der du die Wort-Adresse und die Bit-Adresse im Wort übergibst und von der du dann ein TRUE oder FALSE zurück bekommst, je nach Zustand des entsprechenden Bits ? Also :
Code:
M10.1 := Get_Bit (MW114 , Bit 11)
 
Viele Wege fürn nach Rom.

Ich würde die IN Variable auf eine Temporäre im Array format kopieren.
dann kannst du dieses Wort bitweise nachher behandeln.
L #IN_Variable
T #IN_VAR

CALL "BLKMOV"
SRCBLK :=#IN_VAR
RET_VAL:=#Ret_Value
DSTBLK :=#BIT

U #BIT[0]
U #BIT[1]
= #BIT[2]


Finde ich ne saubere Lösung... aber wie gesagt, jeder machts anders.
 
Zuletzt bearbeitet:
Wenn ich hier einen Beitrag hereinstelle und um Tips (oder so bitte), dann möchte ich am liebsten die professionellste Antwort.

wer entscheidet über professionalität und wer sagt ihm, dass der zugriff auf lokalvariablen ala L0.9 quick&dirty ist, wenn er davon nebenbei mal hört und niemand anmerkt, dass das pfui ist? ich denke dadurch, dass es hier diskutiert wurde, hat sich das nicht nur bei mir eingeprägt...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was ich möchte:
1. Einen FC erstellen, für mehrmalingen Aufruf
2. Über IN/Schnittstelle ein Word übergeben
3. die einzelnen Bits des WORD bearbeiten können

Hallo Andre,

hier sind mal zwei kurze Programmbeispiele.

Gruß Kai
 

Anhänge

  • OB1.pdf
    3,5 KB · Aufrufe: 26
  • FC200.pdf
    4,5 KB · Aufrufe: 34
  • FC210.pdf
    4,4 KB · Aufrufe: 25
Du kannst natürlich auch mit einer IN-OUT-Variablen arbeiten.

Gruß Kai
 

Anhänge

  • OB1.pdf
    3,5 KB · Aufrufe: 13
  • FC200.pdf
    4,2 KB · Aufrufe: 17
  • FC210.pdf
    4,2 KB · Aufrufe: 13
Was ich möchte:
1. Einen FC erstellen, für mehrmalingen Aufruf
2. Über IN/Schnittstelle ein Word übergeben
3. die einzelnen Bits des WORD bearbeiten können

Mir ist leider nicht bekannt aus welchem Grund du das haben möchtest. Stand selbst mal vor genau der selben Frage. Da ging es darum, dass ich es als zu unpraktikabel empfand bei einem FC mit vielen Hilfsvariablen jede einzeln zu übergeben. Dachte auch erst an eine lößung wo ein WORD übergeben wird das dann ja 16 Hilfsvariablen zur verfügung stellt. Habe später aber eine viel einfachere und flexiblerer lösung gefunden... Einen INOUT asl STRUCT definieren und alle benötigten Variablen (egal von welchem typ) in einem DB als STRUCT anlegen. Dann können alle an einem Beinchen des FC übergeben werden.
 
Ja, ich weiß auch noch nicht genau ...

Mir ist leider nicht bekannt aus welchem Grund du das haben möchtest. Stand selbst mal vor genau der selben Frage. Da ging es darum, dass ich es als zu unpraktikabel empfand bei einem FC mit vielen Hilfsvariablen jede einzeln zu übergeben. Dachte auch erst an eine lößung wo ein WORD übergeben wird das dann ja 16 Hilfsvariablen zur verfügung stellt. Habe später aber eine viel einfachere und flexiblerer lösung gefunden... Einen INOUT asl STRUCT definieren und alle benötigten Variablen (egal von welchem typ) in einem DB als STRUCT anlegen. Dann können alle an einem Beinchen des FC übergeben werden.

Aber ich wollte wissen wie es geht :rolleyes:

Ich hatte mir gedacht das ganze für Störmeldungen zu benutzen. Das WORD geht hinterher an WINCC. In dem Baustein laufen als in z.b. Motorschutzschalter usw. auf und eine Quitt. Meldung.
Ob das so praktikabel ist... da zweifle ich selber dran...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber ich wollte wissen wie es geht :rolleyes:

Ich hatte mir gedacht das ganze für Störmeldungen zu benutzen. Das WORD geht hinterher an WINCC. In dem Baustein laufen als in z.b. Motorschutzschalter usw. auf und eine Quitt. Meldung.
Ob das so praktikabel ist... da zweifle ich selber dran...

Achso. Ja meine Störmeldungen mache ich auch über WORD ins WinCC. Aber auch über einen DB :) Wenn das word in einem DB steht kann ich die einzelnen Bits direkt über DBX ansprechen.
 
Achso. Ja meine Störmeldungen mache ich auch über WORD ins WinCC. Aber auch über einen DB :) Wenn das word in einem DB steht kann ich die einzelnen Bits direkt über DBX ansprechen.

Tja, genau deshabl wollte ich wissen wie es geht...
Mit DBW.DBX_._ ist das ja kein Problem :cool: aber mir kam es nicht in den Sinn wie ich das mit einem Merkerwort anstellen sollte... hatte nur die Grundlegende Idee das Word in einen Puffer zu legen, die Bits dort zu bearbeiten, und dann am Bausteinende zurückzuschreiben.
Aber das ist mir ja jetzt alles klar :p

Aber was mir nicht 100% klar ist, warum ist der L Befehl direkt auf das Word böse ?!
 
...
Aber was mir nicht 100% klar ist, warum ist der L Befehl direkt auf das Word böse ?!

Der L Befehl ist nicht böse (da der L Befehl ja der Lade-Befehl ist).


Auch der Speicherbereich L (Lokal) ist nicht böse nur sollte man auf diesen Speicherbereich nicht direkt sondern nur Symbolisch zu greifen. Bei dem was ich jetzt schreibe werden einige Kollegen lachen.
Stell Dir den Speiche mal die einen Schrank mit tausend Schubladen vor. Alle Schubladen haben eine Nummer und einen Namen. Man kann die Schubladen jetzt mit dem Namen oder mit der Nummer erreichen. Wenn man aber nun neue Inhalte Einsortiert oder Inhalte Rauslöscht kann es dazu kommen das viele Inhalte umziehen sie behalten zwar ihren Namen bekommen aber eine Schublade mit einer anderen Nummer. Wenn man auf die Variablen mit ihrem Namen zugreift ist das nicht schlimm aber wenn man die Nummer verwendet muss man den Code durchgehen und abändern.
Jetzt kommt einer und sagt an dem Code ändert nie jemand was. Bei dem FC/FB kann man das so machen und bei einem anderen FC/FB ist das nicht der Fall da meidet man den L-Kram eben. Dann frage ich mich warum man es nicht überall gleich und richtig macht.
In die Gleiche Kategorie zählt übrigens der quer Zugriff auf Instanz DBs nur das ich das noch schlimmer finde.
 
Zurück
Oben