IN_OUT mit Indirekter Adressierung

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 ...
Ja ich lass es jetzt auch mal so!
Außerdem läuft es auf einer Soft SPS performance Probleme gibts da sowieso nicht!

Danke für deine Hilfe!!!!

Mfg
 
Mal ne Frage,

Wo wird der beschrieben

Code:
m001: L     #CNT
L   [COLOR=Red]  #LOOPCNT[/COLOR]
>I


Der wird schon etwas weiter oben beschrieben!Hab nicht den ganzen code eingestellt!

Aber hier noch mal:
Code:
NW1:
      L     #ACTIVE
      T     #LOOPCNT
NW2:
 O(    
      L     #LOOPCNT
      L     15
      >I    
      )     
      O(    
      L     #LOOPCNT
      L     0
      <I    
      )     
      =     #ERROR
      U     #ERROR
      SPBN  ok
      L     0
      T     #TEMP.ACT[0]
      T     #TEMP.ACT[1]
      T     #TEMP.ACT[2]
      T     #TEMP.ACT[3]
      T     #TEMP.ACT[4]
      T     #TEMP.ACT[5]
      T     #TEMP.ACT[6]
      T     #TEMP.ACT[7]
      T     #TEMP.ACT[8]
      T     #TEMP.ACT[9]
      T     #TEMP.ACT[10]
      T     #TEMP.ACT[11]
      T     #TEMP.ACT[12]
      T     #TEMP.ACT[13]
      T     #TEMP.ACT[14]
      T     #TEMP.ACT[15]
      T     #CHANNEL
      T     #CNT
      BEA   
ok:   NOP   0
NW3:
  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
 
Zurück
Oben