Tutorial #16: ARRAY und FOR-Schleife in CoDeSys - Berechnung von Mittelwerten in Structured Text Der Automatisierungskanal https://www.youtube.com/watch?v=D8rOMnVo8Hw Transkript (automatisch erstellt) 0:00 hallo und schön dass ihr da seid mein name ist christian sie fast und ihr seht den automatisierungs kanal heute möchte ich mit euch über reyes und 0:08 schleifen sprechen race das sind variablen listen von einem bestimmten datentyp das kann zum beispiel integer seien es keine rede sein es könnte aber 0:17 auch ein pool sein und da könnt ihr dann die einzelnen elemente mit dem index ansprechen und natürlich könnt ihr auch die länge der liste festlegen das gucken 0:26 muss dann gleich auch ein bisschen in der praxis noch mal an also keine sorge da möchte ich jetzt auch gar nicht zu tief in die details gehen und wenn wir 0:34 schon über entsprechen dann macht es doch immer sehr viel sinn und gerade weil wir uns auch mit strukturieren text beschäftigen wollen uns mal einen 0:42 einblick in schleifen zu erlauben denn schleifen und arrays das passt wirklich gut zusammen denn wir können praktisch mit einer schleife und einer index 0:51 variable da sehr interessante kooperationen aus einer vielzahl von elementen gleichzeitig naja oder quasi gleichzeitig durchführen 1:01 also von daher ist total sinnvoll das für uns ist auch eine kombination angucken und dann würde ich sagen auf gehts ja heute da möchte ich euch 1:14 den datentypen etwas näher bringen und das ist heute wieder ein ganz normales programm ihr video es gibt also eigentlich nichts 1:24 besonderes zu sehen deswegen verwende ich hier auch wieder die kulisse sweet plc also nicht die laufzeitumgebung auf dem rad barry bei so dass wir das alles 1:36 direkt am rechner machen können kein hart verbrauchen und somit seht ihr den raspberry und die entsprechend angeschlossene hardware oben rechts 1:45 nicht eingeblendet denn schlicht und ergreifend es existiert kein raspberry pi so und damit wollen wir auch schon gleich starten und dann möchte ich mit 1:57 euch erstmal darüber sprechen was ist denn überhaupt so ein re nun seine ray das ist im prinzip etwas sehr ähnliches wie so eine struktur denn 2:08 das ist eine variable man könnte vielleicht auch sagen datentyp die mehr als nur einzelnen wert enthält das hatten wir im letzten video schon 2:21 bereits bei den strukturen gesehen dass da bestimmte datentypen gibt die im prinzip mehr als einen einzelnen wert erhalten 2:28 bei der struktur da war das ja so dass wir dann die einzelnen werte festgelegt haben und bei mary ist es ein bisschen anders denn ein array besteht 2:39 ausschließlich aus einem einzigen datentyp und das ist dann nicht nur eine einzelne variable von diesem laden typ sondern das ist eine naja nennen was man 2:52 einfach liste von diesen einzelnen variablen und diese liste die ist dann durchnummeriert und da kommen wir ganz coole sachen mitmachen 3:03 und das schauen bei uns jetzt auch mal an ich habe hier erst mal ein kleines programm eingefügt plc prg das seht ihr gerade vor euch und da möchte ich mit 3:15 euch jetzt zunächst einmal in den deklarationen bereich einsteigen und da sehen wir ganz oben nämlich hier und hier sehen wir im prinzip schon zwei 3:29 race das sind zwei rs von zwei verschiedenen datentypen das obere das ist ein integrer und das darunter ein [Musik] 3:42 haben zehn werte und wir gucken uns jetzt erstmal einmal an wie die deklariert werden ich glaube dass es eine ganz gute idee da sehen wir hier 3:52 wie bei einem ganz normalen variable zunächst einmal die möglichkeit der variable einen namen zu geben ich habe mich hier ganz kreativ für entega 4:02 entschieden dann über das von normalen variablen auch schon kennen sehen wir hier unten ja zum beispiel normale variable die in dem areal 4:11 variable doppelpunkt und dann schreibt ihr nicht direkt den datentyp dahinter sondern dann kommt er rein und dann liegt ihr die dimension von dem er fest 4:22 denn bei kurses ist es so dass sich eine reihe von einem beliebigen wert aus starten lassen kann und bei einem beliebigen wert enden lassen 4:34 mit einem programmiersprache ist das manchmal so dass ihr einfach nur die länge des arrays definiert und das immer automatisch bei null anfängt das balco 4:47 tus ist ein bisschen anders also ihr definiert den staat wehrt oder doch die nehmen wir das mal den start fährt des arrays und ihr definiert den 4:56 endwert und dann was sich dazwischen abspielt das dann entsprechend die länge von dem eric so und dann müssen wir natürlich noch den daten typ festlegen 5:04 habe ich ja eingangs erwähnt dass eine rey in meine liste von einem spezifischen daten typ ist und hier in dem fall ist es ein integer und dann 5:11 schreiben wir hierfür ein integer einfach auf inter hinter und dann für eine anderen datentyp zum beispiel da kann man dann zum beispiel oft viel 5:21 dahinter schreiben kann natürlich aber auch in die in sein das ist auch alles möglich und was können wir jetzt hier mitmachen nun eine anwendung die sich so 5:36 ein bisschen anbietet das wäre ja vielleicht mal die berechnung eines mittelwerts ich glaube es kann sich jeder vorstellen wir haben da vielleicht 5:43 ein sensor der gibt uns in regelmäßigen abständen ein wert aus von sagen wir zum beispiel mal dem füllstand eines tanks und damit wollen wir jetzt was machen 5:59 aber vielleicht im tank da bewegt sich die flüssigkeit und da wollen wir jetzt nicht wirklich mit den einzelnen werten arbeiten sondern wir wollen im prinzip 6:09 mehrere samples haben und wollen dann auf basis dieser samples einem mittelwert berechnung machen und das habe ich euch unten 6:21 in dem programm abgebildet seht ihr im prinzip hier das ist dann unsere formel nablus b + c durch entsprechend hier die anzahl mit 6:31 dem fall dann 3 und das können wir jetzt mit dem airrail folgendermaßen machen ich habe hier meine ray vorbereitet auch ein sehr kreativer name array of mean 6:42 well you worry elements das heißt also dieses rey hat drei elemente und aus diesen drei elementen wollen wir jetzt den mittelwert berechnen 6:53 das heißt wir lassen dass wir mal bei 1 starten lassen uns bis drei gehen es könnten noch bei null starten und dann bei zwei enden lassen das dann 7:01 vollkommen euch überlassen wie ihr das gerne hättet und dann habe ich hier schon mal die werte vorbereitet denn so könnt ihr hier wir das hier seht ein 7:11 doppelpunkt eckige klammer auf oder ein entsprechend die werte reinschreiben so könnt ihr auch ein array initialisieren und ich glaube die 7:21 mittelwert berechnung die kriegen wir alle hier auch noch im kopf hin zwei 2,5 und 3 er ist der mittelwert natürlich 2,5 und das wollen wir hier unten mal 7:32 berechnen das ganze speichern wir dann hier in first mail value berechnung ab ich komme dann gleich noch zu warum ich noch einen 7:41 second lien value habe keine sorge und wenn ihr jetzt die einzelnen elemente in einem array ansprechen wollt dann macht ihr das im prinzip einfach mit dem arena 7:53 bist du dir dann hier und dann macht ihr eine eckige klammer auf und schreibt jetzt den indexwert also hier für die zwei ist dann der indexwert die einst 8:04 weil wir starten ja hier bei der einst für die 2,5 ist dann natürlich hier die 2 und bei der 3 ist ein indexwert 3 nun können was ganz normales drei teilen das 8:16 erstmal die einfachste art und weise wie ihr mit dem erarbeiten können das kann hier drin natürlich auch eine variable sein also ist es hier eine ein fixer 8:25 wert weil ich weiss ja welche werte ich dafür benutzen muss aber ihr könntet da an der stelle zum beispiel auch hingehen und könnte da eine 8:33 variable die ihr zum beispiel von einem h m ihr euch rein geben lasst verwenden um dann halt bestimmten werten zu arbeiten das dann entsprechend euch 8:42 überlassen wie kreativ ihr da sein möchte so und jetzt legen wir uns mal einmal ein und schauen uns auch mal so ein 8:53 bisschen an wie das ganze in der online ansicht aussieht und da es oft viel sie verwende muss ich natürlich die soft plc einmal hier auf meinem rechner starten 9:06 das habe ich jetzt gemacht und dann gehen wir mal online so und jetzt sehen wir hier schon die mittelwert berechnung 2,5 das ergebnis 9:22 das stimmt und dann gucken wir uns mal ein mal heben code an was wir jetzt hier haben wir haben jetzt hier gesagt okay wir wollen jetzt hier 9:30 das element 1 verwenden da zeigt er uns hier den wert 2 an ich denke das hat noch jeder im kopf das ist hier der 22 war hierbei mary element 9:41 2 ist dann entweder 2,5 und beim dritten index ist dann der wert 3 also von daher würde ich sagen das passt hier oben hin variablen können wir uns das auch 9:52 einfach mal angucken wie klappen hierfür noch einmal dass er auf und sehen hier entsprechend die einzelnen variablen plus hier ihren wert zu können wir jetzt 10:02 hier auch machen hier sehen wir jetzt dieses array das fängt ja bei null an also ist hier natürlich der erste index 0 10:10 und hier entsprechend wieder eine 1 und haben dann hier in datentyp also im großen und ganzen würde ich mal sagen nichts besonderes wir können eine rey 10:22 auch in eine struktur packen das habe ich euch mal einmal hier gezeigt habe ich eine struktur wo ich einfach ein single buhl hier mal reingepackt habt 10:30 und eine rallye von dann jetzt hier sogar mal 0 bis 99 pool variablen damit auch man sieht dass es ein bisschen größer werden kann 10:39 gucken wir uns auch mal eben einmal fix an das habe ich nämlich wo habe ich denn jetzt habe ich hier einmal instanziert da seht ihr jetzt 10:47 hier einmal die single variable ball und ihr seht hier das airrail und das können wir auch aufklappen und da seht ja schon da sind ein paar mehr werte drin als wir 11:00 das hier in diesen doch verhältnismäßig kleinen arrays haben gut das sind also erstmal schon mal die grundlagen und da kann man natürlich noch ganz viele 11:11 weitere coole sachen mitmachen und eine besonders interessante sache wie ich finde das ist es so eine rey auch mal mit einer schleife auszuwerten 11:23 wir wollen uns ja jetzt auch mal diesem parallelstruktur ihren text angucken das war doch ein bisschen reinkommen und von daher macht da jetzt an meiner stelle 11:30 auch sinn zu sagen ich stehe jetzt mal einfach ein paar schleifen nein ich ein paar genau eine schleife die vor schleife hier in strukturierten text vor 11:42 und dafür habe ich den kleinen funktionsbausteine gemacht und da haben wir noch eine weitere coole funktion die ich euch zeigen möchte denn es könnte ja 11:53 sein dass ihr so eine generelle funktion haben möchtet um euch eine mittelwert berechnung zu ermöglichen es kann ja sein dass man die an mehreren 12:02 stellen verwenden möchte und dass man da vielleicht auch im vorfeld noch gar nicht so genau weiß wie viele werte möchte ich denn verwenden da kann ich 12:11 natürlich immer ganz guten fixes array als übergabe der definieren kann dann sagen okay mit einem zweiten werk kann ich dann sagen okay wie viele werte 12:19 sollst davon nehmen das kann man aber auch viel eleganter lösen und das ist dann nämlich mit einem essay von variabler länge und wie das funktioniert 12:28 das seht ihr hier auf der seite da habe ich jetzt hier einmal das re angelegt und dann ist ganz wichtig ihr müsst das in dem bereich war in out von 12:39 eurer funktionsbausteine deklaration packen denn sonst geht es nicht und dann ist es auch eigentlich gar kein großes problem wird es anzulegen 12:50 liegt hier im prinzip in out value an vom datentyp array von der entsprechenden vom entsprechenden daten typ den wir verwenden wollte und dann 13:00 gebe ich hier nur ein sternchen an also ihr sagt jetzt hier nicht es ist eine ray von 1 bis 20 oder von null bis hundert können ihr gebt ihr einfachen 13:09 sternchen an und dann könnt ihr nach raise von beliebiger länge der anpacken es gar kein problem 13:18 funktioniert auch relativ einfach ich habe das hier unten mal gemacht ich habe hier den funktions baustein in der termin value habe ich immer instanziert 13:25 in unserem programm als fb me und da habe ich jetzt hier einfach mal dieses jahr mit the elements angepackt könnt ich jetzt hier oben aber auch dieses 13:36 jahr anpacken auch kein problem das nur noch keine werte drin von daher macht das gerade wenig sind aber so würdet ihr das ganze dann auch 13:45 dem funktionsbausteine entsprechend mit geben und dann haben wir aber auch eigentlich schon das nächste problem wir wissen ja noch gar nichts über das 13:53 terrain wir wissen ja noch gar nicht wo wir anfangen können und wo wir enden müssen das ist ja natürlich auch noch mal 14:00 relativ wichtig zu wissen und dafür bietet uns co das ist die funktionen abbauen und blaue band ihr seht ihr einmal hier und mit abbau- und 14:10 da bekommen wir die obergrenze des arrays zurück und mit lauer bound da bekommen wir dann die untergrenze des arrays zurück und damit ist dann halt 14:21 auch unser entsprechend definiert also wir wissen jetzt wirklich was wir vor uns haben und können jetzt alles mögliche damit machen ohne in 14:30 irgendeiner art und weise den speicherbereich essays zu verletzen und dann kommen wir jetzt auch schon zuvor schleifen denn so eine vor schleife die 14:42 bietet sich natürlich jetzt an um für unsere mittelwert berechnung mal die summe zu bilden wir müssen ja die summe über alle 14:49 elemente bilden und das bedeutet wir summieren das element zum beispiel eins auf das segment 2 und nehmen dann im prinzip das ergebnis und summieren da 15:01 noch mal das element 3 auf und so weiter und das ist ja immer so eine repetitive arbeit und das können wir wunderbar schneider machen und das möchte ich euch 15:10 jetzt hier unten einmal zeigen nämlich hier ja kommen wir nun zur vor schleife und die vor schleife die ist natürlich ein ganz coole sache um jetzt unsere 15:21 summen berechnung die wir für die mittelwert berechnung brauchen zu realisieren und dann möchte ich euch jetzt zunächst 15:30 einmal zeigen wie die vor schleife funktioniert die vor schleife die seht ihr jetzt hier die beginnt immer mit vor und endet mit 15:40 einem and vor ähnlich wie die abfrage die beginnt ja auch mal mit und endet mit einem and if und dann wird der code der sich jetzt hier drin befindet 15:53 ausgeführt und er wird nicht nur einmal ausgeführt der wird mehrfach ausgeführt so lange bis ein definiertes ende erreicht ist 16:02 das schöne bei der vorschlag ist einfach auch ihr definiert dieses ende direkt wenn ihr sie programmiert es gibt noch andere schleifen 16:11 da machte das nicht und das ist natürlich bei einer sps immer so ein bisschen ein kleines problem denn wenn dieses ende aus irgendeinem grund nicht 16:21 erreicht wird dann neuer stürzt die sps einfach ab der wirkstoff wird ausgeführt und das kann bei einer vor schleife ich sag mal nicht so schnell passieren 16:33 natürlich könnt ihr vor schleife auch so parametrieren das ist einfach eine sehr lange vor schleife wird und dann eventuell auch wirklich diesen watchdog 16:42 auslösen könnte aber das könnte im vorfeld schon einigermaßen gut ich würde mal sagen steuern könnte sagen okay bis hierhin und nicht weiter ist 16:54 meiner meinung nach von da immer ein bisschen unproblematischer als zum beispiel weil schleife aber gut klar gucken wir uns mal an wie 17:04 das ganze funktioniert also der code der wird jetzt mehrfach ausgeführt und der wird ausgeführt war eine bestimmte ziel variable die habe ich jetzt hier mal de 17:16 la torre genannt und diese ziel variable die zählt jetzt im prinzip die schleifen durch läufe und die lassen wir jetzt mit einem bestimmten wert staaten und das 17:27 ist in unserem fall jetzt einfach der minimum wert des arrays wir wollen ja bei der summe beim ersten wert anfangen und das sehen wir hier 17:35 wir haben jetzt hier die literatur ist gleich die mini rae und das ist ja der wert der uns hier von la bund zurückgegeben wird 17:44 dann müssen natürlich ein ende definieren da muss unsere ende natürlich sein dass ende des race und das sehen wir jetzt 17:53 hier das ganze ist dann ihr verbunden über dieses wort to also vor die ira tor gleich die mini rae tue also zum de max 18:08 dann kommt hier noch ein bei und das gibt uns die schritt größe an denn dieser etat tor der wird jetzt beginnt bei dem wert bei jedem durchlauf 18:21 implementiert also hoch gezielt bis er den wert hier in de max er erreicht hat das ist im prinzip die art und weise wie diese vor schleife definiert ist so und 18:35 dann wird der code hier ausgeführt und für die mittelwert berechnung der fusion berechnung da wollen wir jetzt auf die einzelnen elemente zu greifen und das 18:46 können wir natürlich hier mit dem die literatur der wird in jedem fall hoch gezielt wunderbar machen und dafür eignen sich eher es dann auch wirklich 18:53 sehr gut und bilden jetzt hier die summe und hier am ende geben wir hier den termin value zurück und das ist entsprechend 19:03 hier unsere summe durch die größe des arrays und die größe des arrays die anzahl der elemente die er rechne ich hier ergibt sich dann aus dem maxi mini 19:14 rae und dann immer noch mal +1 dann für das unterste element entsprechend und das schauen wir uns jetzt auch mal an wie das so funktioniert immer mal online 19:25 für wunderbar und wir sehen jetzt hier schon in value ist 2,5 das hat man ja auch eben schon mal entsprechend berechnet und wir sehen jetzt hier 19:40 entsprechend die maxi mini ist ab 3 jahre und ist 1 und dann haben wir hier die size von 3 und berechnen das ganze hier entsprechend wunderbar eigentlich 19:53 ist eine ganz nette geschichte und so sind wir jetzt wirklich auch flexibel mit den größen ich will das noch mal abschließend 20:00 einmal demonstrieren dafür gehe ich jetzt hier mal zurück in mein programm und werde jetzt hier das array mal vergrößern 20:14 das heißt wir haben jetzt eine reihe von 1 bis 4 und mit dem wert 4 das heißt diese mittelwert berechnung die wir dies natürlich ein falsches 20:22 ergebnis bringen denn entsprechend 2,5 da hat sich ja nichts daran geändert aber unser eigentlicher mittelwert ist jetzt 2,88 20:34 und schauen bei uns hier auch mal ein mal im programm an da sehen wir jetzt hier wieder die ray ist gleich max airways gleich vier 20:42 das heißt also unsere abbauen funktion die hat jetzt einen anderen wert bereitgestellt und da könnte da gibt es also auch sehen dass es funktioniert 20:53 wirklich das hat da wirklich flexibel und damit würde ich doch mal sagen sind wir für heute soweit fertig ich denke da habe ich erst 21:02 mal wieder ein bisschen was wo er auch mal ein bisschen was ausprobieren könnt ja wie ihr seht mit schleifen und air race in einer kombination da könnte 21:16 wirklich große datenmengen bearbeiten und er braucht ja eigentlich nicht wirklich viel code dafür also wir haben jetzt eine auf summierung von einer 21:26 beliebigen größe an daten programmiert im prinzip nur mit zwei zeilen code wenn ihr euch jetzt vorstellt werden das alles manuell programmiert also jede 21:38 summierung kooperation untereinander und wir würden jetzt das ganze mal für nrw machen wollen mit 100 variablen dann haben wir schon 21:48 ein stück produziert und vor allen dingen ihr habt ja auch gesehen wenn sich dann mal was ändert an den daten oder wenn die größer und wenn die 21:56 kleiner werden dann müssen wir wieder dran dann müssen was wiederum programmieren und ich denke da haben wir halt möglich auch mit 22:03 airways eine möglichkeit das sehr geschickt zu machen und es auch wirklich fehler toleranz zu machen denn am ende des tages stellt sich unser programm 22:14 ich habe da ja eben alle gesehen auch automatisch ein und das ist meiner meinung nach eine ganz praktische und hilfreiche sache und von daher lohnt es 22:24 sich da wirklich mal einen blick darauf zu werfen wenn ihr dieses video hier praktisch und hilfreich findet dann freue ich mich immer über einen daumen 22:32 nach oben wenn du das video nicht so gut findet dann kein problem daumen nach unten steht euch auch frei dann freue ich mich aber auch über einen 22:41 konstruktiven kommentar was sich in zukunft besser machen könnte denn so können wir alle zusammen den kanal hier auch ein bisschen weiter 22:49 entwickeln und für all diejenigen unter euch die den kanal noch nicht abonniert haben jetzt ist eure chance klickt einfach mal 22:56 auf die glocke und dann würde ich sagen bleibt dran