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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 13 von 13

Thema: Mit SFC20 "Blockmve" PEWs in DB schreiben

  1. #11
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Harald,

    vielleicht sind meine grauen Zellen schon eingeschlafen, kannst Du mir bitte die Begrenzung erklären:

    Code:
    //*** Länge des Peripherieeingangsbereich prüfen,
    //    darf nur 1 bis max Array-Größe von S_DM_Result_Data[1..64] sein 
          L     #I_Data_Laenge;             //darf nur 1..64 sein!
          L     65;                         //Größe+1 des Byte-Array S_DM_Result_Data[1..64]
          MOD   ;                           //auf 0..64 begrenzen, notfalls wrap
          SPN   loop;
          L     1;                          //Länge = 0! --> mit 1 ersetzen
    
    //*** Kopierschleife
    loop: T     #t_Laenge;                  //Schleifenzähler
    Wenn in #I_Data_Laenge z.B. 80 steht, wird dann nicht der #t_Laenge auf 15 vorbelegt, statt auf 64?

    Gruß
    Karl

  2. #12
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard

    Zitat Zitat von borromeus Beitrag anzeigen
    Wenn in #I_Data_Laenge z.B. 80 steht, wird dann nicht der #t_Laenge auf 15 vorbelegt, statt auf 64?
    Richtig. Das MOD sorgt einfach nur dafür, daß der Wert garantiert kleiner als 65 ist und die nachfolgende Schleife nicht außerhalb des internen Arrays schreibt. Das ist nur eine Notbremse für den Fall eines Programmierfehlers beim Bausteinaufruf. Die zweite Notbremse ist das Ersetzen der unzulässigen Länge=0 zu 1. Ich gehe davon aus, daß #I_Data_Laenge sich nach den ersten Programmtests nicht mehr dynamisch ändert. Mein MOD realisiert die normalerweise dann nicht mehr nötige Notbremse einfacher als Vergleiche.

    Man kann natürlich auch klassisch zwei Vergleiche auf < 1 und > 64 machen (unsigned!) und ggf. den Wert auf diese Grenzwerte setzen, oder die Schleife bei unzulässigen Werten überspringen, oder .... Besonders, wenn sich die übergebene Länge dynamisch ändern sollte.

    Wichtig ist nur, daß #I_Data_Laenge überhaupt geprüft wird und der Programmierer sollte festlegen, was bei unzulässigen Werten passieren soll.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #13
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Okay Harald, Danke, so habe ich es auch interpretiert!

Ähnliche Themen

  1. Antworten: 28
    Letzter Beitrag: 25.06.2015, 14:52
  2. "int" mit VAL_STRG in "string"
    Von Susi70 im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 17.02.2012, 14:03
  3. Probleme mit 12/24V "high" und 0V als "low" Auswertung
    Von PraktikantMarkus im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 14.12.2011, 01:37
  4. Antworten: 8
    Letzter Beitrag: 17.03.2009, 22:18
  5. Probleme mit SFC20 "BLKMOV"
    Von matchef im Forum Simatic
    Antworten: 25
    Letzter Beitrag: 18.12.2008, 16:19

Stichworte

Lesezeichen

Berechtigungen

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