Verstehe Programminhalt nicht! Bitte um Hilfe =)

Techniker2012

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Liebe Community =)

Ich bin NEU hier und bin dringend auf eure Hilfe angewiesen.
Ich bin angehender Techniker Fachrichtung Energie und Automatisierungstechnik... Und muss zu meinem Abschluss als Techniker eine Technikerarbeit abgeben.

Die Technikerarbeit besteht darin das ich eine IFM O2I100 Kamera mit der CPU S7 315 mit übergeordneten CP 343 1 Lean habe.

Jetzt habe ich von der IFM Seite ein vorgefertigtes Programm bekommen. Den ich bisher recht gut mit meinen Kenntnissen verstanden habe.

Nur bräuchte ich evtl Hilfe bei diesen 2 Netzwerken wo es um den Pointer und die Indirekte Adressierung geht.
Im NW2 habe ich als Kommentar so einigermaßen das hingeschrieben was ich verstanden habe!
Hilfestellung sind eher im NW 1 beim Maskieren vorhanden...


Variable RECV_BUF in Variable und zeigt mit dem Pointer auf mein DB wo die Daten aus der Kamera gespeichert werden.


NW1
//---------------------------------------------
// Maskieren
//---------------------------------------------


TAR2 // Was wird hier gemacht?
UD DW#16#FFFFFF // Wieso maskiere ich nicht alle Felder? also 8 bits? sondern nur 6 Bits?
LAR1 P##RECV_BUF // Lade die Adresse vom DB222 in den Adressregister -> macht sinn
+AR1 // abder wieso muss ich das jetzt miteinander addieren? HILFE????? :p
//---------------------------------------------
// Kopiere den ANY-pointer nach TEMP Zwischenspeicher[VAR_BUF]
//---------------------------------------------
L W [AR1,P#0.0]
T LW 0
L B [AR1,P#2.0]
T LB 2
L B [AR1,P#3.0]
T LB 3
L W [AR1,P#4.0]
T LW 4
L W [AR1,P#6.0]
T LW 6
L W [AR1,P#8.0]
T LW 8

NW2:

//---------------------------------------------
// Erlaube mehrfache instanzen
//---------------------------------------------
LAR1 P##RECV_BUF // Adresse des Any-Pointer [DB222] in AR1 Legen
//---------------------------------------------
// Kopiere ANY-pointer nach TEMP Zwischenspeicher
//---------------------------------------------


L W [AR1,P#0.0] // Syntax ID vom Any Pointer [DB222] in
T LW 0 // Any-Pointer [TEMP] eintragen


L #RCV_LEN // Länge
T LW 2


L W [AR1,P#4.0] // DB- Nummer [Keine Veränderung]
T LW 4
L W [AR1,P#6.0] // Bereichszeiger 16 Bit ----> Stimmt meine Aussage???? -_-
T LW 6
L W [AR1,P#8.0] // Bereichszeiger 8 Bit [Da FC6(Ag_Send) nur Bytes Empfangen kann
L #BIT_OFFSET // wird hier der Wert mit BitOffset erweitert] BitOffset zähle ich in vorherigen NW hoch!
+I
T LW 8


ICH DANKE SCHON MAL FÜR DIE HILFESTELLUNG
 
ich habe im Moment kein S7 zur Hand und versuche es mal so. Die Kollegen werden mich schon berichtigen, falls was nicht stimmt.

Code:
NW 1

//bilde einen Pointer auf die zu kopierenden Werte
TAR2                        // Lade Inhalt aus AR2 in Akku1
UD DW#16#00FFFFFF           // UND-Verknüpfung von Akku1 mit Akku2 im Akku1 ablegen

LAR1 P##RECV_BUF            // Lade einen Pointer auf die Variable RECV_BUF

+AR1                        //  addiere den oben gebildeten Inhalt aus Akku1-L zu dem Pointer auf RECV_BUF in AR1

//kopiere jetzt die über AR1 adressierten Werte (P#0.x ist ein Offset) in den VAR_BUF
L W[AR1,P#0.0]             // lade das Wort, das mit AR1 adresiert ist
T LW 0                     // transferiere es in das Lokalwort 0
L B[AR1,P#2.0]             // lade das erste Byte vom nächsten Wort
T LB 2                     // transferiere es in das Lokalbyte 2
L B[AR1,P#3.0]             // transferiere es in das Lokalbyte 3
// usw.  ...

Es gibt die OP-Liste und die Handbücher usw. zum Download ;)
http://support.automation.siemens.c...ib.csFetch&nodeid=36149098&forcedownload=true
 
UD DW#16#FFFFFF // Wieso maskiere ich nicht alle Felder? also 8 bits? sondern nur 6 Bits?
Softmachine hat ja schon einiges genauer erklärt, allerdings bei dieser Zeile geht es nicht um Bits sondern um Nibbles.
Also es werden die ersten 6 halben Byts (4 Bit's = 1 Nibble = 1111 = F) ausmaskiert (UW). Die beiden restlichen Nibbles stehen einmal für die Bereichskennung (Eingang, Ausgang, Merker, u.s.w) und einmal ob es sich um eine "Bereichsinterne" oder um eine "Bereichsübergreifende" Adressierung handelt.
 
Zurück
Oben