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

Results 1 to 9 of 9

Thread: s7 indirekte adressierung in einem parametrierbarem fc

  1. #1
    Join Date
    20.06.2003
    Location
    Sauerland.NRW.Deutschland
    Posts
    5,450
    Danke
    99
    Erhielt 922 Danke für 628 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hallo

    irgendwie will es mir nicht gelingen.

    deklaration:
    12.0 in_out Hilfsbyte BYTE

    UN #Impuls_T
    SPB c000
    L #Hilfsbyte
    L 0
    ==I
    S #Hilfsbyte.0 <<<<====== so gehts natürlich nicht
    c000: NOP 0


    aber wie spreche ich dieses bit an ?

    mfg
    volker
    Reply With Quote Reply With Quote s7 indirekte adressierung in einem parametrierbarem fc  

  2. #2
    Anonymous Gast

    Default

    Die im Bausteinkopf deklarierten Variablen kannst Du mit L-ansprechen:

    L #Hilfsbyte // Adresse = 4.0
    L 0
    ==I
    S L 4.0

    Die Adresse findest Du im Bausteinkopf.

    Eine andere Variante ist das Hilfsbyte mit 00000001 zu "ver-UNDen":
    L #Hilfsbyte
    L 1
    UW
    T #Hilfsbyte

    Gruss
    Daniel

  3. #3
    Join Date
    19.06.2003
    Posts
    2,299
    Danke
    85
    Erhielt 274 Danke für 179 Beiträge

    Default

    Dein Beispiel sieht so aus, als wenn es nur darum ginge ein Bit im Hilfsbyte zu setzen. Dann kannst Du schreiben:
    Code:
    L #Hilfsbyte
    L 1	 // 1 für .0, 2 für .1, 4 für .2 usw.
    OB	// setzt bit im Muster, für Rücksetzen nimmst Du UB mit 
    	// einem Muster aus 0 für das rückzusetzende Bit und 	// ansonsten Einsen.
    T #Hilfsbyte
    Wenn Du viel mit den Bits machen willst, ist das zu umständlich.
    Dann hilft die alte Sache mit einem "Schmiermerker"-Wort:
    Code:
    L #Hilfsbyte
    T MB1
    S M 1.0
    // Hier können nun viele weitere Dinge mit den Merkern 1.0 bis 1.7
    // folgen. Am Ende&#58;
    L MB1
    T #Hilfsbyte
    Nun gäbe es noch die Möglichkeit, dass dein Hilfsbyte die Nummer des Bytes enthalten soll, dessen Bit 0 Du benutzen willst. Ich mache es hier mal mit Bit 3 stat 0, weil man dann besser sieht, wo es hingehört:

    Code:
    L #Hilfsbyte	
    L 8		// 8 bits weiter
    *D
    L P#M0.3	// ein Zeiger auf &#40;letztlich die Adresse von&#41; 			//Merker 0.3
    +D		// Zeiger sind Doppelworte bzw. ein DW lang.
    T MD2		// irgenein Zwischenspeicher.
    		// wenn Hilfsbyte den Wert 7 hatte enthält
    		// er nun die Adresse von M7.3	
    S M&#91;MD2&#93;	// setze den Merker, dessen Nummer in MD2 		// steht

  4. #4
    Anonymous Gast

    Default

    Quote Originally Posted by Zottel
    Dein Beispiel sieht so aus, als wenn es nur darum ginge ein Bit im Hilfsbyte zu setzen. Dann kannst Du schreiben:
    nein. ich muss mindestens 2 bits daraus ansprechen. das ganze wird ein schieberegister mit impuls/pause für das output-byte

    mit code 1 könnte ich was machen.
    da ich auf schmiermerker verzichten wollte kommen code 2 und 3 nicht in frage.

    -------------------------------------------

    aber die antwort vom gast finde ich recht gut. an genau sowas hatte ich gedacht.

    L #Hilfsbyte // Adresse = 4.0
    L 0
    ==I
    S L 4.0

    da bei mir die adresse im deklarationsbereich 12 ist gehe ich mal davon aus, dass ich S L 12.0 bzw U L 12.7 benutzen muss.

    Da es schon fast 16.00 uhr ist werde ich das erst am montag testen.
    Irgendwann muss man ja auch mal feierabend sein.

    danke für eure hilfe.
    ich melde mich dann nach dem test

    mfg volker

  5. #5
    Join Date
    20.06.2003
    Location
    Sauerland.NRW.Deutschland
    Posts
    5,450
    Danke
    99
    Erhielt 922 Danke für 628 Beiträge

    Default

    mfg volker[/quote]

    kurzer nachtrag.

    bis jetzt habe ich das folgendermassen gelöst:

    im deklarationsteil habe ich 8 temp-variablen angelegt (adr 0.0-0.7)
    (Hilfsbyte_Bit_0 - ....._7)

    L #Hilfsbyte
    T LW 0

    mit #Hilfsbyte_Bit_0 - 7 kann ich dann auch die Bits ansprechen.

    bis montag

    mfg
    volker

  6. #6
    Join Date
    19.06.2003
    Posts
    2,299
    Danke
    85
    Erhielt 274 Danke für 179 Beiträge

    Default

    Dann (mehrere Bits) ist das Beispiel 2 das richtige, nur verwendest Du halt eine Reihe Bits im Bereich der Lokalvariablen.

    Mit "indirekter Adressierung" hat das wenig zu tun.

    Zum Schieben gibt es spezielle Befehle. Du must dann nicht jedes Bit "anfassen", sondern eventuell das erste und letzte, wenn Du etwas hineinschiebst oder Überträge in ein anderes Wort benötigst.

    Das letzte Beispiel kann anstelle der Schmiermerker in ähnlicher Form auch mit den Adressregistern AR1 oder AR2 realisiert werden. (Siehe Hilfe zu STEP7)

    Schmiermerker haben manchmal den Vorteil, das der Code 1:1 auf andere SPS (S5 oder ganz andere Hersteller übertragbar ist).

  7. #7
    loop2003 Gast

    Default

    Hallo Volker,

    probiers mal damit:

    deklaration:
    12.0 in_out Hilfsbyte BYTE

    UN #Impuls_T
    SPB c000

    L P##Hilfsbyte //lädt einen Zeiger auf dein Hilfsbyte
    LAR1
    L #Hilfsbyte
    L 0
    ==I
    S [AR1,P#0.0] // Setzt Bit 0 von Hilfsbyte
    c000: NOP 0


    Gruss
    loop
    Reply With Quote Reply With Quote Re: s7 indirekte adressierung in einem parametrierbarem fc  

  8. #8
    Join Date
    02.07.2003
    Posts
    17
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default

    Hallo,

    Loop2003 hat recht! So müsste es funktionieren.

    @Loop: Grüße nach China. Das du auch überall Breitband haben musst, tztztztz...

    B72

  9. #9
    Join Date
    20.06.2003
    Location
    Sauerland.NRW.Deutschland
    Posts
    5,450
    Danke
    99
    Erhielt 922 Danke für 628 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by loop2003
    Hallo Volker,

    probiers mal damit:

    deklaration:
    12.0 in_out Hilfsbyte BYTE

    UN #Impuls_T
    SPB c000

    L P##Hilfsbyte //lädt einen Zeiger auf dein Hilfsbyte
    LAR1
    L #Hilfsbyte
    L 0
    ==I
    S [AR1,P#0.0] // Setzt Bit 0 von Hilfsbyte
    c000: NOP 0

    Gruss
    loop
    Alles klar. hab ich eben getestet und läuft wunderbar.

    bei der variante mit
    L 14.0
    usw
    muss ich, wie in meiner variante, mehrmals schieben.

    danke für eure hilfe
    mfg
    volker
    Reply With Quote Reply With Quote Re: s7 indirekte adressierung in einem parametrierbarem fc  

Similar Threads

  1. Step 7 indirekte Ardessierung in einem FB oder aus einem FB
    By CapriSonne:) in forum Simatic
    Replies: 2
    Last Post: 19.03.2018, 11:30
  2. Step 7 Indirekte Adressierung von Global DB von einem FB aus
    By TomDark in forum Simatic
    Replies: 2
    Last Post: 01.12.2016, 17:00
  3. Step 7 Indirekte Adressierung
    By Junge in forum Simatic
    Replies: 9
    Last Post: 06.08.2015, 10:08
  4. Indirekte Adressierung
    By Kuddel30 in forum Simatic
    Replies: 4
    Last Post: 20.11.2009, 12:52
  5. Indirekte Adressierung von einem DB
    By Sirus in forum Simatic
    Replies: 7
    Last Post: 14.08.2009, 18:08

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •