Tuesday 26 September 2017

Beckhoff Gleitender Durchschnitt


Kontakt und Coil fast in der Steuerung There8217s eine bestimmte Kategorie Produkt, für das you8217re viel besser weg, online zu kaufen. Genauer gesagt, you8217re auf der Suche nach Dingen, die Rohstoffe (aber nicht Dollarspeicher Artikel), langlebig, klein und leicht. Hier sind einige Dinge, wo you8217ll finden ein viel besseres Angebot auf e-Bay, etc .: Brother-kompatible Etikettierung Tape (aka TZ-Tape) so niedrig wie 5cartridge Tintenpatronen Knopfzellenbatterien (führende Marke CR20328217s für weniger als 1 ea.) AAA Duracell Batterien, Packungen von bis zu 100 Autofeuerzeug USB-Adapter (vor allem die hohe Leistung 2,4 Ampere Eins) Alle elektronischen Teile, offensichtlich Für AA-Batterien, anscheinend there8217s Beweise, dass Costco8217s Kirkland Marke AA Batterien sind eigentlich rebranded Duracell Batterien, so kann ich can8217t finden Ein besserer Preis als sie online. Da praktisch alle Elektronikteile in China hergestellt werden, können Sie sie auf AliExpress für extrem niedrige Preise erhalten und Sie können normalerweise freies Verschiffen erhalten. Ich erwerbe regelmäßig Arduino-kompatible oder ESP8266-Boards, Prototyping-Versorgungen, Netzteile und Sensoren Versandhandel von AliExpress mit kostenlosem Versand, alle für weniger als 10, manchmal so niedrig wie 1,80 mit kostenlosem Versand, und der einzige Nachteil ist, dass Sie haben Warten Sie einen Monat oder zwei. Wenn Sie es schneller und it8217s ein populäreres Einzelteil benötigen, es8217s wahrscheinlich there8217s ein kleiner Importeur, der einige für Verkauf auf e-Bucht in Ihrem eigenen Land hat, für eine geringfügige Markup. Dies gilt für Batterien, Ladegeräte, Tinten-und Tonbandkassetten und in der Regel für beliebte Mikrocontroller-Boards. Im vergangenen Jahr arbeitete ich an einem TwinCAT 3 Tutorial. Und mit der Veröffentlichung des 13. Kapitels über die TwinCAT 3 Scope View. I8217m unter Berücksichtigung es 8220complete.8221 I8217ve abgedeckt alle wichtigen Themen, die ich wollte zu decken. Ein solches Tutorial zu schreiben war eigentlich eine Lernerfahrung für mich. Bevor ich irgendeine Aussage über die Software machte, versuchte ich, meine Annahmen zuerst zu validieren, und viele Male erfuhr ich, dass ich vorgefasste Vorstellungen über, wie es funktionierte, das möglicherweise nicht völlig genau gewesen war. Wenn Sie ein TwinCAT 3 Programmierer sind, dann müssen Sie Ihr Werkzeug-Set innen und außen kennen. Wenn you8217re nicht sicher, wie etwas funktioniert, it8217s am besten, um einen schnellen Test und probieren Sie es aus. That8217s einer der Vorteile von PC-basierter Software: Wenn Sie einen Test ausführen möchten, ist Ihr Büro-PC eine Laborumgebung. Schreiben Sie etwas Code und führen Sie es aus. Vielen Dank an alle, die Feedback zu den bestehenden Abschnitten gegeben haben, und denen von euch, die mich weiterhin drängten, weiter zu schreiben. Ich hoffe aufrichtig, dass dies fehlende Link, um Menschen aus der Welt der traditionellen PLCs in die interessantere und letztlich mächtigere Welt der PC-basierte Steuerung zu nehmen. Es sieht aus wie TwinCAT 3 hat eine tragfähige Zukunft vor sich. Das Interesse scheint im Laufe der Zeit zu wachsen (nach Google Trends ohnehin): Das macht TwinCAT 3 zu einer wertvollen Fähigkeit zu lernen, wenn you8217re ein Integrator und eine interessante Technologie für bestehende Anlagen zu untersuchen. Starren Sie den Lauf eines großen Automatisierung Programmierung Projekt ist einschüchternd. Es ist schwer zu wissen, wo ich anfangen soll. Selbst wenn Sie ein paar vorher getan haben, sind Sie beim nächsten Mal nur geringfügig sicherer. Ich habe ziemlich viele große Automatisierung Programmierung Projekte unter meinem Gürtel, so dass ich glaube, ich kann den Prozess ein wenig verallgemeinern. Hier geht: 1. Holen Sie sich die Prints There8217s fast keinen Sinn zu starten, bis Sie eine fast endgültige Reihe von elektrischen Zeichnungen zu programmieren. Wenn Sie sie noch nicht haben, drücken Sie für sie, und gehen Sie etwas anderes produktiv, bis Sie sie erhalten. 2. Erstellen Sie eine funktionale Spezifikation Sie don8217t müssen immer schreiben eine funktionale Spezifikation, aber es muss zumindest sehr deutlich in Ihrem Kopf existieren. Wenn an irgendeinem Punkt Sie wissen genau, wie die Maschine soll in unerträgliches Detail arbeiten, aufhören, Code schreiben und gehen Sie es herausfinden. Fragen Sie Stakeholder, sprechen Sie mit den Betreibern, was auch immer es braucht. Funktionale Spezifikationen sind am besten als eine Liste von 8220user stories8221 geschrieben. Wenn you8217re nicht sicher, was eine funktionale Spezifikation aussehen sollte, schauen Sie sich Painless Functional Spezifikationen von Joel Spolsky. 3. Shamelessly Kopieren Identifizieren Sie, was andere Projekte finden Sie mit Logik, die Sie stehlen können. Jeder Code, der in einer anderen Maschine arbeitet, hat den Vorteil, dass er bereits debuggt wird. Don8217t erfinden das Rad neu. (Zur gleichen Zeit, nie blind kopieren Logik, ohne es zu verstehen. Kopieren Sie den Code durch erneute Eingabe ein Sprosse auf einmal ist noch schneller als es von Grund auf neu zu schreiben, und it8217s eine Form der Software-Überprüfung.) 4. Strukturieren Sie Ihr Projekt Jetzt brechen Sie die Leiterlogik-Programmiersoftware auf und beginnen mit der Erstellung Ihres Projekts. Wählen Sie Ihre CPU-Typ, die IO-Karten auf der Grundlage der elektrischen Zeichnungen. Ordnen Sie Ihre Eingaben zu. Planen Sie Ihr Programm, indem Sie Programme oder Routinen für jede Funktionseinheit der Maschine erstellen. Richten Sie Ihre Störungszusammenfassungssprossen und Ihre Alarmlogik ein. 5. Schreiben Sie den Manuellen Modus Logik PLC-Logik ist in der Regel geschrieben 8220bottom up.8221 Manual-Modus-Logik ist die niedrigste Ebene der Logik, weil es direkt mit einzelnen Funktionen in der Maschine. Vorschubzylinder. Zylinder einfahren. Hauptachse. Jog-Achse. Während you8217re Schreiben der manuellen Modus, ist dies, wenn Sie extreme Sorge machen, dass die Aktionen sind verriegelt, so dass die Maschine can8217t Absturz. Wenn you8217re mit dem Five Rung Pattern. Das bedeutet Aufmerksamkeit auf das, was in die sichere Sprosse geht. Muss der Zylinder A immer vorfahren, bevor Zylinder B vorrücken kann Die sicheren Sprossen sollten das reflektieren. Stellen Sie sicher, dass auch im Handbetrieb der Bediener (oder Sie) das Gerät zerbrechen kann. Achten Sie darauf, Ihre Fehler und Alarme in den entsprechenden Fehler Zusammenfassung Sprossen und Alarmlogik Haken. 6. Schreiben der Teilverfolgungslogik Nachdem der manuelle Modus abgeschlossen ist, schreiben Sie die Logik, die Teile (und ihren Zustand) durch das Gerät verfolgt. Denken Sie daran, sollten Sie in der Lage sein, die Maschine im manuellen Modus laufen, und die Teilverfolgung sollte (idealerweise) ordnungsgemäß funktionieren. Ich weiß, das isn8217t immer der Fall aber erstaunlich Teil Tracking im manuellen Modus kann 95 der Zeit arbeiten. Das bedeutet, dass die Teileverfolgung auf dem Zustand der Maschine basiert. Das Schließen des Greifers mit dem Roboter in der Aufnahmestellung und das im Vorrichtungssensor anliegende Teil sollte ein Stück 8220 einklemmen, das daran erinnert, dass der Greifer einen Teil darin hat. Sobald you8217ve Ihre Teilverfolgungslogik geschrieben haben, gehen Sie zurück und verwenden Sie die Teileverfolgungs - und Statusbits, um Ihre sicheren Sprossen zu konditionieren. Don8217t lassen Sie den Bediener (oder Sie) fälschlicherweise öffnen Sie den Greifer, wenn der Greifer hat ein Teil und isn8217t in einer sicheren Position, um das Teil loszulassen. Natürlich müssen Sie möglicherweise eine Möglichkeit hinzufügen, diese manuell überschreiben (that8217s, was Ausgabe forcing für erstellt wurde), aber in den meisten Fällen möchten Sie unsachgemäße Operation zu verhindern. Ein Teil des Schreibens der Teilverfolgungslogik ist das Hinzufügen von 8220ghost buster8221 Bildschirmen. Die Bediener müssen oft Teile aus einer Zelle entfernen, und wenn die Maschine ihre Entfernung entdecken kann, müssen Sie dem Bediener eine Möglichkeit geben, diese 8220Ghosts zu löschen.8221 An diesem Punkt sind Sie tatsächlich bereit, das Programm auszuladen und das Testen auszuprobieren Die Maschine elektrisch und mechanisch. Während it8217s ideal, um ein ziemlich vollständiges Programm haben, wenn Sie vor Ort gehen, wissen wir alle, dass8217s nicht immer ganz möglich. Zumindest möchten Sie zu diesem Punkt vor dem Start zu erhalten beginnt. 7. Schreiben Sie die Auto-Modus-Logik Die Komplexität Ihrer Auto-Modus-Logik hängt davon ab, welche Art von Maschine you8217re Programmierung. You8217ll benötigen immer einen Zyklusstart und eine Zyklusstoppfunktion. Selbst wenn Sie im Auto-Modus, Sie in der Regel don8217t wollen, dass die Maschine zu starten, bis der Betreiber spezifisch sagt es zu starten. Sobald it8217 läuft, nennen wir diesen 8220in-Auto-Zyklus.8221 In einfachen Maschinen können Sie die Auto-Logik schreiben, indem Sie die Trigger-Sprossen in Ihrer Fünf-Rung-Logik ausfüllen. Beginnen Sie mit der In-Cycle-Kontakt am Anfang der Sprosse, und dann Schreiben von Logik nach dem, was drückt, wenn die Aktion stattfinden sollte. Beispielsweise könnte ein Vorlauf-Ausschußteil-Zylinderschleifer so einfach sein wie Im Zyklus, Teil-Gegenwart und Teil-Zurückgewiesen. Solange das Part-Present-Tracking-Bit gelöscht wird, sobald sich der Zylinder in der vorgeschobenen Position befindet, ist dies die gesamte Auto-Modus-Logik, die Sie für diese Bewegung benötigen. Haben Sie die zurückziehen Trigger Sprosse im Zyklus, kein Teil vorhanden und nicht zurückgezogen. Kompliziertere Maschinen benötigen eine kompliziertere Auto-Modus-Logik. Wenn Ihre Maschine eine Reihe von Schritten durchführen muss (auch wenn einige von ihnen parallel sind), sollten Sie das Step Pattern berücksichtigen. Wenn Ihre Maschine zwischen mehreren möglichen Handlungsoptionen (allgemein gesehen in einem Speicher-und Retrieval-System) wählen, dann erwägen, die Mission Pattern. It8217s schwer zu schreiben richtige Logik. Überprüfen Sie Ihre funktionale Spezifikation, Punkt für Punkt, und stellen Sie sicher, dass Ihre Logik alle Anforderungen erfüllt. Überprüfen Sie Ihre Logik auf Fehler. Ein neuer Blick entdeckt oft falsche Annahmen, Tippfehler und völlige Fehler. Je früher Sie Probleme finden und beheben, desto einfacher sind sie zu beheben. Machen Sie eine Liste von allem, was Sie während des Startvorgangs tun müssen. Das Inbetriebnehmen einer Maschine ist zeitaufwendig und daher teuer. Alles, was Sie tun können, um vorzubereiten spart Ihnen Zeit und Geld. Viel Glück und halten Sie Ihre Finger aus der Prise Punkte Diese Informationen ist für einen Fanuc R30-iA, RJ3-iA oder RJ3-iB-Controller, könnte aber mit anderen arbeiten. Wenn Sie auf der Suche nach einem Weg, um die Roboter-Welt TCP-Position (X, Y, Z, W, P, R) über die PLC, it8217s nicht wirklich, dass schwierig. Der Roboter kann die aktuelle gemeinsame und weltweite Position in Variablen zur Verfügung stellen, und Sie können sie zu einer Gruppenausgabe in einer Hintergrundlogikaufgabe kopieren. Es gibt jedoch eine Einschränkung: Die Werte werden nur aktualisiert, wenn Sie ein Programm ausführen. Sie donl217t aktualisieren, während Joggen. Allerdings gibt es ein Work-around für diese auch. Zuerst sollten Sie sicherstellen, dass die Funktion zum Kopieren der Position in Variablen aktiviert ist. Um zum Variablenbildschirm zu gelangen, verwenden Sie MENU, 0 (Weiter), 6 (System), F1 (Typ), Variablen. Finden Sie diese Variable und setzen Sie sie auf 1 (oder True): SCRGRP1.mposenb Der Name dieser Variablen ist Aktuelle Position aus dem Maschinenzyklus Erstellen Sie nun ein neues Roboterprogramm, und schreiben Sie in folgendes: GO1: X POS (SCRGRP1.MCHPOSX10) GO2: Y POS (SCRGRP1.MCHPOSY10) GO3: Z POS (SCRGRP1.MCHPOSZ10) GO4: W ANG (SCRGRP1.MCHPOSW100) GO5: P ANG (SCRGRP1.MCHPOSP100) GO6: R ANG (SCRGRP1.MCHPOSR100) Beachten Sie, dass I8217ve multipliziert X-, Y - und Z-Positionen um 10, so müssen Sie in Ihrer SPS 10 teilen. Ebenso multiplizierte ich die W-, P - und R-Winkel um 100, also durch 100 in der PLC dividieren. Um dieses Programm im Hintergrund auszuführen, verwenden Sie MENU, 6 (Setup), F1 (Typ), 0 (Weiter), BG Logic. Konfigurieren Sie es, um Ihr neues Programm als Hintergrundtask auszuführen. Offensichtlich müssen Sie diese Gruppenausgänge an die SPS senden. EthernetIP ist dafür toll, aber man kann auch festverdrahtete Interlocks verwenden. Sie müssen sicherstellen, dass Sie genug Bits haben, um die gesamte Strecke der Bewegung zu behandeln. Ein 16-Bit-Integer sollte ziemlich gut funktionieren für alle diese. Beachten Sie, dass der Roboter glücklicherweise negative Zahlen an eine Gruppenausgabe als two8217s-Komplement sendet, so stellen Sie sicher, dass Sie den Eingang der SPS als signierte 16-Bit-Ganzzahl abbilden (a. k.a. INT in den meisten SPS). Für die X-, Y - und Z-Positionen ergibt sich eine 16-Bit-Ganzzahl von 3276,7 mm bis -3276,8 mm des Gesamtbereichs. Für die W-, P - und R-Winkel erhalten Sie 327,67 Grad bis -327,68 Grad. Für die meisten Anwendungen ist dies gut (denken Sie daran, dies ist TCP, nicht gemeinsame Winkel). Bitte prüfen Sie, ob diese geeignet sind. Wie ich schon sagte, diese Zahlen don8217t aktualisieren, während you8217re Jogging, und won8217t Update, bis der Roboter startet eine Verschiebung in einem Programm. Ein kleiner Trick besteht darin, zu Beginn Ihres Programms eine Umstellung auf die aktuelle Position vorzunehmen: PR100: SCRATCHLPOS J PR100: SCRATCH 10 FINE Dies beginnt mit dem Senden der Position, ohne den Roboter zu bewegen. In meinen Programmen gebe ich normalerweise eine Schleife ein, die auf eine Eingabe von der SPS wartet, und innerhalb dieser Schleife drehe ich ein DO-Bit ein und aus. Die PLC erkennt dies als 8220ready für den Befehl 8221, und solange die PLC dieses Pulsing sieht, weiß es, dass das Programm läuft und die Positionsdaten gültig sind. Ein weiterer Trick, den Sie verwenden können, ist zu erkennen, wenn der Roboter gerüttelt wurde: Der Name dieser Variable ist Robot jogged. Die Beschreibung aus dem Handbuch lautet: 8220Wenn auf TRUE gesetzt, wurde der Roboter seit der letzten Programmbewegung gejoggt. Durch die Ausführung eines beliebigen Anwenderprogramms wird das Flag zurückgesetzt.8221 So wird die Weltposition des TCP in die SPS übertragen. Wenn Sie nur gemeinsame Winkel wollen, können Sie SCRGRP1.MCHANGn als Variable verwenden, wobei 8220n8221 die gemeinsame Nummer ist. Wichtige Notiz . Das IO wird sich wahrscheinlich asynchron zum Programmscan ändern, also was Sie tun wollen, ist eine Kopie der X-, Y-, Z-, W-, P-, R-Werte, die in die SPS kommen, zu vergleichen und die aktuellen Werte mit den Werten der letzten zu vergleichen Scan. Wenn sie haven8217t geändert, dann aktualisieren Sie Ihre tatsächlichen Werte, sonst werfen sie weg, weil sie möglicherweise nicht gültig. Wenn Sie einen schnellen Scan-PLC und IO, dann sollten Sie immer noch in der Lage, mit dem Roboter zu halten, auch während einer schnellen Bewegung. Wenn Sie eine langsame Scan-Zeit auf Ihrer SPS haben, können Sie nur gültige stabile Werte erhalten, wenn der Roboter gestoppt wird. Nun, was ist, wenn Sie wissen wollen, was die TCP-Position ist relativ zu einem Ihrer Benutzer-Frames Der Roboter-Controller doesn8217t scheinen Ihnen Zugriff auf diese, aber die PLC kann zumindest berechnen die X-, Y-und Z-Positionen der TCP in Ihr Benutzerrahmen selbst, angesichts der Weltposition und der Benutzerrahmenparameter. Zuerst müssen Sie die genauen Benutzerrahmenparameter finden. Unter dem normalen Rahmenbildschirm können Sie nur einen Dezimalpunkt der Genauigkeit erhalten, aber Sie benötigen die vollen 3 Dezimalpunkte, damit Ihre Zahlen in der SPS mit der im Roboter angegebenen Benutzerrahmenposition übereinstimmen. Sie finden diese genauen Positionen in einer Variablen: verwenden Sie MENU 8211 0,6 (SYSTEM) 8211 F1 (TYP) 8211 Variablen 8211 MNUFRAME1,9 8211 F2 (DETAIL). Der zweite Index in eckiger Klammer ist die Frame-Nummer, also ist MNUFRAME1,1 Frame 1 und MNUFRAME1,2 ist Frame 2. Kopieren Sie diese Zahlen genau. Hier8217s die Mathematik für die Berechnung der TCP relativ zu Ihrem Benutzer-Frame. Alle Variablen sind LREAL (das ist eine 64-Bit-Gleitkomma-Variable). Ich don8217t wissen, wenn Sie eine regelmäßige 32-Bit-Float verwenden können oder nicht. Ergebnis ist Ihr TCP im Benutzerframe. Punkt ist Ihr Punkt im Weltrahmen (vom Roboter) und Rahmen ist die genauen Benutzerrahmendaten, die Sie von der MNUFRAME-Variablen kopierten. Ergebnis. Xmm: Punkt. Xmm - Rahmen. Xmm Ergebnis. Ymm: Punkt. Ymm - Rahmen. Ymm Ergebnis. Zmm: Punkt. Zmm - Rahmen. Zmm Radiant: DegreesToRadians (-Frame. Wdeg) CosOfAngleW: COS (RadiansW) SinOfAngleW: SIN (RadiansR) SIN (RadiansR) SIN (RadiansR) SIN (Radians) Radius: SIN (Radians) Radius: SIN (Radianer) Radianer: DegreesToRadians (-Frame. Rdeg) Sinusfehler: Als W (um Z), P (um Y), R (um X) AROUND Z temp: Ergebnis. Xmm Ergebnis. Xmm: Ergebnis. Xmm CosOfAngleR - Ergebnis. Ymm SinOfAngleR Ergebnis. Ymm: Ergebnis. Ymm CosOfAngleR temp SinOfAngleR AROUND Y Temp: Ergebnis. Zmm Ergebnis. Zmm: Ergebnis. Zmm CosOfAngleP - Ergebnis. Xmm SinOfAngleP Ergebnis. Xmm: Ergebnis. Xmm CosOfAngleP temp SinOfAngleP AROUND X temp: Ergebnis. Ymm Ergebnis. Ymm: Ergebnis. Ymm CosOfAngleW - Ergebnis. Zmm SinOfAngleW Ergebnis. Zmm: Result. Zmm CosOfAngleW temp SinOfAngleW Beachten Sie, dass DegreesToRadians () nur PIdeg180 ist. Führen Sie das auf Ihrer SPS aus und prüfen Sie, ob die Werte in Ihrer Ergebnisvariablen mit der TCP-Position des Benutzerrahmens übereinstimmen, die auf dem Teach-Anhänger angegeben ist. Ich habe haven8217t um die Berechnung der W, P und R Winkel des TCP in User-Frame noch. Derzeit sehe ich nur W, P und R im Weltrahmen an, wenn ich wissen muss, ob I8217m 8220p881 etwas. Wenn Sie die Mathematik für W, P und R arbeiten, schätzen I8217d wirklich, wenn Sie es teilen konnten. In den letzten Jahren interessierte ich mich für die Auswirkungen der Automatisierung auf unsere Wirtschaft und unsere Gesellschaft. Im Laufe der Geschichte jeden Fortschritt in der Technologie hat mehr Wohlstand, Gesundheit und Chance, so ziemlich jeder gebracht. Mit jeder Revolution haben die Menschen ihre Arbeit verändert, aber ihr Leben wurde deutlich besser. Als die Betriebe mechanisierten, zogen die Arbeiter in die Stadt ein und erhielten Fabrikarbeitsplätze, und Henry Ford8217s Fließbänder nutzten diese Arbeit zu großem Nutzen. Frühe Fabriken benötigten Arbeit in großen Mengen und industrielle Prozesse wurden effizienter bei der Nutzung der Arbeit, der Wert der menschlichen Arbeit stieg und die Nachfrage erhöht. Also bezahlt. Fabrikarbeiter oben durch die 708217s konnten ein nettes Haus leisten, um eine Familie, ein großes Auto, und sogar ein Boot oder nette Ferien aufzuwerfen. Seit den 708217 jedoch ist die Kaufkraft eines Fabrikarbeiters oder sogar eines Bankschuldners ziemlich flach. Dies sind zwei Berufe, die die meisten Fortschritte in der Automatisierung in den letzten 30 Jahren gesehen haben, durch Industrieroboter und automatisierte Teller. Wenn die Automatisierung die Arbeitnehmer produktiver macht, warum sehen wir das, was in Kaufkraft umzusetzen ist? Hier gibt es zwei Arten technischer Verbesserungen. Ein Landwirt mit einem Traktor ist sehr produktiv im Vergleich zu einem mit einem Pferd und Pflug. Die vertriebenen Landarbeiter, die in die Stadt gingen, erhielten die Werkzeuge der industriellen Revolution: Dampfmaschinen, Motoren, Pumpen, Hydraulik und so weiter. Diese Technologien verstärkten den Wert der menschlichen Arbeit. Das ist die erste Art der technologischen Verbesserung. Die zweite Art ist die automatisierte Teller oder der Schweißroboter. Die ältere Technologie fügt auch den geringsten Fachkräften einen Mehrwert hinzu, aber die neue Technologie reduziert ihren Wert und die neuen Arbeitsplätze erfordern deutlich höhere Fertigkeiten. Es gibt etwas über diese neue Revolution, die anders ist. Die Nachfrage nach gering qualifizierten Arbeitskräften trocknet aus. Die zunehmende Kluft zwischen den 8220haves8221 und den 8220have-nots8221 wurde ausführlich dokumentiert. Einige teilen ist gut und fördert die Wirtschaft und Produktivität. Zu viel Trennung ist ein Rezept für erhebliche Probleme. I8217m nicht der einzige, der sich Sorgen um diese Frage machte, und da ich ihm in den letzten Jahren gefolgt war, war ich überrascht über die Höhe des Interesses an einem garantierten Mindesteinkommen oder einem solchen Plan. Grundsätzlich geht es darum, alle einkommensschwachen Unterstützung Plan wie soziale Sicherheit, Wohlfahrt, Mindestlohngesetze, etc. zu befreien und die Schaffung eines einzigen universellen monatlichen Nutzen, dass jeder Anspruch hat. Einige Leute sprechen über eine Zahl so hoch wie 24.000 pro Jahr pro Erwachsener. Angesichts der Tatsache, dass die Armutsgrenze 2015 in den USA knapp unter 12.000 für einen einzelnen Erwachsenen ist, können Sie sehen, dass 24.000 pro Erwachsener nur eine geringe Menge ist. Zum Vergleich, ein wenig Googling sagt mir, dass das US-BIP pro Kopf etwa 55.000. Denken Sie für eine Sekunde darüber nach. You8217re reden über die Gewährleistung fast 45 der Produktivität des Landes gleichmäßig auf alle Erwachsenen verteilt werden. Man geht davon aus, Sie würden auch einige zusätzliche Geld pro Kind in einem Haushalt, aber fair zu sein, die 8220per capita8221 Figur umfasst auch Kinder. It8217s möglich. Sicher scheint ein bisschen verrückt. Ist es praktisch Won8217t einige Leute wählen, nicht zu arbeiten Wird die Produktivität nach unten gehen Es stellt sich heraus, dass wir einige experimentieren mit dieser Art von Programm in Kanada namens MINCOME getan haben. Die Ergebnisse waren im Allgemeinen positiv. Es gab einen kleinen Rückgang in Stunden von bestimmten Leuten gearbeitet, vor allem neue Mütter und Jugendliche. Diese Kosten wurden in anderen Bereichen ausgeglichen: 8220 in der Periode, in der das Ministerium verwaltet wurde, sanken die Krankenhausbesuche um 8,5 Prozent mit weniger Arbeitsunfällen und weniger Notfallbesuchen bei Autounfällen und häuslichem Missbrauch.8221 Mehr Jugendliche schlossen ein. Es gab weniger psychische Erkrankungen. I8217m fiskalisch konservativ, aber I8217m meistens pragmatisch. It8217s nur meine Jahre der Belastung durch Automatisierung, Technologie und das Arbeiten in den Fabriken, die mich diese Fragen stellen lässt. Nicht nur, dass ich glaube, dass die Menschen beitragen sollten, glaube ich, dass die Menschen für ihr eigenes Glück und Wohlbefinden beitragen müssen. That8217s, warum ich don8217t denken, zahlende Leute zu Hause zu sitzen ist die ultimative Lösung. Der Elefant im Raum ist dies: Wenn die Technik verbessert wird, wird ein größerer Teil der Bevölkerung einfach nicht arbeitsfähig sein. Da habe ich es gesagt. Ich weiß, daß es ein beunruhigender Gedanke ist. Unsere Gesellschaft ist um das Gegenteil dieser Idee strukturiert. Männer sind besonders unter Druck zu arbeiten. Die Mehrheit des Status, den Männern in unserer Gesellschaft geboten wird, stammt aus ihrem Verdienstpotenzial. Der soziale Druck wäre noch da, um zu arbeiten, auch als Ergänzung zu einem garantierten Mindesteinkommen, so dass wir noch etwas für diese Menschen finden müssen. Vielleicht, wenn wir erweitern die akzeptierte Rolle der Männer in der Gesellschaft dann können wir füllen, dass die Notwendigkeit mit Freiwilligenarbeit. Könnte sein. What8217s die rechte Antwort, die ich don8217t weiß. Aus Mangel an einem besseren Begriff, war die 8220American Dream8221 für jedermann zugänglich, wenn Sie bereit waren, hart zu arbeiten und reinvestieren diese Anstrengung in sich. Nicht jeder tat das, aber viele Menschen schufen erhebliche Vermögen für sich nach dem Starten im Lager und arbeiten ihren Weg nach oben. Diese Sicherheit gab den Menschen die Bereitschaft, Risiken einzugehen und unternehmerisch zu sein. Die Befürworter der Idee sagen, dass ein Mindesteinkommen würde bringen, dass innovative Kante. Unternehmer konnten versuchen, neue Ideen wiederholt, bis sie eine, die gearbeitet, und nicht um ihre Familie hungern Sorgen. Mit Ihren grundlegenden Notwendigkeiten erfüllt, könnten Sie beginnen, Ihr Potenzial zu verwirklichen .. Ich weiß, dass, wie wir weiter unten auf dieser Straße der zunehmenden Automatisierung, können wir verlassen einen größeren und größeren Anteil der Bevölkerung ohne die grundlegenden Ressourcen, die sie brauchen, um zu überleben. Erwarten Sie, dass sie ihre eigenen Nahrung anbauen Auf welchem ​​Land erwarten wir, dass sie einen Job machen, den ich einen Roboter programmieren könnte, wenn der Roboter durchschnittliche Kosten nur 10.000Jahre ist Haben Sie einige wertvolle Arbeit, die wir sie umschulen können, um zu tun Eines, das genug bezahlt, um eine Familie zu unterstützen, schau ich auch nicht wie die Alternativen, aber es ist besser als eine bewaffnete Revolte. Kontakt und Coil Fast Control TwinCAT 3 Tutorial: Strukturierter Text TwinCAT 3 beinhaltet alle fünf IEC-61131-3 Sprachen: Ladder Diagramm, Strukturierter Text, Funktionsblockdiagramm, Ablaufdiagramm und Anweisungsliste. Wenn you8217re aus der Allen-Bradley Welt kommen dann offensichtlich Ladder Diagramm wird Ihre bequemste Sprache sein, aber ich erwarte, dass you8217ll auch die Verwendung von strukturierten Text machen wollen. In der Tat, Beckhoff selbst in der Regel präsentieren Structured Text als Go-to-Sprache für die Programmierung in TwinCAT 3. Ich bevorzuge die meisten meiner Programme in Ladder-Diagramm aus den offensichtlichen Gründen: Leichtigkeit der Fehlerbehebung und die Fähigkeit der Elektriker, online mit dem gehen Und debuggen. Allerdings können wir vergessen, dass alte Sprichwort, 8220 verwenden das richtige Werkzeug für den Job, 8221 und es gibt Zeiten, wenn Structured Text ist das richtige Werkzeug, und Ladder-Diagramm ist nicht. Strukturierter Text hat Ähnlichkeiten mit Pascal oder BASIC (zumindest nachdem sie das Konzept der Zeilennummern von BASIC entfernt haben). Die am meisten anwendbare Eigenschaft von Structured Text für uns sind LOOP s. Die FOR-Schleife Stellen Sie sich für einen Moment vor, dass Sie ein Array mit 1000 REAL-Datenwerten haben und den Durchschnitt dieser Werte berechnen möchten. Die Formel ist ziemlich einfach: fügen Sie sie nur auf und teilen durch 1000. Offensichtlich dies stellt einige Schwierigkeiten in Leiter-Diagramm, aber in strukturierten Text, können wir einfach eine FOR-Schleife. Beginnen Sie mit dem Erstellen einer neuen Funktion. Nennen Sie es AverageOf1000 und stellen Sie sicher, dass Sie eine Funktion mit dem Rückgabetyp von REAL auswählen. Und Strukturierter Text (ST) in der Dropdown-Liste Implementierungssprache: Klicken Sie auf Öffnen. Jetzt haben Sie eine leere Strukturierte Text-Funktion: Wir könnten das Array als Eingabe übergeben, aber wenn Sie sich aus dem letzten Abschnitt erinnern, würde das Kopieren des gesamten Arrays bei jedem Aufruf dieser Funktion bedeuten, was die Scanzeit negativ beeinflussen könnte. Es ist besser, große Datenstrukturen wie diese durch Verweis zu übergeben, was bedeutet, dass wir es als VARINOUT-Variable deklarieren: Als nächstes deklarieren Sie einige lokale Variablen: Eins, um die Summe der Werte zu speichern, und ein anderes, um ein Index zu sein, in dem wo8217re auf In zeigt Das Array. Nun können wir unsere Logik schreiben, die aus einer FOR-Schleife und einer Divisionsoperation besteht: In Zeile 1 initialisiert sie den Wert der Variablen Summe auf 0. Beachten Sie, dass der Operator die Zuweisung bedeutet. Er berechnet den Ausdruck auf der rechten Seite (der RValue) und speichert ihn in der Variablen auf der linken Seite (der LValue). Beachten Sie auch, dass jede Anweisung mit einem Semikolon endet. Dies ist wichtig und you8217ll erhalten einen Syntaxfehler, wenn Sie don8217t enthalten (die Ausnahme ist das Semikolon am Ende der Zeile 4, die optional ist, aber häufig in vielen strukturierten Text Beispiele enthalten). Die Zeilen 2 und 4 definieren die FOR-Schleife. Zeile 2 definiert eine Schleifenindexvariable (in diesem Fall Index genannt), gefolgt von einem Zuordnungssymbol (:). Dies bedeutet, dass die Index-Variable die Werte von 1 bis 1000 annimmt und BY 1 bedeutet, dass sie mit 1 gezählt wird. Die Zeilen zwischen 2 und 4 sind das, was mit jedem Indexwert ausgeführt wird. Wenn Sie die Laufzeit ausführen, führen Sie diese Logik aus, was Sie sehen (grob): Index auf 1 setzen Zeile 3 ausführen Index auf 2 setzen Zeile 3 ausführen Index auf 3 setzen Zeile 3 ausführen Index auf 4 setzen Zeile 3 auf Index setzen 5 Zeile ausführen 3 8230 Index auf 999 setzen Zeile 3 ausführen Index auf 1000 setzen Zeile 3 ausführen Wie Sie sehen können, können Schleifen einen erheblichen Einfluss auf die Scanzeit haben, zumal die Anzahl der Iterationen hoch wird. Wenn Sie TwinCAT 3 auf einem modernen PC laufen lassen, dann 1000 Iterationen isn8217t zu schlecht, aber das Ausführen einer Million Iterationen auf einem 2 GHz-PC wird wahrscheinlich ein Minimum von 0,5 Millisekunden und that8217s, ohne etwas in der Schleife zu nehmen. Sie müssen sich dessen bewusst sein und entsprechend programmieren. Wenn Sie durchschnittlich die Liste der letzten 100 Messwerte, don8217t noch Sorge darüber, aber wenn you8217re tun mathematisch schwer Berechnung auf Tausende von Datenpunkten, bewusst sein, dass es vielleicht zu viel Arbeit in einer Scan-Zeit zu tun. Zeile 5 nimmt die Summe und dividiert durch 1000, wobei das Ergebnis dem Rückgabewert der Funktion zugewiesen wird. Beachten Sie, dass ich einen Dezimalpunkt auf den Wert 1000,0 und ich habe dies, um den Leser daran erinnern, dass I8217m Umgang mit Gleitkommazahlen hier. Dies ist eine Stilwahl. Sie don8217t müssen es tun. Die WHILE-Schleife (und IFTHENELSE-Blöcke) Eine weitere Schleifenart ist die WHILE-Schleife. Anstatt eine feste Anzahl von Malen wie eine FOR-Schleife auszuführen, kann sie solange ausgeführt werden, wie eine Bedingung wahr ist. Zum Beispiel sagen let8217s, dass wir den ersten Index in einem Array finden möchten, dessen Wert größer als ein Wert ist: Der Zweck dieser Funktion besteht darin, ein Array mit 1000 Werten zu durchsuchen und den ersten Index zurückzugeben, wobei der Wert größer als ein Schwellenwert ist . Wenn es keine Werte größer als die Schwelle findet, gibt es 0 zurück, was ein ungültiger Index ist. Zeile 1 initialisiert ein boolesches Flag, Gefunden. Zu FALSE. Da es sich um eine Funktion handelt, ist it8217s nicht wirklich notwendig, da der Wert bei jedem Aufruf der Funktion auf false initialisiert wird, aber wenn es sich um einen Funktionsblock handelt, dann wollen Sie diese Zeile einbeziehen, da der Wert von Anruf zu Anruf beibehalten wird . Zeile 2 initialisiert die Index-Variable auf den ersten Array-Index (1). Die Zeilen 3 und 9 definieren die WHILE-Schleife. Die Zeilen 4 bis 8 werden wiederholt ausgeführt, solange der Ausdruck in Zeile 3 den Wert true zurückgibt. Wie Sie sehen können, wir Schleife, bis entweder wir es finden, oder der Index übergibt die obere Schranke des Arrays. Die Zeilen 4 bis 8 umfassen einen IFTHENELSE-Block. Wenn der Ausdruck in Zeile 4 wahr ist, führt er Zeile 5 aus. Wenn der Ausdruck auf Zeile 4 falsch ist, führt er Zeile 7 stattdessen aus. Um zu veranschaulichen, wie dies funktioniert, nehmen wir an, dass die Werte im Array 25, 50, 75, 100, 125 usw. sind. Nehmen wir auch an, dass Threshold 80 ist. Wir erwarten, dass die Funktion den Wert 4 zurückgibt 2 Sätze Index auf 1 Zeile 3 wird auf true gesetzt, da Found false und Index 1 ist. Zeile 4 auf false (25 ist nicht größer als 80) Zeile 7 Setzt den Index auf 2 Line 3 auf true, weil Found is false und Index 2 ist Zeile 4 setzt auf false (50 ist nicht größer als 80) Zeile 7 setzt Index auf 3 Zeile 3 wertet auf true, weil Found false und Index ist 3 Zeile 4 auf false (75 ist nicht größer als 80) Zeile 7 setzt Index auf 4 Zeile 3 wird auf true gesetzt, da Found false und Index ist 4 Zeile 4 wird als true ausgewertet (100 ist größer als 80) Zeile 5 Sätze Found to true Zeile 3 gibt false aus, weil Found is true Zeile 11 liefert true Rückgabewert der Funktion auf 4 (weil Index den Wert 4 hat) Während dies eine vollkommen vernünftige Funktion ist, gibt es auch einige Probleme damit. Zunächst ist die Abtastzeit ziemlich variabel. Die Worst-Case-Scan-Zeit ist, wenn der Wert isn8217t gefunden, und es gibt 0 zurück. In diesem Fall iteriert durch das gesamte Array. Im besten Fall gibt es 1. Variable Scan-Zeiten können zu Problemen führen, wenn der schlimmste Fall nie getestet wird, oder wenn Sie eine Menge von Funktionen wie diese und there8217s einige teuflischen Fall, wo alle von ihnen haben, um den schlimmsten Fall auf der Gleichen Scan, und Sie überschreiten Ihre zulässige Scan-Zeit. Zweitens ist die Logik komplex. Einige von euch könnten mich zum Lachen auslachen. Wenn you8217re ein PC-Programmierer Code in C oder BASIC dann die Funktion oben ist eigentlich ganz einfach, aber in der SPS-Programmierung haben wir eine abnormale Betonung auf Einfachheit. Wir wollen Logik, die offensichtlich richtig ist, wenn wir es betrachten, und die obige Funktion isn8217t offensichtlich korrekt, es sei denn, Sie geben ihm eine erhebliche Menge an Analyse. Um es zu analysieren, müssen Sie wirklich 8220play computer8221 und gehen durch mindestens 2 verschiedene Szenarien: eine, wo der Wert gefunden wird, und eine, wo it8217s nicht gefunden. Früher in diesem Abschnitt Ich sprach über Erwartung Elektriker zu gehen online mit unseren Programmen und tun Fehlerbehebung. Ein Elektriker kann Leiterdiagramm verstehen, und mit ein wenig Arbeit können sie wahrscheinlich das FOR-Loop-Beispiel oben verstehen, aber es wird eine Menge Leute geben, die dieses Beispiel einer WHILE-Schleife mit IFTHENELSE-Blöcken verstehen können. Wenn Sie glauben, diese Menschen don8217t haben alle Unternehmen gehen online mit einer PLC, dann schlagen Sie vor, Sie sollten Ihre Einstellung ändern. Automation ist ein Teamsport und wir haben keinen Platz im Team für große Egos. Verwenden Sie die einfachste Logik, die Sie möglicherweise (nicht die kürzeste). Wenn die Maschine you8217re Programmierung hat 10 Motoren, don8217t versuchen, die Motor-Start-Stop-Logik in strukturierten Text mit einer FOR-Schleife zu schreiben. Don8217t sogar einen Funktionsblock und verwenden Sie es 10-mal. Schreiben Sie einfach 10 verschiedene Programme in Ladder Diagram und kopieren Sie die Logik. Sicher können sie einige gemeinsame Logik, wie eine OkToRunMotors-Spule, die in einem anderen Programm festgelegt wird zu teilen. Denken Sie daran, dass es sich um 10 physikalisch verschiedene Motoren und die Bedingungen für das Starten und Stoppen sind wahrscheinlich im Laufe der Zeit ändern. Erkennen Sie, dass und halten die Logik getrennt. Auf der anderen Seite ist Strukturierter Text das richtige Werkzeug für die Ereignisprotokollierung und Rezeptverarbeitungslogik eines Programms. An electrician logging into the PLC to understand why a motor isn8217t starting isn8217t going to be concerned with the event-logging module. Structured Text is also the right tool for manipulating data, such as a scan received from a barcode scanner or an RFID reader. Complex math is also more easily expressed in Structured Text. Using the right tool for the job means taking more than the problem itself into account. Make sure you take the capabilities of your team and the customer8217s capabilities into account too. Don8217t Loop on an Input A novice programmer will write this: Notice how we8217re looping on an input. An input is a real-world physical input. It only changes when an IO scan happens. When the runtime executes this logic, it will enter the loop and potentially never exit, and none of the rest of your program will execute again. The machine will appear to freeze, outputs will stay in their last state, and bad things will happen. Simply, if you8217re using an input as the conditional in a WHILE loop, then you don8217t have a good understanding of how the PLC runtime works, and you need to stop and go back to the beginning. Most PLCs work by reading the physical inputs into memory, running the program logic, and copying the new values of the outputs to the actual physical outputs (that8217s a simplification and not true of all PLCs, but it8217s a good model to start with), and then doing it again and again. The amount of time it takes to do all that is your scan time, and we want the scan time to be as short as possible. Causing the program to enter a loop that waits for an input to turn on will essentially stop the program. In some cases it will also prevent the IO scan from happening, so it8217s impossible for that input to change state again. The machine will freeze forever. Ladder Diagram doesn8217t give you the option of shooting yourself in the foot like this, but Structured Text does. Stay away from infinite loops. Mixing Ladder Diagram and Structured Text I8217ve shown you how you can write programs, functions, and function blocks in Structured Text, but sometimes it8217s nice to add a little Structured Text in the middle of your Ladder Diagram program. It turns out that a program can include something called an Action (which is like a mini local sub-program that you can call from your program) and the Action can be written in a different implementation language than the parent program. To add an Action . right click on an existing (Ladder Diagram) program and choose Add-Action8230 from the context menu. All you have to enter is a Name and choose an Implementation Language . Choose Structured Text. The new Action will show up in the Solution Explorer under your program. The Action has access to all the declarations (inputs, outputs, and local variables) of the parent program or POU. You can call the Action like any other program: just add a block and enter the Action name. String Functions String functions can be used in both Ladder Diagram and Structured Text, but when you start to do complicated string manipulation then I suggest moving into Structured Text because it can be easier to understand. Here are your typical string functions and what they do: LEN(s) 8211 returns the number of characters in string s LEFT(s, n) 8211 returns the n left-most characters from string s, or returns s if n LEN(s) RIGHT(s, n) 8211 returns the n right-most characters from string s, or returns s if n LEN(s) MID(s, n, p) 8211 returns n characters from string s, starting at position p (first character number is 1, not 0) CONCAT(s1, s2) 8211 returns strings s1 and s2 joined (concatenated) together INSERT(s1, s2, p) 8211 returns a new string formed by inserting s2 into s1 at position p DELETE(s, n, p) 8211 the opposite of MID. returns string s with the n characters starting at position p removed REPLACE(s1, s2, n, p) 8211 combines DELETE and INSERT 8211 removes n characters from s1 starting at position p, and replaces them with s2 FIND(s1, s2) 8211 returns the position of string s2 in string s1, or 0 if not found, and is case sensitive You can, of course, create your own string functions. For instance, it might be useful to have a different replace function that takes a 3 strings: a string to search, a string to find, a string to replace all instances of the found string with: Notice how the variables are declared as TMaxString instead of STRING 8230 STRING Limitations Since variables are statically allocated in TwinCAT 3, when you define a STRING variable you have to declare the length. Implicitly this is 80 characters, and it uses up 81 bytes of memory (80 for the data and one byte for a null terminator). Strings are limited to a length of 255 characters. There is a specific type called TMaxString which is an alias for STRING(255) . Be careful because TwinCAT 3 will silently truncate a string to the maximum defined length of the destination string when you do an assignment. When you make your own string functions, you should use TMaxString as the variable type to make sure they work with any string passed to them. If you don8217t, the input and output variables will be silently truncated to the length you specify. Conclusions Structured Text is a powerful tool. In some PLCs, like the Allen-Bradley ControlLogix line, you have to pay extra for the Structured Text editor, but with TwinCAT 3 you get it for free. (Actually, you get the Ladder Diagram editor for free too8230) With great power comes great responsibility. Use your new powers wisely and sparingly. When programming PLCs, the first priority is correctness and the second priority is readability. Nobody gets points for writing fewer lines of code. Erinnere dich daran. Kommentarfunktion ist geschlossen.

No comments:

Post a Comment