Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Bit im Word, InstanzDB...

  1. #1
    Registriert seit
    08.01.2007
    Ort
    Dülmen
    Beiträge
    393
    Danke
    58
    Erhielt 24 Danke für 17 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wie ist folgendes möglich:

    L #Stoerungen //Word mit Störungsbits, STAT im Inz-DB

    UN #Sicherung //Eingang
    S Bit0 des Störungswords....?!

    Ich kann es direkt adressieren, aber wenn ich in der Schnittstelle des I-DB was ändere stimmt die Adresse der direkten Adressierung nicht mehr...

    Geht da irgendwas mit Pointer.... mir ist die schreibweise nicht geläufig. Oder sollte ich mir das Word in einen Puffer laden, diesen bearbeiten und dann zurückschreiben!?
    Also grob so:
    L #Störungen //word
    T Puffer //word, immer gleiche adresse, CPU weit... also MW

    UN blabla
    S bit1

    L Puffer
    T #Störung

    Kleiner Tipp wäre nett
    Zitieren Zitieren Bit im Word, InstanzDB...  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von AndreK Beitrag anzeigen
    Kleiner Tipp wäre nett
    kleiner tip: array, struct oder udt ... http://sps-forum.de/showthread.php?p=166511#post166511
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    AndreK (08.03.2009)

  4. #3
    AndreK ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.01.2007
    Ort
    Dülmen
    Beiträge
    393
    Danke
    58
    Erhielt 24 Danke für 17 Beiträge

    Standard

    ich dachte da eher an folgende Variante:
    1. Lade Word in den Akku
    2. Setze ein Bit im Word
    3. Schreibe den Akku zurück

    Geht das nicht auf einfache weise, ich meine ohne viel Text.

    Sonst gehe ich den umweg über einen Puffer:
    L #Stoerungen
    T "PUFFER_MW" //MW100

    UN #Sicherung
    S M 100.0
    UN #Thermistor
    S M 100.1

    usw...

    L "PUFFER_MW" //MW100
    T #Stoerungen
    Zitieren Zitieren Aha, das ist viel CODE um ein Bit zusetzen :-)  

  5. #4
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    UW OW XOW ... damit kannst du maskieren und beeinflußen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  6. #5
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    So kannst du auf einzelne Bits zugreifen:
    Code:
    LAR1 ##Temp_Word //Lade Adresse von Temp Word
    
    // Verknüpfung mit einem Bit:
    U L [AR1,P#0.0]  //Beim offset (P#0.0) kannst dir dann das bit aussuchen das du aus deinem Word benötigst
    U L [AR1,P#0.1]
    S L [AR1,P#0.2]    //Wenn erstes Bit und zweites Bit des Temp Word dann setze drittes Bit des Temp Word
    godi

  7. Folgender Benutzer sagt Danke zu godi für den nützlichen Beitrag:

    AndreK (08.03.2009)

  8. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Hallo,
    du könntest auch anstelle des in deinem eigenen Beispiel verwendeten MW100 ein ARRAY[1..16] im TEMP-Bereich deines FB deklarieren und das Störungs-Wort dorthin transferieren, in dem TEMP-ARRAY deine Änderungen machen und dieses dann wieder auf das Störungs-Wort zurück-transferieren. Also etwa so :
    Code:
    im TEMP-Bereich:
    Stoerungen_Array : ARRAY [1..16] of BOOL
     
    im Code-Bereich:
     
    L p#Stoerungen_Array
    LAR1
     
    L #StoerungsWord
    T LW [AR1,p#0.0]
     
    U e4.7
    S Stoerungen_Array[3]
     
    U e4.6
    S Stoerungen_Array[4]
     
    ...
     
    L LW [AR1,p#0.0]
    T #StoerungsWord
    Achtung - dies ist ein ungetesteter "Quick-and-dirty"-Code. Es sollte aber so funktionieren ...

    Gruß
    LL

  9. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    AndreK (08.03.2009)

  10. #7
    Registriert seit
    04.06.2007
    Beiträge
    3
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    ...Über Pointer gehts auch man darf nur nicht das offset des AR2 vergessen

    also:
    TAR2 //Die in AR2 (Multiinstanz!) stehende Adresse in Akku1 schreiben
    UD DW#16#FFFFFF //Ausmaskieren unwichtiger Informationen
    LAR1 P##Stoermeldung //AR1 mit der Adresse von "#Stoermeldung" beschreiben
    +AR1 //Die in Akku1 stehende Adresse (von Multiinstanz) zur Adresse von "#Stoermeldung" addiert und endgültig ins AR1 geschrieben

    U #Ueberlast_Motor1
    S [AR1,P#0.0] // Bit 0 der Adresse von "#Stoermeldung"
    U #Ueberlast_Motor2
    S [AR1,P#0.1] // Bit 1 der Adresse von "#Stoermeldung"


    vorher sollten aber AR1 und AR2 gesichert und später wieder hergestellt werden

    dazu gibt's bei Siemens auch ein SR
    Zitieren Zitieren Adressierung indirekt  

  11. Folgender Benutzer sagt Danke zu Werner für den nützlichen Beitrag:

    AndreK (09.03.2009)

  12. #8
    AndreK ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.01.2007
    Ort
    Dülmen
    Beiträge
    393
    Danke
    58
    Erhielt 24 Danke für 17 Beiträge

    Standard

    ... aber das ist mir zuviel schreibarbeit

    Der Code sollte möglichst kurz und knackig sein, auch sollte der Bausteinkopf nicht zu voll werden.
    Einfach nur der Übersichtlichkeit wegen.

    Aber gut zu wissen wie es geht...!

    Ich werde es mit einem Puffer_Merkerword machen das ich Systemweit nur als Pufferword benutzen werde.
    Zitieren Zitieren Danke an alle...  

  13. #9
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von AndreK Beitrag anzeigen
    Ich werde es mit einem Puffer_Merkerword machen das ich Systemweit nur als Pufferword benutzen werde.
    sorry, aber schmiermerker waren anno dazumal - das ist nicht state of the art und schön ist das schon gar nicht! ... aber is ja nicht mein programm
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  14. #10
    Registriert seit
    30.06.2007
    Ort
    Minden (Westf.)
    Beiträge
    178
    Danke
    42
    Erhielt 21 Danke für 21 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von AndreK Beitrag anzeigen
    ... aber das ist mir zuviel schreibarbeit

    Der Code sollte möglichst kurz und knackig sein, auch sollte der Bausteinkopf nicht zu voll werden.
    Einfach nur der Übersichtlichkeit wegen.

    Aber gut zu wissen wie es geht...!

    Ich werde es mit einem Puffer_Merkerword machen das ich Systemweit nur als Pufferword benutzen werde.
    Puhhhh....

    Ich kann da Vierlagig nur voll und ganz zustimmen, Schmiermerker sollten in der heutigen Zeit der Vergangenheit angehören. Weiter sollte man sich gedanken über wiederverwertbarkeit von Funktionen machen. Und da geht das gar nicht...

Ähnliche Themen

  1. FB mit mehreren InstanzDB´s beobachten
    Von blubnok im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 21.07.2016, 15:03
  2. Anypointer auf InstanzDB
    Von thomasgull im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 15.05.2010, 11:17
  3. Aktualwert aus InstanzDB sichern
    Von DJMetro im Forum HMI
    Antworten: 6
    Letzter Beitrag: 16.09.2008, 15:14
  4. Öffnen eines InstanzDB's verweigert!!!
    Von funkdoc im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 04.05.2007, 11:41
  5. Instanzdb neu erstellen
    Von Reto im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 19.10.2006, 16:05

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •