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

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

Thema: Bits hochzählen bei "slice" Befehl möglich?

  1. #1
    Registriert seit
    18.12.2014
    Beiträge
    21
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ist es möglich die Bits beim Slice-Befehl hochzuzählen.

    Also quasi so etwas:

    FOR #j := 1 TO 5 DO
    #DeData.MoData[#j].Status.%X4 := vartemp.%X[j];
    END_FOR;

    Hier sollen die Bits von vartemp genommen werden und jeweils das 4 bit des Status beschreiben.

    Diese Syntax "vartemp.%X[j]" funktioniert natürlich nicht. Ich habe aber noch nicht rausgefungen, ob und wie so etwas möglich ist.

    Habe das Problem mit "At" gelöst, würde es aber auch anderst gehen?

    Vielen Dank für eure Hilfe.
    Zitieren Zitieren Bits hochzählen bei "slice" Befehl möglich?  

  2. #2
    Registriert seit
    09.01.2012
    Beiträge
    466
    Danke
    25
    Erhielt 38 Danke für 35 Beiträge

    Standard

    Was ist vartemp für ein Datentyp?

    Ich begreife aktuell gerade nicht für was das gut sein soll?

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

    Tuc_Tuc (08.05.2015)

  4. #3
    Tuc_Tuc ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.12.2014
    Beiträge
    21
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Sind beides Bytes.

    Der Code sieht natürlich in meinem Projekt anderst aus. In dem hier dargestellten "vartemp" ist eine Portabfrage vom PCT-Tool realisiert. Die Information über den Ports gebe ich dann wieder an die einzelnen Geräte zurück.

    Wie geschrieben ich habe das mit meinem gefährlichen TIA Halbwissen jetzt mit "At" Sicht gelöst.

    vartemp Byte
    atvartemp at "vartemp" Array[0...7] of Bool

    FOR #j := 1 TO 5 DO
    #DeData.MoData[#j].Status.%X4 := atvartemp[#j];
    END_FOR;

    So in etwa sieht das jetzt aus.

    Nur müsste ich mit dem slice keine at variable anlegen und hätte das schneller runtergetippt. Jetzt frage ich mich aber auch, was das für die Laufzeit/Speicher bringt. Bzw. wann ist "At" sinnvoll, wann slice. Und geht das was ich im ersten Post geschrieben habe überhaupt irgendwie mit slice?
    Geändert von Tuc_Tuc (08.05.2015 um 16:13 Uhr)

  5. #4
    Registriert seit
    09.01.2012
    Beiträge
    466
    Danke
    25
    Erhielt 38 Danke für 35 Beiträge

    Standard

    Was hast du für eine Steuerung?

    Es sind keine Array nur Bytes?

    Code:
    #DeData.MoData.Status.%X4 := vartemp.%X4;

  6. #5
    Tuc_Tuc ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.12.2014
    Beiträge
    21
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja sind es. darum ja auch der Slice Befehl. Ist eine 1500er CPU

    Slice mal kurz erklärt:
    vartemp.x0 ein Zugriff auf das 1. Bit in der Variable
    vartemp.b0 ein Zugriff auf das 1. Byte in der Variable usw.

    Ist jetzt neu in Tia, darum wollte ich es mal versuchen, habs aber noch nicht 100% durchschaut.

  7. #6
    Registriert seit
    09.01.2012
    Beiträge
    466
    Danke
    25
    Erhielt 38 Danke für 35 Beiträge

    Standard

    Ich weis was Slice sind trotzdem danke.

    Der AT Befehl mach bei den 1500 meiner Meinung nach keinen Sinn da es den Slice befehl gibt!

    Und was ist jetzt deine Frage? Hab ich sie bereits beantwortet?

  8. #7
    Tuc_Tuc ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.12.2014
    Beiträge
    21
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Die Frage ist, wie ich den Slice Befehl in eine Schleife packe, damit er mir die einzelnen Bits abläuft.

    Zum Beispiel:

    FOR #j := 1 TO 5 DO
    #DeData.MoData[#j].Status.%X4 := vartemp.%X[#j];
    END_FOR;

    Hier sollen die Bits von vartemp genommen werden und jeweils das 4 bit des Status beschreiben.

    Diese Syntax "vartemp.%X[#j]" funktioniert nicht. Ich habe aber noch nicht rausgefungen, ob und wie so etwas möglich ist.

  9. #8
    Registriert seit
    09.01.2012
    Beiträge
    466
    Danke
    25
    Erhielt 38 Danke für 35 Beiträge

    Standard

    du brauchst doch keine Schleife und ein einzelnes Bit in ein Byte zu kopieren!

    Du willst das 4 bit von vartemp in den Status kopieren und fertig?

    Es ist kein Array nichts nur ein einziges bit?

  10. #9
    Tuc_Tuc ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.12.2014
    Beiträge
    21
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Doch die linke Seite ist ein Doppel-Array.
    Du sieht das bei MoDatea[#j] die Klammer ist. Nur der Status dort ist keins.

    Ich versuche es nochmal anschaulicher zu machen.

    UDT Bla:
    "Wert" Word
    "Status" Bool


    MoData Array[1...10] of bla

    FOR #j := 1 TO 5 DO
    #MoData[#j].Status := vartemp.%X[#j];
    END_FOR;

    So jetzt will ich mit dem Slice Befehl jeweils die Bits von Vartemp auf die verschiedenen "Status" übertragen.

    Wie ist das ohne At-Sicht möglich?

  11. #10
    Registriert seit
    09.01.2012
    Beiträge
    466
    Danke
    25
    Erhielt 38 Danke für 35 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ein doppel Array... was auch immer das ist.. Du meinst wahrscheinlich ein Array mit einem UDT indem ein Wort und ein Bit ist!

    Schreib deinen Code bitte so: Dann kann man ich auch lesen..

    Hast du den Code den du im TIA hast? Kopier den bitte hier mal rein. Ich denke du weiss selber nicht ganz was du brauchst...

    Code:
    #MoData[#j].Status.%X4 := vartemp.%X4;

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 16.01.2015, 14:11
  2. Antworten: 8
    Letzter Beitrag: 10.10.2012, 22:26
  3. Antworten: 4
    Letzter Beitrag: 31.01.2010, 12:55
  4. S5 nach S7, Befehl "B" bei Datenbaustein
    Von Nimrod_KTM im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 12.01.2010, 17:13
  5. Komando in SCL für den BEFEHL "ITB"
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 07.10.2004, 18:16

Stichworte

Lesezeichen

Berechtigungen

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