# Mehrfach Blinken mit step7



## MarioDisketti (29 Juli 2008)

Hallo zusammen,    hat von Euch schon einmal einen AWL Code geschrieben der  es erlaubt  z.B. eine am Ausgang angeschlossene Lampe mehrfach  und am besten noch im Tastverhältnis ungleich 1 anzusteuern.     Beispiel: 2 mal hintereinander blinken mit z.B. 500ms Abstand, dann 5 s warten...


----------



## johnij (29 Juli 2008)

MarioDisketti schrieb:


> Hallo zusammen, hat von Euch schon einmal einen AWL Code geschrieben der es erlaubt z.B. eine am Ausgang angeschlossene Lampe mehrfach und am besten noch im Tastverhältnis ungleich 1 anzusteuern. Beispiel: 2 mal hintereinander blinken mit z.B. 500ms Abstand, dann 5 s warten...


 


*SUCHFUNKTION nutzen*.
unter den mehr als 56000 beiträgen wirst du fündig.

Z.B. blinktakt, taktmerker, blinker

*bisschen mehr Einsatz* :evil:



johnij


----------



## MarioDisketti (29 Juli 2008)

@johnij
Super Antwort ! Auf Dich kann man bauen !
Wie ich in den anderen Beiträgen gesehen habe machst Du das öfters, deshalb bin ich Dir nicht böse... 
Da Du die 56000 Beiträge bestimmt schon alle durchsucht hast wirst Du mir 
a) eine bessere Antwort geben können
b) gesehen haben, dass es nix mit Mehrfach Blinkern gab


----------



## johnij (29 Juli 2008)

MarioDisketti schrieb:


> @johnij
> Super Antwort ! Auf Dich kann man bauen !
> Wie ich in den anderen Beiträgen gesehen habe machst Du das öfters, deshalb bin ich Dir nicht böse...
> Da Du die 56000 Beiträge bestimmt schon alle durchsucht hast wirst Du mir
> ...


 
Mein lieber,
ich bin von der Firma für was anders bezahlt 

Zu deiner Aussage: No Comment
johnij




johnij


----------



## Waelder (29 Juli 2008)

Hi Mario,

Setze in deiner CPU das Taktmerkerbyte scharf zb MB2 und verknüpf es zb. wie folgt :

U M2.5
U M2.0
= A1.0

Das gibt interessante Blinkergebnisse an einem Horn wirds noch besser.
da hast du dann je nach bit 10,5,"2,5","1,25",1,"0,5"Hz und sonst noch einen.
kannst ja selber ein Blinker mit 5s erzeugen und ihn entsprechend verknüpfen.

Gruss Wälder


----------



## MarioDisketti (29 Juli 2008)

Hallo Wälder,

danke für den Tip.

Ideal wäre es wenn die Zeiten und die Anzahl definiert einstellbar wären, dann könnte man unterschiedliche Betriebszustände per Blinkkombinationen wunderbar unterscheiden.

Werde mal damit experimentieren.


----------



## johnij (29 Juli 2008)

MarioDisketti schrieb:


> Hallo Wälder,
> 
> danke für den Tip.
> 
> ...


 
Man schreint einen FB:

```
Eingang: Bool:Input
Ausgang:Bool:N_OUT
 
Netzwerk1
 
U Eingang
UN T 1
L S5t#1s   // Einstellbar
SV T 0
U T 0
=#Ausgang
 
//**********************
 
Netzwerk2
 
U Ausgang
L S5t#5s   // Einstellbar
SV T1
```
 
johnij


----------



## Larry Laffer (29 Juli 2008)

MarioDisketti schrieb:


> @johnij
> Super Antwort ! Auf Dich kann man bauen !
> Wie ich in den anderen Beiträgen gesehen habe machst Du das öfters, deshalb bin ich Dir nicht böse...


 
@Mario:
Da hast du mir voll aus der Seele gesprochen ...*ACK*

