# Online Lehrgang bei SPS-Forum oder Hausaufgabe



## waldy (29 Juni 2008)

Hallo,
ich habe eine sehr gute Idee, auf jeden Fall für mich diese Idee ist sehr Aktuel , kann man bei SPS-Forum Online Lehrgang  ( oder Hausaufgabe ) erzeugen?
Wo z.B. einen stellt Aufgabe, und wer will ( wer will SPS S7 selber einlernen ) kann diese Aufgabe dann fertig machen und hier lösung zeigen . Als Bonus bekommt dann jede Bonus und unsere Jury.

gruß waldy


----------



## vladi (29 Juni 2008)

*Online Lehrgang..*

Wie wäre es mit: ein SPS Lehrbuch mit Beispiele usw. richtig durchlesen und abarbeiten, mit Hilfe von mehrere Beiträge hier?
Ich glaube manche Leute versuchen halt irgendwie an ein Paar Lösungen zu kommen, ohne gross arbeiten zu müssen. Und im Internet ist schon sehr viel Wissen angesamelt, egal für welche Bereiche..
Wir brauchen richtige Profis draussen, denn die Pfuscher sind schon jetzt genug unterwegs. Meine Meinung..

Vladi


----------



## waldy (29 Juni 2008)

> ein SPS Lehrbuch mit Beispiele usw. richtig durchlesen und abarbeiten


- ich habe solche Bücher, nur da stehen nur kleine Beispile und die sind immer gleich, ob ich lese Buch ein oder mehrere mal - da stehen immer ncoh gleiche Beispiele .
Und wenn du list jede mal gleiche Aufgabe - dann du denkst- das die sind sehr leicht.
Nur bis kommt was neues - und dann weiss man schon nicht, wie es geht weiter.
Deswegen muss man was neues haben , damit kann man wirklich was einlernen.




> Ich glaube manche Leute versuchen halt irgendwie an ein Paar Lösungen zu kommen, ohne gross arbeiten zu müssen.


 - ich brauche Momental keine fertige lösungen, ich möchte Richtig SPS einlernen .
Allein das ist sehr Schwer , deswegen Anfänger wie ich braucht immer eine Hilfe von jemandem.

gruß waldy


----------



## hubert (29 Juni 2008)

Hi.

Ich stimme vladi zu. Hier im Forum gibt es zick Lösungen von irgendwelchen Beispielen. Ich selbst habe auch mit Büchern gelernt und bin dabei nie schlecht gefahren. Hab z.B. das Buch "Automatisieren mit SPS Theorie und Praxis" von Günter Wellenreuther und Dieter Zastrow. Finde das Buch wirklich super . Schau auch jetzt noch immer nach. Ganz zu Anfang habe ich 6 Wochen bei der Handwerkkammer den SPS-Techniker für die Grundlagen gemacht und den Rest wie gesagt mit Büchern und sehr viel Praxis. Also wie gesagt, wenn einer ein Problem zu einer Überung hat, hier wird jedem geholfen. Wenn jemand noch Übungen brauch, kein Problem, hab davon genug.


----------



## Martin L. (29 Juni 2008)

Hallo waldy,

also um fachlich den Durchblick bei einer Siemens S7 SPS-Steuerung
zu bekommen ist es optimal bei Siemens einen Lehrgang zu belegen.

Klar sind mir die hohen Kosten von ca. 800-1.500 Euro (je nach Lehrgang)
bekannt.

Die beste Grundlage ist fundiertes Fachwissen in der Automatisierungstechnik
und nicht einfach rumprogrammieren und schauen was passiert.  Wie 
Vladi schon sagt, Pfuscher gibt es in unserer Branche schon genug.
ALso lesen,lernen, lesen,lernen etc.


----------



## waldy (9 Juli 2008)

> Pfuscher gibt es in unserer Branche schon genug.


 das meinst über mcih auch ?

Oder sind hier alle schon von Gestern  auf Morgen plotzlich Super Profi geworden wurden ?

Ich würde es so aussagen, dass alles haben irgendwie angefangen, und waren auch einige Zeit so als gennante " Pfuscher " gewesen, bevor die haben was gelernt.


Esw sieht so aus, das ich bekomme keine Hilfe mit Hausaufgaben ?

gruß waldy


----------



## vierlagig (9 Juli 2008)

waldy schrieb:


> Esw sieht so aus, das ich bekomme keine Hilfe mit Hausaufgaben ?



möchtest du, dass dir jemand eine aufgabe stellt und diese dann mit dir diskutiert? ... das sollte nicht das problem sein, die frage ist nur ob wir mit dir bei null oder 10 oder 100 anfangen können? was kannste schon?


----------



## waldy (9 Juli 2008)

Hallo,


> die frage ist nur ob wir mit dir bei null oder 10 oder 100 anfangen können? was kannste schon?


 - hm, gute Frage, sagen wir so, fangen wir ab "0" und dann schust du, was kann ich schon , Das ist einfachste lösung für uns beide 

gruß waldy

P.S. ich kann schon mindestens Menü auf Programm "STEP 7" tippen


----------



## Ralle (9 Juli 2008)

@waldy

Aber die Module von Siemens solltest du vorher unbedingt mal lesen.

Siehe hier: http://www.sps-forum.de/showthread.php?t=1533

Ausbildungsunterlagen.


----------



## vierlagig (9 Juli 2008)

waldy schrieb:


> Hallo,
> - hm, gute Frage, sagen wir so, fangen wir ab "0" und dann schust du, was kann ich schon , Das ist einfachste lösung für uns beide



worauf lass ich mich hier nur ein?! 

wir fangen aber bei 5 an, ok?



			
				Aufgabe 1 für Waldy schrieb:
			
		

> Generiere 16 Puls-Pause-Bits als Merker mit den Puls-Pause-Werten: 1s, 2s, 4s, ... 32768s
> 
> Hinweis: global adressieren


----------



## johnij (9 Juli 2008)

Ralle schrieb:


> @waldy
> 
> Aber die Module von Siemens solltest du vorher unbedingt mal lesen.
> 
> ...


 
*ACK*

Gewisse Gundlagen sind erforderlich.
Und das mit den aufgaben bringt eher wenig.
Man soll viel lesen (+üben mit den Baugruppen) und wenn man nicht weiter kommen kann, soll man das ins Forum stellen.

Gruß johnij


----------



## vierlagig (9 Juli 2008)

johnij schrieb:


> Man soll viel lesen (+üben mit den Baugruppen) und wenn man nicht weiter kommen kann, soll man das ins Forum stellen.



tja, das mit dem üben ist das problem, einfach mal so drauf los wird das leider nix, diese erfahrung mußte ich vor 13jahren auch machen. es ist einfacher zu greifen, wenn man weiß was man übt, wenn man ein konkretes ziel hat - sonst kommt son kuddelmuddel-code raus wie du ihn gern verzapfst


----------



## JOBBY (9 Juli 2008)

Hallo Waldy,

ich habe einige Jahre im Exponatebau gearbeitet.
Habe von der Zeit noch viele Programme und die extrem kniffeligen Anforderungen dazu.

Bei Gelegenheit kann ich dir ein paar zukommen lassen. Nach den Anforderungen kannst du ja mal losprogrammieren und dein Ergebniss dann mit meinen vergleichen.

Jedoch hätte ich dann gerne, dass falls du etwas finden solltest das nicht der ISO entspricht, oder eine bessere Lösung für etwas findest dies mir mitteilst.

Grüsse


----------



## waldy (10 Juli 2008)

Hallo,


> 1s, 2s, 4s,


 - Frage, was kommt nach "4" , "6" oder "8" ?
Ich meine muss man addieren jede mal "+2" oder multiplizieren?

gruß waldy


----------



## Ralle (10 Juli 2008)

Ich denk mal 1,2,4,8,16,32 ...


----------



## vierlagig (10 Juli 2008)

Ralle schrieb:


> Ich denk mal 1,2,4,8,16,32 ...



richtig gedacht ... 64, 128, 256, 512 ....


----------



## crash (10 Juli 2008)

Ralle schrieb:


> Ich denk mal 1,2,4,8,16,32 ...



ja, genau so meint vierlagig es

Edit: da war er selbst schon schneller


----------



## waldy (10 Juli 2008)

Zitat von *waldy* 

 
_- tja, Sie glauben vielleicht nicht, aber erste Zewit ich dachte das die Ziffer mus in in Quadrat multiplizieren
2^2 =4
4^4=16
16^^16= mom , muss es mit Taschenrechner rechnen = aha 256 
:smile:

na ja, meine Gedanke ghehen in Verschiedene Richtungen :smile:

gruß waldy_


----------



## jabba (10 Juli 2008)

waldy schrieb:


> - tja, Sie glauben vielleicht nicht, aber erste Zewit ich dachte das die Ziffer mus in in Quadrat multiplizieren
> 2^2 =4
> 4^4=16
> 16^^16= mom , muss es mit Taschenrechner rechnen = aha 256
> ...


2^2=4
4^4=256
16^^16=1,797693134862315907729305190789e+308

Richtig wäre
2^2=4
2^4=16
2^8=256
2^16=65536


----------



## waldy (10 Juli 2008)

na ja, mit erste drei Zahlen ich kammnicht klar, unddeswegen ich habe es nohc ml hier nachgefragt.

Na ja , das war meine Fehler.

gruß waldy


----------



## vierlagig (10 Juli 2008)

will ja nicht böse sein, aber mein lehrling hat das in vier stunden geschafft


----------



## crash (10 Juli 2008)

vierlagig schrieb:


> will ja nicht böse sein, aber mein lehrling hat das in vier stunden geschafft


ganz ohne tipps und hilfe?


----------



## vierlagig (10 Juli 2008)

crash schrieb:


> ganz ohne tipps und hilfe?



er hat die selben tipps bekommen, die waldy mir per PN ausm kreuz geleiert hat.

also: CPU-Takt; dann war er bei zählern, hat von mir den hinweis auf eine speicherschonendere variante bekommen, so plus oder so und natürlich den hinweis auf die datentypen und deren aufbau


----------



## waldy (10 Juli 2008)

Hallo,
 Mit CPu Takt und Zähler kein Problemm.
Ich muss nur noch ausdenken, wie werde ich die Zähle vergleichen, und Richtige ausgeben am Ausgang.

Ich hoffe , das andere Anfänger können hier auch später irgendwann was gutes nachlesen.

gruß waldy


----------



## vierlagig (10 Juli 2008)

ich hätte gern einen 7-zeiler - in worten: sieben-zeiler


----------



## johnij (11 Juli 2008)

waldy schrieb:


> Hallo,
> - Frage, was kommt nach "4" , "6" oder "8" ?
> Ich meine muss man addieren jede mal "+2" oder multiplizieren?
> 
> gruß waldy


 

ich habe eben den Beitrag gelesen,

ist das eine Frage????
In der Digitaltechnik bzw. Informationstechnik wird jede Zahl als eine Summe von 2 er Potenzen gespeichert/ verarbeitet d.h 2 hoch x (x>0)

Hier liegt der Unterschied zwsichen einer Ausbildung und einem Studium 


MFG
johnij


----------



## crash (11 Juli 2008)

vierlagig schrieb:


> er hat die selben tipps bekommen, die waldy mir per PN ausm kreuz geleiert hat.
> 
> also: CPU-Takt; dann war er bei zählern, hat von mir den hinweis auf eine speicherschonendere variante bekommen, so plus oder so und natürlich den hinweis auf die datentypen und deren aufbau


das sind ja schon 75% der Lösung.


----------



## vierlagig (11 Juli 2008)

crash schrieb:


> das sind ja schon 75% der Lösung.



für dich wohl ... für andere scheinen das böhmische dörfer zu sein 



johnij schrieb:


> Hier liegt der Unterschied zwsichen einer Ausbildung und einem Studium



nee, das ist einfach nur: wie denk ich! 
und nicht: was hab ich während meines studiums/meiner ausbildung gelernt!

und jetzt darf markus gern kommen, das weiter ausführen und dir mal schön den arsch versohlen! *g*


----------



## johnij (11 Juli 2008)

vierlagig schrieb:


> und jetzt darf markus gern kommen, das weiter ausführen und dir mal schön den arsch versohlen! *g*


 
@$L

ROFLMAOROFLMAOROFLMAO

Gruß johnij


----------



## kiestumpe (11 Juli 2008)

*Grobfahrplan*

Hallo,

ich habe mir für Schulungszwecke einmal folgenden Fahrplan für SIMATIC
 zusammengestrickt:
Vorraussetzungen sind Grundkenntnisse der Digitaltechnik Programmierkenntnisse sind von Vorteil:

3Projekt anlegen, Hardwarekonfig7
3.1Feinziele7
3.2Hilfsmittel7
3.3Übungsaufgaben7
4Programmeditor8
4.1Feinziele8
4.2Hilfsmittel8
4.3Übungsaufgaben8
5Programmelemente in KOP/FUP9
5.1Feinziele9
6Datenbausteine10
6.1Feinziele10
6.2Übungen10
7Strukturen11
7.1Feinziele11
7.2Übungen11
8Schrittkettentechnik12
8.1Feinziele12
8.2Übungen12
8.2.1Fußgängerampel12
9Funktionsbausteine Teil 113
9.1Feinziele13
9.2Hilfsmittel13
9.3Übungen13
10Funktionsbausteine Teil 214
10.1Feinziele14
10.2Hilfsmittel14
10.3Übungen14
11Einführung in SCL15
11.1Feinziele15
12Datenbausteine Teil II16
12.1Feinziele16
13Unterschiedliche Programmiertechniken17
13.1Feinziele17
13.2Hilfsmittel17
13.3Übungen17
14Programmiergerät und Steuerung18
14.1Feinziele18
14.2Hilfsmittel18
14.3Übungen18
15Schrittkettentechnik in SCL19
15.1Feinziele19
15.2Übungen19
16Dos & Don’ts in SCL20
16.1Feinziele20
16.2Übungen20
17Schrittketten mit Graph 721
17.1Feinziel21
17.2Übungen21
18Besonderheiten bei Funktionsbausteinen mit Graph 722
19Reglerbausteine23
19.1Feinziele23

28


----------



## waldy (11 Juli 2008)

Hallo,


> 3Projekt anlegen, Hardwarekonfig7
> 3.1Feinziele7
> 3.2Hilfsmittel7
> 3.3Übungsaufgaben7
> 4Programmeditor8


 - wenn ich versuche drauf tippen - kommt nur Bild von allgemeine Forum.





> nee, das ist einfach nur: wie denk ich!
> und nicht: was hab ich während meines studiums/meiner ausbildung gelernt!


 - da stime ich zu, was haben wir in Ausbildung gelernt , und was kommt in Praxis - gaaaaanz zwei grosere Verschiedene Sache. Und wenn von jemand kommt ganz andere Aufgabe - dann stehe cih wie einer " Dummer " vor und lese meine Bücher wieder nach.


gruß waldy


----------



## vierlagig (16 Juli 2008)

waldy bastelt wohl noch ... hätte mir so einen online-lehrgang wesentlich stressiger vorgestellt


----------



## waldy (16 Juli 2008)

Hallom,
ich sitzte Momental und bastle an Geschierspulmaschine, ist heute  Kaputt gegangen.
Sonst Teller muss ich dann selber waschen 

gruß waldy


----------



## waldy (16 Juli 2008)

hm, irgendwie komme ich nicht klar mit 7 Zeiler


----------



## vierlagig (16 Juli 2008)

waldy schrieb:


> hm, irgendwie komme ich nicht klar mit 7 Zeiler



vielleicht solltest du mal eine frage formulieren, kann nicht riechen wo es hakt


----------



## waldy (16 Juli 2008)

Hallo,
wenn ich versuche das in AWL schreiben- dann kommt mehr Zeiler als 7 .
Das bedeutet, das ich kenne mcih in AWL noch nicht gut aus .

Ich habe mir überlegt, wenn bei mir fehlen solche einfachste Dinge - dann fangen wir mit "0" Bereich Aufgaben .

Ist das Möglich so machen?


gruß waldy


----------



## vierlagig (16 Juli 2008)

zeig doch erstmal was du bisher hast, dann können wir immer noch zurückrudern oder rausfinden, wo man zeilen sparen kann


----------



## vierlagig (16 Juli 2008)

ok waldy, nach deiner letzten PN und der bitte doch auf 0 zurückzufahren, versuch ich es mal... wir wollen aber trotzdem bei AWL bleiben, damit wir level 5 auch noch erreichen können...


es sind vier taster angeschloßen, E0.0 - "Freigabe", E0.1 - "Plus", E0.2 - "Minus", E0.3 - "Reset"

der nun folgende mechanismus soll nur funktionieren, wenn "Freigabe" TRUE ist.
beim drücken von E0.1 soll das MW 12 einmalig um eins erhöht werden
beim drücken von E0.2 soll das MW 12 einmalig um eins verringert werden
beim drücken von E0.3 soll das MW 12 einmalig mit 0 beschrieben werden


----------



## crash (18 Juli 2008)

ist heute nicht abgabeschluss für die hausaufgabe? 
was ist los waldy?
brauchst du mehr hilfe?


----------



## vierlagig (18 Juli 2008)

crash schrieb:


> ist heute nicht abgabeschluss für die hausaufgabe?
> was ist los waldy?
> brauchst du mehr hilfe?



nicht drängeln - waldy kämpft mit AWL - in FUP wäre es wohl kein Problem ... hatte ihm aber auch angeboten, dass er seine lösung in FUP machen darf


----------



## waldy (18 Juli 2008)

Hi ,
ja, bischen muss man erst abwarten.
So wie habe ich es verstanden - ohne AWL Kenntnisse - bin ich nichts 

Deswegen AWL Kenntnisse muss ich auch einlernen .

gruß waldy


----------



## waldy (22 Juli 2008)

Hallo,
da ist die Programm:



> OB 1
> Call FC1
> 
> FC 1
> ...


 
Die Frage, mit plus und auf "0" MW12 setzten - funktionieren gut.

Nur wenn ich tippe aus minus ( E0.2) - dann Prgorgamm beginnt selber automatisch immer MW12 aus minus "1" machen - wo liegt mein Fehler?

gruß waldy


----------



## vierlagig (22 Juli 2008)

1. bitte benutze die code-tags! ... wie es geht? einfach mal auf den link in meiner signatur klicken...

2. dir ist klar, dass du da eine endlos schleife gebaut hast?

3. hast du dir dein "problem" mit dem hochzählen mal online angeguckt? M10.0 ist solange 1 wie eine taste gedrückt ist, hier wirst du noch einen merker opfern müssen

