Beginn der Überprüfung
Meine lieben Kollegen, wir beginnen den Rückblick mit dem, was wir hier wirklich hervorheben möchten. In diesem Artikel möchte ich die für die Erstellung eines industriellen Steuerungsprogramms typischen Elemente betrachten und zeigen, wie sie auf Hausautomationssysteme angewendet werden können. Und das Wichtigste ist, die Antwort auf die Frage zu finden - was wird dafür benötigt?
Home Automation - Anwendungen
Home sweet home ... Brauchen Sie wirklich einen Controller? Die Antwort ist einfach - es hängt alles davon ab, was in einem solchen Haus verfügbar ist. Wenn Sie nur eine Wohnung haben und die Automatisierung in der Verwaltung Ihres Home Media Centers und der Klimaanlage im Sommer besteht, kann natürlich alles, was im Folgenden beschrieben wird, völlig uninteressant sein. Aber wenn Ihr Hobby nicht nur die Couch schiebt (was sich da verstecken soll, habe ich selbst schon mal gemerkt), dann kann der Artikel sehr nützlich sein.
Versuchen wir also zu verstehen, wie improvisierte Mittel unser schwieriges Leben vereinfachen können. Als Beispiel verwenden wir die reale Situation - eine Pumpe in einem Brunnen mit einer Tiefe von 70 Metern, die zwei Nachbarn zusammengelegt haben. Sie haben es im Frühjahr installiert, als es viel Wasser im Brunnen gab, und im Allgemeinen war es einfach warm und gut. Aber die Zeit vergeht und Fragen beginnen - um Wasser aus einer solchen Tiefe zu heben, braucht man Elektrizität, für die man bezahlen muss. Der Keller und der technische Boden wurden mehrmals überflutet - sie haben nur vergessen, die Pumpe auszuschalten ... Ja, und es ist nicht sehr praktisch, sie manuell zu steuern - Sie müssen einen Hahn schließen, einen anderen öffnen, dann die Pumpe einschalten und den Wasserstand im Tank überprüfen.
Lohnt es sich, Ihre Zeit damit zu verbringen, was bereits fehlt? Ein forschender Verstand beginnt nach Lösungen zu suchen und findet sie natürlich! Eine Liste der Aufgaben für die Implementierung wird erstellt.
- Die Bezahlung des verbrauchten Stroms muss nicht üblich sein - das heißt, wir werden zwei Starter installieren, von denen jeder an einen eigenen Stromzähler angeschlossen ist.
- Die Pumpe sollte nicht aufgrund von Wassermangel ausfallen. Das bedeutet, dass wir einen Sensor für den „trockenen“ Hub der Pumpe installieren. Wenn es kein Wasser gibt, starten Sie die Pumpe einfach nicht, und wenn es funktioniert, stoppen wir im Notfall.
- Die Pumpe darf nicht zu lange laufen, z. B. länger als 25 Minuten. Das Überschreiten dieser Zeit zeigt an, dass das System seinen normalen Betriebsmodus verlässt.
- Das Befüllen von Behältern sollte ohne menschliches Eingreifen, dh automatisch, erfolgen, dh von der unteren Ebene aus beginnen und von der oberen Ebene aus anhalten.
- Es sollte nur ein Tank gefüllt werden, dh wir installieren zwei Ventile, um Wasser für einen Satz in jedem Tank zu liefern.
- Die Pause zwischen den Pumpenstarts muss mindestens 30 Minuten betragen.
- Eine Stromunterbrechung sollte den Betriebsalgorithmus nicht beeinflussen, wenn er aktiv war. Trotz allem muss der Algorithmus vervollständigt werden.
Die Aufgaben sind einfach und können auf hundert, wenn nicht tausend Arten gelöst werden. Aber der Titel des Artikels spricht für sich und wir werden einen dornigen Weg gehen. Verwenden wir zunächst einen virtuellen Controller, der dies alles erledigt.
Wie funktioniert eine Industriesteuerung?
Natürlich klären wir das gleich - wir sprechen von den sogenannten speicherprogrammierbaren Steuerungen, kurz SPS. Was verbirgt sich unter dieser Abkürzung? Und hier ist das Verborgene - eine unglaubliche Vielfalt an Hardwarelösungen, eine Vielzahl an Softwareprodukten und Dienstprogrammen. Es stellt sich sofort die vernünftige Frage, wie man das alles gut nutzt. Ist es wirklich notwendig, den Materialteil von Grund auf zu studieren und Zeit und Geld für jedes neue Gerät zu finden, um an Schulungen teilzunehmen und die für die Arbeit mit jedem Gerät erforderlichen Fähigkeiten zu erwerben?
Die Antwort ist nein, es ist nicht notwendig. Alles wurde vor uns getan. Es bleibt nur zu lernen und zu lernen, wie man es benutzt. Dies ist, was ich weiter machen möchte - ein kleines Eintauchen in die Norm IEC 61131. Lassen Sie uns offenlegen, welche Teile diese Norm enthält.
- IEC 61131-1: Allgemeine Informationen.
- IEC 61131-2: Geräteanforderungen und Prüfung.
- IEC 61131-3: Programmiersprachen.
- IEC 61131-4: Benutzerhandbuch.
- IEC 61131-5: Kommunikation.
- IEC 61131-6: Funktionale Sicherheit.
- IEC 61131-7: Fuzzy-Steuerungsprogrammierung.
- IEC 61131-8: Richtlinien für die Verwendung und Implementierung von Programmiersprachen.
- IEC 61131-9: Digitale Einpunkt-Kommunikationsschnittstelle für kleine Sensoren und Aktoren.
- IEC 61131-10: Offenes XML-basiertes Austauschformat für SPS.
Wir werden uns jedoch nicht mit dem Thema Normung befassen. Einfach gesagt, die Steuerung arbeitet im Allgemeinen zyklisch: Sie fragt den Status der Eingänge ab, der Interpreter führt das Steuerprogramm aus, setzt den Status der Ausgänge, führt interne Wartungsaufgaben durch und kehrt erneut zum Abfragen des Status der Eingänge zurück. Es ist langweilig genug, aber effektiv und effizient. Ein Steuerprogramm ist ein Pseudocode, der in einer Programmierumgebung erstellt wird, üblicherweise eine binär codierte Sequenz, die mit den üblichen Programmiersprachen nichts zu tun hat. Obwohl es für den Benutzer in einer verständlichen Form dargestellt wird, wird für die Steuerung eine völlig andere Ansicht verwendet. Ein gutes Beispiel ist ein kleines Programm, das in Form von IL, LD und in Form einer binären Codierung für den Controller dargestellt wird (hmm, es gibt nicht einmal einen speziellen Begriff). Unten unter dem Spoiler ist ein kleines Beispiel abgebildet.
Was macht dieses Programm also nützlich? Ja, sie tut nichts - wenn der Wert des Merkers M8010 1 ist, wird 1 an den Ausgang mit der Adresse Y377 geschrieben, entsprechend gilt dies auch für 0.
Einer der größten Vorteile einer solchen Implementierung ist die Möglichkeit, das Programm aus dem Speicher des Controllers zu entladen, in einem für den Menschen verständlichen Editor zum Bearbeiten zu öffnen, zu kompilieren (dieser Begriff ist hier bedingt) und wieder in den Speicher des Controllers zu laden. Darüber hinaus speichern einige Controller sogar Kommentare und Variablennamen.
Wie programmiere ich den Controller?
Natürlich wird spezielle Software benötigt. Nach langwierigen Suchen und Experimenten wurde Autoshop v3.02 von Inovance Control ausgewählt. Es ist bemerkenswert, dass es kostenlos ist, zum kostenlosen Download zur Verfügung steht und Controller unterstützt, die mit Mitsubishi-Controllern kompatibel sind. Und es unterstützt die Arbeit nicht nur über serielle Schnittstellen, sondern auch über Ethernet. Link zu der von uns verwendeten Version, unter dem Spoiler.
Link zum Herunterladen von Yandex Disk Nun, wir haben das Programm installiert und nun noch eine Frage - wie schreibt man das Programm auf unseren Controller? Da wir mit einem bestimmten Gerät arbeiten, installieren wir bestimmte Treiber für den virtuellen COM-Port. Um Schlussfolgerungen zu speichern und zu vereinfachen, entschied ich mich, den USB-Anschluss der Karte für den Anschluss zu verwenden. Fahrer unter dem Spoiler.
Nachdem Sie die Treiber installiert und die Karte über Mini-USB angeschlossen haben, können Sie überprüfen, ob bei Ihnen alles erfolgreich ist. Klicken Sie dazu mit der rechten Maustaste auf My Computer-Management-Device Manager-Ports (COM und LPT). Sie sollten ein solches Fenster wie unter einem Spoiler sehen. Die COM-Anschlussnummer Ihres Systems kann variieren.
Jetzt können Sie im AutoShop-Menü die Option Tools-Communication Setting auswählen, im angezeigten Fenster die Option Serial auswählen, die Anschlussnummer angeben und auf die Schaltfläche Test klicken. Sie sollten ein Fenster wie dieses unter einem Spoiler haben.
Erfolgreiche Verbindung zum Vorstand Aber wenn etwas für Sie nicht funktioniert, schreiben Sie entweder in eine PN oder in einen Kommentar. Wir werden auf jeden Fall helfen.
Elemente des Programms, ohne die es traurig sein wird
Im Folgenden wird die Sprache von Kontaktplänen oder die sogenannte LD betrachtet. Betrachten wir nur die Elemente, die wir später verwenden werden.
- Die Ein- und Ausgänge sind diskret. Sie sind mit X und Y bezeichnet. Sie sind zum Empfangen und Ausgeben von diskreten Signalen vorgesehen.
- Der Speicherbereich von M merkers M. Er kann zwei Zustände annehmen - Ein und Aus.
- Timer sind mit T bezeichnet. Entwickelt für Zählzeiten von 0,1 bis 3276,7 Sekunden.
- Der Bereich der Register D. Er hat eine Zellendimension von 16 Bit, kann aber auch als 32-Bit-Zelle adressiert werden.
Kugelförmiges Pferd in einem Vakuum oder indirekte Adressregister
Die indirekten Adressierungsregister sind mit V und Z bezeichnet und können von V0 bis V7 und von Z0 bis Z7 adressiert werden. Warum können sie verwendet werden? Schauen wir uns an, wie sie im Allgemeinen funktionieren. Dieser verrückte D1000V0-Datensatz bedeutet, dass die als D1000-Adresse berechnete Zellenadresse plus dem in das indirekte Adressierungsregister geschriebenen Wert verwendet wird. Wenn es 15 gibt, verwenden wir die Adresse der Zelle D1015. Dies ist sehr praktisch, wenn Sie mit Datenfeldern oder mit Tabellensteuerung arbeiten. Es reicht aus, den Wert des Indexregisters zu ändern, und wir erhalten die Werte aus den Speicherzellen, die adressiert wurden. Wir werden sie zwar nicht anwenden, in der nächsten Veröffentlichung jedoch darauf eingehen.
Ein bisschen über die Visualisierung des Programms oder das Online-Debuggen
Wenn Sie ein Programmierer sind und gerade mit dem Schreiben eines Programms fertig sind, ist der nächste Schritt das Debuggen. Und hier stellt sich die Frage, wie es geht. Auch hier gibt es viele Optionen, aber ich werde über die sprechen, die wir weiter verwenden werden. Mit dem Programmierumgebungseditor können Sie visuell anzeigen, welche Werte von Bits und Variablen sich derzeit im Steuerungsspeicher befinden, indem Sie eine Taste drücken. Ein sehr aufschlussreiches Beispiel wird sein - unterhalb der Spoiler Offline- und Online-Anzeige des Programms im Editor.
Taste zum Umschalten in den variablen Ansichtsmodus Typ des Programms im Modus zum Anzeigen der Werte von Variablen Art des Programms im Bearbeitungsmodus Ein wenig mehr über die Prozesse, die beim Klicken auf die Schaltfläche Online ablaufen. Das Programm erstellt schnell eine Liste der sichtbaren Variablen und schreibt sie nach Abschluss in einen bestimmten Steuerungspuffer. Danach bereitet die Steuerung Daten aus dieser Liste vor und legt sie in einem anderen Puffer ab. Das Programm liest die Werte aus diesem Puffer und zeigt sie als Werte im Blindschaltbild an. Wenn Sie ein kleines Programm im Anzeigefenster scrollen und die sichtbaren Variablen ändern, wird dieser Zyklus erneut wiederholt ...
Wer nennt Hamlet oder auf der Bühne BluePill x405
Ist Ihnen aufgefallen, dass der Markt nicht auf einfache Motherboards wie ein blaues Tablet stößt, sondern auf Prozessoren wie F405 und höher? Ich persönlich bin nur mit F401-Steinen begegnet, aber das ist ein etwas anderes Level ... Ich bin leicht zu besteigen und für meine Experimente habe ich, ohne zweimal darüber nachzudenken, eine Zahlung in dem guten alten P-CAD 2006 geleistet und sie bei den Chinesen auf einer der Schnellbestellungsseiten bestellt. Natürlich ist es in Farbe ein grünes Tablet, aber in Bezug auf die Bedeutung habe ich beschlossen, den Namen BluePill zu belassen, aber darauf hinzuweisen, dass es bereits x405 ist. Das Ergebnis unter den Spoilern ist ein Foto des BluePill x405-Boards.
Konzept und Gerber auf Github Ein bisschen darüber, warum dieses Board so bemerkenswert ist? Schließlich gab es nur Tausende von Versuchen, Bluepill-Klone zu erstellen! Der Unterschied besteht jedoch darin, dass ich eine Firmware an dieses Board anschließe, die es in einen Kernel verwandelt, der ein Programm ausführt, das mit den Mitsubishi-Industriereglern in einem Befehlssystem kompatibel ist. Dieses Wunder wird an 16 Eingängen, 16 Ausgängen, 2 analogen Eingängen, 3 UART mit DE-Unterstützung für RS485, 1 Onewire-Master-Bus berechnet. UART kann als Master-Bus-Modbus-RTU und als Slave arbeiten. Und sie können völlig unabhängig arbeiten.
Aber das ist noch nicht alles - wenn Sie eine 3-V-Batterie an den VBAT-Pin anschließen, behalten nicht nur die Uhr, sondern auch die Timer, Zähler, Merker und die ersten 1000 Universalregister D ihre Werte bei. Und es gibt 8000 Register.
Ich nehme die Fragen vorweg und sage sofort: Ja, die Software basiert auf einem Echtzeit-Betriebssystem. Ja, DMA wird wo immer möglich verwendet. Diese Funktionen ermöglichen das Arbeiten ohne wesentliche Änderungen der Zykluszeit bei hohen Kommunikationslasten. Diese Version ist die zweite Revision, überarbeitet und ergänzt.
Diese Karte kann sowohl von GX FXDeveloper als auch von IEC Developer und GX Works vollständig programmiert werden.
Das Schicksal der Pumpe und zwei Panzer
Lösen wir jetzt dieses Problem - zumal alle Werkzeuge dafür zur Verfügung stehen. Um nicht viel herauszuholen, habe ich ein Programm geschrieben, es in Teile (die sogenannten Netzwerk- oder Arbeitsketten) zerlegt, und ich werde jedes von ihnen hier zeigen und Kommentare abgeben.
Net 1 - erster Programmlauf Das D1000-Register speichert die Zeit, die zum Unterdrücken des Kontaktsprungs erforderlich ist. In der Tat ist dies bereits im Programm - aber ich möchte es deutlicher zeigen. Register D1001 ist für die Pumpenschutzzeit zuständig. Darin schreiben wir 15.000 oder 1.500 Sekunden. Als nächstes haben wir eine Backup-Reset-Kette - wenn etwas schief geht, können Sie Signal 1 an Eingang X14 senden und die Karte neu starten. In diesem Fall wird 0 in die Register D0 und D1 geschrieben und die M98- und M99-Mercker werden zurückgesetzt.
Net 2 - Eingangssignalverarbeitung Hier werden wir mit Hilfe von Timern den Kontaktsprung los. Verwenden Sie dazu eine Verzögerung von 200 Millisekunden. Um sicherzustellen, dass im zukünftigen Programm beim Ändern der Eingabeadresse des Kontakts nicht viele Ketten neu geschrieben werden müssen, verwende ich Zwischenmerker (z. B. M102). Es ist auch bemerkenswert, dass der M8003-Systemhändler hier verwendet wird - er wird eingeschaltet, nachdem der erste Zyklus der Programmausführung verstrichen ist. Der M8002 Merker ist jedoch nur im ersten Zyklus des Programms aktiv und kann und sollte zum Einstellen der Anfangswerte verwendet werden.
Die Befüllung des Tanks 1 ist mit Ausnahme der Adressen völlig identisch mit der Befüllung des Tanks 2. Die Zeichnung passte nicht ein bisschen - aber Sie sollten sie sich besser ansehen, indem Sie das Projekt öffnen. Was ist an diesem Steuergerät bemerkenswert? Das Vorhandensein von Schutzvorrichtungen und Blockierungen, die stoßfreie Start- und Stoppmechanismen ermöglichen. Beispielsweise wird nach dem Öffnen von Ventil 1 erst nach 700 ms ein Befehl zum Starten des Anlassers ausgegeben, der die Pumpe einschaltet.
Die Verwaltung sieht hier keinen manuellen Modus vor. Auch ein Schutz gegen Trockenlauf und ein Schutz gegen zu langen Pumpenbetrieb sind implementiert.
Net 5-6 - Output Management Und hier steuern wir die Ausgänge in Übereinstimmung mit den Sperren.
Von den Aufgaben blieb nur die Verbindung des 30-minütigen Schutzintervalls vor dem Neustart unerfüllt. Ich muss gleich sagen - in dieser Version sind nur die Eingänge X0-X3 und der Ausgang Y0-Y3 implementiert, was für das Testen des Materials in diesem Artikel völlig ausreicht. Die Bindung ist PA4-X0, PA5-X1, PA6-X2, PA7-X3 und PB4-Y0, PB5-Y1, PB6-Y2, PB7-Y3.
Programmzyklusgeschwindigkeit - Großväterliche Messmethoden
Wenn wir uns diese Frage stellen, fällt uns sofort ein, ein sehr großes Programm aus einer bestimmten Anzahl identischer Elemente in die Steuerung zu schreiben, die Ausführungszeit zu ermitteln und die Ausführungszeit eines Befehls zu ermitteln. Es wird gesagt - getan, unter dem Spoiler-Programm und im Namen der Spoiler-Ausführungszeit.
7995 Schritte - 2,6 Millisekunden Hier ist jeder Schritt ein Befehl, und wir erhalten 2,6 / 7995 = 0,325 Mikrosekunden. Nicht sehr schnell, aber nicht schlecht.
FPU - sein oder nicht sein?
Lassen Sie uns nun bestimmen, wie schnell Gleitkomma-Anweisungen in unserer Firmware funktionieren. Es gibt zwei Firmwares, eine mit integrierter FPU und eine mit Software-Emulation. Das Programm unten:
Programm zur Berechnung der Ausführungszeit einer Anweisung Die Firmware unten befindet sich unter dem Spoiler und unterliegt keinen Einschränkungen
Bei Verwendung einer Hardware-FPU beträgt die Programmausführungszeit 1,8 ms oder 1,8 / 600 = 0,003 ms oder 3 Mikrosekunden.
Tauschen Sie nun die Firmware aus - verwenden Sie die Software-Emulation. Das Ergebnis ist bereits anders - 2,5 ms oder 2,5 / 600 = 0,0041 ms oder 4,1 Mikrosekunden. Nicht schlecht, aber der Unterschied ist deutlich zu spüren.
Fazit
Trotz des großen Volumens des Artikels gibt es immer noch viele Materialien, die gut zu behandeln wären. Wenn dieser Artikel für Sie von Interesse ist, wird diesem Artikel ein weiterer folgen. Aber ich würde gerne Gleichgesinnte finden, die sich mit nur einem Zweck der Vereinigung von Industrie und Haushalt anschließen wollen - damit diese Werkzeuge für einen einfachen Laien zugänglich sind.