Mehrfach Blinken mit step7

Zuviel Werbung?
-> Hier kostenlos registrieren
mach ichs nicht über die pulsanzahl, rechnen kann doch jeder selber, sondern einfach über vier zeiten ;)

Code:
*
FUNCTION_BLOCK FB 1692
TITLE =PULSE_GENERATOR_2_VARI
//DATE:     31.07.2008
//AUTHOR:   4lagig
//VERSION:  V0.1 BasicVer
AUTHOR : '4lagig'
FAMILY : BoolGF
VERSION : 0.1


VAR_INPUT
  xPlcPulse : BOOL ;    
  xOn : BOOL ;    
  dOnTimePulse : DINT ;    
  dOffTimePulse : DINT ;    
  dOnTimeAll : DINT ;    
  dOffTimeAll : DINT ;    
END_VAR
VAR_OUTPUT
  xOut : BOOL ;    
END_VAR
VAR
  dOnDelayPulse : DINT ;    
  dOffDelayPulse : DINT ;    
  dOnDelayAll : DINT ;    
  dOffDelayAll : DINT ;    
  xHelpFlagPlcPulse : BOOL ;    
  xHelpFlagAll : BOOL ;    
  xHelpFlagOn : BOOL ;    
END_VAR
BEGIN
NETWORK
TITLE =
      NOP 0;

//----------- init ------------//

      U     #xOn; //if enable
      FP    #xHelpFlagOn; //new
      SPBN  none; 
      S     #xHelpFlagAll; //init
      S     #xOut; //all
      L     L#0; //functions
      T     #dOnDelayPulse; //of
      T     #dOffDelayPulse; //the
      T     #dOnDelayAll; //pulse generator
      T     #dOffDelayAll; //2 vari

none: UN    #xOn; //if enable false
      R     #xOut; //reset output
      SPB   end; //and leave

//---------- pulse ------------//

      U     #xPlcPulse; //with every pulse
      FP    #xHelpFlagPlcPulse; //the function will be worked
      SPBN  end; 

//---------- on all -----------//

      U     #xHelpFlagAll; //if "all" on
      SPBN  off1; 

      L     #dOnDelayAll; //increment
      +     1; 
      T     #dOnDelayAll; //the time

      L     #dOnDelayAll; //until
      L     #dOnTimeAll; //on_delay equal time
      >=I   ; 
      SPBN  new; 
      R     #xHelpFlagAll; //then "all" off
      R     #xOut; 
      L     L#0; //and reset
      T     #dOnDelayAll; //the timer
      T     #dOnDelayPulse; 
      T     #dOffDelayPulse; 
      SPA   end; 

//---------- off all ----------//

off1: L     #dOffDelayAll; //"all" is off
      +     1; //increment
      T     #dOffDelayAll; //the delay

      L     #dOffDelayAll; //until
      L     #dOffTimeAll; //off_delay equal time
      >=I   ; 
      SPBN  end; 
      S     #xHelpFlagAll; //then "all" on
      S     #xOut; 

      L     L#0; //and reset
      T     #dOffDelayAll; //the timer

//--- pulse on while all on ---//

new:  U     #xHelpFlagAll; //if "all" on
      SPBN  end; 

      U     #xOut; //and out also on
      SPBN  off; 

      L     #dOnDelayPulse; //increment
      +     1; 
      T     #dOnDelayPulse; //the delay

      L     #dOnDelayPulse; 
      L     #dOnTimePulse; 
      >=I   ; 
      SPBN  end; 
      R     #xOut; 

      L     L#0; 
      T     #dOnDelayPulse; 
      SPA   end; 

//--- pulse off while all on ---//

off:  L     #dOffDelayPulse; //out is off
      +     1; //increment
      T     #dOffDelayPulse; //the delay

      L     #dOffDelayPulse; 
      L     #dOffTimePulse; 
      >=I   ; 
      SPBN  end; 
      S     #xOut; //to set the out

      L     L#0; 
      T     #dOffDelayPulse; 

//-------- EN0 handling --------//

end:  SET   ; 
      SAVE  ; 
      BEA   ; 

END_FUNCTION_BLOCK
nein, ich hab keine langeweile nur unruhige nächte ...
 
Zuletzt bearbeitet:
Hallo vierlagig,