@Johnij:
Wenn deine Zeit es dir nicht erlaubt eine vernüftigen Beitrag zu schreiben, so lass es einfach sein - damit du keine Gehaltseinbussen hast. Ansonsten kann man auch etwas dezenter auf die Suchfunktion verweisen ...

Gruß
LL


----------



## Znaper (29 Juli 2008)

Oder die freilaufende Variante:


```
Netzwerk 1:
  UN    T      1
  L     S5T#500MS
  SI    T      0                    // Impulszeit
 
  U     T      0
  L     S5T#250MS
  SI    T      1                    // Pausenzeit
 
  Netzwerk 2:
  U     T      0
  =     #Ausgang
```
 
Gruss
Znaper


----------



## Rainer Hönle (29 Juli 2008)

Und jetzt noch die Zeiten z.B. aus einem DW laden, dann kann das Blinken sogar ohne Programmänderung angepasst werden.
Wenn ich die Aufgabenstellung allerdings richtig verstanden habe, fehlt trotzdem noch ein Teil. Und zwar war ja gefordert: n-Mal Blinken mit Frequenz x, dann y (Milli-) Sekunden Pause. Eine unterschiedliche Impuls- und Pausenzeit war primär nicht direkt gefordert (soweit ich sehe).


----------



## Onkel Dagobert (29 Juli 2008)

Man könnte auch ein entsprechendes Bitmuster in ein Doppelwort schreiben und dieses mit einem Takt rotieren lassen.

Gruß, Onkel


----------



## MarioDisketti (29 Juli 2008)

Hallo zusammen,  

vielen Dank für die vielen Ideen !  

Ich werde versuchen mir aus allen das zusammen zu bauen was ich suche !


----------



## Sven_HH (30 Juli 2008)

Habe mal ein Beispiel nach meinem Verständnis der Frage angelegt.

was haltet ihr davon...?

Gruß
Sven_HH


----------



## vierlagig (30 Juli 2008)

Sven_HH schrieb:


> was haltet ihr davon...?



mächtig kompliziert ... hab aber noch nicht rauslesen können wofür das eigentlich ist da gewisse leute hier schon wieder ausfall.... aber lassen wir das ...

ich hab mal waelders idee aufgegriffen, man möge mir verzeihen, dass ichs global adressiere 


```
*
//-----------16 blinktakte----------//

      U     M      2.0                  //plcpulse 10Hz 
      FP    M     10.0
      SPBN  nopu
      L     MW    20                    //blinkwort
      +     1                           //inkrementieren
      T     MW    20

//---- blinkendes signal basteln ---//

nopu: U     M     21.3                  //0,8s takt
      U     M     21.7                  //25,6s takt
      =     A      0.0                  //blinkt für 25,6s im 0,8s-takt
      NOP   0                           //und ist für 25,6s aus
```
...sehr schön finde ich auch den einfachen ansatz von onkel dagobert! und damit sind dann auch die pausenzeiten besser anpassbar ...


----------



## Sven_HH (30 Juli 2008)

vierlagig schrieb:


> mächtig kompliziert


 
Ja... !? bin Ja noch am üben...



vierlagig schrieb:


> ... hab aber noch nicht rauslesen können wofür das eigentlich ist da gewisse leute hier schon wieder ausfall.... aber lassen wir das ...


 
verstehe... verfolge das auch schon ne weile :!:


----------



## Da_Basco (30 Juli 2008)

*Beispiel Doppelblitzlicht Windrad*



			
				MarioDisketti  schrieb:
			
		

> Hallo zusammen, hat von Euch schon einmal einen AWL Code geschrieben der es erlaubt z.B. eine am Ausgang angeschlossene Lampe mehrfach und am besten noch im Tastverhältnis ungleich 1 anzusteuern. Beispiel: 2 mal hintereinander blinken mit z.B. 500ms Abstand, dann 5 s warten...