4. addieren und subtrahieren ist eine schöne lösung - wenn du es mit einem zähler realisieren müßtest, wie würdest du dann vorgehen? aber eins nach dem anderen, mach erstmal den einen baustein fertig


----------



## Ralle (22 Juli 2008)

vierlagig schrieb:


> 2. dir ist klar, dass du da eine endlos schleife gebaut hast?
> 
> 3. hast du dir dein "problem" mit dem hochzählen mal online angeguckt? M10.0 ist solange 1 wie eine taste gedrückt ist, hier wirst du noch einen merker opfern müssen



Also aus 2. folgt eigentlich, daß er 3. nicht durchführen konnte, denn die SPS geht ja in STOP. 

Er muß sich verschrieben haben, denn er selbst hat ja online einige Sachen getestet, schreibt er .


----------



## vierlagig (22 Juli 2008)

Ralle schrieb:


> Also aus 2. folgt eigentlich, daß er 3. nicht durchführen konnte, denn die SPS geht ja in STOP.



wenn die zykluszeitüberwachung aktiv ist  ... weiß leider nicht welche simulation/hardware waldy verwendet...

was mir noch einfällt: da hat einer die "Freigabe" vergessen


----------



## waldy (22 Juli 2008)

hi,
waldy hat V5.1

gruß waldy


----------



## vierlagig (22 Juli 2008)

waldy schrieb:


> hi,
> waldy hat V5.1
> 
> gruß waldy



und womit testest du?


----------



## waldy (22 Juli 2008)

> und womit testest du?


 mit S7 PLCSIM - SimView1 Programm.
gruß waldy


----------



## waldy (22 Juli 2008)

H,



> 2. dir ist klar, dass du da eine endlos schleife gebaut hast?


  - ja, Programm war unsprunglich als Schleife ausgedacht, das Stimmt.

Nur warum mit "plus" Programm funktioniert richtig, es wird nur "1" addirt, wenn Taste ist neu getippt.

Und als " Minus" nach  Tasten tippen - macht " Minus" weiter selber?



> 3. hast du dir dein "problem" mit dem hochzählen mal online angeguckt? M10.0 ist solange 1 wie eine taste gedrückt ist, hier wirst du noch einen merker opfern müssen


 - ja nur ich habe Positive Flanje dafür verwendet, so lange Taste wird nciht noch mal getippt, und kommt keine Positive flanke ,( Fragabe für einmalige zahlen ) , muste nichts passieren.

gruß waldy


----------



## waldy (22 Juli 2008)

hi,
da ist andere Möglichkeit von diese Aufgabe


```
[SIZE=2]OB1[/SIZE]
 
 
[SIZE=2]U E 0.1[/SIZE]
[SIZE=2]FP M 10.0[/SIZE]
[SIZE=2]CC FC 1[/SIZE]
 
 
[SIZE=2]U E 0.2[/SIZE]
[SIZE=2]FP M 10.1[/SIZE]
[SIZE=2]CC FC 2[/SIZE]
 
 
 
[SIZE=2]U E 0.3[/SIZE]
[SIZE=2]FP M 10.2[/SIZE]
[SIZE=2]CC FC 3[/SIZE]
[SIZE=2]BE [/SIZE]
 
 
 
[SIZE=2]FC1[/SIZE]
 
[SIZE=2]L MW 12[/SIZE]
[SIZE=2]+ 1[/SIZE]
[SIZE=2]T MW 12[/SIZE]
 
 
 
[SIZE=2]FC2[/SIZE]
 
[SIZE=2]L MW 12[/SIZE]
[SIZE=2]+ -1[/SIZE]
[SIZE=2]T MW 12[/SIZE]
 
 
 
[SIZE=2]FC3[/SIZE]
 
[SIZE=2]L 0[/SIZE]
[SIZE=2]T MW 12[/SIZE]
```


----------



## vierlagig (22 Juli 2008)

code, nicht quote!

bin dafür, dass du erstmal deinen ersten code in ordnung bringst!


----------



## waldy (22 Juli 2008)

> ...das kann man doch alles nachlesen! *Lesen* muß man können, das ist das Hauptproblem ...


 ja, gute Aussage, muss man nur noch hinweis extra geben, ob das muss man von Links nach Rechts lesen oder von Rechts nach Links


----------



## waldy (22 Juli 2008)

Hallo,
ich vermute, das jetzt meine Hausaufgabe Nr. 1 ist Richtig ausgefürt:

```
OB1
 
Call FC1
 
 
FC1
 
 
M004: U E 0.0 
         U E 0.1 
         FP M 10.0 
         SPB M001 
 
        U E 0.0
        U E 0.2
        FP M 10.1
        SPB M002 
 
        U E 0.0
        U E 0.3
        FP M 10.2
        SPB M003 
 
        SPA M004
 
M001: L MW 12
         + 1
         T MW 12
         SPA M004
 
M002: L MW 12
         L 1
         -I 
         T MW 12
         SPA M004
 
M003: L 0
         T MW 12
 
         NOP 0
```
 
gruß waldy

P.S. in erste Lösung Fehler lag am M10.0, war überral gleiche Merker M10.0 gewesen, habe jetzt das korrigiert.


----------



## vierlagig (22 Juli 2008)

da war sie wieder, die endlosschleife

setze die marke M004 ans ende des codes.

dann müßte es funktionieren, aber überlege dir mal ob es notwendig ist, die freigabe immer wieder abzufragen oder ob man das nicht eleganter lösen könnte


----------



## waldy (22 Juli 2008)

> da war sie wieder, die endlosschleife


 - ja, ich habe es extra so mit  schleife gemacht.
Ich dachte es so, das wenn wird "1" eingetippt, und programm muss dann ganz Schneller die Eingänger abragen, damit habe ich so genante Schleife gemacht, wenn wird auf "0" gesetzt , programm geht ganz normal aus mit "NOP 0" am ende.

gruß waldy


----------



## SPSKILLER (22 Juli 2008)

Hey Waldi,

dein Programm ist falsch und unter Umständen gefährlich!
Eigentlich müsste deine SPS auf Stopp gehen...


```
OB1
 
Call FC1
FC1
        U E 0.0 
         U E 0.1 
         FP M 10.0 
         SPB M001 
 
        U E 0.0
        U E 0.2
        FP M 10.1
        SPB M002 
 
        U E 0.0
        U E 0.3
        FP M 10.2
        SPB M003 
 [COLOR=lime]bea[/COLOR]
 
M001: L MW 12
         + 1
         T MW 12
         [COLOR=lime]bea[/COLOR]
 
M002: L MW 12
         L 1
         -I 
         T MW 12
         [COLOR=lime]bea[/COLOR]
 
M003: L 0
         T MW 12
```
 
So sollte es sauber und richtig und am schnellsten sein.

Gruß Micha


----------



## SPSKILLER (22 Juli 2008)

Ach ja, und falls die Freigabe weg soll,
dann schreibst du einfach in der ersten Zeile vom FC1


```
un e0.0
beb
```
 
und lässt die anderen E0.0 weg.


----------



## waldy (22 Juli 2008)

Hi,



> dein Programm ist falsch und unter Umständen gefährlich!
> Eigentlich müsste deine SPS auf Stopp gehen...


 -  hm, wartum die ist Falsch und gefährlich ?
Was gefähliches ist da drin ?

Wenn ich stelle mir vor, anstatt, ganz langsam Tasten tippen, sondern irgendwo steht auf Band 3 Inis und das muss ganz schnell die Datenbearbeiten - dann finde ich meine Lösung ganz schön.

Ich gang davon, das Programm muss ganz Schnell die Daten abfragen und bearbeiten.


gruß waldy


----------



## vierlagig (22 Juli 2008)

da das mein onlinelehrgang mit waldy ist und ich etwas dagegen habe bausteinenden absolut oder bedingt im programm zu verteilen bleibe ich dabei: die marke M004 ans ende und gut. und die freigabe auswertung nur einmal.


```
*
      UN    E      0.0
      SPB   M004

      U     E      0.1
      FP    M     10.0
      SPB   M001
....
```

und jetzt waldy, kommt was wichtiges, bei der marke M004 macht du nicht einfach nur ein NOP 0 sondern ein


```
*
M004: SET   
      SAVE
```

damit stellst du sicher, dass der EN0 ausgang deines baustein true ist, wenn dieser abgearbeitet wurde.

bei marke M002 würde ich


```
*
M002: L     MW    12
      +     -1
      T     MW    12
      SPA   M004
```

vorschlagen.

so waldy, nächster schritt. wir wollen das ganze für, sagen wir mal 10 oder 20 merkerwörter mit unterschiedlichen eingängen realisieren ... was schlägst du vor?


----------



## waldy (22 Juli 2008)

Hallo,


> sagen wir mal 10 oder 20 merkerwörter mit unterschiedlichen eingängen realisieren ... was schlägst du vor


 - ich sage " ja " , besser versuchen das machen, als dann später sitzten und denken, warum habe ich das nicht gemacht , mindestens versuchen 

gruß waldy


----------



## vierlagig (22 Juli 2008)

na dann mach dir mal nen kopf


----------



## vierlagig (30 Juli 2008)

so waldy, nachdem das hinter den kulissen ein wenig hin und hergegangen ist und du offensichtlich immer noch nicht so recht verstanden hast, was ich eigentlich als nächste aufgabe für dich vorgesehen habe, hier ein neuerlicher versuch, das in worte zu fassen

(@alle mitleser - wenn einer von euch waldys sprache spricht, bitte dolmetschen )

Programmiere einen Funktionsbaustein (FB) der es ermöglicht eine INT-Zahl mit drei boolchen Variablen (als IN zu deklarieren) zu beeinflußen.
Realisiert werden soll Inkrement (+1), Dekrement (-1) und Reset (=0).
Der Baustein ist so auszulegen, dass die globalen Verweise beim Aufruf übergeben werden, der Baustein selber vollständig mit lokalen Variablen ausgeführt ist. Damit wird seine Wiederverwertbarkeit gesichert.

Zusatzaufgabe: Prüfe die Möglichkeit eine Funktion (FC) einzusetzen! Worauf ist zu achten?


----------



## volker (30 Juli 2008)

nachdem waldy mich per pn angeschrieben hat das er mit posting 59 absolut nichts anfangen kann, will ich hier mal ein klein wenig hilfestellung geben.
das war vor dem letzten posting von vl

ich denke es ist einfacher mit einer parametrierbaren fc zu beginnen.

sollte dir das nichts sagen, hier mal eine kleine erklärung

erzeuge fc10
oben im deklarationbereich definiere 
eine variable unter *IN* mit namen _input_ vom typ _bool_
eine variable unter *OUT* mit namen _output_ vom typ _bool

netzwerk 1
_
u #input
= #output

rufe die fc10 nun im ob1 auf.

an die beiden parameter die die fc10 verlangt musst du nun variabeln antragen.
z.b. für input E0.0 und für output A1.0

was passiert nun im fc10.....
der E0.0 wird nun im fc10 an den lokaldatenbereich der fc10 übergeben.
für die fc10 ist der parameter input also E0.0
der parameter output wird beim verlassen der fc10 an den A1.0 übergeben.

für die fc10 ergibt sich vom prinzip dadurch folgender code

U E0.0
= A1.0

ich hoffe das war verständlich ????

um nun zur aufgabe von vl zu kommen.
du brauchst in deiner fc also zumindest mal 3 IN-variable vom typ BOOL
mit den namen z.b. plus, minus, reset
und eine OUT-variable vom typ INT
mit dem namen z.b. zaehlerstand

nun programmierst du deine funktion nicht mit den direkten adressen, sondern mit den von dir vergebenen variablennamen.

das mit dem flankenspeicher lasse erst mal weg.
da können wir drauf eingehen, wenn du das hier hinbekommen hast.

es ergibt sich also folgende funktion für fc10
solange plus 1-signal hat, wird hochgezählt
solange minus 1-signal hat, wird abgezogen
wenn reset ansteht wird 0 in den zaehlerstand transferiert

@vl
ich hoffe ich sabotiere hier nicht deinen kursus :sm8:


----------



## hhbjörn (4 August 2008)

hallo
jungs ist hier scluß oder geht es weiter mit dem lehrgang?

gruß björn der sich mit einem fernlehrgang rumärgert...


----------



## vierlagig (4 August 2008)

waldy scheint grad urlaub zu machen oder an seinem fiat panda oder was das war rumzuschrauben ... oder er hat die aufgabe wirklich noch nicht verstanden und traut sich nicht nochmal nachzufragen 

...hast du bisher alle aufgaben hier gelöst bekommen, also besonders die mit den 16 taktmerkern?


----------



## hhbjörn (4 August 2008)

nein ich habe nur mitgelacht..
habe nicht soviel zeit momentan so das ich zusehe das ich meine lehrbriefe durch arbeite merke echt das wenn mann nicht am ball bleibt schnell den faden verliert .
ich mache das eigentlich nur mit ich bei inb meinem elek. über die schulter schauen kann und um kleinere änderungen selber (teils via telefon) ändern kann.


----------



## waldy (4 August 2008)

Hallo,
nein, nein -ich will weiter es machen.



> oder an seinem fiat panda oder was das war rumzuschrauben


 - ja, das Stummt. Bin Momental ganze Zeit nach die arbeit mit meinem neue gebrauchtes Auto dran. Laut VK Auto war sehr gut gepflegt und ich muste in nächste zwei jahre nichts dran machen. 
Nun folgendes:
- Getriebe wurde undicht ( haben wir heute Antriebswelle rausgenommen, Getriebe zwrlegt, neue Simering eingebaut , waren fast 4 Stunden dran.
- Ölwanne Undicht, muss man machen, dauert auch ca. 4 Stunden , bischen Kompliziert Ölwane abbauen, weil bei Peugeot 806 Klimerkompressor an Ölwanne drauf gemacht ist.
- Klimaanlage funktioniert nicht.
- Wischer von hinter am Heckscheibe - Relais war defekt, habe Fehler auch lange gesucht. ( Muste dafür Original Schaltpläne von peugeot kaufen).




> oder er hat die aufgabe wirklich noch nicht verstanden


 - na ja ganz habe ich nocht nicht verstanden, Funktion die Elementen. Lese da zwischen mein Buch 



> traut sich nicht nochmal nachzufragen


 - warte mal ab, so weit bin ich mein Auto fertig ( hoffe mache ich nichts Kaputt), da kommen wieder die Komische Frage, über welche @ hhbjörn hat mitgelacht 

gruß waldy

P.S. muss schon in Bett, muss ich Morgens um 4 h aufstehen.


----------



## e4sy (7 August 2008)

hhbjörn schrieb:


> nein ich habe nur mitgelacht..
> habe nicht soviel zeit momentan so das ich zusehe das ich meine lehrbriefe durch arbeite merke echt das wenn mann nicht am ball bleibt schnell den faden verliert .
> ich mache das eigentlich nur mit ich bei inb meinem elek. über die schulter schauen kann und um kleinere änderungen selber (teils via telefon) ändern kann.




[spam] also schreiben wie waldy kann er ja schon  [/spam]


----------



## waldy (10 August 2008)

Hallo,
da ich konnte nicht meine erste Aufgabe aufgeben, ich habe es versucht so machen, wie ich das kann. Obwohl ich habe erst einfach so gemacht, es wird nach jede Merker Takt M100.3 mal 2 gerechnet.



```
[SIZE=2]
M004: U M 100.3
FP M 2.0
SPB M002
SPA M003
 
M002: U M 1.1
SPB M001
L 1
T MW 10
S M 1.1
M001: L MW 10
L 2
*I 
T MW 10
L MW 10
L 32756
<I 
 
SPB M004
U M 1.1
R M 1.1
M003: L MW 10
L L#32768
==I 
R M 1.1
[/SIZE]
```
 

gruß waldy


----------



## vierlagig (10 August 2008)

1. das ist mal wieder eine beinahe endlosschleife - lass das! springe nur zurück, wenn du beabsichtigst eine richtige schleife zu bauen und dann im günstigsten falle mit NEXT

2. multiplikation ist nicht das mittel der wahl

3. habe ich dir in der letzten PN schon mitgeteilt, dass du zu kompliziert denkst ... addition und "was passiert bei einem überlauf vom merkerwort?" war meine frage


----------



## waldy (10 August 2008)

Hallo,



> "was passiert bei einem überlauf vom merkerwort?"


 - OK , OK, ich lasse diese Aufgabe in Ruhe, bis ich andere Sache werde gut einlernen .

Nun da ist meine korrigierte Version, wegen Merkerwort überlauf, du wars Recht, sonst würde es bei überlauf nicht mehr funktionieren.


```
[SIZE=2]OB1[/SIZE]
[SIZE=2]CALL FC1[/SIZE]
[SIZE=2]-------------[/SIZE]
[SIZE=2]Netzwerk1 [/SIZE]
[SIZE=2]Zählt Impulsen 1 Sek von CPU M100[/SIZE]
[SIZE=2]-------------------[/SIZE]
[SIZE=2]U M 100.5[/SIZE]
[SIZE=2]ZV Z 1[/SIZE]
[SIZE=2]NOP 0[/SIZE]
[SIZE=2]NOP 0[/SIZE]
[SIZE=2]NOP 0[/SIZE]
[SIZE=2]UN M 1.1[/SIZE]
[SIZE=2]R Z 1[/SIZE]
[SIZE=2]L Z 1[/SIZE]
[SIZE=2]T MW 4[/SIZE]
[SIZE=2]NOP 0[/SIZE]
[SIZE=2]NOP 0[/SIZE]
[SIZE=2][/SIZE] 
[SIZE=2][/SIZE] 
[SIZE=2]Netzwerk2[/SIZE]
[SIZE=2]macht vergleich von CPU Merker 100 und Aktuelen Daten von MW10[/SIZE]
[SIZE=2]-----------------[/SIZE]
[SIZE=2]L MW 4[/SIZE]
[SIZE=2]L MW 10[/SIZE]
[SIZE=2]==I [/SIZE]
[SIZE=2]= A 0.1[/SIZE]
 
[SIZE=2][/SIZE] 
[SIZE=2][/SIZE] 
[SIZE=2]Netzwerk 3[/SIZE]
[SIZE=2]-------------------------[/SIZE]
[SIZE=2]M004: U A 0.1 // wenn von Vergleich das Stimmt[/SIZE]
[SIZE=2]U M 100.5[/SIZE]
[SIZE=2]FP M 2.0 // Setzte Positive Flanke[/SIZE]
[SIZE=2]SPB M002 // bei VK1 , geht zum Merker 002 [/SIZE]
[SIZE=2]SPA M003 // sonst, bevor zähler zählt, wird zm M003 übergehen[/SIZE]
 
[SIZE=2]M002: U M 1.1 // wenn M1.1 wurde schon ein mal auf "1" eingesetzt, dann es geht zum normale weitere berechnungen[/SIZE]
[SIZE=2]SPB M001[/SIZE]
[SIZE=2]L 1 // hier wird es erstmal "1" für MW10 eingesetzt( ich weiss nicht, wie kann man es anderes realisieren)[/SIZE]
[SIZE=2]T MW 10[/SIZE]
[SIZE=2]S M 1.1[/SIZE]
[SIZE=2]SPB M004[/SIZE]
[SIZE=2]M001: L MW 10 // wird bei vergleich von Z1 und Mw10 jede mal mal 2 gerechnet[/SIZE]
[SIZE=2]L 2[/SIZE]
[SIZE=2]*I [/SIZE]
[SIZE=2]T MW 10[/SIZE]
[SIZE=2]L MW 10 // fals MW10 ist weniger al 32756 , kehrt zurück zum abwarteb und verglichen[/SIZE]
[SIZE=2]L 32756 // festpunkt, bis wieviel es muss zählen // 32756[/SIZE]
[SIZE=2]<I [/SIZE]
[SIZE=2]SPB M004[/SIZE]
[SIZE=2]L 0[/SIZE]
[SIZE=2]T MW 10[/SIZE]
[SIZE=2]U M 1.1 // wenn MW10 ist schon 32756 , wird unsere M1.1 auf "0" gesetzt[/SIZE]
[SIZE=2]R M 1.1[/SIZE]
[SIZE=2]M003: L MW 10[/SIZE]
[SIZE=2]L 32756 // festpunkt, bis wieviel es muss zählen // L#32768[/SIZE]
[SIZE=2]>=I [/SIZE]
[SIZE=2]R M 1.1[/SIZE]
[SIZE=2]// L 0[/SIZE]
[SIZE=2]//T MW 10[/SIZE]
[SIZE=2]BE [/SIZE]
```
 
So, ich lerne jetzt Variable, wie die Richtig funktinieren 

gruß waldy


----------



## vierlagig (10 August 2008)

ok, waldy, überredet, wo wir schon soweit sind:

du nimmst nur das netzwerk eins und ersetzt den zähler durch eine addition eines MerkerWortes mit 1.
flanke nicht vergessen!


----------



## waldy (19 August 2008)

Hallo,
irgendwie mit addition klappt bei mir nicht richitg , wenn ich versuche so Programm schreiben:


```
[SIZE=2]
U M 100.5
FP M 0.0
L MW 10
+ 1
T MW 10
[/SIZE]
```
 
dann programm zählt ganz schnell, nicht abwarten M100.5 .

wo liegt mein Fehler?

gruß waldy


----------



## vierlagig (19 August 2008)

waldy schrieb:


> wo liegt mein Fehler?



darin, dass du meine erläuterungen in den PNs nicht vollständig in deinen code überträgst 

ich sprach von einem sprung und hier die erklärung:

Lade- und Transferbefehle sind verknüpfungsergebnisunabhängige funktionen und werden auch bei VKE=0 ausgeführt, sofern sie nicht übersprungen werden.

[edit] erinner dich, ich sprach von einem siebenzeiler! ... du hast nur fünf, das wäre hexenwerk, würde es funktionieren [/edit]


----------



## waldy (19 August 2008)

Hallo,
dann brauche ich wieder Merkersprung, und du hat mir es so gesagt, das ich muss ohne Merkersprung Programm schreiben, oder komme ich sionst wieder zum Schleifen 
gruß waldy


----------



## vierlagig (19 August 2008)

waldy schrieb:


> Hallo,
> dann brauche ich wieder Merkersprung, und du hat mir es so gesagt, das ich muss ohne Merkersprung Programm schreiben, oder komme ich sionst wieder zum Schleifen
> gruß waldy



nein, ich habe dir gesagt, dass der OB1 seine schleifen alleine macht, und du aufhören sollst endlosschleifen zu programmieren!

was spricht dagegen die sequenz L bis T zu überspringen?
richtig!
nüx!


----------



## Jumper (20 August 2008)

Oh oh der Kurs wird für waldy ganz schön teuer!!!  ;-)
Waldy wird staunen wenn er die erste "Schulungsrechnung" von Vierlagig erhält!!


