Schleife 24Byte mit XOR verknüpfen

D-DNRN

Level-1
Beiträge
84
Reaktionspunkte
13
Zuviel Werbung?
-> Hier kostenlos registrieren
Wer kann mir mal helfen?

Ich suche eine elegante Lösung einen Datenbereich (24Byte) in einem DB
Byte für Byte per XOR zu verknüpfen und das letzte Ergebnis auszugeben.

Es geht um die Überprüfung einer Datenübertragung in der das letzte Byte ein Checkbyte ist.

In etwa so:
IN Adresse (DBxyz .DBB0)
IN Länge (24 Byte)

dann in einer Schleife
#Ergebnis = #Ergebnis XOR DBB0
#Ergebnis = #Ergebnis XOR DBB1
#Ergebnis = #Ergebnis XOR DBB2
...
#Ergebnis = #Ergebnis XOR DBB23

OUT Ergebnis (MB xy oder was auch immer)

Aber wie mache ich so eine Schleife? Im AWL bin ich nicht so gewandt und ohne Pointer geht's sicher nicht so elegant.

Gruß
Dieter
 
Ungetestet und in SCL:
Code:
FUNCTION FC24 : BYTE
VAR_INPUT
  DB_No     :WORD;           (* Nummer des Datenbausteins *)
  SByte     :INT;            (* Start Byte Adresse *)
  QByte     :INT;            (* Anzahl der Bytes *)
END_VAR  

VAR_TEMP
  CByte     :INT;            (* Zähler für die Forschleife *)
  myByte    :BYTE;           (* Zwischenspeicher *)
END_VAR  

  myByte := 0; (* 0 oder 255 je nach Startbedingung *)
  FOR CByte := 0 TO QByte -1 DO
    myByte := myByte XOR WORD_TO_BLOCK_DB(DB_No).DB[SByte + CByte]; 
  END_FOR;
  FC24 := myByte;
END_FUNCTION
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier mal ein kurzes Programmbeispiel:

Code:
FUNCTION "FC_CHECKBYTE" : VOID
TITLE =Checkbyte
AUTHOR : KAI
FAMILY : SPSFORUM
NAME : CHECKBYT
VERSION : 1.0
 
VAR_INPUT
  ADRESSE : POINTER ;   
  LAENGE : INT ;    
END_VAR
VAR_OUTPUT
  ERGEBNIS : BYTE ; 
END_VAR
VAR_TEMP
  DB_NUMMER : WORD ;    
  SCHLEIFE : INT ;  
  ZWISCHENERGEBNIS : BYTE ; 
  DB_SPEICHER : WORD ;  
  AR1_SPEICHER : DWORD ;    
END_VAR
BEGIN
NETWORK
TITLE =DB-Register und Adressregister AR1 sichern
 
      L     DBNO; 
      T     #DB_SPEICHER; 
 
      TAR1  #AR1_SPEICHER; 
 
NETWORK
TITLE =ADRESSE (POINTER)
 
      L     P##ADRESSE; // POINTER
      LAR1  ; 
 
      L     W [AR1,P#0.0]; // POINTER DB-Nummer
      T     #DB_NUMMER; 
 
      AUF   DB [#DB_NUMMER]; 
 
      L     D [AR1,P#2.0]; // POINTER Bereichszeiger
      LAR1  ; 
 
NETWORK
TITLE =BYTE XOR => ZWISCHENERGEBNIS => ERGEBNIS 
 
      L     B [AR1,P#0.0]; 
      T     #ZWISCHENERGEBNIS; 
 
      L     #LAENGE; 
      L     1; 
      -I    ; 
NEXT: T     #SCHLEIFE; 
 
      L     #ZWISCHENERGEBNIS; 
      L     B [AR1,P#1.0]; 
      XOW   ; 
      T     #ZWISCHENERGEBNIS; 
 
      L     P#1.0; 
      +AR1  ; 
 
      L     #SCHLEIFE; 
      LOOP  NEXT; 
 
      L     #ZWISCHENERGEBNIS; 
      T     #ERGEBNIS; 
 
NETWORK
TITLE =DB-Register und Adressregister AR1 wiederherstellen
 
      AUF   DB [#DB_SPEICHER];
 
      LAR1  #AR1_SPEICHER; 
 
END_FUNCTION

Gruß Kai
 

Anhänge

  • OB1.pdf
    3,4 KB · Aufrufe: 43
  • FC200.pdf
    4,2 KB · Aufrufe: 47
  • DB200.pdf
    4,2 KB · Aufrufe: 36
  • VAT.jpg
    VAT.jpg
    306,1 KB · Aufrufe: 50
Hallo

FC 104 von Siemens (Standart Library unter TI-S7 Converting Blocks)
Verknüpfung zwei Tabellen d.h. zwei DB

#16#07 = UND-Verknüpfung
#16#08 = ODER-Verknüpfung
#16#09 = EXKLUSIV ODER-Verknüpfung
#16#0a = Addieren
#16#0b = Subtrahieren
#16#0c = Multiplizieren
#16#0d = Dividieren
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry das ich jetzt erst Antworte, Baustelle ...... :(

@Zotos & @Kai vielen Dank!

Ich hab Kai's AWL Version genommen da ich kein SCL habe und was soll ich sagen: Es klappt natürlich wunderbar.

Mal 'ne Frage:
Gibt's nicht irgendwo eine Art Downloadbereich in dem solche fertigen Bausteine (auch die ganz einfachen) veröffentlicht und gefunden werden können?

Wäre das sonst nicht etwas für ein neues Thema hier im Forum?

Man muss das Rad doch nicht jedesmal neu erfinden!
 
Ich hab Kai's AWL Version genommen da ich kein SCL habe und was soll ich sagen: Es klappt natürlich wunderbar.

Danke für die Rückmeldung. :)

Gibt's nicht irgendwo eine Art Downloadbereich in dem solche fertigen Bausteine (auch die ganz einfachen) veröffentlicht und gefunden werden können?

Man muss das Rad doch nicht jedesmal neu erfinden!

Hier im Forum gibt es eine solche Bausteinbibliothek nicht. Ich weiß auch nicht, ob so etwas machbar ist, obwohl ich eine solche Idee grundsätzlich gut finde. Ich sehe aber folgendes Problem:

Bei den Bausteinen hier handelt es sich um Lösungen für ganz spezielle Aufgaben. Bei einer Bausteinbibliothek reicht es also nicht, einfach nur die Bausteine aufzulisten, man muss zusätzlich eine genaue Aufgabenbeschreibung hinzufügen. Es geht also nicht ohne zusätzliche Arbeit, die jemand machen muss. Und die Frage ist doch, ob die Suchfunktion hier im Form nicht ausreichend ist, um solche Bausteine und Programmbeispiele zu finden.

Wie eine Bausteinbibliothek grundsätzlich aussehen könnte, kann man hier sehen:

http://www.oscat.de

Gruß Kai
 
...
Bei den Bausteinen hier handelt es sich um Lösungen für ganz spezielle Aufgaben.
...

100% Ack.

Ich denke das man jetzt speziell bei einer Aufgabe wie dieser, länger zum Suchen als zum programmieren braucht.

Ich hoffe dass Du die Frage auch nicht nur gestellt hast um etwas Fertiges zu bekommen. Sondern Dir die Lösungen angeschaut hast und dabei was gelernt hast und ähnliche Aufgaben in Zukunft selbst lösen kannst.

Ansonsten solltest Du in dem Fall dem Kai ein Honorar anbieten!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
100% Ack.
Ich denke das man jetzt speziell bei einer Aufgabe wie dieser, länger zum Suchen als zum programmieren braucht.
Genau das denke ich nicht, auch beim proggen für PC's gibts extrem viele verschiedene Anforderungen und trotzdem gibt es im Netz überall Bibliotheken in denen speziell die kleinen Lösungen gefunden werden können.
Überlegt mal wie oft Ihr schon eine Ewigkeit an einer Kleinigkeit gebastelt habt weils einfach nicht klappen wollte und nachher war es doch ganz einfach.

Hier, nur weil ich gerade drüber gestolpert bin: http://www.sps-forum.de/showthread.php?t=16207
Ein einfaches Problem, eine einfache Lösung aber trotzdem schon wieder auf 3 Seiten Thread gekommen.

Ist solch eine Lösung fertig könnte es doch einfach in ein spezielles Forum(Unterthema) kopiert werden und alle hätten was davon.

Ich hoffe dass Du die Frage auch nicht nur gestellt hast um etwas Fertiges zu bekommen. Sondern Dir die Lösungen angeschaut hast und dabei was gelernt hast und ähnliche Aufgaben in Zukunft selbst lösen kannst.

Ansonsten solltest Du in dem Fall dem Kai ein Honorar anbieten!
Danke der Nachfrage: Ich muß zugeben, ich hatte sogar ein schlechtes Gewissen das einfach so zu übernehmen.
Habe mich aber tatsächlich damit beschäftigt um das genauer zu verstehen.

Ich bin halt nicht der AWL Freak da ich nicht gerade aus dem Siemens Lager komme. Hatte viel mit Rockwell & GE-Fanuc zu tun, da ist Kop halt Mittel der Wahl. So tue ich mich mit AWL eben schwer und die Sache in Siemens mit Kop zu lösen war mir echt zu suspekt. ;);)
 
Zuletzt bearbeitet:
Zurück
Oben