# Vorrangschaltung mit S7 300 für 6 Öfen



## uflo (2 Dezember 2010)

SIMATIC S7 300  CPU 313C
Simatic Sep7 V5.4

Hallo zusammen,
bin neu im Forum und erhoffe mir Hilfe.

Projekt:
6 Trockenöfen sollen von Werkern in möglicherweise unsortierter Reihenfolge vorgewählt werden. Die Öfen dürfen aber nur im 15 Minutentakt hochfahren, 1. Ofen direkt ein, nach 15 min. 2. vorgewählter Ofen ein usw. 

Habe bisher nur immer Projekte mit einfacher Bit-Programmierung erstellt, was für Maschinenanpassungen ja ausreichend ist, also nichts mit DB und FB.
Jetzt sitze ich schon 4 Abende vor dieser Aufgabe, experimentiere rum und bin zu der Erkenntnis gekommen, dass hier nur eine FiFo Lösung möglich ist.

Da ich selbstständig bin und mir mein Kunde das aufs Auge gedrückt hat, habe ich auch nicht Zeit ohne Ende.

Wer kann mir helfen oder möglicherweise eine komplette Lösung verkaufen?

Danke schon mal im Voraus

Udo


----------



## vinylsucker (2 Dezember 2010)

Hallo, 
wie sollen die Öfen gestartet werden, über Taster, Vorwahlschalter... Reicht es wenn der erste Ofen gestartet ist wenn man einen Taster für den nächsten betätigen muß oder brauchst du dann einen vollautomatischen Ablauf. Benötigst du nur einen Ausgang der dan den Ofen zuschaltet oder muß der dann auf Temperatur geregelt werden?

Gruß


----------



## uflo (2 Dezember 2010)

Hallo,
Danke für die schnelle Antwort.
Also, die Trockenöfen haben eine komplette Eigensteuerung. Der Bediener betätigt eine Start-Taste und normal geht ein Leistungsschütz in Selbsthaltung. Ich trenne das Schütz und lege die Spule an einen Ausgang. Das Schütz selber ersetze ich durch ein Relais mit Selbsthaltung. Einen Kontakt lege ich auf den Eingang ( Eingang während des Prozesses dauernd "1" ).  Ist das Ofenprogramm ( über Prozessregler ) abgelaufen, fällt das Relais ab, also Eingang auf "0". 
Der Bediener selber hat nichts weiter zu tun als bisher den Ofen zu starten. Ist der Trockenprozess abgelaufen, bekommt er ein Signal von der Ofensteuerung.

Gruß
Udo


----------



## uflo (2 Dezember 2010)

Noch einen Nachtrag.
Eingänge der CPU E 124.1 - E124.7
Ausgänge A 124.1 - A124.6

Dann soll es noch eine Art Notschalter geben ( Im Schaltschrank mit Schlüssel E 124.7 ) mit der das EB direkt aufs AB transferiert wird, fall etwas in der Steuerung hakt.
Das sollte aber für mich nicht das Problem darstellen.


----------



## borromeus (2 Dezember 2010)

uflo schrieb:


> SIMATIC S7 300 CPU 313C
> Simatic Sep7 V5.4
> Wer kann mir helfen oder möglicherweise eine komplette Lösung verkaufen?
> 
> Udo


 
Wieviel kriegst Du denn dafür?


----------



## Paule (2 Dezember 2010)

uflo schrieb:


> 6 Trockenöfen sollen von Werkern in möglicherweise unsortierter Reihenfolge vorgewählt werden.


Hallo Udo,
wie wird denn die Reihenfolge vorgewählt?


----------



## uflo (2 Dezember 2010)

borromeus schrieb:


> Wieviel kriegst Du denn dafür?



Ich bin ja ehrlich und teile direkt mit, dass ich Hilfe Brauche und davon als Einzelkämpfer leben muss. Erschleiche mir also keine kostenlose Hilfe als Freiberufler.
Ich komme so über die Runde.


