5x 5 Bits rotieren

tobl2002

Level-2
Beiträge
75
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Ich muss einen Baustein für die Vorwahl von 5 Einheiten schreiben.
es wird aufgeteil in Master, Slave 1 bis Slave 4. Als Eingangsparameter bekomme ich im Prinzip nur eine Vorwahl für jede Einheit.
Wird Einheit 1 ausgewählt ist diese immer Master, wenn eine zweite dazu kommt ist diese Slave 2 usw. ist Einheit 4 und 5 ausgewählt ist 4 Master, 5 Slave 1. Dies wird mit sicherheit auch so funktionieren wie ich mir das gedacht habe (einfache und / oder verknüpfung).

Jetzt zu meinem Problem:
die Einheiten werden ein- / ausgeschaltet. nach dem Ausschalten sollen diese um eins rotieren. das heißt aus dem Master wird Slave 1, Slave 1 wird Slave 2 usw. natürlich nur entsprechend der Vorwahlen. Also wenn nur 2 vorgewählt sind, rotieren auch nur 2.
Hat jemand eine idee wie man sowas einfach programmieren (sollte in FUP oder KOP sein) kann? Zum Rotieren habe ich nur einen Baustein für ein DW gefunden. das nützt mir leider nix, da ich ja nur 5 bit habe.

Vielen Dank schon mal für eure Hilfe.
Tobl
 
Nimm nicht Rotieren, sondern Schieben. Nach dem Schieben (SLW 1 schiebt 16 Bit 1 nach links) nimmst du Bit 5, schreibst es auf Bit 0 und löscht danach Bit 5. So hast du ein eigenes "Rotieren".
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code vereinfachung??

schon mal vielen Dank für die schnelle Antwort. Ich habe mich aber für was anderes entschieden.

ICh habe mir einen Zähler gebastelt, der schön hochzählen soll wenn ein Zyklus der Anlage fertig ist.
der Code sieht wie folgt aus:

Code:
      U(    
      U     "DB_Vorwahl_Skids".Allgemein.Skids_umschalten
      FP    "DB_Vorwahl_Skids".Allgemein.Flanke_umschalten
      SPBNB _001
      L     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids
      L     1
      +I    
      T     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids
      UN    OV
      SAVE  
      CLR   
_001: U     BIE
      )     
      U(    
      L     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids
      L     "DB_Vorwahl_Skids".Allgemein.Anzahl_Skids
      >I    
      )     
      SPBNB _002
      L     1
      T     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids
_002: NOP   0

jetzt wieder zu meiner Zuweisung, dazu habe ich mir folgendes ausgedacht:
Code:
Zuweisung Skid 1:
      U     "DB_Vorwahl_Skids".Allgemein.Freigabe
      =     L      0.0
      U     L      0.0
      U(    
      L     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids
      L     2
      ==I   
      )     
      =     L      0.1
      U     L      0.1
      U     "DB_Vorwahl_Skids".Skid_01.Master
      =     "DB_Vorwahl_Skids".Skid_01.Slave01
      U     L      0.1
      U     "DB_Vorwahl_Skids".Skid_01.Slave01
      =     "DB_Vorwahl_Skids".Skid_01.Master
      U     L      0.0
      U(    
      L     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids
      L     3
      ==I   
      )     
      =     L      0.1
      U     L      0.1
      U     "DB_Vorwahl_Skids".Skid_01.Master
      =     "DB_Vorwahl_Skids".Skid_01.Slave02
      U     L      0.1
      U     "DB_Vorwahl_Skids".Skid_01.Slave01
      =     "DB_Vorwahl_Skids".Skid_01.Master
      U     L      0.1
      U     "DB_Vorwahl_Skids".Skid_01.Slave02
      =     "DB_Vorwahl_Skids".Skid_01.Slave01
      U     L      0.0
      U(    
      L     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids
      L     4
      ==I   
      )     
      =     L      0.1
      U     L      0.1
      U     "DB_Vorwahl_Skids".Skid_01.Master
      =     "DB_Vorwahl_Skids".Skid_01.Slave03
      U     L      0.1
      U     "DB_Vorwahl_Skids".Skid_01.Slave01
      =     "DB_Vorwahl_Skids".Skid_01.Master
      U     L      0.1
      U     "DB_Vorwahl_Skids".Skid_01.Slave02
      =     "DB_Vorwahl_Skids".Skid_01.Slave01
      U     L      0.1
      U     "DB_Vorwahl_Skids".Skid_01.Slave03
      =     "DB_Vorwahl_Skids".Skid_01.Slave02
      U     L      0.0
      U(    
      L     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids
      L     5
      ==I   
      )     
      =     L      0.1
      U     L      0.1
      U     "DB_Vorwahl_Skids".Skid_01.Master
      =     "DB_Vorwahl_Skids".Skid_01.Slave04
      U     L      0.1
      U     "DB_Vorwahl_Skids".Skid_01.Slave01
      =     "DB_Vorwahl_Skids".Skid_01.Master
      U     L      0.1
      U     "DB_Vorwahl_Skids".Skid_01.Slave02
      =     "DB_Vorwahl_Skids".Skid_01.Slave01
      U     L      0.1
      U     "DB_Vorwahl_Skids".Skid_01.Slave03
      =     "DB_Vorwahl_Skids".Skid_01.Slave02
      U     L      0.1
      U     "DB_Vorwahl_Skids".Skid_01.Slave04
      =     "DB_Vorwahl_Skids".Skid_01.Slave03