Hier eine Möglichkeit mit nur einem Timer. Man setzt einen Ausgang in einem Zeitfenster, indem man die abgelaufene Zeit vergleicht.

So würde es z.B. bei einem Blitzlicht an einem Windrad aussehen.



```
Netzwerk: 1
Ein einschaltverzögerter Timer wird mit 3s gestartet. Nachdem er abgelaufen
ist, initialisiert er sich erneut.

UN "T1-Blitzlicht I" T1
L S5T#3S
SE "T1-Blitzlicht I" T1

Netzwerk: 2 Version 1: Zwei Vergleiche
Diese drei Vergleiche dienen zum Erzeugen des Doppelblitzimpulses:

SET
R "A4.0-Blitzlicht I" A4.0

L "T1-Blitzlicht I" T1
L 50
<I
U(
TAK
L 33
>=I
)
O
U(
TAK
L 16
<I
)
S "A4.0-Blitzlicht I" A4.0
```
Das Beispiel würde sich einfach auf deine Bedürfnisse abändern lassen.

Gruß

Da_Basco


----------



## Onkel Dagobert (31 Juli 2008)

*Morsecode "save our sales"*

Vereinzelte Members suchen doch hier u.a. nach Hausaufgaben. Schreibt doch mal eine Taktfolge, welche den Morsecode "SOS" wiedergibt.

Hilfestellung:
http://de.wikipedia.org/wiki/Morsecode


Gruß, Onkel


----------



## Question_mark (31 Juli 2008)

*Die Lösung*

Hallo,



			
				Onkel Dagobert schrieb:
			
		

> Schreibt doch mal eine Taktfolge, welche den Morsecode "SOS" wiedergibt.



Mach ich doch : ...---...

Hab ich jetzt die Aufgabe gelöst und wieviele Punkte bekomme ich 



			
				Onkel Dagobert schrieb:
			
		

> "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 !!!


Gruß

Question_mark


----------



## Manfred Stangl (31 Juli 2008)

*blinker*

Hallo zusammen!

Hab hier was asymmetrisches. Das stammt von einem Rührwerk ursprünglich.

Das letzte NW ist ein asymmetrischer Blinker (von wo anders reinkopiert)

lg
m


----------



## MarioDisketti (31 Juli 2008)

@Da_Basco
Ich habe es grab probiert und das sieht doch echt gut aus, danke !


Nur falls noch jemand, wie Onkel Dagobert es sagte, eine Hausaufgabe sucht:
Der Idelazustand wäre folgende Situation:

Einschaltsignal z.B. E 1.0
__-------------------------------------------------------__________

Blinksignal z.B. A 1.0
__-_-_-________-_-_-________-_-_-________-_-_-________________
...ab....d
...[..c..]

wobei die Pulsweite(a), Pulspause(b), Pulsanzahl(c, max 4) und Abstand zwischen den Pulspaketen(d) einstellbar sein sollten

Also, nur falls jemand "Langeweile" haben sollte.


----------



## vierlagig (31 Juli 2008)

mach ichs nicht über die pulsanzahl, rechnen kann doch jeder selber, sondern einfach über *vier* zeiten 


```
*
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 ...


----------



## Rainer Hönle (31 Juli 2008)

vierlagig schrieb:


> nein, ich hab keine langeweile nur unruhige nächte ...


Tochter oder Sohn?


----------



## vierlagig (31 Juli 2008)

Rainer Hönle schrieb:


> Tochter oder Sohn?



weder noch noch ... einfach nur zu warm im schlafzimmer ...


----------



## MarioDisketti (31 Juli 2008)

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 !


----------



## vierlagig (31 Juli 2008)

```
*
      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!


----------



## MarioDisketti (31 Juli 2008)

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...


----------



## vierlagig (31 Juli 2008)

MarioDisketti schrieb:


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