das sieht ja mächtig kompliziert aus.
Ich habe den FB mal eingebaut, habe aber irgendwie Probleme
mit der Verwendung. Wie sieht dabei die Parameter Übergabe
aus, was wird erwartet ? Hast Du ggf. auch hier ein Beispiel ?
Danke !
 
Code:
*
      CALL  FB  1692 , DB26
       xPlcPulse    :=M2.0              //PLC Pulse 10Hz
       xOn          :=E0.0              //enable
       dOnTimePulse :=L#20              //2s
       dOffTimePulse:=L#30              //3s
       dOnTimeAll   :=L#600             //60s
       dOffTimeAll  :=L#100             //10s
       xOut         :=A0.0              //output

wo siehst du das komplizierte? <---- dies ist keine rhetorische frage!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi vierlagig,

Danke für Deine Antwort !

> wo siehst du das komplizierte? <---- dies ist keine rhetorische frage!

Naja, für mich als "Hobby" SPS'ler, sind halt einige Dinge noch nicht so leicht zu durchschauen...
 
Hi nochmal,

nachdem ich es gerade mit den entsprechenden Parametern probiert habe bekomme ich nachdem ich den Eingang setzte folgende Fehler ?!

Ereignis 2 von 33: Ereignis-ID 16# 4562
STOP durch Programmierfehler (OB nicht geladen oder nicht möglich, bzw. kein FRB vorhanden )
Unterbrechungstelle im Anwenderprogramm: Zyklisches Programm (OB 1)
Prioritätsklasse: 1
OB-Nummer: 1
Bausteinadresse: 256
Bisheriger Betriebszustand: RUN
Angeforderter Betriebszustand: STOP (intern)
interner Fehler, kommendes Ereignis
15:30:14:556 31.07.08


Ereignis 3 von 33: Ereignis-ID 16# 2521
BCD-Wandlungsfehler
betroffenes Register: Akku 1
OB-Nummer: 1
Bausteinadresse: 256
Angeforderter OB: Programmierfehler-OB (OB 121)
Prioritätsklasse: 1
interner Fehler, kommendes Ereignis
15:30:14:556 31.07.08



Was sagt mir das ?

Sorry.
 
mächtig kompliziert ...

das ist der Aufruf von meinem FB...

Code:
.
 
      CALL  FB     1 , DB10
       On_Off_Taster:=E0.0
       Impulszeit   :=T#500MS
       Pausenzeit   :=T#250MS
       Intervallzeit:=T#10S
       Blinkzyklen  :=3
       Blinkimpuls  :=A0.1
       Bl_Zyklus_Ein:=A0.0

wo siehst du das komplizierte? <---- dies ist keine rhetorische frage!

OK! dein FB ist etwas struckturierter, aber sonst...

Gruß
Sven_HH
 
OK! dein FB ist etwas strukturierter, aber sonst...

struktur macht schon sinn, oder? hatte es mir gestern abend auch noch irgendwie, naja, einfacher vorgestellt :rolleyes: ... wenn du deinen baustein noch strukturierst ist er komfortabler als meiner bei etwas mehr speicherbedarf, aber ich denke das sollte ok sein...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Mark,


"save our sales"

..Bin gerade vor Lachen unter den Schreibtisch gerutscht, ich glaub das überlebe ich nicht ...
Behaupte einfach, Du hast das absichtlich so geschrieben !!!...
Selbstverständlich habe ich das absichtlich geschrieben ;)! Ich hätte auch schreiben können: "Save Our Souls", "Save our Ship", "Seemann ohne Sack" oder sonst was. Nichts stimmt wirklich. Einziger Sinn der Zeichenfolge ist, dass sie leicht hör- und sichtbar ist. Dass es sich um eine Abkürzung handelt ist ein Ammenmärchen.


Gruß, Onkel
 
Hi vierlagig,

ich habe so einiges im OB1 und mein Taktmerker liegt auf 0. Ich übergebe aber auch M0.0. Interessant ist, dass sobald der Eingang auf 1 geht auch der Ausgang auf 1 geht und nach Ablauf von 2s sprich der ersten Pulszeit die SPS den Fehler zeigt.
 
sobald der Eingang auf 1 geht auch der Ausgang auf 1 geht

das ist auch richtig so, mit enable wird der ausgang auf true gesetzt...

