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

Ergebnis 1 bis 8 von 8

Thema: SCL Array Vergleich - S7-313C

  1. #1
    Registriert seit
    18.03.2013
    Ort
    Wittlich, RP
    Beiträge
    50
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    ich hab momentan ein Problem mit einem ASCII String, der in einem DB als ARRAY (HEX) vorliegt:

    in DB1 ab Byte 4 -> Array 0..320 of Byte

    davon möchte ich die ersten 16 Bytes vergleichen auf einen anderen String (in HEX)

    also prinzipiell

    IF Byte1 = W#16#4d THEN xyz , sprich wenn Byte1 = M

    bisher hab ich eine IF Abfrage mit 16 Vergleichen, das müsste aber doch durch eine FOR Schleife einfacher gehen oder? Ich weiß nur nicht wie ich das anstellen soll.

    Wäre um jede Hilfe dankbar.

    Gruß
    Sven
    Zitieren Zitieren SCL Array Vergleich - S7-313C  

  2. #2
    Registriert seit
    16.07.2013
    Ort
    Emden
    Beiträge
    62
    Danke
    15
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Wenn du Bytes vergleichen möchtest, wäre das B#16#..

    Schau mal in die Step7 SCL Dokumentation (sollte eigentlich mit bei Step7 dabei sein), wie diese Kontrollstruktur geschrieben wird, dann könntest du eventuell nochmal gezielter fragen. So recht ist mir nicht ersichtlich, wo es hakt.

    FOR i:= 4 TO 20 BY 1 DO
    ...;
    END_FOR;

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Hallo,
    du mußt dir auf den String eine AT-Sicht machen, die ihn als Array of Byte sieht.
    Die AT-Sicht kannst du dann in einer Schleife durchlaufen.
    Es gibt innerhalb halb von SCL aber auch String-Vergleichsroutinen (siehe SCL-Hilfe) - vielleicht macht es mehr Sinn, diese zu nutzen ...

    Gruß
    Larry

  4. #4
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Du kannst das auch symbolisch ansprechen.
    Es gibt auch die Möglichkeit, einen Stringvergleich zu machen.
    Wenn Du nur wissen willst, ob irgendein Wert = "M" ist, könnte das so aussehen:

    Code:
    VAR_TEMP
      Stringvergleich : BOOL;   
      i : INT;  
    END_VAR
    
    BEGIN
    
    FOR i:= 1 TO 16 DO
        Stringvergleich := EQ_STRNG(S1 :='M',S2 := "myDB".STR[i]); 
        IF Stringvergleich THEN
            // Mach irgendwas...
            EXIT;
        END_IF;
    END_FOR;
    
    END_FUNCTION
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  5. #5
    Registriert seit
    18.03.2013
    Ort
    Wittlich, RP
    Beiträge
    50
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hallo Leute, danke für eure antwort!

    ich hab folgendes vor: ich möchte mir die SN der MMC Karte auslesen und mit einer eingestellten SN vergleichen -> KnowHow Schutz via SN

    so sieht mein quellcode im moment aus:

    Code:
     
      
     extSN := RDSYSST(
            REQ        := TRUE,             // IN: BOOL
            SZL_ID     := W#16#11c,         // IN: WORD
            INDEX      := W#16#8,           // IN: WORD
            RET_VAL    := error,            // OUT: INT
            BUSY       := A125.6,           // OUT: BOOL
            SZL_HEADER := SZL_HEADER,       // OUT: STRUCT
            DR         := SN_IN             // OUT: ANY        
            );                              // INT
    
            
    
        EQUAL := 0;
    
        
        FOR i :=1 TO 16 DO                  
    
            IF SN_IN[i] <> SN[i] THEN
              EQUAL := EQUAL+1;        // Wenn ein ASCII (Hex) Zeichen anders ist
            END_IF;
    
        END_FOR;
    
        IF EQUAL > 0 THEN
            STP();            //  SPS Stoppen
        END_IF;
    Ich habe folgendes Problem damit: ich würde gerne die Arrays komplett prüfen. ABER ich hab das gefühl, da der SFC51 asynchron abgearbeitet wird, dass die For schleife (nur 1 zyklus) viel schneller fertig ist.
    habt ihr das schon einmal gemacht? oder ist ein anderer weg sinnvoller? gibt es gar einen "baustein fertig" aufruf für den sfc51, damit ich die for schleife erst danach abfrage?
    ist es so überhaupt sinnvoll zu vergleichen?

    gruß sven

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Hallo Sven,
    der SFC51 arbeitet asynchron. Du müßtest also den BUSY auf FALSE abfragen um sicher zu stellen, dass er die Daten zurück geliefert hat - also eine Art Schrittkette mit einbauen.
    Ob deine Vorgehensweise an sich sinnvoll ist das mußt du wissen ...

    Gruß
    Larry

  7. #7
    Registriert seit
    18.03.2013
    Ort
    Wittlich, RP
    Beiträge
    50
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hi larry!
    ich hab mir mal überlegt, ob ich mit einer case kette/struktur ggf ans ziel komme. was ich mich jedoch generell frage ist, warum ich den busy nicht bemerke, ob der true oder false ist. ich hab mal ganz blöd einfach mal if true then bool = true (arg vereinfacht) quasi als sr glied und mein bool wurde nicht true. ist denn überhaupt ein ausgang oder ein status aus dem sfc51 heraus abrufbar?

  8. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    In der Hilfe zu dem SFC steht:

    Sie starten den Lesevorgang, indem Sie beim Aufruf der SFC51 den Eingangsparameter REQ mit 1 belegen. Falls der Lesevorgang sofort ausgeführt werden konnte, liefert die SFC am Ausgangsparameter BUSY den Wert 0 zurück. Falls BUSY den Wert 1 hat, ist der Lesevorgang noch nicht abgeschlossen.
    Das kann also durchaus sein, dass Busy gar nicht 1 wird.
    Du mußt also, wie Larry schon sagte, Busy auf "False" abfragen, bevor du irgendwelche Ergebnisse aus dem SCF auswertest.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Sonstiges SCL: Problem beim Vergleich von zwei Datenwerten
    Von Beogradjanin im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 05.09.2013, 11:05
  2. Step 7 S7-SCL Warum "geht" dieser Vergleich nicht?
    Von -ASDF- im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 29.07.2013, 12:29
  3. Pointer Vergleich AWL -> SCL??
    Von Carsten77 im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 16.08.2011, 14:21
  4. Vergleich AWl <--> SCL
    Von nobug im Forum Programmierstrategien
    Antworten: 6
    Letzter Beitrag: 11.03.2008, 20:11
  5. ARRAY in SCL
    Von Anonymous im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 05.04.2005, 17:32

Lesezeichen

Berechtigungen

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