da wird ein wenig inkrementiert, verglichen, gesetzt oder rückgesetzt und gesprungen  ... kommentare stehen auch dran


----------



## MarioDisketti (31 Juli 2008)

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.


----------



## vierlagig (31 Juli 2008)

fragen: was hast du sonst noch im ob1? steht dein taktmerkerbyte auch auf 2?


----------



## Sven_HH (31 Juli 2008)

vierlagig schrieb:


> mächtig kompliziert ...


 
das ist der Aufruf von meinem FB... 


```
.
 
      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


----------



## vierlagig (31 Juli 2008)

Sven_HH schrieb:


> OK! dein FB ist etwas strukturierter, aber sonst...



struktur macht schon sinn, oder? hatte es mir gestern abend auch noch irgendwie, naja, einfacher vorgestellt  ... wenn du deinen baustein noch strukturierst ist er komfortabler als meiner bei etwas mehr speicherbedarf, aber ich denke das sollte ok sein...


----------



## Onkel Dagobert (31 Juli 2008)

Hallo Mark,


"save our sales"



Question_mark schrieb:


> ..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


----------



## MarioDisketti (31 Juli 2008)

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.


----------



## vierlagig (31 Juli 2008)

MarioDisketti schrieb:


> 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  ...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...


----------



## MarioDisketti (31 Juli 2008)

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 (1 August 2008)

MarioDisketti schrieb:


> @Sven_HH
> auch Dir sei Dank !
> 
> wenn ich den FB und SFB4 in mein Projket übernehme dann passiert genau
> ...


 
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


----------



## MarioDisketti (1 August 2008)

@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...


----------



## vierlagig (1 August 2008)

MarioDisketti schrieb:


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



Ctrl+2 ... und wenn du es sauber haben möchtest, dann einfach die ganzen verrenkungen die für die darstellung gemacht werden rauskanten


----------



## MarioDisketti (1 August 2008)

> CTRL-2

Danke, das is ja einfach ...

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.


----------



## vierlagig (1 August 2008)

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...)


----------



## MarioDisketti (1 August 2008)

Ja, plcsim...

Ich lade aus dem Bausteine Ordner immer die Systemdaten hoch.

Wenn ich dann Sven_HH's OB1, FB und DB hochlade funktionierts auch.
Nur Mein reduzierter OB1 (nur noch mit dem Call des FBs), FB und DB und es
geht nix mehr...Ich versteh das nicht.

Ich habe alle benötigten Bausteine im Bausteine Ordner des verfügbaren
Teilnehmers gesehen. (OB1,FB,DB,SFB4 und noch viele mehr)

Habe ich ggf. beim Anlegen des Instanz Datenbausteins etwas falsch gemacht ?
Ich habe einen Datenbaustein angelegt, dort auf Instanz-DB gewechselt
und den FB ausgewählt, noch nen Symbol Namen vergeben und das war's.
(muß da sonst noch was gemacht werden ?)

Sorry, will Euch nicht zu lange mit diesem Problem belasten, kann verstehen
wenn Ihr da nicht weiter machen wollt...


----------



## vierlagig (1 August 2008)

generier den datenbaustein mal anders.

im prog einfach den aufruf: call fbxy,dbxy eingeben, enter und generieren lassen (glaub zwar nicht das es daran liegt, aber ein versuch ist es wert...)


----------



## MarioDisketti (1 August 2008)

Hi vierlagig,

leider hat's nix an der Situation geändert...


----------



## vierlagig (1 August 2008)

die fehler sind immer noch die selben?
welche plcsim version?

ersetze in meinem baustein mal den code durch den hier:


```
*

