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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: IN_OUT mit Indirekter Adressierung

  1. #11
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... diese Sache überlasse ich normalerweise dem SCL-Compiler ...

    Aber mal so "quick-and-dirty" :
    Code:
    LAR1 P##TEMP
    TAR2
    +AR1
    L W[AR1,p#0.0]
    T #DB_Nummer   // TEMP-Variable vom Typ WORD
    L D[AR1,P#2.0]
    T #QPointer       // TEMP-Variable vom Typ DWORD
     
    AUF DB [DB_Nummer]
    L #QPointer
    LAR1                 // nun solltest du im AR1-Register die korrekte Adresse haben
    probier das mal ...

    Gruß
    Larry

  2. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    jack911 (14.10.2011)

  3. #12
    SCM ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    31.03.2010
    Beiträge
    335
    Danke
    3
    Erhielt 33 Danke für 32 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... diese Sache überlasse ich normalerweise dem SCL-Compiler ...

    Aber mal so "quick-and-dirty" :
    Code:
    LAR1 P##TEMP
    TAR2
    +AR1
    L W[AR1,p#0.0]
    T #DB_Nummer   // TEMP-Variable vom Typ WORD
    L D[AR1,P#2.0]
    T #QPointer       // TEMP-Variable vom Typ DWORD
     
    AUF DB [DB_Nummer]
    L #QPointer
    LAR1                 // nun solltest du im AR1-Register die korrekte Adresse haben
    probier das mal ...

    Gruß
    Larry
    Das haut auch nicht hin!
    Jetzt hab ich immer noch die falsche stelle im AR1 stehen!

    Jetzt passts war noch beim Transferieren auf DIW das passt dann natürlich nimmer weil der db aufgeschlagen wird!
    Mfg
    Geändert von SCM (14.10.2011 um 10:54 Uhr)

  4. #13
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    ... ich habe es jetzt gerade mal meinem SCL-Compiler übergeben ...
    Der macht das davon :
    Code:
    LAR1 P##TEMP
    TAR2
    +AR1
    L DIW[AR1,p#0.0]
    T #DB_Nummer   // TEMP-Variable vom Typ WORD
    L DID[AR1,P#2.0]
    T #QPointer       // TEMP-Variable vom Typ DWORD
     
    AUF DB [DB_Nummer]
    L #QPointer
    LAR1                 // nun solltest du im AR1-Register die korrekte Adresse haben
    ... dann teste das doch bitte noch mal ...
    Geändert von Larry Laffer (14.10.2011 um 11:02 Uhr) Grund: Scheiß Kopiererei ...

  5. #14
    SCM ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    31.03.2010
    Beiträge
    335
    Danke
    3
    Erhielt 33 Danke für 32 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... ich habe es jetzt gerade mal meinem SCL-Compiler übergeben ...
    Der macht das davon :
    Code:
    LAR1 P##TEMP
    L DIW[AR1,p#0.0]
    T #DB_Nummer   // TEMP-Variable vom Typ WORD
    L DID[AR1,P#2.0]
    T #QPointer       // TEMP-Variable vom Typ DWORD
     
    AUF DB [DB_Nummer]
    L #QPointer
    LAR1                 // nun solltest du im AR1-Register die korrekte Adresse haben
    ... dann teste das doch bitte noch mal ...
    Hab das jetzt mal so gemacht dann funktionierts nimmer!
    Es steht schon beim ersten befehl die falsche db nummer!
    Hast du Temp als IN_OUT variable vergeben?

    mfg

  6. #15
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    ... ich habe nachträglich noch die AR2-Geschichte eingebracht.
    Ja ... mein TEMP-Pendand ist eine IN-OUT.

  7. #16
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Wo kommen denn deine Daten, die du der Schnittstelle übergibst, ursprünglich her ?

  8. #17
    SCM ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    31.03.2010
    Beiträge
    335
    Danke
    3
    Erhielt 33 Danke für 32 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Wo kommen denn deine Daten, die du der Schnittstelle übergibst, ursprünglich her ?
    Den Wert den ich übergebe ist eine IN Variable und in diesem fall ein Byte Temperatureingang von RTD Modul!
    Es stellt einen Multiplexer dar!Ich habe ein Gerät das 16 Temperatur eingänge hat und einen Ausgang!Dem Gerät sende ich eine Adresse und diesen wert von dem Adressierten Kanal bekomme ich zurück!
    Mfg

  9. #18
    SCM ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    31.03.2010
    Beiträge
    335
    Danke
    3
    Erhielt 33 Danke für 32 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... ich habe es jetzt gerade mal meinem SCL-Compiler übergeben ...
    Der macht das davon :
    Code:
    LAR1 P##TEMP
    TAR2
    +AR1
    L DIW[AR1,p#0.0]
    T #DB_Nummer   // TEMP-Variable vom Typ WORD
    L DID[AR1,P#2.0]
    T #QPointer       // TEMP-Variable vom Typ DWORD
     
    AUF DB [DB_Nummer]
    L #QPointer
    LAR1                 // nun solltest du im AR1-Register die korrekte Adresse haben
    ... dann teste das doch bitte noch mal ...

    Also dieser Code funktioniert soweit!
    Ohne das man den DB aufmachen muss wirds nicht gehen oder?

    Mfg

  10. #19
    SCM ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    31.03.2010
    Beiträge
    335
    Danke
    3
    Erhielt 33 Danke für 32 Beiträge

    Standard

    Sodale hier noch mal der Code der funktioniert
    Code:
          L     #CNT                        //Aktueller Schrittzähler
          T     #CHANNEL                    //Ausgang für Adressierung Multiplexer
          U     #TAKT                       //Abtasttakt
          FP    #_flanke[1]
          SPBN  m001
    
          TAR1  #RETTAR1                    //Adressregister retten
          TAR2  #RETTAR2                    //Adressregister retten
    
          LAR1  P##TEMP                     //Pointer auf erste relevante Daten setzen
          L     #RETTAR2                    //Adressregister 2 addieren für Multiinstanzfähigkeit
          +AR1  
          L     W [AR1,P#0.0]               //DB nummer auslesen
          T     #DB_NMB                     //Eintragen
          L     D [AR1,P#2.0]               //Pointer auslesen
          T     #QPOINTER                   //Eintragen
    
          AUF   DB [#DB_NMB]                //DB aufschlagen
          L     #QPOINTER                   //Pointer laden ins AR1
          LAR1  
          L     #CNT                        //Aktueller Schritt bzw. Temperaturwert
          L     2                           //Schrittweite 2 weil die Werte INT sind
          *I    
          SLW   3                           //Ins Pointerformat wandeln
          +AR1                              //Offset aktueller schritt mit einrechnen
          L     #INPUT                      //Eingangswert einlesen
          T     W [AR1,P#0.0]               //Auf Position schreiben die im AR1 steht
          L     W [AR1,P#32.0]              //Min auswerten
          <I    
          SPBN  min
          TAK   
          T     W [AR1,P#32.0]
    min:  L     W [AR1,P#0.0]               //Max auswerten
          L     W [AR1,P#64.0]
          >I    
          SPBN  max
          TAK   
          T     W [AR1,P#64.0]
    max:  L     #CNT                        //Schrittzähler laden
          INC   1                           //um eins erhöhen
          T     #CNT                        //wieder in schrittzähler variable schreiben
    
          LAR1  #RETTAR1                    //Adressregister restaurieren
          LAR2  #RETTAR2                    //Adressregister restaurieren
    
    m001: L     #CNT                        //Schrittzähler auf überlauf prüfen
          L     #LOOPCNT
          >I    
          SPBN  ende
          L     #CNT
          L     0
          T     #CNT
    ende: SET                               //Baustein immer mit vke 1 verlassen damit ENO immer 1 ist
          SAVE
    Mfg Mario

  11. #20
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich würde es so machen - dann bist du unabhängig davon, von wo die Daten kommen. Der eine (ggf. unnötige) Befehl frißt aber auch kein Brot ...

  12. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    SCM (14.10.2011)

Ähnliche Themen

  1. Problem mit indirekter Adressierung
    Von Astralavista im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 29.09.2010, 11:25
  2. Antworten: 12
    Letzter Beitrag: 02.06.2009, 10:19
  3. Antworten: 12
    Letzter Beitrag: 10.05.2007, 21:14
  4. Kleines Problem mit indirekter Adressierung
    Von TobiS81 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 02.05.2007, 12:31
  5. Antworten: 1
    Letzter Beitrag: 19.06.2003, 19:34

Lesezeichen

Berechtigungen

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