PS: Die Beiträge hier würde auch zu "FUN zum Feierabend passen"
********spässle*****
Auch wenn ich selber wahrscheinlich bei der Stufe 1 oder so anfangen müsste!!


Grüßle Jumper


----------



## vierlagig (20 August 2008)

es wird erstmal keine rechnung geben, der waldy soll erstmal den marktwert seines fiat pandas wieder erhöhen 



Jumper schrieb:


> PS: Die Beiträge hier würde auch zu "FUN zum Feierabend passen"



den versteh ich nich ...



Jumper schrieb:


> Auch wenn ich selber wahrscheinlich bei der Stufe 1 oder so anfangen müsste!!



dann mach die erste aufgabe, also die mit dem hochzählen und runterzählen, einmal global adressiert, damit du weißt wie es geht und dann als bibliotheksfähigen baustein ... schau dir dazu die unterschiede FC und FB an und entscheide selber, welche variante du wählst ...


----------



## Jumper (20 August 2008)

vierlagig schrieb:


> es wird erstmal keine rechnung geben, der waldy soll erstmal den marktwert seines fiat pandas wieder erhöhen ...



Hast du den nicht aufgepasst! Es ist ein Peugot!!!




vierlagig schrieb:


> den versteh ich nich ......


Fande es einfach amüsant auch wenn ich selber keine AHNUNG HAB!!


vierlagig schrieb:


> dann mach die erste aufgabe, also die mit dem hochzählen und runterzählen, einmal global adressiert, damit du weißt wie es geht und dann als bibliotheksfähigen baustein ... schau dir dazu die unterschiede FC und FB an und entscheide selber, welche variante du wählst ...



So aus dem Ärmel schütt ich das auch nicht aber wenn ich mal Zeit hab werd ich die Aufgabe angehen! Ist schon ca 3 jahre her das ich das mal in meiner Ausbildung hatte aber irgendwie werde ich es hinbekommen!  oder auch nicht :-(


----------



## waldy (23 August 2008)

Hallo,
endlich Wochenende 
Ich habe es versucht so geschrieben, nur Programm sieht trotztem bischen groß


```
[SIZE=2]
U M 100.5
FP M 0.0
SPB M001
SPA M002
M001: L MW 10
+ 1
T MW 10
M002: = A 0.0
[/SIZE]
```
 
gruß


----------



## vierlagig (23 August 2008)

schau dir mal die palette der sprungbefehle an, da ist bestimmt auch einer dabei, der macht, dass bei VKE=0 gesprungen wird


----------



## waldy (23 August 2008)

ne, irgendwie finde ich nicht meine Fehler.
brauche noch eine hinweis.

gruß waldy


----------



## vierlagig (24 August 2008)

... spbn ??


----------



## waldy (24 August 2008)

way, darüber hatte ich nicht gedacht, muss ich mal ausprobieren
gruß waldy


----------



## waldy (26 August 2008)

Hi ,
danke für dute Tipp,
das ist Lösung mit spbn, hoffe diese mal ist alles OK


```
[SIZE=2]
U M 100.5
FP M 0.0
SPBN M001
L MW 10
+ 1
T MW 10
M001: = A 0.0
[/SIZE]
```
 
gruß waldy


----------



## vierlagig (26 August 2008)

wer ist A 0.0?


----------



## waldy (26 August 2008)

A0.0 ist eventuele ende Programm, sonst ich weiss nciht, wo muss ich am ende M001 schreiben, kannst du mir es sagen, wie kann man ohne A0.0 merker M001 irgendwo rein packen?
gruß waldy


----------



## vierlagig (26 August 2008)

schlag mal nulloperation nach


----------



## waldy (26 August 2008)

hm, wie muss man das schreiben?


----------



## vierlagig (26 August 2008)

soll ich das spannenste schon verraten?

versuch mal

M002: NOP 0


----------



## waldy (26 August 2008)

> NOP 0


 - geht dann CPU auf Stop ?


----------



## vierlagig (26 August 2008)

waldy schrieb:


> - geht dann CPU auf Stop ?



warum sollte sie?


----------



## Question_mark (26 August 2008)

*Online Leergang*

Hallo,



			
				waldy schrieb:
			
		

> geht dann CPU auf Stop ?



waldy, sag mal ehrlich : Ist es nicht besser, Du konzentrierst Dich auf Deine wirklichen Fähigkeiten, nämlich ehrliche Verkäufer eines alten Gebrauchtwagen versuchen, wissentlich zu bescheissen ?? Muss doch mal die Beatles zitieren : "Let it be"  --> auf gut rheinisch übersetzt : "Lot et sinn" *ROFL*

Gruß

Question_mark


----------



## vierlagig (26 August 2008)

das doppel e nehm ich persönlich! ...

aber ansonsten: ich glaub, wenn waldy mehr zeit hätte könnte was draus werden, der wille ist da und er malt keine programme, das is schon mal was...


----------



## waldy (26 August 2008)

> waldy, sag mal ehrlich : Ist es nicht besser, Du konzentrierst Dich auf Deine wirklichen Fähigkeiten, nämlich ehrliche Verkäufer eines alten Gebrauchtwagen versuchen, wissentlich zu bescheissen ??


 - was meinst du damit?



> Zitat:
> Zitat von *waldy*
> 
> 
> ...


 - ich habe irgendow es gelesen, das mit NOp = CPU geht auf Stop, muss man noch mal suchen in Internet, was hat die Leute damit gemeint, deswegen hatte ich hier es auch gefragt.

waldy


----------



## Question_mark (26 August 2008)

Hallo,



			
				vl schrieb:
			
		

> aber ansonsten: ich glaub, wenn waldy mehr zeit hätte könnte was draus werden, der wille ist da



Den Willen bestreite ich nicht, allein die Fähigkeiten sind doch recht begrenzt ...
Und wenn der Wille wirklich vorhanden ist, sollte auch die Zeit kein Hindernis darstellen, ausser man beschäftigt sich überwiegend damit, dem Autoverkäufer noch hinterrücks einen reinzudrücken :sw8:
Und in diesem Punkt hat sich unser waldy bei mir verdammt viele Minuspunkte eingehandelt ... 



			
				vl schrieb:
			
		

> und er malt keine programme, das is schon mal was...



Das liegt aber nur daran, dsss der waldy die Unterschiede noch nicht kennt.    Aber macht mal weiter mit dem Leergang, ist doch recht amüsant    :s18:

Gruß

Question_mark


----------



## vierlagig (26 August 2008)

waldy schrieb:


> - ich habe irgendow es gelesen, das mit NOp = CPU geht auf Stop, muss man noch mal suchen in Internet, was hat die Leute damit gemeint, deswegen hatte ich hier es auch gefragt.



nicht nur lesen, auch verstehen ... du hast so ein tolles buch bei ebay erstanden, schau da mal nach nulloperation, also im speziellen

NOP 0

... da müßte sowas stehen wie: platzhalter, keine auswirkungen bla bla


----------



## waldy (26 August 2008)

Hi  vierlagig, hast du PN
gruß waldy


----------



## Question_mark (26 August 2008)

*Ich glaub es nicht ..*

Hallo,



			
				waldy schrieb:
			
		

> - was meinst du damit?



Damit meine ich Deine Beiträge zum Kauf des Peugeot 806 und Deinen schäbigen Versuch, die Kosten für den Kauf durch unsinnige Forderungen an die Verkäuferin zu kompensieren. Ich hoffe, Du kannst Dich noch an Deine Beiträge dazu erinnern. Wenn Du Dich nicht mehr an  Deine Posts erinnern kannst, gebe ich Dir gerne die Links dazu  :sb7:

Gruß

Question_mark


----------



## vierlagig (26 August 2008)

@qm: kannst du das bitte woanders klären - ich hab langsam die nase voll von waldys fiat panda


----------



## Question_mark (27 August 2008)

*Wo denn bitte, vl ???*

Hallo,



			
				vl schrieb:
			
		

> @qm: kannst du das bitte woanders klären



Im Prinzip schon, aber das passt doch gut zusammen mit dem Leergang. Ob Leergang oder Fiat/Peugeot, wir kommunizieren doch hier mit waldy, da ist das Unterforum doch nicht so wichtig ..

Gruß

Question_mark


----------



## vierlagig (27 August 2008)

Question_mark schrieb:


> Im Prinzip schon, aber das passt doch gut zusammen mit dem Leergang. Ob Leergang oder Fiat/Peugeot, wir kommunizieren doch hier mit waldy, da ist das Unterforum doch nicht so wichtig ..



ich weiß von mindestens drei usern, die das hier nutzen, um selber ein paar aufgaben zum üben zu haben und wenn wir dann demnächst in den teil der bausteinerstellung einsteigen, zu dem es dann auch mehr von meiner seite zu erklären gibt, sind solche zwischenrufe für den mitlesenden gast zwar amüsant - find ich sie ja auch - aber auch irgendwie störend. nimm dir doch den kaufvertrag vor, da spricht waldy sicher auch noch mit dir oder eben nicht mehr


----------



## waldy (27 August 2008)

> Damit meine ich Deine Beiträge zum Kauf des Peugeot 806 und Deinen schäbigen Versuch, die Kosten für den Kauf durch unsinnige Forderungen an die Verkäuferin zu kompensieren. Ich hoffe, Du kannst Dich noch an Deine Beiträge dazu erinnern. Wenn Du Dich nicht mehr an Deine Posts erinnern kannst, gebe ich Dir gerne die Links dazu :sb7:


 - sagen wir so, ich kenne die Leute, welche haben auch auto für 2500 gekauft, dann Öl war aus Zylinderkopfdichtung raus gekommen, und die hat das Auto zurück abgegeben, als Verstäckte Mängel.
Nur das war Deutsche, die kennen Gesetzt Besser als ich.


Und ich habe auch ein Kaufvertrag ( die Mängel waren nicht rein geschrieben) und jetzt dabei noch vile Mängel gehabt, welche muste ich auf eigene Kosten beseitigen.
Bei Kauf das Auto , ich habe mehr mals VK gefragt, ob Ato wurde regelmessig gepflegt und ob Auto ist in Gutem Zustand - VK sagte immer "ja" .

Also, dann natürlich bin ich nicht , nach diese aufgeträtene Mängel, mit VK zufrieden.

waldy


----------



## Question_mark (27 August 2008)

*Du bist nur ein Schma.......*

Hallo,



			
				waldy schrieb:
			
		

> Also, dann natürlich bin ich nicht , nach diese aufgeträtene Mängel, mit VK zufrieden.



waldy, selbst wenn Dir die Verkäuferin das Auto geschenkt hätte, Du wärst immer noch nicht zufrieden gewesen. Da war schließlich kein neuer Pollenfilter in der Klimaanlage drin. 
Ich kann über dieses Anspruchsdenken nur mit dem Kopf schütteln, was verlangst Du eigentlich von einem uralten französischem Klapperkarren für 2.5 k Euro ?? Ich kann ja verstehen, wenn jemand das Muli gegen einen Mercedes eintauschen möchte, aber alles im Leben hat seinen Preis. Mitleid kriegt man geschenkt, Neid muss man sich hart erarbeiten.
Und dann war da noch dieser Beitrag von Dir :



			
				waldy schrieb:
			
		

> - na ja, ich dachte erst vielleicht gibt s eine Möglichkeit, ein bischen geld zurück bekommen,



Und damit hast Du bei mir auf ewig verschissen, von heute zurück bis in die Steinzeit, ich geh jetzt erstmal kotzen  :sw10:

Gruß

Question_mark


----------



## Question_mark (27 August 2008)

*Danke für den Hinweis*

Hallo,



			
				vl schrieb:
			
		

> nimm dir doch den kaufvertrag vor, da spricht waldy sicher auch noch mit dir oder eben nicht mehr



Ich denke mal, dass er jetzt nicht mehr mit mir spricht, aber ist mir auch egal.



			
				vl schrieb:
			
		

> aber auch irgendwie störend.



Tut mir ja leid, wenn ich Deine Kreise gestört habe, aber das musste ich hier mal loswerden. Zumal Du ja mir auch hier in Kooperation mit waldy die Plattform dafür angeboten hast.

Gruß

Question_mark


----------



## waldy (27 August 2008)

ein Pinkt habe ich schon verndint 
Nur Question_mark  weisst auch schon, kotzten Überrall  - ist Gefärliche Sache.

gruß waldy


----------



## johnij (27 August 2008)

waldy schrieb:


> - weist du was Question_mark , mit einem Wort du bist ein Arschloch , das war s.
> fick dich


 


Morgääääääääääään,
*ACK*
ach... wie schön...
Ich mag solche Diskussionen.........................ROFLMAO


----------



## PhilippL (27 August 2008)

johnij schrieb:


> Morgääääääääääään,
> *ACK*
> ach... wie schön...
> Ich mag solche Diskussionen.........................ROFLMAO


 
Das du super Uniabsolvent der beste bist wissen wir... also laß es... :sw14:

zum Rest muß ich sagen, ich bin zwar nicht neu auf dem Gebiet der Programmierung aber so manche Denkweise von 4L beeindruckt mich bzw. bringt mich zum Nachdenken und das ist gut so.

Also hört mal bitte auf den Thread hier so zu zu müllen!

Gruß

Philipp


----------



## Cerberus (27 August 2008)

Question_mark schrieb:


> waldy, sag mal ehrlich : Ist es nicht besser, Du konzentrierst Dich auf Deine wirklichen Fähigkeiten, nämlich ehrliche Verkäufer eines alten Gebrauchtwagen versuchen, wissentlich zu bescheissen ?? Muss doch mal die Beatles zitieren : "Let it be" --> auf gut rheinisch übersetzt : "Lot et sinn" *ROFL*


 
Jeder hat doch mal klein angefangen. Und manche brauchen eben etwas länger bis es soweit ist, aber deswegen gleich aufgeben halte ich für sinnlos. Und du glaubst doch nicht ehrlich, dass waldy auf dich hört und ab sofort SPSen in Ruhe lässt. Er würde es sich dann eben anderweitig beibringen.

Da ist es doch besser wenn er es hier macht und sehr kompetente Unterstützung von 4L bekommt.
Für sowas ist das SPS-Forum ja schließlich da: Nachzufragen wenn man Fragen/Probleme mit einer SPS hat.

@ 4L
Ich finde es echt prima wie du hier unseren waldy unterstützt!!


----------



## vierlagig (27 August 2008)

@waldy: jetzt, wo du die erste aufgabe wieder vorgezogen und offensichtlich gelöst hast, kannst du auch erklären, was da passiert? wie kommen da jetzt 16 taktmerker raus? und wie kann man sich die arbeitsweise im detail vorstellen?

@alle außer johnij: schön, dass ich weiter machen darf - danke!

@johnij: nur für dich


----------



## johnij (27 August 2008)

ROFLMAO


vierlagig schrieb:


> @waldy: jetzt, wo du die erste aufgabe wieder vorgezogen und offensichtlich gelöst hast, kannst du auch erklären, was da passiert? wie kommen da jetzt 16 taktmerker raus? und wie kann man sich die arbeitsweise im detail vorstellen?
> 
> @alle außer johnij: schön, dass ich weiter machen darf - danke!
> 
> @johnij: nur für dich


 
*ROFL**ROFL**ROFL*
Das brauche ich net 
Ich habe eine hübsche racige Freundin

Dein Verhalten zeigt folgendes: 
1-Du verträgst keine Kritik
2-Du hast eine schwache Persönlichkeit Herr Dipl.-Ing (BA)
3- Dein IQ enstpricht der Gleichungslösung  X3+X+1=0 in einem Sobolev/Banachraum


----------



## PhilippL (27 August 2008)

johnij schrieb:


> Das brauche ich net
> Ich habe eine hübsche racige Freundin
> 
> Dein Verhalten zeigt folgendes:
> ...


 
Du kannst es echt nicht lassen oder?

Zu deinen Punkten 1-3...

zu 1: Was hat dein dummes Geschätz mit Kritik zutun?
zu 2: Eine schwache Persönlichkeit hat nur der, der sich hinter seinem Titel verbirgt (siehe Persönlichkeit des *johnij*) und nicht durch Fachwissen und Kompetenz glänzen kann.
zu 3: Prima du kennst dich also in Mathematik aus und kannst dein gerlerntes anwenden... wenn dann aber bitte sinnvoll! (und nein ich hab keine Ahnung von einem Sobolev/Banachraum... brauchte ich bisher auch nicht!)


----------



## WIX (27 August 2008)

PhilippL schrieb:


> Du kannst es echt nicht lassen oder?
> 
> Zu deinen Punkten 1-3...
> 
> ...


 
entschuldigung wen ich dir sage du machst den benzin auf das feuer
und du machst s schlimmer
bitte bitte  aufhören
wir sind zum diskutiren über fachwisen und nicht unser schöns forum
zu müllen

danke


----------



## PhilippL (27 August 2008)

Hi,

@WIX => Stimmt hast recht... ich laß mich manchmal gerne zu Diskussionen hinziehen (manchmal auch zu falschen)

und jetzt Back to topic!

@4L kannst du mal ne Aufgabe so mit Zeigern etc. aus dem Ärmel schütteln?

Gruß

Philipp


----------



## vierlagig (27 August 2008)

PhilippL schrieb:


> @4L kannst du mal ne Aufgabe so mit Zeigern etc. aus dem Ärmel schütteln?



klar, nimm den taktgenerator und pack ihn in einen baustein, an dem du die merkerwort nummer als in-variable im format INT übergibst. den takt ebenfalls als in.

(ich weiß, dass geht auch ohne pointer, aber wir wollen uns das kopieren auf einen temp-variable sparen!)


----------



## PhilippL (27 August 2008)

vierlagig schrieb:


> klar, nimm den taktgenerator...


 
Vielleicht bin ich ja auch etwas schwer von Begriff, aber hast du Waldy die Aufgabe mit dem Taktgenerator vielleicht als PN geschickt weil ich find die hier nirgendwo


----------



## vierlagig (27 August 2008)

PhilippL schrieb:


> Vielleicht bin ich ja auch etwas schwer von Begriff, aber hast du Waldy die Aufgabe mit dem Taktgenerator vielleicht als PN geschickt weil ich find die hier nirgendwo



guckst du hier http://www.sps-forum.de/showpost.php?p=143604&postcount=10


----------



## PhilippL (27 August 2008)

Hi,
also hier mal die "Bauernlösung" 


```
U(    
      UN    T      1
      L     S5T#1S
      SE    T      1
      U     T      1
      )     
      L     S5T#1S
      SA    T      2
      U     T      2
      =     M    100.0                  //Taktmerker mit 1s
//Taktmerker mit 2s
      U     M    100.0
      FP    M    200.0                  //Flankenbilder
      =     M    200.1                  //Flankenmerker
      U     M    200.1
      UN    M    100.1
      S     M    100.1                  //Taktmerker mit 2s
      R     M    200.1
      U     M    200.1
      U     M    100.1
      R     M    100.1
      R     M    200.1
//Taktmerker mit 4s
      U     M    100.1
      FP    M    200.2                  //Flankenbilder
      =     M    200.3                  //Flankenmerker
      U     M    200.3
      UN    M    100.2
      S     M    100.2                  //Taktmerker mit 4s
      R     M    200.3
      U     M    200.3
      U     M    100.2
      R     M    100.2
      R     M    200.3
//...
```
 
das geht doch sicherlich auch mit einer Schleife oder weniger Hilfsmerker...
vielleicht fangen wir erst mal hier an bevor ich auf die Zeiger losgehe 

Schonmal dickes Danke

Gruß

Philipp


----------



## vierlagig (27 August 2008)

PhilippL schrieb:


> Hi,
> also hier mal die "Bauernlösung"



ich sag mal soviel: 7zeilen AWL-code ... 

lies einfach mal die beiträge danach, also ab 10 bis ungefähr 20


----------



## waldy (27 August 2008)

> ich sag mal soviel: 7zeilen AWL-code ...


 - ja , das habe ich auch erst am Anfang nicht kopiert, ich dachte, das es ist eine besonderes funktion von Programmierung 

waldy


----------



## vierlagig (27 August 2008)

waldy schrieb:


> - ja , das habe ich auch erst am Anfang nicht kopiert, ich dachte, das es ist eine besonderes funktion von Programmierung
> 
> waldy



waldy: kannst du mir denn wenigstens erklären was du da gemacht hast?



vierlagig schrieb:


> @waldy: jetzt, wo du die erste aufgabe wieder vorgezogen und offensichtlich gelöst hast, kannst du auch erklären, was da passiert? wie kommen da jetzt 16 taktmerker raus? und wie kann man sich die arbeitsweise im detail vorstellen?


----------



## waldy (27 August 2008)

4lagig, 
ich habe ein paar Programm hier geschrieben, welche meinst du , erste Programm mit schleifen  oder welche Programm?

gruß waldy


----------



## vierlagig (27 August 2008)

waldy schrieb:


> 4lagig,
> ich habe ein paar Programm hier geschrieben, welche meinst du , erste Programm mit schleifen  oder welche Programm?
> 
> gruß waldy



das letzte! den 7-zeiler mein ich, bei dem anderen geh ich davon aus, dass die funktionsweise bekannt bzw. selbsterklärend ist


----------



## vierlagig (27 August 2008)

PhilippL schrieb:


> Hi,
> also hier mal die "Bauernlösung"



sag mal philipp, hast du diese "bauernlösung" getestet? wie soll die denn funktionieren? also bei mir tut sie es nicht 

ist aber auch nur ein kleiner adressierungsfehler, also nichts wildes ... vielleicht findest du ihn ja selber ...


----------



## waldy (27 August 2008)

Ok, das ist ganz einfach ( mindestens jetzt für mcih, am anfag war Problematisch   )
1 - U M 100.5 wir nehmen Merker von SpU mit Takt 1 Sekunde, ist schon von Programm in Hardware bei CPU 300 fertig eingebuat.

2 - FP M 0.0 nehmen wir Positive Flanke, damit wenn VKE-1 ist wird in diese Zeit zähler nicht zählen , mit Positive Flanke von VKE 1 bekomme ich nur eine Impuls , damit kann ich weitere Programm starten auf einen Takt.

3 - SPBN M001 - ( gute Tipp von 4er) - wenn VKE stimmt nicht ( Positive Flanke ist nicht Aktiviert) , dann leitet spbn unsere Programm dierekt zum Merker M001 und damit beenden wir Programm ohne was zu zählen.

Fals VKE ist 1 - dann wird :

L MW 10 - Merkerword 10 geladet
+ 1 - additiert
T MW 10 - und summe wieder in Merkerwort 10 eingefügt
M001: = A 0.0 - ende Programm 

ich denke das wars .

gruß waldy


----------



## vierlagig (27 August 2008)

waldy schrieb:


> ich denke das wars .



wie kommen da jetzt 16 taktmerker raus?


----------



## waldy (27 August 2008)

16 taktmerker - das ist 2 mal Merker Wort, oder MW0 und MW1 sind belegt) , aha dann muss ich z.B. DW 10 schreiben ( MW 10 und MW 11 sind DW10 ).
Meine Fehler.