//----------- 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                         //end 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
      L     L#1
      +D    
      T     #dOnDelayAll                //the time

      L     #dOnDelayAll                //until
      L     #dOnTimeAll                 //on_delay equal time
      >=D   
      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
      L     L#1                         //increment
      +D    
      T     #dOffDelayAll               //the delay

      L     #dOffDelayAll               //until
      L     #dOffTimeAll                //off_delay equal time
      >=D   
      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
      L     L#1
      +D    
      T     #dOnDelayPulse              //the delay

      L     #dOnDelayPulse
      L     #dOnTimePulse
      >=D   
      SPBN  end
      R     #xOut

      L     L#0
      T     #dOnDelayPulse
      SPA   end

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

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

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

      L     L#0
      T     #dOffDelayPulse

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

end:  SET   
      SAVE  
      BEA
```


----------



## MarioDisketti (1 August 2008)

Hi vierlagig,

ich habe den Code ersetzt und den Baustein neu importiert. 
Wenn ich den FB dann im OB1 alleine ausführe, man glaubt es kaum, funktioniert er !
Wenn ich den FB dann in meinen vollständigen OB1 einbaue tut er's
nicht...sprich es kommt wieder dieser Fehler.
Meine plcsim version ist 5.3


----------



## vierlagig (1 August 2008)

MarioDisketti schrieb:


> Wenn ich den FB dann im OB1 alleine ausführe, man glaubt es kaum, funktioniert er !



pah, ich hätte nichts anderes erwartet 



MarioDisketti schrieb:


> Wenn ich den FB dann in meinen vollständigen OB1 einbaue tut er's
> nicht...sprich es kommt wieder dieser Fehler.



wo machst du den aufruf im OB1, mittendrin, am anfang, am ende?



MarioDisketti schrieb:


> Meine plcsim version ist 5.3


pack dir mal das SP1 drauf


----------



## Sven_HH (1 August 2008)

...glaube mich zu erinnern das die PLCSIM 5.3 Probleme mit dem SFB4 macht... ob diese mit SP´s oder Hotfix behoben werden können weiss ich leider nicht ...


Gru?
Sven_HH


----------



## MarioDisketti (1 August 2008)

@vierlagig
Der FB Call ist im oberen Viertel

@sven_HH
wollte später mal "mutig" sein und es am "lebenden" Objekt probieren...

Vielleicht ist die reale Hardware ja doch besser ;-)


----------



## vierlagig (1 August 2008)

reale hardware ist immer besser!

welcher baustein funktioniert jetzt eigentlich nicht???
funktioniert das programm ohne die neuen bausteine im plcsim?
pack den aufruf mal ans ende...


----------



## Sven_HH (1 August 2008)

Ich habe gerade mal in ein bestehendes Projeckt (315 2DP mit ettlichen FB´s DB´s UDT´s SFB´s usw.)meinen FB eingebunden und im OB1 im letzten NW aufgerufen. Habe dann alles in PLCSIM 5.4 geladen und mit Erfolg getestet.


Vorgehensweise:

In meinem geposten Projekt den FB1 kopiert
Bestehendes Projekt geöffnet und den FB1 eingefügt
OB1 geöffnet neues NW eingefügt
Dort den FB1 wie folgt aufgerufen "call fb1, db10"
Dann die Parameter an den Aufruf übergeben
Alles gespeichrt, PLCSIM gestartet und das Projekt geladen
Den SFB4 brauchte ich nicht mit kopieren wurde automatisch erzeugt. ebeso wird der DB10 beim Aufruf des FB1 automatisch generiert.

Gruß
Sven_HH


----------



## MarioDisketti (1 August 2008)

Tja meine Herren,

ich verstehe nicht warum es so ist aber 
nachdem ich den Blinker von vierlagig einfach mal so,
ohne viel zu tun, ganz nach unten verschoben habe
läufts 

Wenn mir das jetzt jemand erklären kann wäre ich hoch
erfreut ! Was sind da die technischen Hintergründe ? 

Achja, nochmals BESTEN DANK ! für die Tips und FB's.

Kleiner Nachtrag: Habe gerade noch Sven_HH's FB ans Ende 
verschoben und auch sein FB läuft


----------



## vierlagig (3 August 2008)

ich vermute, du öffnest irgendwo einen datenbaustein, der in den netzwerken vor dem aufruf und auch in den netzwerken nach den aufrufen funktionieren soll ... da die bausteine den letzten geöffneten db nicht sichern und wiederherstellen kann es passieren, dass dein programm durcheinander kommt ...


----------



## MarioDisketti (3 August 2008)

Hi vierlagig,

Deine Vermutung stimmt, zu Beginn des OB1
öffne ich einen Datenbaustein mit Allgemeinen
"Merkern" auf die fast alle Netzwerke im OB1 zugreifen.
Dann könnte das zu den von Dir vermuteten 
Problemen führen.


----------



## vierlagig (3 August 2008)

das heißt auch, dass in deinem programm keine FBs verwendet werden bzw. nur FBs die den offenen DB sichern und am ende wieder herstellen:

also am anfang des FBs:


```
*
      L     DBNO; // letzten offenen Globaldatenbaustein ...
      T     #wDbnoSave; // ... sichern
