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

Ergebnis 1 bis 6 von 6

Thema: Anypointer Speicherbereich SFC20 kopiert nicht

  1. #1
    Registriert seit
    12.09.2006
    Beiträge
    125
    Danke
    26
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forum,
    habe über dieses Thema bisher nichts gefunden deshalb meine Anfrage:
    ich habe an einem FB mehrere IN Parameter als INT.Diese werden im FB zu einem Anypointer zusammengesetzt. Damit wird der SFC 20 Quelle/Ziel beschaltet. Die Quelle ist ein DB das Ziel ist der Instanz DB. Muss an dem Anypointer -SFC20 -Quelle (ist im FB enthalten) für den Speicherbereich dann die 84 für DB oder der Wert 85 für DI parametriert werden ? Da es ja IN Parameter sind könnte mein Pointer für die Quelle ja aus dem Instanz DB kommen also 85 oder ?
    Allerdings kommen die Daten ja aus einem DB.....Hm???

    Ich bin heute darüber gestolpert . Es gibt da anscheinend bei den CPU's Eigenschaften die auf diesen unterschied Wert legen . Der besagte FB wurde mehrfach verwendet ohne Probleme mit dieser 85 im Speicherbereich für den Anypointer-am SFC20-Quelle. Es werden einfach Daten aus einem DB in den InstanzDB kopiert. Heute jedoch nicht war eine neu Inbetriebnahme an einer älteren S7/300...... Ich konnte diesen Fehler auch nicht nachstellen an anderen CPU's. Weder PLCSIM noch andere reale CPU's stören sich an der Angabe des Speicherbereiches und kopieren die Daten . Nur diese eine CPU heute nicht.

    Nun bin ich allerdings schon zu Haus und kann erst morgen näheres zur Hardware sagen. Es muss aber an der Angabe des Speicherbereiches liegen .Da in diesem speziellen Fall die Änderung von Speicherbereich 85 in 84 den gewünschten Effekt gebracht hat. Und die Daten wurden wie gewünscht kopiert.

    Mich interessiert eben nun warum ? Da der Baustein von mir ist Wenn ich einen Fehler gemacht habe ok ......
    Für Infos wäre ich sehr dankbar. Wenn nähere Infos gewünscht sind Poste ich sie gern morgen hinterher.

    Ich hoffe das versteht irgendeiner was ich hier geschrieben habe*grins
    Zitieren Zitieren Anypointer Speicherbereich SFC20 kopiert nicht  

  2. #2
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.242 Danke für 973 Beiträge

    Standard

    Es gibt mehrere "Sorten" 300er -CPUs.
    Sie arbeiten intern mit unterschiedlichen Prozessoren.
    Beim SFC20 tritt dann unterschiedliches Verhalten auf.
    Bei manchen CPUs funktionieren z.B, überlappende Speicherbereiche von Quelle und Ziel bei einer 312 geht das nicht.
    Das Kopieren nach DI ist - soweit ich es kenne - auch noch abhängig von der Firmware.
    Ich nutze es generell nicht.

    Gruß
    Dieter

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

    spqr76 (14.01.2013)

  4. #3
    spqr76 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2006
    Beiträge
    125
    Danke
    26
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Das war mir nicht bewusst.
    Der FB ist für eine Kamera die Bauteile kontrolliert.
    Da diverse Bauteilinformationen (Teilenummer/Baudatum etc ) zur Produktrückverfolgung in den SendeString zur Kamera integriert werden müssen(TCP/IP), sah ich keine andere Möglichkeit als einen Indirekten Anypointer am SFC20 in meinem FB zu verwenden. Um aus den vorhandenen DB's die einzelnen Infos raus zu kopieren.
    Da es ganz unterschiedliche Maschinenherstelleter mit diversen Bausteinnummern bei uns gibt lag eben die Wahl einen FB zu nehmen am nächsten. Deshalb auch das schreiben in den InstanzDB. Und wegen der Symbolik die spare ich mir dadurch.

  5. #4
    Registriert seit
    20.03.2010
    Beiträge
    59
    Danke
    10
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Also ich habe noch nie etwas anderes eingetragen wie eine 84.
    Ich habe mich da immer an folgendes Beispiel von einem Sylvio Blanke gehalten das ich vor längerer Zeit mal im Netz gefunden habe.

    Code:
    // der ANY-Zeiger wird nun mit Daten belegt
    LAR1 P##ANY_Zeiger // Adressregister mit Anfangsadresse der temp.Variable laden Hier L0.0
    L W#16#1002 // Type Byte
    T LW [AR1,P#0.0] // in BYte n und n+1 laden
    L 10 // Anzahl der Bytes
    T LW [AR1,P#2.0] // in Byte n+2 und n+3 laden
    L 1 // DB-Nr
    T LW [AR1,P#4.0] // in BYte n+4 und n+5
    L W#16#8400 // Operandenbereich hier DBX
    T LW [AR1,P#6.0] // in Byte n+6 und n+7
    // wir laden hier eine Konstant zB 30 als Byteanfangsadresse, hier kann man über MWxx xbeliebige
    // Werte laden. Die Byteadresse muss dreimal nach links geschoben werden, weil die unteren
    // drei Bits die Bitadresse beinhalten als 0 bis 7. Wir wollen 30.0 adressieren.
    L 30 // Quellenanfang (Zeiger) wir woolen aus DB1.DBX30.0 anfangen
    SLW 3 // dreimal nach links (im Akku 1)
    T LW [AR1,P#8.0] // in Byte n+8 und n+9
    // Der ANY_Zeiger sollte jetzt komplett vorbelegt sein, war doch einfach oder ?
    Den Fortschritt verdanken die Menschen den Unzufriedenen.
    Aldous Huxley

  6. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von Pinky Beitrag anzeigen
    Also ich habe noch nie etwas anderes eingetragen wie eine 84.
    Ich habe mich da immer an folgendes Beispiel von einem Sylvio Blanke gehalten das ich vor längerer Zeit mal im Netz gefunden habe.

    Code:
    // der ANY-Zeiger wird nun mit Daten belegt
    LAR1 P##ANY_Zeiger // Adressregister mit Anfangsadresse der temp.Variable laden Hier L0.0
    L W#16#1002 // Type Byte
    T LW [AR1,P#0.0] // in BYte n und n+1 laden
    L 10 // Anzahl der Bytes
    T LW [AR1,P#2.0] // in Byte n+2 und n+3 laden
    L 1 // DB-Nr
    T LW [AR1,P#4.0] // in BYte n+4 und n+5
    L W#16#8400 // Operandenbereich hier DBX
    T LW [AR1,P#6.0] // in Byte n+6 und n+7
    // wir laden hier eine Konstant zB 30 als Byteanfangsadresse, hier kann man über MWxx xbeliebige
    // Werte laden. Die Byteadresse muss dreimal nach links geschoben werden, weil die unteren
    // drei Bits die Bitadresse beinhalten als 0 bis 7. Wir wollen 30.0 adressieren.
    L 30 // Quellenanfang (Zeiger) wir woolen aus DB1.DBX30.0 anfangen
    SLW 3 // dreimal nach links (im Akku 1)
    T LW [AR1,P#8.0] // in Byte n+8 und n+9
    // Der ANY_Zeiger sollte jetzt komplett vorbelegt sein, war doch einfach oder ?
    Aber ich empfehle, SLD 3 zu verwenden, da sonst bei Any, die weit hinten in einen großen DB "zeigen" die korrekte Adresse zerstört wird (die 3 linken Bit des Wortes fallen ja einfach weg!).
    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

  7. #6
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @Pinky (Signatur)

    Code:
    Den Fortschritt verdanken die Menschen den Unzufriedenen. Aldous Huxley
    Und ich dachte immer...
    Dem Fortschritt verdanken die Menschen die Unzufriedenheit

Ähnliche Themen

  1. FB2 konnte nicht kopiert werden
    Von Bro im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 15.02.2011, 07:26
  2. FB kann nicht kopiert werden
    Von Metulski im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 27.10.2010, 08:07
  3. OB kann nicht kopiert werden
    Von SPS_NEU im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 06.04.2009, 14:11
  4. Baustein kann nicht kopiert werden
    Von geduldiger im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 07.08.2007, 17:02
  5. OB kann nicht kopiert werden
    Von ouzo im Forum Feldbusse
    Antworten: 16
    Letzter Beitrag: 10.01.2007, 22:01

Lesezeichen

Berechtigungen

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