gruß waldy


----------



## vierlagig (27 August 2008)

waldy schrieb:


> 16 taktmerker  - das ist 2 mal Merker Wort, oder MW0 und MW1 sind belegt) , aha dann muss ich DW 10 schreiben
> Meine Fehler.
> 
> gruß waldy



antworte auf meine frage und mach nicht irgendnen scheiß! da bleibt mal schön MW stehen!


----------



## vierlagig (27 August 2008)

ach waldy, was machma nur, du hast ein programm geschrieben und weißt nichts damit anzufangen ... zumindest entnehme ich das deinen PNs ...

die suchhinweise scheinen dich auch nicht weiter zu bringen ... hatte eigentlich gehofft, du wüßtest wie der merkerbereich einer steuerung aufgebaut ist bzw. wo du es nachlesen kannst ... aber das duale zahlensystem ist dir doch hoffentlich ein begriff, oder?

also dass 1 dual = 1 dezimal und 10 dual = 2 dezimal und 11 dual = 3 dezimal ist!?


----------



## waldy (27 August 2008)

Hi,
ja, habe in der Schule es gelernt,
0
01
11
100 u.s.w.

Nur welche Zahl gehärt zum welche Dual -habe ich das nicht inm Kopf.
Muss man auf Papier erst schreiben und rechnen.

gruß waldy


----------



## vierlagig (27 August 2008)

waldy schrieb:


> Nur welche Zahl gehärt zum welche Dual -habe ich das nicht inm Kopf.



die zajlen sind auch egal ... aber schreib dir mal eine 5bit dualzahl von 00000 bis 11111 auf, vielleicht fällt dir dann was auf...


----------



## veritas (27 August 2008)

msb und lsb beachten


----------



## Lars Weiß (27 August 2008)

Sinnvoll wäre doch ein Ansatz, der einen Sekundenimpuls erzeugt der nur einen Zyklus ansteht :


```
UN    T      1
=     "TIC1S"
L     S5T#1S
SV    T      1
```


----------



## vierlagig (27 August 2008)

Lars Weiß schrieb:


> Sinnvoll wäre doch ein Ansatz, der einen Sekundenimpuls erzeugt der nur einen Zyklus ansteht :
> 
> 
> ```
> ...



das sind genau zwei zeilen zuviel! ... jetz verwirrt mir doch den waldy nicht so ... der cpu-taktmerker ist schon vollkommen ok so und mit der positiven flanke ist da s auch absolut in ordnung ... der code paßt, wenn er = A0.0 durch NOP 0 ersetzt bekommen hat ohne das die steuerung in stop gegangen ist ...

ich möchte jetzt einfach nur wissen, wie er an die so generierten taktmerker rankommt und warum! ... denn etwas schreiben und esnicht verstehen können wir wohl alle ...


----------



## waldy (27 August 2008)

so, erlich gesagt, ich habe in Kasachstan PC ( mit Z80 Prozessor )für die Schule repariert und noch welche Technik mit TTL Logik.

Deswegen für mich wurde kein Problem für die Programm schon welche Funktion aussuchen.

Wie gesagt, ich hatte sofort in mein Kopf nur Ablauf, habe nur passende fuktion aus SPS ausgesucht und Programm zusammen geschrieben.

gruß waldy


----------



## vierlagig (27 August 2008)

wie in meiner letzten PN erwähnt: mir ist scheiß egal was du mal gemacht hast, dein nächster beitrag sollte eine antwort auf meine frage sein! PUNKT


----------



## waldy (27 August 2008)

ich hab ees kopiert


----------



## vierlagig (27 August 2008)

waldy schrieb:


> ich hab ees kopiert



das ist keine antwort! ... also, nimm nochmal alle unterlagen und hilfen zur hand und mach ne erklärung fertig, wie du denn nun an die 16 taktmerker rankommst!


----------



## johnij (28 August 2008)

waldy schrieb:


> Hi,
> ja, habe in der Schule es gelernt,
> 0
> 01
> ...


 
Morgäään,

es tut mir leid Waldy, wenn das nicht kannst sollst du Dir die Branche wechseln.
Ich sehe Du bist hier seit ca 5 Jahren angemeldet. Mein lieber Scholli in so einer Zeit kann man einen Haufen Berufserfahrung sammeln.

Wenn Du Dich verbessen willst, sollst du vieeeeeeeeeeeel lesen (TIA Unterlagen)+ rumprobieren
Was der 4L macht ist schön und gut (Hut ab).Es langt aber nicht:twisted::twisted:


----------



## PhilippL (28 August 2008)

vierlagig schrieb:


> sag mal philipp, hast du diese "bauernlösung" getestet? wie soll die denn funktionieren? also bei mir tut sie es nicht
> 
> ist aber auch nur ein kleiner adressierungsfehler, also nichts wildes ... vielleicht findest du ihn ja selber ...


 
Guten Morgen,

ja hab ich eigentlich schon... habs hier auf eine 317ner aufgespielt und mit dem SPS Analyzer den Signalverlauf angeschaut... (allerdings nicht für alle 16 Taktmerker sondern eben nur für die ersten mit etwas kürzerer Zeit)

Fehler gefunden...
Es muß natürlich gleich in der 2. Zeile T2 heißen...

Im übrigen vielen Dank nochmals für den Hinweis mit den 7 Zeilen!


Gruß Philipp


----------



## vierlagig (28 August 2008)

japp, T2 ... richtig.



PhilippL schrieb:


> Im übrigen vielen Dank nochmals für den Hinweis mit den 7 Zeilen!



und? wie siehts aus? kannst du es erklären?


----------



## PhilippL (28 August 2008)

Ich versuchs mal...

Also im Prinzip ist der Taktgenerator ja nichts anderes als ein Zähler mit der vorgegebenen Geschwindigkeit des Taktmerkers der CPU.

D.h. das 1. Bit des MW toggelt in der Geschwindigkeit des Taktmerkers. Das jeweils nachfolgende Bit toggelt somit mit jeder steigenden Flanke seines Vorgängerbits.

Hoffe das war so verständlich bzw. ich habs richtig erklärt?


----------



## vierlagig (28 August 2008)

PhilippL schrieb:


> IHoffe das war so verständlich bzw. ich habs richtig erklärt?



also ich versteh, was du meinst :-D ... wie greifst du nun auf das taktbit mit 16s zu?


----------



## PhilippL (28 August 2008)

Also angenommen mein Taktgenerator schreibt in MW100.
So entspricht das Taktbit mit 16s dem Merkerbit M100.4
Bit 0 = 1s
Bit 1 = 2s
Bit 2 = 4s
Bit 3 = 8s
Bit 4 = 16s
usw.


----------



## vierlagig (28 August 2008)

PhilippL schrieb:


> Also angenommen mein Taktgenerator schreibt in MW100.
> So entspricht das Taktbit mit 16s dem Merkerbit M100.4



nein, leider nicht ... veritas hat den richtigen tipp gegeben ... LSB und MSB beachten!


----------



## Jumper (28 August 2008)

Gibt es die Möglichkeit das man alle gelösten Fragen in einen neues Thema schreibt?
Also Frage und Lösung(wenn die Lösung von 4L oder sonst jemandem als in Ordnung bewertet wurde)
So ist der Lehrgang auch noch für Personen die mal später einsteigen oder nur ab und zu mal ne Aufgabe machen noch übersichtlich!
Derjenige der die richtige Lösung hat kann sie ja dann immer in das Themai eintagen(dieses Thema sollte dann nach Möglichkeit nur Fragen und Lösungen beinhalten und keine dummen Kommentare!!!!
Wäre echt cool!!


----------



## PhilippL (28 August 2008)

vierlagig schrieb:


> nein, leider nicht ... veritas hat den richtigen tipp gegeben ... LSB und MSB beachten!


 
Sorry, bin von meiner "Bauernlösung" ausgegangen. Dort sollte es zumindest so sein.
Im 7-Zeiler AWL Code sollte der aufbau doch von Links nach rechts sein.
Spricht zuerst LSB dann MSB im Merkerwort.

Spricht das Taktbit mit 16s sollte im Beispiel M101.4 sein

Siehe Speicheraufbau http://www.konradpage.net/MeinWeb/SPS/s7kurs2000.pdf Seite 14

Gruß Philipp


----------



## vierlagig (28 August 2008)

PhilippL schrieb:


> Spricht das Taktbit mit 16s sollte im Beispiel M101.4 sein



richtig, na also  ...geht doch ... aber wir wollten ja weitermachen ...

also den 7-zeiler in einen FC packen und das MW indirekt adressieren, da wir es noch nicht besser wissen, mit einem pointer!

[edit] danke für den link - bin das grad mal überflogen, damit kann man schon mal als anfänger was anfangen - nicht schlecht! [/edit]


----------



## PhilippL (28 August 2008)

Hallo,

dann sollte es doch so funktionieren...


```
L     #Merkerwort
      SLD   3  //Zeiger erzeugen 
      LAR1 
 
      U     #Taktmerker
      FP    #Flanke
      SPBN  M001
      L     MW [AR1,P#0.0]
      +     1
      T     MW [AR1,P#0.0]
M001: NOP   0
```
 
Die Variable Merkerwort ist als IN/OUT, Taktmerker als IN und Flanke als Temp deklariert.

Ich hoffe, dass ist so richtig?

Gruß

Philipp


----------



## vierlagig (28 August 2008)

fast 

merkerwort reicht als IN

flanke als TEMP funktioniert weder bei FC noch bei FB ... bleiben wir mal beim FC ... warum es nicht funktioniert? naja, find es raus


----------



## PhilippL (28 August 2008)

Ok, soweit so gut...
2 Fragen hierzu:

1. Wieso reicht es das Merkerwort als IN zu deklarieren... ich schreibe doch auch auf das Merkerwort. Somit müsste es doch IN/OUT sein oder versteh ich da etwas falsch?

2. OK die Tempvariablen haben nur innerhalb ihres Bausteins ihre Gültigkeit. Da ich diese Variable doch auch nur einen Zyklus lang brauche (also doch genau einen Bausteinaufruf) sollte es doch gehen. (Kann heute leider nicht testen weder CPU noch PCLSIM :-( )

Vielen Dank schon mal

Gruß

Philipp


----------



## vierlagig (28 August 2008)

zu erstens:

merkerword sollte vom typ INT sein ... hatten wir irgendwo mal festgelegt ... stellt also eine konstante dar, auf die du sowieso nicht zurückschreiben kannst. der zugriff auf das merkerwort erfolgt direkt im baustein durch die indirekte adressierung des MW ... also im moment des T MW[AR1,P#0.0] wird direkt einfluß auf den globalen speicherbereich genommen.

zu zweitens:

nein, leider brauchst du sie länger als einen zyklus, da sie ja den status speichern, auf den im nächsten zyklus verglichen wird um die flanke zu bilden


----------



## PhilippL (28 August 2008)

Stimmt ich brauche ja den Zustand von #Flanke zum Vergleichen vom vorherigen Zyklus...

Also brauch ich für die Variable Merkerwort ein IN und für Flanke ebenso.
Würde ich einen FB nehmen so wäre Flanke auch als Stat möglich.


----------



## vierlagig (28 August 2008)

PhilippL schrieb:


> Also brauch ich für die Variable Merkerwort ein IN und für Flanke ebenso.



und wie schreibst du dann den status deiner flanke? 

beim FB geht STAT - richtig!


----------



## PhilippL (28 August 2008)

naja ich hätte die Variable Flanke als IN genommen und beim Aufruf des Bausteins dort einfach einen Merker angehängt 
oder versteh ich was falsch?


----------



## vierlagig (28 August 2008)

PhilippL schrieb:


> naja ich hätte die Variable Flanke als IN genommen und beim Aufruf des Bausteins dort einfach einen Merker angehängt
> oder versteh ich was falsch?



ja, leider scheint es so ... auf IN-variablen kannst du nicht schreibend zugreifen ... das mit dem merker ist schon richtig, aber du mußt halt aus dem baustein heraus *auch* schreiben können


----------



## PhilippL (28 August 2008)

Wo wir wieder bei IN/OUT wären...
***Heute is nicht mein Tag :-( ***

Also Flanke als IN/OUT


----------



## vierlagig (28 August 2008)

PhilippL schrieb:


> Also Flanke als IN/OUT



geht doch 

so...schade, dass du nicht testen kannst...ich mach einfach weiter und warte auf feedback:

der pointer gefällt mir nicht, viel zu umständlich  ... wie können wir innerhalb des FCs das MW noch mit der IN-variablen adressieren?


----------



## PhilippL (28 August 2008)

Ich hoffe das folgende entspricht deinen Vorstellungen

Zusätzlich brauche ich eine Variable Merker vom Datentyp INT im Temp-Bereich des Bausteins...


```
L      #Merkerwort 
 T     #Merker
 
 U     #Taktmerker 
 FP    #Flanke
 SPBN  M001
 L     MW [LD 0]
 +     1
 T     MW [LD 0]
M001: NOP   0
```
 
Hoffe der Code stimmt...


----------



## vierlagig (28 August 2008)

PhilippL schrieb:


> Hoffe der Code stimmt...



gut aufgepasst mit dem temp-bereich - ich würde übrigens DWORD empfehlen, funktioniert aber auch mit WORD ...

...der zugriff auf LD0 gefällt nicht! schöner ist L MW [#Merker] - oder?


----------



## PhilippL (28 August 2008)

Na ja schön ist was anderes *ROFL*

Nein, dass geht nicht!
Zugegeben mir gefällt L LD 0 ja auch nicht... vielleicht weißt du noch was besseres ;-)


----------



## vierlagig (28 August 2008)

PhilippL schrieb:


> Nein, dass geht nicht!



geht wohl!  ... nur gilt dabei eben das selbe wie bei pointer-adressen ... da sind die bits mit drin, also


```
*
      U     #xPlcPulse                  //READ PLC PULSE
      FP    #xHelpFlag                  //CHECK FOR POS TRIGGER
      SPBN  _001                        //IF NOT GO BE
      L     #iMwByNumber                //LOAD MW NUMBER
      SLD   3
      T     #dTemp
      L     MW [#dTemp]                 //LOAD MW
      +     1                           //INCREMENT
      T     MW [#dTemp]                 //TRANSFER TO MW
_001: SET   
      SAVE  
      BEA
```


----------



## PhilippL (28 August 2008)

Ok!
wieder etwas gelernt! 
Wo ist eigentlich Waldy?
Hat der sich ausgeklinkt?
Wie gehts weiter? ;-)


----------



## vierlagig (28 August 2008)

PhilippL schrieb:


> Wo ist eigentlich Waldy?



...wird wahrscheinlich kopfschüttelnd dasitzen und sich fragen, warum er nicht drauf kommt ...



PhilippL schrieb:


> Wie gehts weiter? ;-)



ja, was hätteste denn gern ... ich bin ja für ne einfache bitoperation:

mit einem taster zwei ausgänge in drei verschiedene zustandskombinationen schalten, also taster drücken out1 geht an, taster nochmal drücken, out1 aus out2 an, nochmal gedrückt alle aus..


```
[FONT=Courier New]in | out1 | out2
-----|------|------
0->1 |   1  |    0
0->1 |   0  |    1
0->1 |   0  |    0[/FONT]
```


----------



## PhilippL (28 August 2008)

*EDIT: Sehe gerade ich hab die Aufgabe falsch gelesen... geb mir noch paar Minuten*

Bitoperationen sind jederzeit herzlich willkommen 

Also hier mal ein Lösungsvorschlag (geht das eventuell kürzer?)


```
U     M      0.0
      FP    M     10.0
      SPBN  end
      U     M      0.1
      SPBN  M001
      U     M      0.2
      SPBN  M002
      R     M      0.1
      R     M      0.2
      SPA   end
M001: S     M      0.1
      SPA   end
M002: S     M      0.2
end:  NOP   0
```


----------



## vierlagig (28 August 2008)

PhilippL schrieb:


> *EDIT: Sehe gerade ich hab die Aufgabe falsch gelesen... geb mir noch paar Minuten*




ja, wollt grad sagen, du hast das sicher falsch verstanden!


----------



## kiestumpe (28 August 2008)

mal zurück zum Thema: Hat zufällig jemand ein Übungsblatt mit Schützschaltungen (serielle, parallet, gemischt), mein Kollege braucht immer noch Hilfe - Danke!


----------



## vierlagig (28 August 2008)

kiestumpe schrieb:


> mal zurück zum Thema: Hat zufällig jemand ein Übungsblatt mit Schützschaltungen (serielle, parallet, gemischt), mein Kollege braucht immer noch Hilfe - Danke!



möller schaltungsbuch ab 8-25


----------



## PhilippL (28 August 2008)

Zum Thema falsch gelesen siehe Signatur von 4L

Hier nun eine Lösung


```
U     M      0.0
      FP    M     10.0
      SPBN  end
      UN    M      0.1
      UN    M      0.2
      SPB   M001
      U     M      0.1
      UN    M      0.2
      SPB   M002
      UN    M      0.1
      U     M      0.2
      SPB   M003
M001: S     M      0.1
      SPA   end
M002: S     M      0.2
      R     M      0.1
      SPA   end
M003: R     M      0.2
end:  NOP   0
```
 
Ich denke im Augenblick noch über eine andere nach... diese hier gefällt mir persönlich nicht so sehr.


----------



## vierlagig (28 August 2008)

PhilippL schrieb:


> Ich denke im Augenblick noch über eine andere nach... diese hier gefällt mir persönlich nicht so sehr.



mir auch nicht, denn das sind keine bitverknüpfungen, da sind ja sprünge drinnen  ... aber sie funktioniert und das ist doch schon mal viel wert!

kannst du auch die flankenauswertung ausprogrammieren?


----------



## kiestumpe (28 August 2008)

vierlagig schrieb:


> möller schaltungsbuch ab 8-25


ich meinte natürlich online oder als pdf


----------



## vierlagig (28 August 2008)

kiestumpe schrieb:


> ich meinte natürlich online oder als pdf



gibt es doch!  http://www.moeller.net/de/support/wiring_manual.jsp


----------



## PhilippL (28 August 2008)

OK,

dann hab ich dich falsch verstanden... hier dann eine Lösung nur mit Bitoperationen ohne Sprünge!


```
U(    
      U     M      0.0
      UN    M      0.1
      O     M      0.1
      )     
      UN    M      0.2
      UN    M     10.2
      =     M      0.1
 UN    M      0.0
      U     M      0.1
      S     M     10.0
      U     M      0.0
      U     M      0.2
      R     M     10.0
    U(    
      U     M      0.0
      U     M      0.1
      U     M     10.0
      O     M      0.2
      )     
      UN    M     10.2
      =     M      0.2
 UN    M      0.0
      U     M      0.2
      S     M     10.1
      UN    M      0.2
      R     M     10.1
      U     M      0.0
      U     M     10.1
      S     M     10.2
      UN    M      0.0
      UN    M      0.2
      R     M     10.2
```
 
Ist etwas länger geworden 
und ich mußte noch 3 Hilfsmerker dafür opfern... :-(

Gruß Philipp


----------



## vierlagig (28 August 2008)

PhilippL schrieb:


> und ich mußte noch 3 Hilfsmerker dafür opfern... :-(



also ich komm mit zwei merkern hin, davon ist einer für die flanken auswertung, der andere mein schaltsignal ...

mit dem schaltsignal arbeite ich dann die drei zustände ab, also wenn alles aus ist, mach ich den ersten an und setze das schaltsignal zurück. wenn der erste an ist, setze ich diesen zurück und mach den zweiten an und setze das schaltsignal zurück und wenn der zweite an ist, mach ich den aus und setze das schaltsignal zurück ... macht insgesamt: einen eingang, zwei merker, zwei ausgänge und 21 zeilen code ...


----------



## PhilippL (28 August 2008)

Hi,

also so schlecht ist doch dann meine Lösung garnicht, wenn ich doch nur ein winziges Merkerlein mehr brauche als der "God father of PLC" Mr. 4L 
Ich schaus mir morgen nochmals an... heute geh ich mal Batman schauen! *ROFL*


----------



## vierlagig (28 August 2008)

PhilippL schrieb:


> "God father of PLC" Mr. 4L



... ich distanziere mich von dieser äußerung!

back to topic: die struktur macht die musik ... bei dir ist sie leider nict so einfach zu erkennen ... leider fehlen auch kommentare, ich hoffe das wird sich im verlauf dieses kurses noch ändern


----------



## repök (28 August 2008)

Ich will ja jetzt nicht klugscheissen, aber kürzer ist das so:

```
U     "TASTER2"
      FP    "st_TASTER2"
      =     "dy_TASTER2"
      U     "dy_TASTER2"
      UN    "AUSGANG11"
      X     "AUSGANG10"
      =     "AUSGANG10"
      U     "dy_TASTER2"
      UN    "AUSGANG10"
      X     "AUSGANG11"
      =     "AUSGANG11"
```

Das XOR geht, glaube ich, in jeder Ausbildung unten durch...


----------



## vierlagig (28 August 2008)

repök schrieb:


> Das XOR geht, glaube ich, in jeder Ausbildung unten durch...



na, na, wir werden schon noch darauf zu sprechen kommen!

[edit] um noch mal darauf einzugehen, ich bleibe erstmal bei der 21zeilen-lösung, weil da noch ein interessanter effekt möglich ist (wenn ich mich jetzt richtig erinnere) [/edit]


----------



## s.leuschke (28 August 2008)

@vl bin ich super,was Du hier anbietest.

Hab dazu ne PN geschickt.

Grüsse Sven


----------



## vierlagig (29 August 2008)

da Philipp sowieso mehr auf die Pointeraufgaben wartet, werd ich das mit den Bitverknüpfungen mal bißchen beschleunigen, denn es scheint ja so, als könne er sie in gewissen Maß leicht umsetzen, wenn er ein wenig mehr Konzentration und Kommentare opfern würde 

also, dass ist der code für 0-0 -> 1-0 -> 0-1 -> 0-0


```
*
//- check for positiv input change -//
      U     #xInput
      UN    #xMemory1
      =     #xMemory2
      U     #xInput
      =     #xMemory1

//--------- state 1 : 1-0 ----------//
      U     #xMemory2
      UN    #xOutput1
      UN    #xOutput2
      S     #xOutput1
      R     #xMemory2

//--------- state 2 : 0-1 ----------//
      U     #xMemory2
      U     #xOutput1
      UN    #xOutput2
      S     #xOutput2
      R     #xOutput1
      R     #xMemory2

//--------- state 3 : 0-0 ----------//
      U     #xMemory2
      U     #xOutput2
      R     #xOutput2
      R     #xOutput1
      R     #xMemory2
```
jetzt wollen wir das ganze aber um 1-1 erweitern, also 0-0  -> 1-0 -> 0-1 -> 1-1 -> 0-0 ... wie machen wir das nur?


----------



## PhilippL (29 August 2008)

vierlagig schrieb:


> da Philipp sowieso mehr auf die Pointeraufgaben wartet, werd ich das mit den Bitverknüpfungen mal bißchen beschleunigen, denn es scheint ja so, als könne er sie in gewissen Maß leicht umsetzen, wenn er ein wenig mehr Konzentration und Kommentare opfern würde
> 
> jetzt wollen wir das ganze aber um 1-1 erweitern, also 0-0 -> 1-0 -> 0-1 -> 1-1 -> 0-0 ... wie machen wir das nur?


 
Hallo,

also zu deinen angeführten obigen Punkten möchte ich nur kurz was sagen und dann gehen wir auf deine Aufgabe ein.

Pointeraufgaben: War nur ein Beispiel für ne nette Übung (hierin habe ich meine größeren Probleme gesehen)
Konzentration: Hast du gestern ja schon angesprochen => ergo: gib mir einer nen Tip wie ich an eine solche Problemstellung konzentrierter bzw. strukturierter ran gehe... leider fehlt es mir wohl an dieser Stelle :-(
Kommentare: Ich glaub das ist der Punkt welcher sich am einfachsten abstellen lässt => Ich gelobe Besserung

Zu der Lösung mit XOR von Repök sei gesagt an soetwas hab ich gestern gebastelt als ich sagte ich bin noch an einer anderen Lösung. Mir ist beim Anschauen einer Tabelle mit möglichen Zuständen aufgefallen, dass es sich um eine XOR-Verknüpfung handelt. Allerdings hab ich es zumindest gestern nicht mehr fertig durchdacht.

So und jetzt hier mein Vorschlag für die Bitverknüpfung mit 4 Zuständen.
(Ja ich habe dein Muster genommen und verändert)


```
//- check for positiv input change -//
      U     #xInput
      UN    #xMemory1
      =     #xMemory2
      U     #xInput
      =     #xMemory1
//--------- state 1 : 1-0 ----------//
      U     #xMemory2
      UN    #xOutput1
      UN    #xOutput2
      S     #xOutput1
      R     #xMemory2
//--------- state 2 : 0-1 ----------//
      U     #xMemory2
      U     #xOutput1
      UN    #xOutput2
      S     #xOutput2
      R     #xOutput1
      R     #xMemory2
//--------- state 3 : 1-1 ----------//
      U     #xMemory2
      U     #xOutput2
      UN    #xOutput1
      S     #xOutput1
      R     #xMemory2
//--------- state 4 : 0-0 ----------//
      U     #xMemory2
      U     #xOutput1
      U     #xOutput2
      R     #xOutput1
      R     #xOutput2
      R     #xMemory2
```
 
und jetzt kommts... es geht sicherliche nochmals einfacher :-( 

THX

Phil


----------



## vierlagig (29 August 2008)

PhilippL schrieb:


> und jetzt kommts... es geht sicherliche nochmals einfacher :-(



ja, gehts  ... tipp: mit state1, kannst du auch state3 machen


----------



## PhilippL (29 August 2008)

And here comes die Antwort


```
//- check for positiv input change -//
      U     #xInput
      UN    #xMemory1
      =     #xMemory2
      U     #xInput
      =     #xMemory1
//--------- state 1 : 1-0 / state 3 : 1-1----------//
      U     #xMemory2
      UN    #xOutput1
//      UN    #xOutput2
      S     #xOutput1
      R     #xMemory2
//--------- state 2 : 0-1 ----------//
      U     #xMemory2
      U     #xOutput1
      UN    #xOutput2
      S     #xOutput2
      R     #xOutput1
      R     #xMemory2
//--------- state 4 : 0-0 ----------//
      U     #xMemory2
      U     #xOutput1
      U     #xOutput2
      R     #xOutput1
      R     #xOutput2
      R     #xMemory2
```
 
Warum zum Henker brauch ich immer erst nen Schups in die richtige Richtung??? :sb5:


----------



## vierlagig (29 August 2008)

PhilippL schrieb:


> Warum zum Henker brauch ich immer erst nen Schups in die richtige Richtung??? :sb5:



weil man manchmal einfach zu kompliziert denkt, aber das ist nicht schlimm, dafür sind wir ja hier! 

so, jetz noch ne kleine übung zu xor und dann machen wir daraus noch ne kleine verständnis/funktions-aufgabe ...

stromstoßrelais mit xor kennst du?


----------



## johnij (29 August 2008)

*Karnaugh-Veitch-Diagramm*

Hallo zusammen,
ich möchte nur einen allgemeinen Hinweis geben.
Bei so Aufgaben sollte man sich eine Tabelle  erstellen(*Karnaugh-Veitch-Diagramm*) 


Viele Grüße


----------



## PhilippL (29 August 2008)

vierlagig schrieb:


> stromstoßrelais mit xor kennst du?


Hilf mir bitte mal schnell...
EDIT: Hier stand eben noch Quatsch :-(


----------



## vierlagig (29 August 2008)

PhilippL schrieb:


> Hilf mir bitte mal schnell...
> EDIT: Hier stand eben noch Quatsch :-(



ein taster, ein ausgang: tasten -> an, tasten -> aus


----------



## Jumper (29 August 2008)

*Quine McCluskyverfahren anstelle des KV-Diagramms*

@ehemaliger SUPERUni-student
Ich möchte nur einen allgemeinen Hinweis geben!
Anstelle des KV Diagramms kann aber man auch das Quine McCluskyverfahren anwenden! Mit dieser Methode arbeiten auch Computerprogramme die zur Minimierung von Schaltnetzen erstellt wurden!


----------



## johnij (29 August 2008)

Jumper schrieb:


> @ehemaliger SUPERUni-student
> Ich möchte nur einen allgemeinen Hinweis geben!
> Anstelle des KV Diagramms kann aber man auch das Quine McCluskyverfahren anwenden! Mit dieser Methode arbeiten auch Computerprogramme die zur Minimierung von Schaltnetzen erstellt wurden!


 
Das mit ehemaligen SUPERUni-Student kannst du weg lassen. 

Das Quine  und McCluskey Verfahren ist  besser geeignet, als das KV-Diagramm bei Eingangsvariablen>=5.

Es steckt dahinter viele theoretische und mathematische Theoremen
Das würde ich vielen nicht zumuten (von daher wollte ich es nicht erwähnen ).


----------



## PhilippL (29 August 2008)

vierlagig schrieb:


> ein taster, ein ausgang: tasten -> an, tasten -> aus


 
OK... dann hier eine Lösung


```
U    M1.0             //Input
FP    M    100.0    //Flanken Hilfsmerker
X     M      2.0     //XOR-Verknüpfung mit Output
=     M      2.0     //Output
```


----------



## vierlagig (29 August 2008)

PhilippL schrieb:


> OK... dann hier eine Lösung



genau, die wollt ich sehen ...

macht ja funktionell das selbe wie:


```
*
      U     #xInput
      UN    #xMemory
      S     #xOutput
      U     #xInput
      U     #xMemory
      R     #xOutput

      UN    #xInput
      U     #xOutput
      S     #xMemory
      UN    #xInput
      UN    #xOutput
      R     #xMemory
```

also beim drücken des tasters wird sofort geschaltet ... wenn man jetzt aber schreibt:


```
*
      U     #xInput
      [B]FN[/B]    #xMemory
      X     #xOutput
      =     #xOutput
```

wird erst beim loslassen des tasters geschaltet, was ja manchmal sehr sinnvoll sein kann ... aber wie bekomm ich das denn nun mit der 2xSR lösung hin  ...


----------



## PhilippL (29 August 2008)

Eigentlich garnicht schwer...
wir müssen nur ein paar Bedingungen invertieren...


```
UN    #xInput
U      #xMemory
S      #xOutput
UN    #xInput
UN    #xMemory
R      #xOutput
 
U      #xInput
UN    #xOutput
S      #xMemory
U      #xInput
U      #xOutput
R      #xMemory
```


----------



## vierlagig (29 August 2008)

PhilippL schrieb:


> Eigentlich garnicht schwer...



sehr schön, und noch nicht mal kompliziert gedacht 

joah, dann wollen wir uns mal dem zugriff auf daten widmen...

wir wollen eine mittelwertbildung bauen. dazu benötigen wir einen FIFO mit 8-REAL-Fächern, einen Trigger, der uns den Einlesezeitpunkt vorgibt, einen Eingang für den Wert und einen Ausgang für unseren Mittelwert.

soweit so klar?

erste frage dazu: FC oder FB, was würdst du vorschlagen?


----------



## PhilippL (29 August 2008)

Ich würde sagen FB

die Gründe:

Wiederverwendbarkeit (mit Variablen programmiert und nicht direkt adressiert)
Trigger muß gespeichert werden

???


----------



## vierlagig (29 August 2008)

den FC könnten wir auch wiederverwenden, wenn wir ihn richtig implementieren ... ja, der trigger könnte gespeichert werden müssen ... aber da gibt es noch was, was für den FB spricht ...

... wir können unser schieberegister direkt im InstanzDatenbaustein anlegen 

na denn, entwerfe er mal die grundstruktur, also muß noch keinen code beinhalten, nur eine eindeutige beschreibung der variablen-deklarationen und des ablaufes ... auf strukturelle besonderheiten kannst du ja schon mal eingehen


----------



## PhilippL (29 August 2008)

Kurze Zwischenfrage... Wird solange eingelesen und geschoben wie der Trigger 1 hat oder wird bei jeder pos. Flanke des Triggers geschoben und gelesen?


----------



## vierlagig (29 August 2008)

PhilippL schrieb:


> Kurze Zwischenfrage... Wird solange eingelesen und geschoben wie der Trigger 1 hat oder wird bei jeder pos. Flanke des Triggers geschoben und gelesen?



gute frage ... ich bin für: bei jeder positiven flanke!


----------



## PhilippL (29 August 2008)

Also dann würde ich mal folgendes vorschlagen nur so ganz grob...
Bei einer positiven Flanke des Triggers
1. Schieben
2. Lesen
3. Mittelwert bilden

Im Prinzip so in etwa

```
L #Pos7
T #Pos8
L #Pos6
T #Pos7
...
L #Pos8
L #Pos7
+R
L #Pos6
+R
...
L 8
/R
T #Mittelwert
```
 
Ist doch wiedereinmal nicht die schönste Möglichkeit.
Daher würde ich eventuell einen Zeiger auf die erste Stelle des Speichers
erzeugen und diesen in einer Schleife inkrementieren und somit die
nächste Position innerhalb des Speichers bestimmen...

Hoffe ich hab dich da schon richtig verstanden?


----------



## vierlagig (29 August 2008)

bei 8 werten kann man das natürlich noch von hand machen, aber der zeiger ist natürlich viel viel schöner ... dann bau doch mal die schleife zum schieben ... dann gehts weiter ...


----------



## Cerberus (29 August 2008)

*Danke an 4L*

Hey 4L!

Ich finds exzellent wie du Grundlagen der AWL-Programmierung vermittelst!!
Echt super!:s1::s12:

PS:
Was ist mit Waldy los?


----------



## WIX (29 August 2008)

danke 4L
ich möchte dumm fragen und entschuldige für untebrechung
ist ein trigger ein flankenmerker oder sowas ähnlisch??

was wirst du hier benutzen in diesem aufgabe? flankemerker
danke


----------



## vierlagig (29 August 2008)

WIX schrieb:


> danke 4L
> ich möchte dumm fragen und entschuldige für untebrechung
> ist ein trigger ein flankenmerker oder sowas ähnlisch??
> 
> ...



frag ruhig ... trigger, aus dem englischen, "der abzugshahn", "der auslöser", also der befehl für "jetz gehts los", wir haben uns mit philipp darauf geeinigt (also ich habs bestimmt ) das wir die flanke davon auswerten werden.
wenn der baustein irgendwann mal eingesetzt wird, kann man da dann z.b. ein zyklusasynchrones, periodisches signal, zum beispiel den cpu-takt anlegen ... bei den meisten werten braucht man nicht jeden zyklus gucken, ist der eigentliche gedanke dahinter..


----------



## WIX (29 August 2008)

vierlagig schrieb:


> ... bei den meisten werten braucht man nicht jeden zyklus gucken, ist der eigentliche gedanke dahinter..


 
was meinst du damit? ich denke alle werte werden bei jede zuklus in fifo geschrieben


----------



## vierlagig (29 August 2008)

@Philipp: ein Hinweis der mir gerade in der ANlage eingefallen ist ...

Es ist egal, wie rum du dein FIFO aufbaust! ... und: ich hätt gern ein ARRAY [0..7] of REAL ... erspart dir auch ne menge tipparbeit


----------



## PhilippL (29 August 2008)

Bräuchte da mal bissle Hilfe
Variablendeklaration
IN
#Trigger = Bool

STAT
#Register = Array[1..8] of Real
#Flanke = Bool
#Position = INT

TEMP
#tmp_Pos = INT



```
U     #Trigger
          FP    #Flanke
          SPBN  end
          L     7                                    //Position an der ich mit dem 
NEXT:  T     #Position                         //Schieben beginnen will
          L     #Position
          +     1
          T     #tmp_Pos                       //Position an die geschoben 
                                                     //werden soll
 
          L     #Register[#Position]        [COLOR=red]hier liegt mein Problem, dass[/COLOR]    
          T     #Register[#tmp_Pos]      [COLOR=red]geht nicht[/COLOR] :-(
          LOOP  NEXT
end:  NOP   0
```


----------



## vierlagig (29 August 2008)

das problem ist, unter anderem, dass du die position nicht erneuerst ... am einfachsten ist hier wirklich das arbeiten mit dem Adressregister...

in etwa so:


```
*
      L     8                           //Startadresse des Arrays
      SLD   3                           //Pointererzeugen
      LAR1                              //und ins Adressregister laden
      L     7                           //Anzahl der Schiebevorgänge laden
nex1: T     #iLoopCounter
      L     DID [AR1,P#4.0]             //Startadresse + 1 DW
      T     DID [AR1,P#0.0]             //in Startadresse schreiben
      +AR1  P#4.0                       //und das AR1 um 4.0 erhöhen = neue Startadresse
      L     #iLoopCounter               //Schleifenzähler laden
      LOOP  nex1                        //um ihn zu dekrementieren und zurückzuspringen

      L     #rInput                     //und den aktuellen Wert
      T     #aRealArray[7]              //ins Real-ARRAY schubsen
```


----------



## vierlagig (29 August 2008)

für die addition der werte können wir doch eigentlich auch ne schleife und indirekte adressierung benutzen, oder?


----------



## PhilippL (29 August 2008)

OK,

ich glaub ich hab deinen Weg verstanden...
Eine weiter Frage:

Wäre es möglich das ganze mit den beiden Adressregistern zu lösen?

Sprich einen Zeiger auf die erste Position im Array und einen weiteren
Zeiger auf die Position. Auf die Position dann einen Offset addieren?

Gruß Philipp


----------



## vierlagig (29 August 2008)

PhilippL schrieb:


> Wäre es möglich das ganze mit den beiden Adressregistern zu lösen?



möglich ja, aber ich rate dir an dieser stelle davon ab, da es ja hier nicht notwendig ist, da der datenblock ja zusammenhängt ... es gibt anwendungsfälle, in denen es sinn macht, aber die sicherheitsmechanismen sollten da nicht vergessen werden, also AR2 speichern und nach der verwendung zurückschreiben ... klingt so, als würde man es immer machen, leider vergessen das viele oft und gern und dann kommt bullshit raus...

wie würde die addierschleife aussehen?


----------



## PhilippL (29 August 2008)

vierlagig schrieb:


> das problem ist, unter anderem, dass du die position nicht erneuerst ...


 Die Position wird doch durch das Decrementieren der Schleife erneuert oder versteh ich da was falsch?

Zur Addierschleife... hmpf jetzt hab ich mich wo reingeritten...
Ich hab keine Ahnung :-(


----------



## vierlagig (29 August 2008)

PhilippL schrieb:


> Die Position wird doch durch das Decrementieren der Schleife erneuert oder versteh ich da was falsch?



deine schleife funktioniert so nicht, weil sie nicht richtig aufgebaut ist, wäre sie es, könntest du mit dem schleifenindex natürlich weiterarbeiten, allerdings mußt du aus diesem dann die pointeradresse berechnen und wie wir gestern gesehen haben ist diese bei der adressierung über MW[#Merker] genauso aufgebaut wie bei einem pointer (ist ja auch einer ) also du mußt die byteadresse mal 8 (SLD 3) nehmen um das richtige format zu erreichen, also insgesamt sehr umständlich, daraus eine adresse zu berechnen und das ganze dann noch für die schleife zu benutzen ...

zum Schleifenaufbau:


```
*
      L     #durchlaeufe                //Anzahl der Durchläufe gesamt
next: T     #schleifenzaehler           //in den Zaehler transferieren

      //Anweisungsteil der Schleife

      L     #schleifenzaehler           //Zaehler aufrufen
      LOOP  next                        //um ihn um eins verringern zu können und an den Einstiegspunkt der Schleife zu springen
```
im anweisungsteil kannst du #schleifenzaehler natürlich verwenden, aber wenn möglich nicht beeinflußen, zu schnell befindet man sich in einer endlosschleife und die zykluszeitüberwachung schlägt zu...

zur addierschleife: nimm dir noch eine TEMP-variable dazu, in der du das zwischenergebnis speicherst (setz sie vor der schleife sicherheitshalber auf null) und dann addierst du in 8 durchläufen jeweils ein element des arrays zu dieser TEMP-variablen ... macht die summe aller elemente


----------



## PhilippL (29 August 2008)

Um dann mal dein Muster aufzugreifen sollte das ganze doch in etwa so ausschauen


```
L     12  //Startadresse des Arrays
      SLD   3  //Pointer erzeugen
      LAR1     // ins AR1 laden
      L     0.0   //Temp-Variable Summe auf 0 setzen
      T     #Summe
      L     7
nex2: T     #Position
      L     DID [AR1,P#4.0] //Aktuelle Position im Array
      L     #Summe           //Temp-Variable
      +R                         //Addieren der Werte und in
      T     #Summe          //Summe abspeichern
      +AR1 P#4.0            //Adressregister erhöhen
      L     #Position
      LOOP  nex2            //Sprung zu Schleife
      L     #Summe         //Temp-Variable durch
      L     8                  //Anzahl Elemente des Arrays
      /R                       //teilen
      T     #Mittelwert   //Speichern in Mittelwert
```


----------



## vierlagig (29 August 2008)

PhilippL schrieb:


> Um dann mal dein Muster aufzugreifen sollte das ganze doch in etwa so ausschauen



sehr schön  ... das sollte sogar funktionieren... schön wäre, auch wenn es anders funktioniert, wenn du eine REAL 8, also 8.00 zur division benutzt

ich hatte mir grad beim kaffee überlegt: es wäre doch ganz schön, wenn man den wertepuffer löschen könnte. also ich hätt da jetzt noch gern ein RESET, dass den puffer mit 0.00 lädt ... 

und dann mal den kompletten baustein zusammenbauen ...


----------



## PhilippL (29 August 2008)

Dann versuch ichs doch mal...


```
U     #Trigger
      FP    #Flanke
      SPBN  M001
      L     12                          //Startadresse des Arrays
      SLD   3                           //Pointererzeugen
      LAR1                              //und ins Adressregister laden
      L     7                           //Anzahl der Schiebevorgänge laden
nex1: T     #Position
      L     DID [AR1,P#4.0]             //Startadresse + 1 DW
      T     DID [AR1,P#0.0]             //in Startadresse schreiben
      +AR1  P#4.0                       //und das AR1 um 4.0 erhöhen = neue Startadresse
      L     #Position                   //Schleifenzähler laden
      LOOP  nex1                        //um ihn zu dekrementieren und zurückzuspringen
      L     #IN_Wert                    //und den aktuellen Wert
      T     #Register[7]                //ins Real-ARRAY schubsen
 
      L     12                          //Startadresse des Arrays
      SLD   3                           //Pointer erzeugen
      LAR1                              // ins AR1 laden
      L     0.000000e+000               //Temp-Variable Summe auf 0 setzen
      T     #Summe
      L     7
nex2: T     #Position
      L     DID [AR1,P#4.0]             //Aktuelle Position im Array
      L     #Summe                      //Temp-Variable
      +R                                //Addieren der Werte und in
      T     #Summe                      //Summe abspeichern
      +AR1  P#4.0                       //Adressregister erhöhen
      L     #Position
      LOOP  nex2                        //Sprung zu Schleife
      L     #Summe                      //Temp-Variable durch
      L     8.000000e+000               //Anzahl Elemente des Arrays
      /R                                //teilen
      T     #Mittelwert                 //Speichern in Mittelwert
 
M001: U     #Reset
      FP    #Flanke2
      SPBN  end
      L     12
      SLD   3
      LAR1  
      L     7
nex3: T     #Position
      L     0.000000e+000               //Lösche aktuelle Position im Array
      T     DID [AR1,P#4.0]             //Aktuelle Position im Array
      +AR1  P#4.0                       //Adressregister erhöhen
      L     #Position
      LOOP  nex3
end:  NOP   0
```
 
EDIT: Irgendwie frag ich mich ob nicht die beiden letzten Schleifen einmal zuwenig laufen?ß?


----------



## vierlagig (29 August 2008)

PhilippL schrieb:


> EDIT: Irgendwie frag ich mich ob nicht die beiden letzten Schleifen einmal zuwenig laufen?ß?



ja, das tun sie  (hab ich doch glatt übersehen, sorry)


aber ansonsten: das sieht doch gut aus ... 

nur das NOP 0 am ende ist nicht was wir wollen, aber dazu gibt es jetzt hier exklusiv eine erläuterung:

gilt für Bausteinaufrufe in KOP und FUP

Wenn du den Baustein mit einem NOP 0 beendest wird der Ausgang EN0 nicht 1 ... dabei ist es doch eigentlich eine interessante Möglichkeit der Auswertung, denn so kannst du mehrere Bausteine hintereinanderschalten, die sich bedingen. Also ist im ersten Baustein irgendetwas schief gelaufen kannst du den EN0 bewußt null lassen und der darauffolgende Baustein wird nicht ausgeführt oder ein Bit am EN0 zeit dir an, dass ein Fehler aufgetreten ist. Um den EN0 auf eins zu setzen fügst du in die letzte sprungmarke folgenden code ein


```
*
end:  SET   
      SAVE
```
schon weißt du, dass alles in ordnung war.

 ... jetzt könnte man natrürlich im vorliegenden Baustein den EN0 nur eins setzen, wenn getriggert wurde und über den EN0 einmalig mitteilen "hallo, ich hab einen neuen wert berechnet"

also insgesamt dann in etwa so:


```
*
//------- RESET ------//
      U     #xReset
      FP    #xHelpFlag1
      SPBN  nore

      L     12                          //Startadresse des Arrays
      SLD   3                           //Pointererzeugen
      LAR1                              //und ins Adressregister laden
      L     8
nex1: T     #iLoopCounter
      L     0.000000e+000               //alle acht Fächer
      T     DID [AR1,P#0.0]             //mit 0.00 besetzen
      +AR1  P#4.0
      L     #iLoopCounter
      LOOP  nex1

//------ TRIGGER -----//
nore: U     #xTrigger                   //Trigger
      FP    #xHelpFlag2                 //Auswertung
      SPBN  end

//------ SHIFTER -----//
      L     12                          //Startadresse des Arrays
      SLD   3                           //Pointererzeugen
      LAR1                              //und ins Adressregister laden
      L     7                           //Anzahl der Schiebevorgänge laden
nex2: T     #iLoopCounter
      L     DID [AR1,P#4.0]             //Startadresse + 1 DW
      T     DID [AR1,P#0.0]             //in Startadresse schreiben
      +AR1  P#4.0                       //und das AR1 um 4.0 erhöhen
      L     #iLoopCounter               //Schleifenzähler laden
      LOOP  nex2                        //um ihn zu dekrementieren und zurückzuspringen

      L     #rInput                     //und den aktuellen Wert
      T     #aRealArray[7]              //ins Real-ARRAY schubsen

//--- SUMMING UNIT ---//
      L     12
      SLD   3
      LAR1  
      L     8
nex3: T     #iLoopCounter
      L     DID [AR1,P#0.0]
      L     #rTemp
      +R    
      T     #rTemp
      +AR1  P#4.0
      L     #iLoopCounter
      LOOP  nex3

//--- AVERAGE CALC ---//
      L     #rTemp
      L     8.000000e+000
      /R    
      T     #rAverage

//---- EN0 = TRUE ----//
      SET   
      SAVE  
      BEA   

//--- EN0 = FALSE ---//
end:  CLR   
      SAVE
```


----------



## vierlagig (29 August 2008)

so, wieder eine aufgabe geschafft ... war doch eigentlich gar nicht so schwer, oder? 

mal was zum nachdenken:

ein tank mit einem flüssigen medium. es wird kontinuierlich befüllt und bei erreichen des grenzstandes max ein ventil geöffnet. der tank wird bis auf den grenzstand min abgelassen und das ventil wieder geschlossen.

leider sind die grenzstände nur als bool-signal verfügbar, so dass eine füllstandsanzeige nicht möglich ist außer und jetzt kommt der teil zum nachdenken, man errechnet sich auf grund von erfahrungswerten einen füllstand, mißt also die zeit zum ablassen und die zeit zum befüllen und ermöglicht somit eine berechnung zwischen zwei einstellbaren füllständen, also z.b. zwischen 30 und 70% oder was man gerne hat ...

problem verstanden?


----------



## PhilippL (29 August 2008)

Jep, Problem verstanden und ich mach mir da mal meine Gedanken dazu!


----------



## waldy (30 August 2008)

> also, nimm nochmal alle unterlagen und hilfen zur hand und mach ne erklärung fertig, wie du denn nun an die 16 taktmerker rankommst!


 
Hi, ich versuche es beantworten , wenn ich habe die frage Richtig verstanden .

UND Zählt nur bei neue Impuls von M100.5 ( CPU Generator ) , und zählt nach Positive Flanke


> U M 100.5
> FP M 0.0
> L MW 10
> + 1
> T MW 10


 
ODER


UND ( in andere Falle , wird nicht gezählt )


> U M 100.5
> FP M 0.0
> SPBN M001
> M001: = A 0.0


Ich hoffe, das habe ich verständlich meine Gedanke erkläret, wie habe ich das Programm programmiert ?


gruß waldy


----------



## waldy (30 August 2008)

gruß waldy


----------



## Question_mark (30 August 2008)

*Nix verstehn ...*

Hallo,



			
				waldy schrieb:
			
		

> Ich hoffe, das habe ich verständlich meine Gedanke erkläret, wie habe ich das Programm programmiert ?



Also waldy, eigentlich hast Du nur verständlich erklärt, dass Du nichts verstanden hast ...

Gruß

Question_mark


----------



## waldy (30 August 2008)

Hallo Question,
erst mal guten Abend, also, und erst mal vergessen wir alte Sache .

Jetzt wegen Programm- was ist da unverständlich ?
Kannst du bitte deutlich deine Frage mir stellen - und ich versuche die beantworten.

Weil ich versthee auch nicht, wie muss ihc das  noch erklären.
Stell bitte deine Frage Shcritt für Schritt - und ich schreibe die Antwort.

gruß waldy


----------



## Question_mark (30 August 2008)

*Welche Frage ?*

Hallo,



			
				waldy schrieb:
			
		

> Kannst du bitte deutlich deine Frage mir stellen - und ich versuche die beantworten.



Also ich kann mich wirklich nicht erinnern, Dir jemals eine Frage gestellt zu haben. Insofern erwarte ich auch keine Antwort.

Gruß

Question_mark


----------



## waldy (30 August 2008)

> Also ich kann mich wirklich nicht erinnern, Dir jemals eine Frage gestellt zu haben. Insofern erwarte ich auch keine Antwort.


 - ah, vielen dank.
Dann kannst du bitte mich in Ruhe lassen, und keine mehr dumme Trad hier schreiben.


----------



## vierlagig (30 August 2008)

@waldy: leider geht es eben nicht nur darum, zu beschreiben, welche anweisung was bedeutet sondern im zusammenhang mit diesen funktionen erklären zu können, was man da eigentlich macht.
im konkreten fall heißt das, ich "möchte" immer noch wissen, wie man an einen der 16, so generierten taktmerker rankommt ... z.b. den mit 64s

@qm: hätte ja nicht gedacht, dass du so schnell ruhe gibst


----------



## waldy (30 August 2008)

Hallo,
ich versuche das noch mal beschreiben, wenn klappt das nicht, besser dann wir versuchen unsere Aufgabe weiter machen.
Ich bin noch anfänger, und kann noch nicht so gut mit Fachlichen Wörten das alles beschreiben . Ich kann nur sagen - das habe ich verstanden , wenn nciht - ich sage ich habe das nicht verstanden.
Mehr Momental kann ich auch nicht.

@4-er

auf 64 Sek. kommen wir so dran.

 - In CPU 300 markiten wir erst   Merker 100.x
( CPU macht schon automatisch mit seiner Hardware fertige impulsen , z.B. m100.5 gibt Takt mit Impuls als 1 Sekunde . Deswegen brauchen wir keine programm für sekundengenerator schreiben, und sparen damit platz in Programm).

-  
U M 100.5

damit wir abrufen sekunden Takt von CPU

Nun da kommt folgende problemm, so lange Sektunden Takt von CPU ist "1" - programm wird innerhalb diese Sekunde immer additieren, deswegen brauchen wie eine Flanke. 
Ich habe Positive Flanke genommen, weil Sekunden Takt beginnt mit Positivem Signal "1" .
FP M 0.0

Mit diese Positive Flanke, kriegen wir unsere Richitige Ergebnis, Programm wird nur ein mal additieren .

- dann lade ich eine Merker Wort z.B. MW10
L MW 10


adiitiere nach jede Programm ablauf , Mw10 auf "1"
+ 1

- und speichere neue  Ergebnis wieder in gleiche Merker MW10
T MW 10


Nun da zwischen ich habe es gelertn, das Funktionen
- L
- T
werden jede mal ohne VK ausgefürt .

Deswegen habe Merker Sprung eingebaut
SPBN M001


damit ohne ganze berechnung Programm geht zum ende
M001: = A 0.0


und Zyklus wird jede mal sich wiederholen , erst mal 1 Sek , dann 2 Sek u.s.w.


Und jetzt machen wier unsere Lehrgang weiter , ich möchte noch was weiter lernen.

gruß waldy


----------



## vierlagig (30 August 2008)

waldy schrieb:


> Und jetzt machen wier unsere Lehrgang weiter , ich möchte noch was weiter lernen.



NEIN - DENN: du hast das problem immer noch nicht verstanden ...
 bemühst dich noch nicht mal die lösung nachzulesen oder abzuschreiben,
 geschweigedenn sie zu verstehen! 

... da werdsch zur wihldsaou :evil:


----------



## waldy (30 August 2008)

Hi 4-er,
doch , ich verstehe diese Programm .

Wie sonst ich muss das noch beschreiben - ich bin wie eine CPU - ohne Befehl - bekommst du keine Ergebnisse.

Sonst ich verstehe nicht, was muss ich noch machen.

gruß waldy


----------



## vierlagig (30 August 2008)

waldy schrieb:


> Hi 4-er,
> doch , ich verstehe diese Programm .
> 
> Wie sonst ich muss das noch beschreiben - ich bin wie eine CPU - ohne Befehl - bekommst du keine Ergebnisse.
> ...



mir sagen, wie du die so generierten taktmerkerbits verwendest


----------



## Andy033 (30 August 2008)

Hallo zusammen,

erstmal ein großes Kompliment an alle Experten, die sich hier mit sachlichen Beiträgen beteiligen.

Besonders 4L, der hier ja sehr viel Zeit und meiner Ansicht auch Nerven investiert und sein umfangreiches wissen weitergibt.
(ist nicht schleimen sondern bis dato realität)


Hier mal meine Lösung zur Tankaufgabe.

- weiß zwar nicht genau ob die berechnung der Zeiten 
(t1 0-->100%; t2 100-->0%) auch mit rein soll aber könnte man
vieleicht in gesonderten Baustein machen?
- den out habe ich auf eine stat. Var gelegt weil ich auch lesend
drauf zugreife und keinen in_out verwenden wollte eure meinung.


```
[COLOR=#008000][COLOR=#008000]// E 3.1 als schließer ausgeführt[/COLOR]
[COLOR=#008000]// E3.0 als öffner ausgeführt[/COLOR]
[COLOR=#008000]// bei betätigung min./ max. Sensoren Ist-Niveau Initialisieren[/COLOR]
[COLOR=#008000]// Niveaubefüllung zwischen 40 und 60%[/COLOR]
[COLOR=#008000]//Sensoren werden vorrangig bearbeitet[/COLOR]
[COLOR=#008000]// min. Sensor schließt des Ventil[/COLOR]
[COLOR=#008000]// max. Sensor öffnet des Ventil vorrangig[/COLOR]
 
 
OB1:
 
[COLOR=black]CALL FB 2,DB2 [/COLOR]
[COLOR=black]e_min_Niveau:=E3.1 [/COLOR][COLOR=black]//1=Füllstand über min-Niveau[/COLOR]
[COLOR=black]e_max_Niveau:=E3.0 [/COLOR][COLOR=black]//1=Füllstand unter max-Niveau[/COLOR]
[COLOR=black]e_Takt_V_Befuellen:=M100.0 [/COLOR][COLOR=black]//0,5 sek. Hardware-Takt 1:1[/COLOR]
[COLOR=black]e_Takt_V_Entleeren:=M100.0 [/COLOR][COLOR=black]//0,5 sek. Hardware-Takt 1:1[/COLOR]
[COLOR=black]e_Niveau_Befuellen_ein:=40[/COLOR]
[COLOR=black]e_Niveau_Befuellen_aus:=60[/COLOR]
[COLOR=black]a_Ventil_auf:=A3.0 [/COLOR][COLOR=black]//Ablaufventil auf[/COLOR]
 
 
 
FB2:
Schnittstelle:
e_min_Niveau BOOL FALSE 
e_max_Niveau BOOL FALSE 
e_Takt_V_Befuellen BOOL FALSE 
e_Takt_V_Entleeren BOOL FALSE 
e_Niveau_Befuellen_ein INT 30 
e_Niveau_Befuellen_aus INT 70 
 
a_Ventil_auf BOOL FALSE 
 
s_Flanke_min_Niveau BOOL FALSE 
s_Flanke_max_Niveau BOOL FALSE 
s_Flanke_V_Befuellen BOOL FALSE 
s_Flanke_V_Entleeren BOOL 
s_Flanke_Befuellen_ein BOOL FALSE 
s_Flanke_Befuellen_aus BOOL FALSE 
s_Ventil_auf BOOL FALSE 
s_Niveau_Ist INT 0 
 
t_Impuls_min_Niveau BOOL 
t_Impuls_max_Niveau BOOL 
t_Impuls_V_Befuellen BOOL 
t_Impuls_V_Entleeren BOOL 
t_Impuls_Befuellen_ein BOOL 
t_Impuls_Befuellen_aus BOOL 
t_Niveau_ueberschritten BOOL 
t_Niveau_unterschritten BOOL 
t_Error BOOL 
 
//Programmbeginn
 
// diesen Zustand sollte es nicht geben
[/COLOR]UN #e_max_Niveau
UN #e_min_Niveau
= #t_Error
 
[COLOR=#008000]// Niveau unter Sensor min gefallen[/COLOR]
U #e_max_Niveau
UN #e_min_Niveau
FP #s_Flanke_min_Niveau
= #t_Impuls_min_Niveau
 
[COLOR=#008000]// Niveau über Sensor max gestiegen[/COLOR]
UN #e_max_Niveau
U #e_min_Niveau
FP #s_Flanke_max_Niveau
= #t_Impuls_max_Niveau
 
[COLOR=#008000]// pro Impuls 1% befüllen[/COLOR]
U #e_Takt_V_Befuellen
FP #s_Flanke_V_Befuellen
= #t_Impuls_V_Befuellen
 
[COLOR=#008000]// pro Impuls 1% entleeren[/COLOR]
U #e_Takt_V_Entleeren
FP #s_Flanke_V_Entleeren
= #t_Impuls_V_Entleeren
 
[COLOR=#008000]// Niveau unter Soll[/COLOR]
L #s_Niveau_Ist
L #e_Niveau_Befuellen_ein
<=I
FP #s_Flanke_Befuellen_ein
= #t_Impuls_Befuellen_ein
 
[COLOR=#008000]// Niveau über Soll[/COLOR]
L #s_Niveau_Ist
L #e_Niveau_Befuellen_aus
>=I
FP #s_Flanke_Befuellen_aus
= #t_Impuls_Befuellen_aus
 
[COLOR=#008000]// Istwert erhöhe bzw.verringern[/COLOR]
U #t_Impuls_V_Befuellen
UN #s_Ventil_auf
SPB m3_1
U #t_Impuls_V_Entleeren
U #s_Ventil_auf
SPB m3_2
SPA m3_E
[COLOR=#ff0000]m3_1[/COLOR] : L 1
SPA m3_B
[COLOR=#ff0000]m3_2[/COLOR] : L -1
[COLOR=#ff0000]m3_B[/COLOR] : L #s_Niveau_Ist
+I
T #s_Niveau_Ist
[COLOR=#ff0000]m3_E[/COLOR] : NOP 0
 
 
[COLOR=#008000]// Bereichsüberwachung Istwert[/COLOR]
L #s_Niveau_Ist
L 0
<I
= #t_Niveau_unterschritten
 
L #s_Niveau_Ist [COLOR=#008000]//könne man sparen wenn oben drehen[/COLOR]
L 100
>I
= #t_Niveau_ueberschritten
 
[COLOR=#008000]// Istwert initialisieren[/COLOR]
U #t_Impuls_min_Niveau
O #t_Niveau_unterschritten
SPB m2_1
U #t_Impuls_max_Niveau
O #t_Niveau_ueberschritten
SPB m2_2
SPA m2_E
[COLOR=#ff0000]m2_1[/COLOR] : L 0
SPA m2_T
[COLOR=#ff0000]m2_2[/COLOR] : L 100
[COLOR=#ff0000]m2_T[/COLOR] : T #s_Niveau_Ist
[COLOR=#ff0000]m2_E[/COLOR] : NOP 0
 
[COLOR=#008000]// Ventil öffnen[/COLOR]
U #t_Impuls_max_Niveau
O #t_Impuls_Befuellen_aus
ON #e_max_Niveau
S #s_Ventil_auf
 
 
[COLOR=#008000]// Ventil schließen[/COLOR]
U #t_Impuls_min_Niveau
O #t_Impuls_Befuellen_ein
R #s_Ventil_auf
 
[COLOR=#008000]// ab zum Ausgang[/COLOR]
U #s_Ventil_auf
= #a_Ventil_auf
 
//Fehlerbearbeitung
U #t_Error
SPBN m8_E
CLR
SAVE
BEA
m8_E : SET
SAVE
```
 
Was haltet ihr davon.

MfG
Andy


----------



## s.leuschke (30 August 2008)

@Vierlagig
Hallo grüsse Dich ( oder können wir Ex-Sachsen auch Glück Auf sagen ? ).

Hast Du manchmal einen Link, wo man sich über AWL Programmierung Info´s holen kann.
Dies ist bei meinen absolvierten Kursen etwas zu kurz gekommen, wird aber meiner Meinung nach häufiger angewendet als FUP.

Gruss Sven


----------



## vierlagig (31 August 2008)

Andy033 schrieb:


> Hier mal meine Lösung zur Tankaufgabe.


 
Ich geh mal davon aus, dass du den Baustein getestet hast und er funktioniert, dadurch hat er schon eine Existenzberechtigung. Ordentlich kommentiert, Struktur erkennbar - nicht schlecht!

ABER

1. ich würd die Ansteuerung des Ventils, die ja offensichtlich über die Grenzstände funktioniert nicht über das berechnete Niveau verknüpfen.

2. Du gehst in Deinem Baustein davon aus, dass sich der Füllstand um 1% je 0,5s erhöht. Was aber, wenn es nun 0,7s sind? Und sich Prozessbedingt auch noch ändert? Also vielleicht das Ventil nicht mehr ganz frei ist - könnte man das nicht über den reinen Berechnungs- und Vergleichsbaustein und die Erfahrungswerte der Befüllungs- und Entleerungszeit zum einen zur Anzeige bringen zum zweiten somit die Möglichkeit schaffen, dass der Baustein sich an die Anforderungen und nicht die Anforderungen an den Baustein anpasst - ohne das der Programmierer oder eine befähigte Person da noch dran rumdrehen muß?!




Andy033 schrieb:


> - den out habe ich auf eine stat. Var gelegt weil ich auch lesend
> drauf zugreife und keinen in_out verwenden wollte eure meinung.


 
Laß das nicht den Ralle lesen  ... Zugriffe auf Instanzdatenbausteine sind, ich sag mal, "Naja..." ...


----------



## vierlagig (31 August 2008)

s.leuschke schrieb:


> Hast Du manchmal einen Link, wo man sich über AWL Programmierung Info´s holen kann.


 
also so aus der kalten ... ausbildungsunterlagen würd ich sagen, step 7-hilfe und viel geduld und spucke ... die operationsliste (für deine CPU bei http://support.automation.siemens.com) wäre auch nicht schlecht, da gibt es übrigens auch ein AWL-handbuch ... hab da selber noch nicht reinguckt ...


----------



## waldy (31 August 2008)

Hi 4-er,
ich weiss es nicht, bin ich vielleicht Dumm , nun ich kenne nicht Antwort auf deine Letzte Frage.

gruß waldy


----------



## vierlagig (31 August 2008)

waldy schrieb:


> Hi 4-er,
> ich weiss es nicht, bin ich vielleicht Dumm , nun ich kenne nicht Antwort auf deine Letzte Frage.
> 
> gruß waldy



Aufgaben und Lösungen aus dem Online-Lehrgang


----------



## waldy (1 September 2008)

Hallo,
ich wolte nur fragen,
bedeutet das ende unsere Lehrgang oder geht das noch weiter?

gruß waldy


----------



## Cerberus (1 September 2008)

Also wenn ich 4Ls Absicht richtig deute, dann bleibt dieser Lehrgang so bestehen.
Der andere Thread dient dann nur dazu die Aufgabe selber und die korrekten Lösungen noch einmal zusammemzufassen.


----------



## nade (2 September 2008)

Ohhhh wasssn Scheiß.... wer schreibt denn noch Programme in AWL... das muß in KOP sein.
Und alles nur für Bitschuppser vom Straßenbau.
Nein im Ernst, eine sehr gute IDEE. Hat was von einem guten Leitfaden, wenns um Problemansätze geht, die nicht kompliziert sind, aber wenn man auf dem Schlauch steht, oder auf der Leitung sitzt, gerade richtig kommen.
Mach weiter so nette :TOOL::TOOL::TOOL: Gerade so im Zusammenhang mit FC und FB zum mehrmals Verwenden.
Und nein Waldy, ich denke das diese Oline-Hausaufgaben-Schulung-Nachhilfe.(Wiemanns nennen will) weiter geht.


----------



## waldy (2 September 2008)

Hallo,
ja, das hoffe ich auch. Und warte auf neue Aufgabe von 4-er.

Hier habe ich wirklich was Gutes gelernt .

gruß waldy


----------



## vierlagig (3 September 2008)

waldy schrieb:


> Und warte auf neue Aufgabe von 4-er.



hast du aufgaben 1-6 schon durch  ... das würde mich wundern!

btw: ich bin ab heut abend 22uhr wieder da und werde mich der problematik "tank mit virtuellen füllstand" mal widmen - zugegeben, hab es selber ja noch nicht umgesetzt 

bis dahin


----------



## vierlagig (4 September 2008)

so, dann wollen wir uns in den gerade frei gewordenen 5 minuten mal der füllstands-erratungstheorie widmen.

und damit am ende auch was hängen bleibt, werd ich nicht nur sturr die lösung präsentieren sondern versuchen step-bystep zu erklären, wie ich beim entwurf und der realisierung vorgehe.

als erstes steht die idee im raum:

wir erinnern uns, ein tank mit zwei meldungen aka min und max, zwischen denen der füllstand durch ein ablassventil gehalten wird soll anhand von erfahrungswerten über die ablass und befülldauer mit einem quasi-analogen füllstandssignal ausgestattet werden.

das ganze wird ein FB, schon weil wir daten über mehrere zyklen speichern aber auch schnittstellen sparen möchten.

sammeln wir also erstmal die variablen auf der eingangsseite:

min und max würden sich anbieten, aber besser ist es gleich den prozess zu benennen, der repräsentiert wird, also befüllen und leeren
dann hätten wir die beiden füllstandsmaßzahlen zwischen denen der füllstand gehalten wird, also low und high-level
da wir mit zeiten operieren wollen, aber s5-timer und auch iec-timer irgendwie immer so als bastellösung daher kommen verwende ich bei meiner lösung den cpu-takt
wir wollen dem baustein auch die möglichkeit geben sich zu initialisieren, also ein zusätzlicher freigabe-eingang
weiter gedacht bräuchte man noch eine fehlerauswertung, also z.b. di zeit zum ablassen ist viel länger als die bei der initialisierung ermittelte, damit das aber nicht im 100ms bereich liegt nehme ich noch einen zusätzlichen eingang zur toleranzangabe hinzu

ausgangsseitig hätten wir den quasianalogen füllstandswert und eine fehlermeldung

für alle boolschen eingänge lege ich gleich noch hilfsmerker zur flankenauswertung im stat-bereich an, kann man immer gebrauchen und nach der implementierung die nicht benutzten wieder löschen.

darüberhinaus brauchen wir noch die zeitwerte im statbereich, also: initialisierungszeit füllen und leeren und die aktuelle zeit.

also würde unser baustein jetzt in etwa so aussehen:


```
*
FUNCTION_BLOCK FB 2
TITLE =
VERSION : 0.1


VAR_INPUT
  xPlcPulse : BOOL ;    
  xInit : BOOL ;    
  xFill : BOOL ;    
  xEmpty : BOOL ;    
  iLowLevel : INT ;    
  iHighLevel : INT ;    
  dTolerance : DINT ;    
END_VAR
VAR_OUTPUT
  iLevel : BOOL ;    
  xError : BOOL ;    
END_VAR
VAR
  xHelpFlagPlcPulse : BOOL ;    
  xHelpFlagInit : BOOL ;    
  xHelpFlagFill : BOOL ;    
  xHelpFlagEmpty : BOOL ;    
  xHelpFlagError : BOOL ;    
  dInitTimeFill : DINT ;    
  dInitTimeEmpty : DINT ;    
  dActualTime : DINT ;    
END_VAR
BEGIN
NETWORK
TITLE =

//Anweisungsteil

END_FUNCTION_BLOCK
```

als nächstes geben wir dem anweisungsteil ein wenig struktur, also definieren was wir in welcher reihenfolge programmieren wollen:


```
*
//----------------------- Init ------------------------//
//ermitteln der "Erfahrungswerte" wenn Initialisierung //
//angestoßen wurde.                                    //
//Ermittelte Werte werden im Instanz-DB gespeichert.   //
//Ende der Initialisierung, wenn für beide Vorgänge    //
//ein Wert gefunden wurde.                             //
//-----------------------------------------------------//



//----------------------- Fill ------------------------//
//wird nur abgearbeitet, wenn Init erfolgt ist!        //
//Wird der Behälter gefüllt, wird der Füllstand in Ab- //
//hängigkeit der Zeit berechnet und ausgegeben.        //
//Es wird von einem linearen Verhalten ausgegangen!    //
//-----------------------------------------------------//



//----------------------- Empty -----------------------//
//wird nur abgearbeitet, wenn Init erfolgt ist!        //
//Wird der Behälter geleert, wird der Füllstand in Ab- //
//hängigkeit der Zeit berechnet und ausgegeben.        //
//Es wird von einem linearen Verhalten ausgegangen!    //
//-----------------------------------------------------//



//----------------------- Error -----------------------//
//Auswertung der Zeiten.                               //
//Ist beim Füllen oder Leeren eine erhebliche Zeit-    //
//differenz aufgetreten (+- Toleranz) wird eine Fehler-//
//meldung generiert                                    //
//-----------------------------------------------------//
```

und der rest ist eigentlich nur noch stures runterprogrammieren 8)

wer die beschreibung genau liest, dem wird auffalen, das mindestens eine statische-variable fehlt - deswegen mach ich solche beschreibungen, man kann so immernoch die IDB-bereiche besser und sinnvoll sortieren.

so, jetzt wird aber erstmal der code generiert ... bis späta *g*


----------



## vierlagig (5 September 2008)

...wenn man eine ganze weile mit einem problem schwanger geht, fällt einem erstmal auf, was man noch alles verbauen könnte 

...fangen wir also mit der initialisierung des bausteins an, das ist so ziemlich das schwierigste an dem ganzen baustein...

um die initialisierung zu starten, werten wir den dafür zuständigen eingang aus und setzen alle zeiten und zähler auf null und merken uns, dass wir jetzt initilisieren möchten:


```
*
      U     #xInit                      //Initialisierung wurde
      FP    #xHelpFlagInit              //angewählt
      SPBN  fill
      S     #xInitActiv                 //setzt den Initialisierungsvorgang

      L     L#0                         //und beschreibt einmalig
      T     #dInitTimeFill              //die zeiten
      T     #dInitTimeEmpty             //mit 0
      T     #bInitCount                 //und auch den Initialisierungszähler
```
diesen abschnitt überspringen wir, wenn die initialisierung bereits aktiv ist:


```
*
// Initialisierung aktiv?
      U     #xInitActiv                 //Initialisierung läuft
      SPB   ini1                        //springe zum Vorgang

// oder Neustart der Initialisierung
      U     #xInit                      //Initialisierung wurde
      FP    #xHelpFlagInit              //angewählt
      [ ... ]
      T     #bInitCount                 //und auch den Initialisierungszähler

ini1:
```
da es möglich ist, die initialisierung bei jedem beliebigen füllstand zu starten, habe ich einen mechanismus eingebaut, der sicherstellt, dass die zeitmessung erst in den endlagen beginnt, es wird also einmal gefüllt und einmal geleert, die reihenfolge dabei ist egal und ab welchem füllstand ist auch vollkommen schnuppe - sieht dann so aus:


```
*
// sicherstellen, dass Initialisierung nicht bei undefinierten Zustand erfolgt
ini1: U     #xFill                      //füllen
      FP    #xHelpFlagFillP             //einmal aktiviert
      S     #xInitFill

      U     #xInitFill
      U     #xFill                      //und wieder
      FN    #xHelpFlagFillN             //beendet
      SPBN  ini2
      R     #xInitFill                  //erhöht den Initialisierungszähler
      L     #bInitCount
      +     1                           //um 1
      T     #bInitCount

ini2: U     #xEmpty                     //leeren
      FP    #xHelpFlagEmptyP            //einmal aktiviert
      S     #xInitEmpty

      U     #xInitEmpty
      U     #xEmpty                     //und wieder beendet
      FN    #xHelpFlagEmptyN
      SPBN  ini3
      R     #xInitEmpty                 //erhöht den Initialisierungszähler
      L     #bInitCount
      +     1                           //um 1
      T     #bInitCount
```
endlich können wir die zeit messen, das ist eine der einfachsten dinge der welt. am anfang stellen wir allerdings sicher, dass der initialisierungszähler uns das auch durchgehen läßt:


```
*
// Hauptfunktionalität Zeitmessung
ini3: L     #bInitCount                 //wenn der Initialisierungszähler
      L     2                           //größer gleich zwei ist
      >=I   
      SPBN  ini5                        //können die zeiten aufgenommen werden

      U     #xPlcPulse                  //bei jedem 100ms
      FP    #xHelpFlagPlcPulse          //impuls wird bei ...
      SPBN  ini5

      U     #xFill                      //...behälter befüllen
      SPBN  ini4
      L     #dInitTimeFill              //die zeit
      +     1                           //inkrementiert
      T     #dInitTimeFill

ini4: U     #xEmpty                     //...behälter leeren
      SPBN  ini5
      L     #dInitTimeEmpty             //die zeit
      +     1                           //inkrementiert
      T     #dInitTimeEmpty
```

jetzt geht es nur noch darum, zu sagen, dass die werte nicht null sind und das vier durchgänge gefahren wurden, also unser sicherheits-entleeren/füllen um einen definierten zustand zu erreichen und jeweils ein füll- und ein entleervorgang zur ermittlung der füll- und ablasszeit:


```
*
// Prüfen der Initialisierten Werte:
ini5: U(                                //wenn
      L     #dInitTimeFill              //die füllzeit
      L     L#0
      >D                                //größer 0
      )     
      U(    
      L     #dInitTimeEmpty             //und die entleerzeit
      L     L#0
      >D                                //größer 0
      )     
      U(    
      L     #bInitCount                 //und der initialisierungzähler
      L     4                           //hat die korrekte zahl
      ==I                               //von vier durchläufen
      )
      O     #xReset
      R     #xInitActiv                 //gilt die initialisierung als erfolgreich

      U     #xReset
      S     #xInitCancel                //initialisierung wurde abgebrochen

ok:   U     #xInitCancel
      SPB   err                         //baustein muß neu initialisiert werden
```
für den fall, dass die initialisierung aus irgendeinem grund schief geht habe ich einen zusätzlich reseteingang eingefügt, dieser bricht die initialisierung ab und legt fest, dass erst nach erneuter initialisierung ordentlich gearbeitet werden kann ... der neustart der initialisierung wurde dementsprechend angepasst:


```
*
// oder Neustart der Initialisierung
      U     #xInit                      //Initialisierung wurde
      FP    #xHelpFlagInit              //angewählt
      SPBN  ok

      S     #xInitActiv                 //setzt den Initialisierungsvorgang
      R     #xInitCancel

      L     L#0                         //und beschreibt einmalig
      T     #dInitTimeFill              //die zeiten
      T     #dInitTimeEmpty             //mit 0
      T     #bInitCount                 //und auch den Initialisierungszähler
```
...so, viel spaß beim verstehen...


----------



## diabolo150973 (10 November 2008)

Ich habe hier mal eine meiner alten Schulaufgaben hingepackt.
Vielleicht hat ja einer, der noch nicht ganz so fit ist, Lust sich damit zu beschäftigen...


Gruß,

dia


----------



## diabolo150973 (11 November 2008)

Und hier ist das zweite Ding

Die "Anlage" wurde bei uns in der Klasse in 3 Teile gesplittet... ich durfte den mittleren Teil machen. Ich denke, aus der Beschreibung dürfte hervorgehen, worum es geht. Ansonsten einfach mal fragen!
Ich hoffe, dass man die Teile so zum Üben gebrauchen kann... 

Ich habe auch noch irgendwo Aufgaben zur LOGO! , aber ich glaube, dass Siemens da die Hand drauf hat (Urheberrecht). Deswegen werde ich Sie hier nicht reinsetzen. 

Ich behaupte mal, dass sich hier einige rumtreiben, die, mehr oder weniger, frisch aus der Schule sind. Vielleicht könntet ihr auch etwas beisteuern?
Ich habe nämlich sonst nix brauchbares mehr... Einen Großteil von unseren "Projekten" haben wir nie wieder gesehen, nachdem der Lehrer (schönen Gruß nach Mölln) sie zum Benoten eingesammelt hat. Warscheinlich wurde damit im Winter der Kamin geheizt...

So, ich wünsche viel Spaß damit. Vielleicht hat ja auch einer der Admins, Mods, oder wer auch immer dazu in der Lage ist, Lust das Gerümpel mit Aufgaben und Lösungen mal zu ordnen, oder eine neue Abteilung anzulegen...

Grüße aus dem Norden,

dia


----------



## Gerhard K (11 November 2008)

super!!die beiden projekte hatten der godi und ich gemeinsam auch bei unserem workshop damals in der wifi.so ein zufall!!


----------



## Golden Egg (11 November 2008)

Unter folgendem Link findet ihr von Siemens eine gute Zusammenfassung zum Thema "Programmieren mit Step7". 

http://support.automation.siemens.c...lib.csinfo&lang=de&objid=18652056&caller=view

MfG. Golden Egg


----------



## diabolo150973 (11 November 2008)

Dann schaue doch mal neugierdehalber unter:

Start--->Simatic--->Dokumentation--->Deutsch

auf deinem Rechner


Da sollte schon sehr viel dabei sein


Gruß,

dia


----------



## Golden Egg (11 November 2008)

....da ist sie ja auch dabei  
thx


----------



## kpeter (12 November 2008)

morgen

wo im wifi habt ihr die beispiele gehabt


----------



## Gerhard K (12 November 2008)

> wo im wifi habt ihr die beispiele gehabt


 
in st. pölten beim "workshop mit S7".

dort mußten 4 teams eine bearbeitungsstrasse automatisieren.wir hatten uns eben den Bestücker und die Bohrstation ausgesucht.
der workshop hat 3 tage gedauert.war ganz interessant,weil wir auch die doku dazu erstellen mußten.


----------



## waldy (26 Juli 2012)

hi,
ich weiss es nicht, aber ich würde es vorschlagen, das wenn jemand schreibt das Buch nach Verfolgung dieses thema - dann er könnte dieses Buch gut verkaufen, weil da stehen praktisch alle fragen von Anfänger in diese Bereich.
gruß


----------



## Paul (30 Juli 2012)

waldy schrieb:


> hi,
> ich weiss es nicht, aber ich würde es vorschlagen, das wenn jemand schreibt das Buch nach Verfolgung dieses thema - dann er könnte dieses Buch gut verkaufen, weil da stehen praktisch alle fragen von Anfänger in diese Bereich.
> gruß



Ich dir voschlagen du schreiben Buchk mit lachen Gechichte aus diene Läben, 
so mite Leute uas Zukunftt wo wollen Fernsähmachine umschalte, obwohl sie net ein IPHONE haben  
so dass endlich sehen konnen kunstlichen Intelilligenz weil auf irre Heimplanet die Sommerzweit beginnt erst in MW64.

Verkaufer dann auf Stant auf int Buchmesser in Frakfurt.

Ich glaube die Leute werden kuckeln vor lachen,auf die bodden.
Wenn du dann an deiner Schtant noch noch ein lecker Kessel voll Saure Lunge hasst, 
fir Leute mit Geschmack und Hunger. 
Dann kann nix meer passiren.

Der Rubel muss rollen!!! 

Dann bruchst du auch mix meer uberlegen was verdienen Automatisierungsprofi in Schweizarbeiten 
und bewrbung als Porgrammierer Scpetzialist bei MAXI ist auch nimner wichtik

Bald wachsen wieder frische Fliegenpilze wenn du davon noch ein paar mehr frisst fallen dir bestimmt auch noch mehr Beiträge ein


----------



## waldy (30 Juli 2012)

Hallo Paul,
way, sag mal - hast du das alles selber es geschrieben ?

Ich habe diese Text kopiert und habe das versucht bei Translator übersetztung auf Deutsch übersetzten .
Da kamm am Ausgabe plotzlich als ganze Übersetztung auf Russisch raus 

Sag mal erlich, wo kommst du her ?

gruß


----------



## Paul (30 Juli 2012)

waldy schrieb:


> Ich habe diese Text kopiert und habe das versucht bei Translator übersetztung auf Deutsch übersetzten .
> Da kamm am Ausgabe plotzlich als ganze Übersetztung auf*Russisch* raus


Super, ist doch genau das was du brauchst.

PS: Uns geht es bei deinen Texten genauso, allerdings kommt manchmal auch Kirgiesisch oder Kasachisch raus.
Wenn ich das aber von einem Dolmetscher der nur Mandarin-Chinesisch kann in die Taubstummen-Gebärdensprache
übersetzen lasse, dann ist es danach wieder ..... ORGINAL WALDY ....... Kein Unterschied feststellbar


----------