```
und am ende:


```
*
       AUF   DB [#wDbnoSave]; // letzten Globaldatenbaustein öffnen
```


----------



## Ralle (3 August 2008)

Na ja, viel wichtiger wäre vielleicht, keine unqualifizierten Zugriffe alá T DBW10, sondern nur noch qualifizierte Zugriffe, wie T DB1.DBW10 verwenden.


----------



## vierlagig (3 August 2008)

Ralle schrieb:


> Na ja, viel wichtiger wäre vielleicht, keine unqualifizierten Zugriffe alá T DBW10, sondern nur noch qualifizierte Zugriffe, wie T DB1.DBW10 verwenden.



*ACK* ...wenn mario in der position ist, das programm in diesem umfang zu überarbeiten zu dürfen


----------



## MarioDisketti (4 August 2008)

Hallo zusammen,

@vierlagig
Stimmt ich verwende keine FBs nur FCs.
Muß ich denn auch in den FCs den letzen globalen 
Baustein sichern ?

@Ralle
obwohl ich den DB am Anfang öffne greife ich nur 
mit qualifizierten Zugriffen darauf zu


----------



## vierlagig (4 August 2008)

MarioDisketti schrieb:


> @vierlagig
> Stimmt ich verwende keine FBs nur FCs.
> Muß ich denn auch in den FCs den letzen globalen
> Baustein sichern ?



nicht, wenn du da keinen DB aufmachst



MarioDisketti schrieb:


> @Ralle
> obwohl ich den DB am Anfang öffne greife ich nur
> mit qualifizierten Zugriffen darauf zu



das halt ich für ein gerücht


----------



## MarioDisketti (4 August 2008)

> nicht, wenn du da keinen DB aufmachst

Nun in meinen FC's mach ich schon DB's auf und
zwar die deren Nummer ich als Parameter übergebe.


> das halt ich für ein gerücht

Ernsthaft, kein Gerücht ! Verstehe ich Deinen Zweifel richtig. 
Ich muß den DB garnicht mit AUF öffnen wenn ich ohnehin
qualifiziert darauf zugreife ? 

Logische Konsequenz: Mein OB1 funktioniert nur gerade 
deshalb weil ich qualifiziert auf den DB zugreife, da ich in den  
FC's ja andere DB's öffne !? Richtig ?
(Wie gesagt SPS Anfänger)


----------



## vierlagig (4 August 2008)

ja, richtig, du kannst des AUF DBxy rauslassen, wenn du qualifiziert zugreifst

wenn du immer qualifiziert zugreifst dürfte es nicht zu einem solchen fehler kommen.


----------



## MarioDisketti (4 August 2008)

Ok,
danke nochmals für Deine / Eure Hilfe und die schönen FB's.
Hab mal wieder was dazu gelernt !


----------