----------



## borromeus (2 Dezember 2010)

Ich meinte konkret für dieses Projekt?

Soll man nun helfen? Ich meine: willst Du mittun wenn man Anregungen gibt, oder willst wirklich einen fertigen Baustein?


----------



## uflo (2 Dezember 2010)

Hallo Paule,

die Öfen haben eine komplette Eigensteuerung. Ich trenne hier das Leistungsschütz, ersetze es durch ein parallel geschaltetes Relais mit Halteleitung, gebe einen Schließer aud den Eingang und lege die Schützspule an den Ausgang. Die Reihenfolge wird willkürlich durch Einschalten des jeweiligen Ofens festgelegt. Also 1, 3, 5, 4, 6, 2 oder möglicherweise an einem Arbeitstag auch nur 2 oder 3 Öfen. Der Programmablauf der Öfen ist etwas umfangreich mit Belüften, Spülen usw. Es handelt sich hier um Trockenöfen für Siebdruckbögen, wobei jeder Ofen auch eine andere Temperatur haben kann.

Gruß
Udo


----------



## borromeus (2 Dezember 2010)

Wie kann der Bediener einen vorgewählten Ofen wieder abwählen?
Nochmal Taste drücken?


----------



## Corosop15 (2 Dezember 2010)

Also, wenn ich richtig verstanden habe, willst Du eine zeitabhängige Verriegelung der Öfen.

- 1. Ofen fordert an, unverzögerte Einschaltung, erste Verriegelungszeit startet.
- 2. Ofen fordert an, wird aber nicht eingeschalten, da erste Verriegelungszeit noch nicht abgelaufen.
- usw.

Korrekt so?


----------



## Paule (2 Dezember 2010)

Hallo Udo,
das mit der Reihenfolge habe ich noch nicht verstanden.
Du willst doch den entsprechenden Ofen dazu schalten oder nicht?

Hier mal eine Verriegelung:

```
// Einschaltung Ofen 1
   U M 1.1  // Einschaltbefehl Ofen 1
   U(
   O A 124.1 // Ofen 1 
   ON M 10.0 // Verriegelung
   )
   = A 124.1
   FP M 2.1
   S M 10.0 // Verriegelung für nächsten Ofen
 
// Einschaltung Ofen 2
   U M 1.2  // Einschaltbefehl Ofen 2
   U(
   O A 124.2 // Ofen 2 
   ON M 10.0 // Verriegelung
   )
   = A 124.2
   FP M 2.2
   S M 10.0 // Verriegelung für nächsten Ofen
 
// Einschaltung Ofen 3
   U M 1.3  // Einschaltbefehl Ofen 3
   U(
   O A 124.3 // Ofen 3 
   ON M 10.0 // Verriegelung
   )
   = A 124.3
   FP M 2.3
   S M 10.0 // Verriegelung für nächsten Ofen   
 
// Ofen 4 - 6
 
// Letztes Netzwerk
   U M 10.0  // Verriegelung
   L S5T#15M
   SE T 1
   U T 1
   R M 10.0
```


----------



## borromeus (2 Dezember 2010)

Nein Paule, der will die Reihenfolge speichern, wie die Tasten gedrückt wurden...

zB 4,2,1,3,5,6

Geht Ofen 4 rein
nach 15 min Ofen 2
usw

Muss man einen DB anlegen wo die Reihenfolge drinnensteht und immer wenn einer eingeschalten wurde nachschlichten.... bzw. siehe Frage oben... wenn er einen Ofen doch nicht will und wieder abwählt, muss man nachschlichten.


----------



## uflo (2 Dezember 2010)

