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

Ergebnis 1 bis 5 von 5

Thema: Die Peripherieadresse des Encoder als Zeiger verwenden...

  1. #1
    Registriert seit
    25.01.2014
    Beiträge
    9
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    ich bin neu auf dieser Seite...und habe gleich auch eine spezielle Frage...
    Erstens habe ich einen Encoder von Pepperl & Fuchs
    Typ PVM58N - 011AGR0BY - 1213
    PartNr. 243671
    Vers. 2.2 Interface : Profibus
    VCC 10-30V
    SerNo. 40000019998969
    Erstens weiß ich nicht welchen Encoder ich aus der Hardware nehmen soll
    und 2tens weiß ich auch nicht wo ich suchen soll...denn alle Encoder die ich
    gefunden habe passen nicht zu dem...vielleicht bin ich auch einfach nur Blind...
    Wäre froh wenn ihr mich diesbezüglich unterstützen könntet...
    Jetzt aber zum eigentlichen Problem :
    Da befindet sich eine Detailbeschreibung im Anhang....mit entsprechenden Screenshots....
    Alle Fragen sind in rot gekennzeichnet...
    Vielen dank schon mal im voraus für eure Mühe und kooperative zusammenarbeit...
    Servus
    lion1702
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Die Peripherieadresse des Encoder als Zeiger verwenden...  

  2. #2
    lion1702 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    25.01.2014
    Beiträge
    9
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo zusammen

    ich bin neu hier...und hab gleich ein paar Fragen...

    Habe alles im Anhang dokumentiert mit screenshots....alle Fragen sind rot gekennzeichnet...

    Der Encoder hat folgende Daten

    Pepperl & Fuchs

    TYP : PVM58N - 011AGR0BY - 1213
    Part Nr : 243671
    Version : 2.2 Interface : Profibus
    VCC 10V - 30V
    SerNo. 40000019998969

    Danke für eure Hilfe im voraus...und eure kooperative zusammenarbeit

    Servus
    Lion1702
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren periperiadresse vom Encoder umwandeln zum pointer  

  3. #3
    Registriert seit
    23.11.2012
    Ort
    Österreich
    Beiträge
    147
    Danke
    48
    Erhielt 19 Danke für 19 Beiträge

    Standard

    hallo lion,

    habe mich lange in deine Situation versucht hinein zu steigern, bin mir aber noch nicht ganz sicher ob ich deine Problemstellung richtig verstanden habe.
    Ich werde aus deiner Netzwerk beschreibung nicht ganz schlau. Poste beim nächsten mal den gesamten Code. Dann ist es für leichter das Programm zu verstehen.

    zu Frage 1: SLD 3 ist, wie du schon sagtest, eine Schiebefunktion für ein Doppelwort. Jedoch haben nur REAL-Zahlen Kommastellen und die können mit der RND Funktion abgeschnitten. Bei SLD werden die Bits um n-Stellen nach links verschoben und die freigewordenen Stellen werden mit 0 aufgefüllt. Das Zahlenformat bleibt gleich.
    Pointer ist kein Zahlenformat. Es ist eine Funktion um auf einen bestimmten Speicherbereich zu zeigen.
    Aus der Peripherieadresse kannst du alles Mögliche lesen. In deinen Fall wird ein Binär Code als Wort übertragen. Mehreres findest du im Benutzerhandbuch des Encoders.

    LAR1 Funktion verhält sich anders:
    LAR1 lädt das Adreßregister AR1 mit dem Inhalt von AKKU 1 (32 Bit-Pointer). AKKU 1 und AKKU 2 werden nicht verändert. Die Operation wird ausgeführt, ohne die Statusbits zu berücksichtigen oder zu beeinflussen.
    L PED(AR1,P#0.0) hast du dich vertippt, oder steht das wirklich so im Programm. Das kann ich mir schwer vorstellen und meine S7 erlaubt diese schreibweise nicht. Entweder du ladest ein Peripherie-Doppelwort oder du zeigst auf den Speicherbereich 0.0 des AR1, aber beides kommt mir merkwürdig vor.

    L PEW: Peripherie Eingangs Wort - ladet das Eingasngwort
    T PAW: Peripherie Ausgangs Wort - transferiere in das Ausgangswort

    Frage 4: Hier hast du eine Und-Funktion für Doppelwörter UD=Und Doppelwort. Funktioniert gleich wie die Bool,sche Und-Verknüpfung.
    Warum es so geschrieben worden ist, musst den Programmierer des Bausteins fragen und was er sich dabei gedacht hat.

    Ohne dem restlichen Programmcode kann man nur spekulieren.

    Deine Platzhalter Variable werden entweder im Programm verwendet oder der Startwert wurde mit 1 deklariert.

    Du müsstest mir mal erklären was L-Bits sind. L B#16#FF bedeutet dass dieser in den AKKU1 geladen wird. FF=255=11111111
    und diese werden dann mit T DBB46 in das Byte 46 transferiert.

    Warum wird es 430 multiplizieren? Kann ich dir auch nicht genau sagen, ich tippe aber das es irgendein maximal Wert ist, z.B. von der 430cm Fahrstrecke oder Hebehöhe. Aber das kann ich nicht mit Sicherheit sagen.

    letzte Frage: Der Encoder ist nur für die Geschwindigskeit auswertung vorgesehen. Eine Referenzfahrt wird im Bedienerprogramm geschrieben, ausgewertet und gesteuert.

    Ich hoffe ich konnte deine Fragen so gut es geht beantworten. Und poste beim nächsten mal den gesamten Programmcode mit.

    gruß
    marco

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.255
    Danke
    537
    Erhielt 2.705 Danke für 1.954 Beiträge

    Standard

    1. Das Programm scheint in Ordnung zu sein.

    Es wird die Eingangsadresse in das Pointerformat überführt und danach werden
    2 x je 4 Byte geladen.
    1. 4 Byte (Eingangsadresse + 0) nach DBx.DBD40
    2. 4 Byte (Eingangsadresse + 4) nach DBx.DBD44

    Das 1. Ausmaskieren entfernt offenbar Statusbits, übrig bleibt die Position.
    Diese wird normiert (*430…), das ist Abhängig vom Encoder (Inc/Umdr.) und von der Mechanik der Maschine (Getriebe, Zahnreihen, Reibrad…)
    Raus kommt dann z.Bsp ein Wert in mm als Gleitpunkt.

    2. Im DB (DBD40+44) sieht man die Funktionen der einzelnen Bits, die weitere Ausmaskierung kann man sich da ableiten.

    3. Man sollte möglichst die Bedienungsanleitung des Encoders inkl. der Profibusschnittstellenbeschreibung heben, dann kann man das nachlesen.

    4. Die Hardwarekonfig scheint nicht korrekt. Es werden 8 Byte gelesen, also muß man auch mindestens 8 Byte in der Hardwarekonfig eintragen.
    Die richtige GSD ist dazu eigentlich unabdingbar.
    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

  5. #5
    Registriert seit
    24.10.2007
    Ort
    Niederlande
    Beiträge
    673
    Danke
    22
    Erhielt 143 Danke für 135 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier ein link nach dass handbuch von die encoder: http://files.pepperl-fuchs.com/selec...t0242__ger.pdf

    Fur dass umsetsen von dass INT adress nach ein Pointer must dass INT multiplizieren mit 8 und SLW 3 = * 8
    Code:
     
    L     534  //Adres wie INT
    SLW 3     //Adres * 8 = Pointer adres 534.0
    LAR1      // P# 534.0 in AR1 laden
    L     PED [AR1,P#0.0]      // L PED 534
    L     PED [AR1,P#4.0]      // L PED 538
    L DBD 40 // Lädt den Inhalt von DBD40…also die Statusbits
    L W#16#1FFF // Frage???? Was bringt mir diese Ausmaskierung????
    UD
    T #EncoderPosition // Das ergibt dann angeblich die Encoderposition…??? Woher weiß man
    soetwas???
    U #PVS58.Input.ActualValue_23 // Dieses bit ist immer 1…für mich ist das nur ein
    Platzhalterbit…aber durch die verschieden Wandlungen ist das bit eben 1…Ich versteh auch nicht
    warum man soetwas macht ????
    SPBN m001 // Springe wenn VKE = 0…so da das bit zuvor 1 ist durchläuft es auch diesen Part…
    L B#16#FF // Hier werden nur die L-bits ausmaskiert…wobei dieses auch keine Änderung mit
    sich bringt auf den Zahlenwert????
    T DBB 46 // Dann ergibt das wieder die Encoderposition….
    Code:
    L DBD 40 // Lädt den Inhalt von DBD40…also die Statusbits
    L W#16#1FFF // Zahlwert = 25 bit
    UD  // filter bit 26 - 31 aus Eingangwert
    T #EncoderPosition // Encoder wert ist max 25bit
    U #PVS58.Input.ActualValue_23 // Kontrole auf negatief zahl ( solte eigenlich #PVS58.Input.ActualValue_24 sind)
    SPBN m001 // Springe wenn Encoderwert positief ist.
    L B#16#FF //
    T DBB 46 // DBD 46 wurde negatief   Gibt geleiche resutat wie L  #EncoderPosition       NEGD   T #EncoderPosition 
              
    Normal ist dieser encoder geeigent om auch die geschwindigkeit auszugeben, aber ich vermutte dass die richtige GSD datei nicht geladen ist.

    Bei ein steigende flanke von Ausgangsbit 31 wurde die Preset wert in encoder ubernommen und nullspannungssicher in einem EEPROM abgespeichert.

    Edit: Ralle war schneller

    Gruss,

    Joop
    Geändert von JoopB (25.01.2014 um 18:57 Uhr)

Ähnliche Themen

  1. ANY-Zeiger als Rückgabewert
    Von Bensen83 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 04.06.2011, 11:41
  2. Antworten: 17
    Letzter Beitrag: 08.03.2011, 10:00
  3. Verwenden des Taktmerkerbytes
    Von Baracuss im Forum Simatic
    Antworten: 61
    Letzter Beitrag: 19.11.2010, 21:33
  4. Start Variablen Zeiger in DB verwenden?
    Von BorisDieKlinge80 im Forum Programmierstrategien
    Antworten: 15
    Letzter Beitrag: 20.05.2008, 09:06
  5. Antworten: 5
    Letzter Beitrag: 02.07.2007, 23:07

Stichworte

Lesezeichen

Berechtigungen

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