wie man sieht vergleiche ich einfach den Zähler mit einem Wert, und verscheibe einfach um die gleiche Anzahl der Stellen. Geht das irgendwie einfacher??? Wie schon geschrieben, es muss alles in KOP darstellbar sein
 
ok noch mal ein versuch, hab noch ein paar fehler in dem Code gefunden:

Code:
Zähler Skids zuweisen
      U     "DB_Vorwahl_Skids".Allgemein.Freigabe
      =     L      0.0
      U     L      0.0
      U(    
      L     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids
      L     0
      ==I   
      )     
      =     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids0
      U     L      0.0
      U(    
      L     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids
      L     1
      ==I   
      )     
      =     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids1
      U     L      0.0
      U(    
      L     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids
      L     2
      ==I   
      )     
      =     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids2
      U     L      0.0
      U(    
      L     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids
      L     3
      ==I   
      )     
      =     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids3
      U     L      0.0
      U(    
      L     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids
      L     4
      ==I   
      )     
      =     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids4
      U     L      0.0
      U(    
      L     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids
      L     5
      ==I   
      )     
      =     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids5
 
Zuweisung Skid 1:
      U     "DB_Vorwahl_Skids".Allgemein.Freigabe
      U     "DB_Vorwahl_Skids".Skid_01.HM_Master
      =     L      0.0
      U     L      0.0
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids1
      =     "DB_Vorwahl_Skids".Skid_01.Master
      U     L      0.0
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids2
      =     "DB_Vorwahl_Skids".Skid_01.Slave01
      U     L      0.0
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids3
      =     "DB_Vorwahl_Skids".Skid_01.Slave02
      U     L      0.0
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids4
      =     "DB_Vorwahl_Skids".Skid_01.Slave03
      U     L      0.0
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids5
      =     "DB_Vorwahl_Skids".Skid_01.Slave04
 