Der Bediener kann den Ofen wieder abschalten, dann geht der betreffende Eingang auf "0" oder der Trockenzyklus ist abgelaufen, der Ofen schaltet ab ( Halteleitung Schütz bzw. Relais wird unterbrochen, Eingang geht auf "0"


----------



## Paule (2 Dezember 2010)

borromeus schrieb:


> Nein Paule, der will die Reihenfolge speichern, wie die Tasten gedrückt wurden...
> 
> zB 4,2,1,3,5,6


Ach so, jetzt habe ich es kapiert. 


borromeus schrieb:


> Muss man einen DB anlegen wo die Reihenfolge drinnensteht und immer wenn einer eingeschalten wurde nachschlichten


Genau, ein FIFO


----------



## borromeus (2 Dezember 2010)

uflo schrieb:


> Der Bediener kann den Ofen wieder abschalten, dann geht der betreffende Eingang auf "0" oder der Trockenzyklus ist abgelaufen, der Ofen schaltet ab ( Halteleitung Schütz bzw. Relais wird unterbrochen, Eingang geht auf "0"


 
Du schriebst es sind Taster, 
einmal drücken anwählen
nochmal drücken abwählen

oder?

Oder anders: es ist Trockner 5 in der Warteschleife an Stelle 2....
Wenn Trockner 5 abgewählt wird rückt Warteschleife Stelle 3 an seine Stelle. Richtig?


----------



## uflo (2 Dezember 2010)

Hallo Paule,

borromeus hat Recht. genau so solls laufen.

Das mit dem verriegeln und der Wartezeit habe ich auch schon durch. Der 1. Ofen geht direkt an, alle weiteren immer nach 15 min. , aber nicht in der vorgewählten Reihenfolge z.B. 2,5,3,6,1,4 sondern zyklisch 1 dann 2, 3, 4, 5, 6.
Daher komme ich auf FiFo.
Suche und lese jetzt schon 4 Tage durch dieses Forum, habe auch schon Beiträge von Dir gelesen, daher habe ich mich nach längerem Überlegen hier angemeldet weil doch eine Menge brauchbares zu Finden ist.

Danke


----------



## uflo (2 Dezember 2010)

So ist es.
Vielleicht sollte ich noch mal erklären was das programm ( S7 ) machen soll.
Also Ofen 1 - 6 an Eingang 124.1 - 124.6. Wird Eingangssignal "1" wir ofen über Ausgang 124.1 - 124.6 eingeschaltet. ofen 1 an E .1, Ausgang A .1 Ausgang bleibt solange "1" wie Eingang auf "1" ist.
Die Einschaltung kann willkürlich sein, also 1 ( schaltet direkt ein ) das hab ich schon durch einfache Bit-Verriegelung untereinander erledigt ( wer zuerst kommt, wird direkt eingeschaltet, Merker gesetzt ) und dann MB 1 auf AB 124 transferiert.
So, die nächsten können z.B. 3, 5, 4, 2, 6 sein, nach 15 min muss 3, dann nach 15 min 5 usw. einschalten.
Es kann aber sein, das gar nicht mehr als 3 oder 4 benutzt werden.

Ich hoffe, ich habe mich jetzt etwas unkomplizierter ausgedrückt.


----------



## Paule (2 Dezember 2010)

OK, dann hier mal so mein erster Gedankengang. 
Ich würde als erstes Mal die Flanken der Eingänge abfragen.
Schönes Beispiel hier: http://sps-forum.de/showthread.php?t=30058
(Halt nur die 6 Eingänge für die Öfen, aber das lässt sich ja mit OW schön ausmaskieren, wäre von Vorteil wenn sie aufeinander folgen würden)

Nach einem Tastendruck sollte nun in einem Merkerwort ein Bit auf 1 sein.
Zum erkennen welches Bit gesetzt wurde, das Wort in einer Schleife durchlaufen, wenn Bit High, Schleife verlassen und Position merken.
Eine zweite Schleife aufrufen und den ArbeitsDB durchsuchen. 
Wenn leeres Feld erkannt wurde, Position von der ersten Schleife eintragen.

So weit mal um das FIFO zu füllen.

Vielleicht hat auch jemand eine bessere Idee.


----------



## Kai (3 Dezember 2010)

uflo schrieb:


> Also Ofen 1 - 6 an Eingang 124.1 - 124.6. Wird Eingangssignal "1" wir ofen über Ausgang 124.1 - 124.6 eingeschaltet. ofen 1 an E .1, Ausgang A .1 Ausgang bleibt solange "1" wie Eingang auf "1" ist.


 
Du hast also für jeden Ofen einen Taster, mit dem Du den Ofen anfordern kannst.

Taster Anforderung Ofen 1 -> E124.1
Taster Anforderung Ofen 2 -> E124.2
...



uflo schrieb:


> Also, die Trockenöfen haben eine komplette Eigensteuerung. Der Bediener betätigt eine Start-Taste und normal geht ein Leistungsschütz in Selbsthaltung. Ich trenne das Schütz und lege die Spule an einen Ausgang. Das Schütz selber ersetze ich durch ein Relais mit Selbsthaltung. *Einen Kontakt lege ich auf den Eingang ( Eingang während des Prozesses dauernd "1" ). Ist das Ofenprogramm ( über Prozessregler ) abgelaufen, fällt das Relais ab, also Eingang auf "0".*
> Der Bediener selber hat nichts weiter zu tun als bisher den Ofen zu starten. Ist der Trockenprozess abgelaufen, bekommt er ein Signal von der Ofensteuerung.


 
Du bekommst also eine Rückmeldung für jeden Ofen, wenn das Ofenprogramm läuft, der Ofen also in Betrieb ist.

Und diese Rückmeldung schaltest Du auf einenn Eingang der SPS?

Rückmeldung Ofen 1 Betrieb -> E???.?
Rückmeldung Ofen 2 Betrieb -> E???.?
...

Gruß Kai


----------



## uflo (3 Dezember 2010)

Vielleicht ist es so etwas besser zu verstehen.


das 6x.


----------



## vinylsucker (4 Dezember 2010)

Das mit dem automatischen Abschalten nach Trocknugszeitende funktioniert mit der Schaltung so aber nicht. Hier kannst du nur Abschalten wenn ein Benutzer den Austaster drückt.


----------



## uflo (4 Dezember 2010)

vinylsucker schrieb:


> Das mit dem automatischen Abschalten nach Trocknugszeitende funktioniert mit der Schaltung so aber nicht. Hier kannst du nur Abschalten wenn ein Benutzer den Austaster drückt.


Hi,
ist klar. Das Bild ist nur total vereinfacht und zur Erklärung wie das im Prinzip laufen soll.
In Wahrheit kommt natürlich noch einiges vor den Aus- / Eintastern. Das ist eine ziemlich komplexe Steuerung über Prozessregler mit Durchlüftungs- und Spülvorgängen.

Gruß
Udo


----------



## Pinguino (5 Dezember 2010)

Hallo Paule
Wie kann man in einer Schleife feststellen welches Bit in einem Wort gesetzt wurde? In SCL ist es sicher einfacher als AWL-Sprache. Kannst du mir zeigen wie das geht, Du bist sicher stark in SCL!!!


----------



## Paule (5 Dezember 2010)

Hallo Udo,

hier mal eine Möglichkeit:
DB 2 für die Prioritäten
FC 2 sucht den nächsten freien Platz
FC 3 übergibt die angewählte Ofennummer in die Liste
(Noch keine Absicherungen wegen überlauf und so)

```
DATA_BLOCK "Priorität"
TITLE =
VERSION : 0.1
 
  STRUCT  
   Prio : ARRAY  [1 .. 10 ] OF 
   INT ; 
  END_STRUCT ; 
BEGIN
   Prio[1] := 0; 
   Prio[2] := 0; 
   Prio[3] := 0; 
   Prio[4] := 0; 
   Prio[5] := 0; 
   Prio[6] := 0; 
   Prio[7] := 0; 
   Prio[8] := 0; 
   Prio[9] := 0; 
   Prio[10] := 0; 
END_DATA_BLOCK
 
FUNCTION FC 2 : VOID
TITLE =
VERSION : 0.1
 
VAR_INPUT
  Ofen_Nummer : INT ; 
END_VAR
VAR_TEMP
  Zeiger : DWORD ; 
END_VAR
BEGIN
NETWORK
TITLE =
      L     P#0.0; 
      T     #Zeiger; 
      AUF   "Priorität"; 
W:    L     DBW [#Zeiger]; 
      L     0; 
      ==I   ; 
      SPB   NULL; 
      L     #Zeiger; 
      L     P#2.0; 
      +D    ; 
      T     #Zeiger; 
      SPA   W; 
NULL: L     #Ofen_Nummer; 
      T     DBW [#Zeiger]; 
END_FUNCTION
 
FUNCTION FC 3 : VOID
TITLE =
VERSION : 0.1
BEGIN
NETWORK
TITLE =Ofen 1
      U     M      1.0; // Einschaltbefehl Ofen 1
      UN    M      1.2; // Ofen 1 in Liste eingetragen
      FP    M      1.1; // Flanke
      SPBN  xxx; 
      CALL FC     2 (
           Ofen_Nummer              := 1);
      SET   ; 
      S     M      1.2; // Ofen 1 in Liste eingetragen
xxx:  NOP   0; 
NETWORK
TITLE =Ofen 2
      U     M      2.0; // Einschaltbefehl Ofen 2
      UN    M      2.2; // Ofen 2 in Liste eingetragen
      FP    M      2.1; // Flanke
      SPBN  yyy; 
      CALL FC     2 (
           Ofen_Nummer              := 2);
      SET   ; 
      S     M      2.2; // Ofen 2 in Liste eingetragen
yyy:  NOP   0; 
END_FUNCTION
```
 
was nun noch fehlt ist die Möglichkeit einen Ofen wieder abzuwählen.
Dazu Ofennummer aus der Liste suchen und löschen.
Liste neu sortieren, sprich leere Zeilen in der Liste durch die vollen (hinteren) ersetzen.


----------



## dalbi (5 Dezember 2010)

Hi,



Pinguino schrieb:


> Hallo Paule
> Wie kann man in einer Schleife feststellen welches Bit in einem Wort gesetzt wurde? In SCL ist es sicher einfacher als AWL-Sprache. Kannst du mir zeigen wie das geht, Du bist sicher stark in SCL!!!



geht auch anders, ohne Schleife.


```
FUNCTION FC 1 : VOID

VAR_INPUT
  IN : WORD ;    
END_VAR
VAR_OUTPUT
  POS : INT ;    
END_VAR
VAR_TEMP
  Zaehler : INT ;    
END_VAR

BEGIN
      L     #IN; 
      L     W#16#0; 
      ==I   ; 
      SPB   OUT; //Sprung zu OUT wenn kein Bit = TRUE
      TAK   ; //IN
      L     W#16#8000; 
      ==I   ; 
      SPB   OUT1; //Sprung zu OUT1 wenn Bit 16 = TRUE

      TAK   ; //IN
      ITD   ; //wandeln
      DTR   ; //in REAL
      LN    ; //natürlicher Logarithmus von IN
      L     6.931000e-001; //natürlicher Logarithmus von 2
      /R    ; 
      RND   ; //Ergebniss REAL wandeln in INT
      L     1; //Eins dazu addieren
      +I    ; 
      T     #POS; //Position ausgeben
      BEA   ; //Ende
OUT:  T     #POS; // => 0 kein Bit
      BEA   ; //Ende
OUT1: L     16; // => 16 Bit 16
      T     #POS; //Ende

END_FUNCTION
```
Gruss Daniel


----------



## Jochen Kühner (5 Dezember 2010)

Hier eine Vorschlage von mir:

Code zum Eintrag ins FiFo:

```
U E124.1
FP M124.1
L 1
spb ok

U E124.2
FP M124.2
L 2
spb ok
....

ok: T Eintrag
```

Fifo:

Den Code fürs Fifo solltest du mit dem was hier steht: http://www.sps-forum.de/showthread.php?t=8887&highlight=fifo eingendlich Zusammenfrikeln können. (Ganz unten Filo, je nach Puffergröße kannst du dann im höchsten Byte deine nummer auslesen)

jetzt musst du halt noch verhindern, das ein Ofen 2 mal eingetragen wird, und das der Filo FC solange aufgerufen wird bis im höchsten byte eine ofennumer steht!


----------



## dalbi (5 Dezember 2010)

Hi,



Pinguino schrieb:


> Hallo Paule
> Wie kann man in einer Schleife feststellen welches Bit in einem Wort gesetzt wurde? In SCL ist es sicher einfacher als AWL-Sprache. Kannst du mir zeigen wie das geht, Du bist sicher stark in SCL!!!



und das selbe in SCL.


```
FUNCTION FC1 : VOID

VAR_INPUT
    IN : WORD;
END_VAR

VAR_OUTPUT
    POS : INT;
END_VAR

BEGIN

    IF IN = 0 THEN                          //wenn kein Bit = TRUE 
        POS := 0;                           //POS = 0
    ELSIF WORD_TO_INT(IN) = -32768 THEN     //wenn Bit 16 = TRUE
        POS := 16;                          //POS = 16
    ELSE
        POS := REAL_TO_INT(LN(INT_TO_REAL(WORD_TO_INT(IN))) / 6.931000e-001) + 1;
    END_IF;
     
END_FUNCTION
```

Gruss Daniel


----------



## Jochen Kühner (5 Dezember 2010)

dalbi schrieb:


> geht auch anders, ohne Schleife.



Da die LN Funktion aber auf Bsp:einer 31x CPU eine typische Ausführungszeit von 227us hat, denke Ich das er mit der Schleifen Funktion besser beraten ist, da diese in diesem fall meist schneller sein wird!

Aber es geht...


----------



## Paule (5 Dezember 2010)

Jochen Kühner schrieb:


> Den Code fürs Fifo solltest du mit dem was hier steht: http://www.sps-forum.de/showthread.php?t=8887&highlight=fifo eingendlich Zusammenfrikeln können. (Ganz unten Filo, je nach Puffergröße kannst du dann im höchsten Byte deine nummer auslesen)
> 
> jetzt musst du halt noch verhindern, das ein Ofen 2 mal eingetragen wird, und das der Filo FC solange aufgerufen wird bis im höchsten byte eine ofennumer steht!


Hast du überhaupt gelesen was ich geschrieben habe? :twisted:
Bei mir braucht er nichts "Zusammenfrikeln" und das verhindern das nicht zweimal der gleiche Ofen eingetragen wird habe ich auch schon vorgesehen.
AWL-Quelle übersetzen und es läuft, was man von deinem Wahnsinns Code jetzt nicht wirklich behaupten kann.

Schreib ihm doch lieber den Teil der noch fehlt:
Das Austragen aus der Liste und das erneute sortieren.


----------



## Jochen Kühner (5 Dezember 2010)

Paule schrieb:


> Hast du überhaupt gelesen was ich geschrieben habe? :twisted:


nee, nur überflogen, das war wahrscheinlich das Problem.



Paule schrieb:


> Bei mir braucht er nichts "Zusammenfrikeln" und das verhindern das nicht zweimal der gleiche Ofen eingetragen wird habe ich auch schon vorgesehen.
> AWL-Quelle übersetzen und es läuft, was man von deinem Wahnsinns Code jetzt nicht wirklich behaupten kann.
> 
> Schreib ihm doch lieber den Teil der noch fehlt:
> Das Austragen aus der Liste und das erneute sortieren.



Da Paule mich so freundlich gebeten hat, hier etwas code von mir ;-)
(untested) 


```
U     E    124.1
      FP    M    124.1
      L     1
      SPB   ok

      U     E    124.2
      FP    M    124.2
      L     2
      SPB   ok

//usw...
      L     0
ok:   T     DB20.DBW   20

      SET   
      R     #warda
//Fifo...
      AUF   DB    20
      L     0
      LAR1  

sl:   L     DBW [AR1,P#0.0]
      L     0
      ==I   
      SPB   sieb
      SPA   prf
sieb: L     DBW [AR1,P#2.0]
      T     DBW [AR1,P#0.0]
      L     0
      T     DBW [AR1,P#2.0]

prf:  L     DBW [AR1,P#0.0]
      L     DBW   20
      ==I   
      S     #warda

      L     P#2.0
      +AR1  
      TAR1  
      L     128                         // 16 SLD3 ==>128, da 18 letzer Registerplatz
      <=I   
      SPB   sl

      U     #warda
      BEB   
      L     DBW   20
      T     DBW   18
```

DB20.DBW20 ist der EIntragplatz, DB20.DBW0 steht der aktulle Ofen. Einfach abnullen, dann sollte der nächste vorgeschoben werden!


----------



## Kai (5 Dezember 2010)

uflo schrieb:


> Hi,
> ist klar. Das Bild ist nur total vereinfacht und zur Erklärung wie das im Prinzip laufen soll.
> In Wahrheit kommt natürlich noch einiges vor den Aus- / Eintastern. Das ist eine ziemlich komplexe Steuerung über Prozessregler mit Durchlüftungs- und Spülvorgängen.


 
Du hast also in Deiner Schaltung für jeden Ofen einen Ein- und Aus-Taster?

Und wenn der Trockenprozess für den jeweiligen Ofen läuft, kannst Du dann mit dem Aus-Taster den Trockenprozess abbrechen? 

Oder darf der Trockenprozess nicht abgebrochen werden und muss bis zum Ende laufen?

Gruß Kai


----------



## dalbi (5 Dezember 2010)

Hi,



Jochen Kühner schrieb:


> Da die LN Funktion aber auf Bsp:einer 31x CPU eine typische Ausführungszeit von 227us hat, denke Ich das er mit der Schleifen Funktion besser beraten ist, da diese in diesem fall meist schneller sein wird!
> 
> Aber es geht...



7,43 us bei der 312er 

Gruss Daniel


----------



## Paule (5 Dezember 2010)

Jochen Kühner schrieb:


> (untested)


Absolut,

```
L     0
ok:   T     DB20.DBW   20
 
      SET   
      R     #warda
//Fifo...
      AUF   DB    20
      L     0
      LAR1  
 
sl:   L     DBW [AR1,P#0.0]
      L     0
      ==I   
      SPB   sieb
      SPA   prf
sieb: L     DBW [AR1,P#2.0]
      T     DBW [AR1,P#0.0]
      L     0
      T     DBW [AR1,P#2.0]
 
prf:  L     DBW [AR1,P#0.0]
      L     DBW   20
      ==I   
      S     #warda
 
      L     P#2.0
      +AR1  
      TAR1  
      L     128                         // 16 SLD3 ==>128, da 18 letzer Registerplatz
      <=I   
      SPB   sl
 
      U     #warda
      BEB   
      L     DBW   20
      T     DBW   18
```
sorry Jochen das ist ein NOP 0
Vielleicht solltes du bei deinen Hochsprachen bleiben, was ich so lese ist das deine Welt.


----------



## Jochen Kühner (5 Dezember 2010)

Paule schrieb:


> sorry Jochen das ist ein NOP 0
> Vielleicht solltes du bei deinen Hochsprachen bleiben, was ich so lese ist das deine Welt.


Gefällt mir zwar besser, aber eigentlich bin Ich als SPS Programmierer tätig! 

Was ist daran ein NOP 0?


----------



## Paule (5 Dezember 2010)

Jochen Kühner schrieb:


> Was ist daran ein NOP 0?


Das es nicht geht, keine Funktion!


----------



## Jochen Kühner (5 Dezember 2010)

Paule schrieb:


> Das es nicht geht, keine Funktion!



also habs grad in den Simulator geladen, da funzts...

Du hasst in meinem Zitat ja auch die ersten paar zeilen wegelassen, dadurch wird immer 0 in dbw20 eingetragen!


----------



## Jochen Kühner (5 Dezember 2010)

noch ne kleine Änderung, so können auch Ofen ausgetragen werden, welche noch nicht ganz vorne sind...


```
SET   
      R     #austragen

//Taster fürs eintragen
      U     M     99.0
      FP    M    124.1
      L     1
      SPB   ok

      U     M     99.1
      FP    M    124.2
      L     2
      SPB   ok
//usw...

//Taster fürs austragen
      SET   
      S     #austragen

      U     M     99.2
      FP    M    124.1
      L     1
      SPB   ok

      U     M     99.3
      FP    M    124.2
      L     2
      SPB   ok
//usw...

      L     0
ok:   T     DB20.DBW   20

      SET   
      R     #warda
//Fifo...
      AUF   DB    20
      L     0
      LAR1  

sl:   L     DBW [AR1,P#0.0]
      L     0
      ==I   
      SPB   sieb

//Hier noch zum austragen
      U(    
      L     DBW [AR1,P#0.0]
      L     DBW   20
      ==I   
      )     
      U     #austragen
      SPB   sieb

      SPA   prf
sieb: L     DBW [AR1,P#2.0]
      T     DBW [AR1,P#0.0]
      L     0
      T     DBW [AR1,P#2.0]

prf:  L     DBW [AR1,P#0.0]
      L     DBW   20
      ==I   
      S     #warda

      L     P#2.0
      +AR1  
      TAR1  
      L     128                         // 16 SLD3 ==>128, da 18 letzer Registerplatz
      <=I   
      SPB   sl

      U     #warda
      O     #austragen
      BEB   
      L     DBW   20
      T     DBW   18
```


----------



## Paule (5 Dezember 2010)

Jochen Kühner schrieb:


> also habs grad in den Simulator geladen, da funzts...


Was soll denn funktionieren?
Ich dachte wir reden davon wenn ein Ofen deaktiviert wurde, er in der Liste ausgetragen wird und die Liste neu sortiert wird.
Oder was genau soll der Code bewirken?


----------



## Jochen Kühner (5 Dezember 2010)

Paule schrieb:


> Was soll denn funktionieren?
> Ich dachte wir reden davon wenn ein Ofen deaktiviert wurde, er in der Liste ausgetragen wird und die Liste neu sortiert wird.
> Oder was genau soll der Code bewirken?



Ich dache am Anfang ging's nur um einen Ofen ins Fifo einzutragen und nach vorn zu schieben, das einschalten hat er ja schon realisiert. Wenn er dann den ersten Eintrag abgelöscht hat, kam der nächste nach.

Hab noch ne weitere Version angehängt, in welcher ein Ofen auch aus der Liste zwischendrin gelöscht werden kann.


----------



## Paule (5 Dezember 2010)

Jochen Kühner schrieb:


> Hab noch ne weitere Version angehängt, in welcher ein Ofen auch aus der Liste zwischendrin gelöscht werden kann.


Und genau das Funktioniert doch nicht.
Aber bevor wir hier das Forum zutexten bin ich erst mal draußen.
Ich hoffe du kannst Udo zum gewünschten Ergebnis helfen.


----------



## uflo (8 Dezember 2010)

Das Projekt ist erledigt.
Ich Danke allen für die Tips und Beiträge.

Grüße
Udo


----------