...deinen fehler kann ich mir grad nicht erklären :confused: ...laut deinen fehlermeldungen kommt der absturz auch nicht unbedingt aus dem neuen baustein ... mit was testest du? ... hast du davor und danach irgendwelche pointer? wenn du kannst und darfst poste einfach mal dein projekt...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi vierlagig,

ich bin eben mal "fremdgegangen" und habe mir Sven_HH FB bzw. Projekt
genommen und diese mal probiert. Solange ich nur sein eigenes Projekt benutze
funktioniert es wunderbar

@Sven_HH
auch Dir sei Dank !

wenn ich den FB und SFB4 in mein Projket übernehme dann passiert genau
das Gleiche wie bei Deinem FB...Fehler & STOP.
Es scheint also irgendwo im zusammenwirken mit meinem Source zu klemmen.

Ich verwende einige FC die über Pointer bzw. indirekte Adressierung in DBs
rum werkeln. Das alles funktioniert schon lange ohne Probleme alleine,
was jetzt nicht heißen soll, dass der Fehler in Euren FBs liegt :).

Ich werde mal weiter forschen und probieren, was einzeln läuft muß
doch auch im Gesamten laufen.

Nur zur Sicherheit, weil ich das noch nicht so oft gemacht habe:
Ich habe den FB Code von Dir in einer Textdatei Blinker.awl gespeichert
und in meine Quellen importiert. Diesen übersetzt und als FB2 in meinen
Bausteinen aufgenommen. Dann folgenden CALL im Ob1 eingetragen:

CALL "Blinker" , "DB_Blinker"
xPlcPulse :=M0.0 --Mein Taktmerker
xOn :="ETEST"
dOnTimePulse :=L#20
dOffTimePulse:=L#30
dOnTimeAll :=L#600
dOffTimeAll :=L#100
xOut :="ATEST"

In der Symboltabelle steht DB_Blinker als Symbol für DB54 (dem
Instanzbaustein von FB2)

Im Fall von Sven_HH habe ich sein Projekt geöffnet und den FB umbenannt
auf FB3 und in meine Bausteine kopiert. SFB4 auch noch rüberkopiert und
den CALL eingebaut wie in Sven_HH's Beispiel (natürlich angepaßte I/Os).

Falls ich sonst noch etwas machen sollte wäre es schön wenn Ihr mir einen
Tip geben könntet.

Ach ja auch wenn's blöd ist aber den Source würde ich eher ungern veröffentlichen...
 
@Sven_HH
auch Dir sei Dank !

wenn ich den FB und SFB4 in mein Projket übernehme dann passiert genau
das Gleiche wie bei Deinem FB...Fehler & STOP.
Es scheint also irgendwo im zusammenwirken mit meinem Source zu klemmen.

Ich verwende einige FC die über Pointer bzw. indirekte Adressierung in DBs
rum werkeln. Das alles funktioniert schon lange ohne Probleme alleine,
was jetzt nicht heißen soll, dass der Fehler in Euren FBs liegt :).
.

Da unsere FB´s nur Lokal Adressiert sind dürfen sie geidenlich keine auswirkungen den deinen bestehenden Source haben.

Du hast aber den FB und den DB in die CPU übertragen ?

Gruß
Sven_HH
 
@sven_hh

> Du hast aber den FB und den DB in die CPU übertragen ?
ja beide übertragen.

Frage: Gibt es eigentlich eine Möglichkeit Deinen FB nach AWL zu konvertieren ?

Ich Werde jetzt mal weiter debuggen...
 
> CTRL-2

Danke, das is ja einfach :oops:...

Nur zur Info:
Ich habe meinen OB1 mal komplett entrümpelt, sprich alles rausgeworfen, nur noch den Blinker rein und dann OB1, FB und DB in den Simulator und kein ERROR aber auch keine Funktion.
Ich denke da scheint irgendwas mit der Konfiguration nicht zu stimmen.
 
simulator=plcsim?

nicht vergessen die hw-konfig zu laden, des plcsim ist dumm wie brot, mußt dem schon sagen, wo du das taktmerkerbyte haben willst

für svens baustein mußt du mal online gucken ob alle benötigten sfcs im plcsim verfügbar sind (erreichbare teilnehmer -> in den bausteinordner gucken...)
 
Zurück
Oben