Zuweisung Skid 2
      U     "DB_Vorwahl_Skids".Allgemein.Freigabe
      =     L      0.0
      U     L      0.0
      U     "DB_Vorwahl_Skids".Skid_02.HM_Master
      =     L      0.1
      U     L      0.1
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids1
      =     "DB_Vorwahl_Skids".Skid_02.Master
      U     L      0.1
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids2
      =     "DB_Vorwahl_Skids".Skid_02.Slave01
      U     L      0.1
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids3
      =     "DB_Vorwahl_Skids".Skid_02.Slave02
      U     L      0.1
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids4
      =     "DB_Vorwahl_Skids".Skid_02.Slave03
      U     L      0.1
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids5
      =     "DB_Vorwahl_Skids".Skid_02.Slave04
 
      U     L      0.0
      U     "DB_Vorwahl_Skids".Skid_02.HM_Slave01
      =     L      0.1
      U     L      0.1
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids1
      =     "DB_Vorwahl_Skids".Skid_02.Slave01
      U     L      0.1
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids2
      =     "DB_Vorwahl_Skids".Skid_02.Slave02
      U     L      0.1
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids3
      =     "DB_Vorwahl_Skids".Skid_02.Slave03
      U     L      0.1
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids4
      =     "DB_Vorwahl_Skids".Skid_02.Slave04
      U     L      0.1
      U     "DB_Vorwahl_Skids".Allgemein.Zaehler_Skids5
      =     "DB_Vorwahl_Skids".Skid_02.Master

Die Vergleicher habe ich mal auf merker gelegt, so spare ich mir wieder ein paar zeilen. Für Skid 3-5 geht es genauso weiter eben nur jeweils die neuen Hilfsmerker.
Aber das Programm ist so viel zu groß. das muss doch auch einfacher gehen... mir fällt nur nix besseres ein.
 
hallo tobl2002
ich sehe das genauso wie ralle...
ob du das kurz programmiert in kop hin bekommst möchte ich bezweifeln.
da diese sprache doch viele einschränkungen hat.
warum legst du dich schon auf fup oder kop fest?
in awl oder scl geht das einfacher und kürzer...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ICH sehe das genauso... aber für mich soll das Programm ja nicht sein^^ Ich habe dir Vorgaben bekommen das in KOP zu erstellen. Dann bleibt der Baustein eben so groß. Ggf. müssen Sie eben ne größere CPU kaufen...
Danke für eure Hilfe.
 
ICH sehe das genauso... aber für mich soll das Programm ja nicht sein^^ Ich habe dir Vorgaben bekommen das in KOP zu erstellen. Dann bleibt der Baustein eben so groß. Ggf. müssen Sie eben ne größere CPU kaufen...
Danke für eure Hilfe.

hallo tobl2002
dann versuch das doch mal denen zu erklären... am programm werden die eh nix ändern oder?
warum größere cpu was willst du denn sonst noch alles über die cpu betreiben?
 
hallo tobl2002
dann versuch das doch mal denen zu erklären... am programm werden die eh nix ändern oder?
warum größere cpu was willst du denn sonst noch alles über die cpu betreiben?


Doch, die werden die IB selbst machen, und ich habe erst mal alles für 5 Stationen ausgelegt, es können aber auch 10 werden.... Es war erst eine 315-2 PN /DP geplant. aber das passt nicht wiriklich vom Arbeitsspeicher her.

So ich habe den Baustein noch mal eingefügt (in Kop wie er auch sein muss). Gibt es noch irgendwas was man vereinfachen kann? der baustein hat so schon 4,5kB. wenn das mal 10 stationen werden...darf gar nicht dran denken...

Bitte so schnell wie möglich antworten bin nur noch bis morgen nachmittag da (dann erst mal 2 wochen urlaub,was ich mir auch verdient habe^^)
 

Anhänge

  • FB9.pdf
    91,5 KB · Aufrufe: 16
mal abgesehen davon das ich einen gewaltigen fehler in dem Programm habe (bits am ende des Bausteins werden 2x beschrieben), welchen ich auch behoben habe, habe ich das problem das ich damit wirklich alles nur um 5 stellen schieben kann. wenn ich z.b. Skid 1/2/3 vorgewählt habe, und dann mein Zähler auf 1 steht, ist noch alles ok. bei einem Zählerstand von 2 habe ich plötzlich keinen Master mehr dafür aber Slave 3 (gibt es ja in dem Fall gar nicht). Bei Zählerstand 3 habe ich Slave 2-4.
Ich habe keinen schimmer wie ich das hin bekommen soll. Wollte es mit einer Wahrheitstabelle versuchen, aber das sind einfach zu viele kombinationen. da blick ja keiner mehr durch...
 
Zurück
Oben