Dieses Handbuch wurde für Personen ohne Programmiererfahrung oder -wissen geschrieben. Die Arbeit mit IC10 kann für jemanden, der neu damit ist, ziemlich entmutigend sein. Glücklicherweise ist es überraschend intuitiv, Chips dazu zu bringen, das zu tun, was Sie tun sollen, sobald Sie sich daran gewöhnt haben, systematisch und Schritt für Schritt über Dinge nachzudenken. Dieser Leitfaden soll Sie an diesen Punkt bringen.
Einrichtung
Um mit IC10 zu arbeiten, benötigen Sie eine Grundausstattung:
- Computer
- IC-Editor-Motherboard
- IC-Gehäuse
- IC10-Chip (im Gehäuse platzieren)
Der Datenport des IC-Gehäuses sollte mit dem Datenport des Computers verbunden sein und beide sollten mit Strom versorgt werden. Der Einfachheit halber verkabele ich sie alle zusammen in einem separaten Netzwerk. Sie können ein Netzwerk vom Rest Ihrer Basis trennen, indem Sie einen Leistungsregler dazwischen schalten.
Wenn beide richtig verbunden und eingeschaltet sind, sehen Sie das Dropdown-Menü oben links auf dem Computerbildschirm mit der Aufschrift „IC-Gehäuse“ oder wie auch immer Sie das Gehäuse beschriftet haben.
Beachten Sie die beiden anderen Schaltflächen: „Importieren“ und „Exportieren“. Der Code, den Sie in den Computer schreiben, wird separat gespeichert und NICHT automatisch auf den derzeit im Gehäuse befindlichen IC10-Chip übertragen. Wenn Sie auf „Importieren“ klicken, wird der Code vom Chip auf Ihren Computer geladen und überschrieben, was Sie im Editor haben. Ein Klick auf „Exportieren“ schreibt den Code von Ihrem Computer auf den Chip.
Vergessen Sie nicht, auf Export zu klicken, wenn Sie mit der Optimierung Ihres Codes fertig sind.
Klicken Sie abschließend auf die Schaltfläche „Bearbeiten“ unten rechts auf dem Bildschirm, um den Code-Editor zu öffnen.
Grundlagen
Lassen Sie uns direkt in die Dinge eintauchen.
Machen Sie sich vorerst keine Sorgen um all die Schaltflächen. Um den Code zu verstehen, beginnen wir mit seiner Struktur.
Code wird als eine Reihe von Zeilen geschrieben, eine nach der anderen. Beachten Sie die Zeilennummern auf der linken Seite des Bildschirms. Es wird von oben nach unten gelesen. Denken Sie immer daran, dass genau das auch der Computer tut. Es liest zuerst Zeile 0 und tut, was diese Zeile ihm sagt, dann fährt es mit der nächsten Zeile fort und tut, was diese Zeile ihm sagt.
Manchmal weist eine Zeile den Computer an, zu einer anderen Zeile statt zur nächsten zu springen. Der Computer liest dann die Zeile, zu der er gesprungen ist, tut, was er sagt, geht dann zur nächsten Zeile über und so weiter und so fort.
Beginnen Sie im Zweifelsfall immer bei Zeile 0 und arbeiten Sie sich langsam Zeile für Zeile durch Ihr Programm. Folgen Sie dem Gedankengang des Computers und Sie werden Ihre Fehler immer entdecken können.
Beachten Sie, dass einige Wörter unterschiedliche Farben haben. Jede dieser Farben bedeutet etwas Besonderes. Sie sind eine großartige Möglichkeit, Ihnen zu helfen, zu verstehen, wie der Computer interpretiert, was Sie geschrieben haben.
- Gelbe Wörter sind Funktionen. Sie weisen den Computer an, eine bestimmte Aktion auszuführen. Oft müssen Sie einer Funktion einige zusätzliche Informationen oder Argumente geben.
- Weiße Wörter sind Namen. Diese helfen Ihnen, sich daran zu erinnern, welche Rolle Sie verschiedenen Geräten und Registern zugewiesen haben.
- Grüne Wörter sind Geräteports. Sie entsprechen bestimmten Anschlüssen am IC10-Gehäuse und dienen dazu, den Chip mit anderen Dingen im Netzwerk wie Sensoren, Heizungen und Kühlern usw. zu verbinden.
- Orange Wörter sind Gerätevariablen. Sie entsprechen bestimmten Informationen, die ein Gerät sammelt oder verwendet, und unterscheiden sich von Gerät zu Gerät. Beispielsweise können Sie Horizontal und Vertikal auf Solarmodulen bearbeiten, um zu steuern, wo sie ausgerichtet sind, während Sie Temperatur und Druck von Gassensoren ablesen können.
- Blaue Wörter sind Register. Sie fungieren als temporärer Speicher, Orte zum Speichern von Nummern, mit denen Sie gerade arbeiten. Wenn Sie beispielsweise die Temperatur von einem Gassensor laden, müssen Sie sie zuerst in einem Register speichern, wenn Sie sie mit etwas anderem vergleichen möchten.
- Blaugrüne Wörter sind Werte. Sie sind einfache Zahlen und bedeuten, was sie aussehen, wie sie bedeuten.
- Lila Wörter sind Etiketten. Anstatt einem Computer zu sagen, dass er zu einer bestimmten Zeile springen soll, können wir ihm sagen, dass er stattdessen zu einem Label springen soll. Dies hilft uns sehr, unseren Code zu organisieren, indem wir bestimmten Teilen davon Namen geben.
- Rote Wörter sind Fehler. Meistens haben Sie etwas falsch eingegeben. Manchmal erkennt der Editor Labels jedoch nicht richtig.
Beachten Sie schließlich die drei Schaltflächen oben rechts im Editor. Das sind Referenzlisten, die Ihnen helfen können, wenn Sie sich zum Beispiel nicht sicher sind, in welcher Reihenfolge Sie Ihre Argumente schreiben sollen.
Das wichtigste ist „f“, das eine Liste von Funktionen und deren Argumenten ist.
Geräte
Wenn Sie ein IC10-Gehäuse mit einem Netzwerk verbinden, erkennt es andere Geräte im Netzwerk nicht automatisch. Um mit ihnen in Ihrem Code sprechen zu können, müssen Sie sie mit den Geräteanschlüssen am IC10-Gehäuse verbinden.
Halten Sie dazu einen Schraubendreher und stellen Sie die Schrauben am Gehäuse ein. Wenn Sie den Mauszeiger über jede Schraube bewegen, sehen Sie den Namen des Geräts, mit dem der Port derzeit verbunden ist, und zu welchem Sie wechseln, wenn Sie erneut auf die Schraube klicken.
Beachten Sie, dass Sie, wenn Sie die Geräteports in Ihrem Code mit der Alias-Funktion umbenannt haben, den Namen des Ports sehen, wenn Sie den Mauszeiger darüber bewegen. Wenn Sie Ihre Geräte mit dem Labeler umbenannt haben, sehen Sie in ähnlicher Weise den neuen Namen des Geräts, wenn Sie die Ports anpassen.
Kodex Teil I
In diesem Abschnitt beziehe ich mich auf das oben gepostete Beispielskript und nur auf dieses. Die Zeilennummern und Abschnittsbezeichnungen sind immer gleich. Dieses Skript steuert eine Reihe von Flüssigkeitswandkühlern, um die Temperatur zwischen 20 Grad Celsius und 25 Grad Celsius zu halten.
Beginnen wir ganz oben und arbeiten uns Zeile für Zeile nach unten vor.
0. Alias-Sensor d0
Die Alias-Funktion weist beispielsweise einem Gerät oder einem Register einfach einen Namen zu. Es ist jedoch eine der nützlichsten Funktionen, die Sie verwenden können, da es der Organisation sehr hilft.
In diesem Fall weisen wir d0 den Namen „Sensor“ zu. Erinnern Sie sich an den vorherigen Abschnitt über Geräte? D0 ist das Gerät, das oben links am IC-Gehäuse angeschlossen ist. In diesem Fall geben wir dem an diesem Steckplatz angeschlossenen Gerät den Spitznamen „Sensor“.
Beachten Sie, dass der Alias das mit dem Steckplatz verbundene Gerät nicht wirklich umbenennt. Dazu müssen Sie manuell einen Etikettierer verwenden. Alias ist nur für die Verwendung innerhalb des Codes, den Sie schreiben.
1. Alias CurrTemp r0
Eine andere Verwendung eines Alias. Allerdings ordnen wir einem Register einen Namen zu. Stellen Sie sich ein Register wie einen Notizblock vor. Es speichert Informationen zur vorübergehenden Verwendung. In diesem Fall verwenden wir es, um die Temperatur zu speichern, die wir vom Sensor erhalten, und nennen es daher „CurrTemp“ oder aktuelle Temperatur.
2. Alias MaxTemp r1 3. Alias MinTemp r2 4. Alias SetOn r3 5. Alias SetOff r4
In diesen Zeilen weisen wir Registern, die wir im Programm verwenden werden, noch ein paar weitere Namen zu. Dies sind die maximalen und minimalen Temperaturen, die wir im Raum haben möchten, und die Werte, die wir auf einem Gerät speichern müssen, um es an- und auszuschalten.
6. MaxTemp 273 25 hinzufügen
Hier bekommen wir die erste echte Mathematik im Programm. Lass es uns aufschlüsseln. Schauen wir uns zunächst jedoch die Beschreibung der hinzuzufügenden Funktion im eigenen Referenzhandbuch des Editors an.
Wenn das verwirrend erscheint, machen Sie sich keine Sorgen. Es ist ganz einfach, wenn Sie es zerlegen.
r hinzufügen? a ( r? | num ) b ( r? | num ) Register = a + b.
Die erste Zeile beschreibt, wie Sie die Funktion in Ihrem Code verwenden. In diesem Fall geben Sie zuerst „add“ ein. Dann spezifizieren Sie das Register (r?). Dann spezifizieren Sie a und schließlich spezifizieren Sie b.
Das erste Register, das Sie angeben, ist der Ort, an dem Sie das Ergebnis speichern möchten. Denken Sie daran, dass Register Notizblöcke sind, auf denen Sie Informationen speichern. Das Ergebnis der Addition zweier Zahlen ist nützlich, aber wenn Sie es verwenden möchten, müssen Sie es irgendwo speichern – normalerweise in einem Register.
a(r? | num) bedeutet, dass „a“ entweder ein Register oder eine Zahl sein kann. Wenn Sie ein Register angeben, nimmt add die im Register gespeicherte Nummer. Dasselbe gilt für „b“.
Denken Sie daran, dass Register Notizblöcke sind, die Informationen speichern. Register speichern meistens eine Nummer. Wenn also Register 4 die Zahl 15 und Register 5 die Zahl 3 speichert, dann:
addiere r0 r4 r5
Das bedeutet, dass Sie die Zahl in r4 zur Zahl in r5 addieren und das Ergebnis in r0 speichern möchten. Nach dieser Zeile enthält r0 die Zahl 18.
Ähnlich:
addiere r0 r4 6
Das bedeutet, dass Sie die Zahl in r4 zur Zahl 6 addieren und das Ergebnis in r0 speichern möchten. Nach dieser Zeile enthält r0 die Zahl 21.
Im Beispielcode haben wir Folgendes verwendet:
6. MaxTemp 273 25 hinzufügen
Das heißt, wir wollen 273 zu 25 addieren und das Ergebnis in „MaxTemp“ speichern. Denken Sie daran, dass wir zuvor (in Zeile 2) den Alias „MaxTemp“ auf r1 gesetzt haben. Daher addiert diese Zeile einfach 273 zu 25 und speichert sie im Register r1.
Das ist, was wir wollen, dass unsere maximale Temperatur 273 + 25 Grad Kelvin oder ungefähr 25 Grad Celsius beträgt.
7. Addiere MinTemp 273 20 8. Addiere SetOn 0 1 9. Addiere SetOff 0 0
Das gleiche wie oben. Wir speichern unsere Mindesttemperatur von 20 Grad Celsius in Register r2, speichern die Zahl 1 in Register r3 und speichern die Zahl 0 in Register r4.
So weit, ist es gut. Wir haben gerade die grundlegenden Nummern eingerichtet, die wir brauchen.
Kodex Teil II
10. Hauptsache:
Diese Zeile ist ein Label. Wenn wir in den folgenden Codezeilen zu dieser Stelle zurückspringen möchten, können wir dem Computer einfach sagen, dass er stattdessen zu „main“ springen soll, anstatt dem Computer die spezifische Zeile mitzuteilen, zu der wir springen möchten.
11. l CurrTemp Sensortemperatur
Dies ist unsere erste Zeile mit zwei Aliasnamen, aber lassen Sie sich nicht verwirren. Es ist eine einfache Anweisung.
Was der Computer macht ist:
- Suchen Sie nach dem Gerät „Sensor“, das war der Alias, den wir d0 in Zeile 0 gegeben haben.
- Holen Sie sich den Wert „Temperatur“ vom Sensor.
- Speichern Sie den Wert im Register „CurrTemp“, das war der Alias, den wir r0 in Zeile 1 gegeben haben.
Nach dieser Zeile wird die aktuelle Temperatur, die unser Gassensor anzeigt, erfasst und in r0 oder CurrTemp gespeichert.
12. bgt CurrTemp MaxTemp Übertemp
bgt ist eine Verzweigungsfunktion, kurz für Verzweigung (wenn) größer als.
Das Schlüsselwort ist „wenn“. Wenn das erste Argument größer als das zweite Argument ist, springt der Computer an die von Ihnen angegebene Stelle.
In diesem Fall: Wenn CurrTemp größer als MaxTemp ist – das heißt, wenn die Temperatur, die wir vom Sensor ablesen, größer als die gewünschte Maximaltemperatur ist, die 25 Grad Celsius beträgt – dann möchten wir, dass der Computer direkt zu springt Abschnitt namens „Übertemperatur“.
Andernfalls, wenn CurrTemp nicht größer als MaxTemp ist, springt der Computer nicht auf „Overtemp“ und fährt stattdessen einfach mit der nächsten Zeile fort.
13. blt CurrTemp MinTemp Untertemp
blt ist eine weitere Verzweigungsfunktion, kurz für branch (if) less than.
Es ist dasselbe wie bei bgt, außer dass es kleiner als statt größer als ist.
Wenn also in diesem Fall CurrTemp kleiner als MinTemp ist – wenn unsere aktuelle Temperatur am Sensor niedriger als die gewünschte Mindesttemperatur von 20 Grad Celsius ist – dann gehen wir direkt zu „Untertemperatur“. Ansonsten fahren wir einfach mit der nächsten Zeile fort.
14. j Haupt
Dies ist eine der wichtigsten Zeilen im gesamten Programm.
Einfach genug, „j“ weist den Computer an, zu einer anderen bestimmten Zeile im Programm zu springen.
Da wir die Temperatur unseres Zimmers überwachen wollen, können wir es nicht nur einmal ausführen – das Programm muss sich immer wieder wiederholen. Jedes Mal, wenn es sich wiederholt, möchten wir, dass es die Temperatur überprüft und dann die Kühler nach Bedarf ein- und ausschaltet.
Wenn wir also das Ende des Programms erreichen, sagen wir ihm, dass es zum Anfang zurückspringen soll.
In diesem Fall weisen wir es an, zurück zu „main“ zu springen, das in Zeile 10 am Anfang dieses Abschnitts des Handbuchs gekennzeichnet ist. Dieser gesamte Schleifenteil des Programms wird als Hauptschleife bezeichnet.
Hier kommen wir an, wenn die Temperatur weder über 25 Grad noch unter 20 Grad Celsius liegt – gerne dazwischen. In diesem Fall wollen wir von oben beginnen und die Temperatur erneut prüfen, also springen wir zurück zu Zeile 10 und starten das Programm an dieser Stelle neu.
Kodex Teil III
15. Übertemperatur:
Dies ist die Bezeichnung „Übertemperatur“. Denken Sie daran, dass wir dem Computer gesagt haben, dass er hierher springen soll, wenn die Temperatur, die wir vom Sensor in der Hauptschleife gemessen haben, höher als 25 Grad Celsius war.
sb -1369060582 Ein SetOn
Dies ist eine weitere Funktion, die kompliziert aussieht, aber eigentlich ganz einfach ist.
sb ist eine Funktion, die Variablen auf einer Reihe von Geräten im Netzwerk festlegt.
Wenn wir beispielsweise allen Solarmodulen in einem Netzwerk sagen wollten, dass sie sich in Richtung einer bestimmten vertikalen Höhe drehen sollen, würden wir diese Funktion verwenden.
In diesem Fall möchten wir allen Flüssigkeitswandkühlern im Netzwerk mitteilen, dass sie sich einschalten sollen, da die Temperatur höher als die von uns gewünschte Maximaltemperatur ist.
-1369060582 ist der vorgefertigte Hash von Flüssigkeitswandkühlern. Der Hash identifiziert den Gerätetyp, nicht ein einzelnes Objekt. Sie können auf den blau gefärbten vorgefertigten Hash klicken, um ihn in Ihre Zwischenablage zu kopieren, und ihn auf diese Weise in den Editor einfügen, anstatt ihn auswendig zu lernen und abzutippen.
Was wir also mit sb sagen, ist, dass wir mit jedem Gerät dieses speziellen Typs etwas machen wollen.
Konkret wollen wir den Wert des Registers „SetOn“ in die „On“-Variable auf dem Gerät schreiben.
Um ein Gerät ein- und auszuschalten, müssen wir grundsätzlich die Werte „1“ und „0“ in seine „On“-Variable schreiben. Die sb-Funktion ist eine einfache Möglichkeit, dies mit einer ganzen Reihe von Geräten mit einem IC10-Chip zu tun, ohne Logik-Batch-Writer verwenden zu müssen.
Das kann ein wenig verwirrend werden, da wir später im Untertemperatur-Abschnitt in dieselbe Variable von „On“ auf dem Gerät schreiben werden.
So sind die Dinge eben. Es gibt keine separate „Aus“-Variable, in die geschrieben werden kann, wenn wir sie ausschalten möchten. Stattdessen haben wir nur On = 0 für Off und On = 1 für On.
Somit haben wir nach dieser Zeile alle Flüssigkeitswandkühler im Netzwerk eingeschaltet.
j Haupt
Auch hier müssen wir die Temperatur überwachen, da sie sich ständig ändert, nicht nur einmal. Wie zuvor springen wir zurück zum Anfang von main, damit wir die Temperatur noch einmal ablesen können, und beginnen die Schleife von vorne.
18. untertemp.: 19. sb -1369060582 On SetOff 20. j main
Das sollte Ihnen jetzt bekannt vorkommen.
Wir werden unterkühlt, wenn die Temperatur unter 20 Grad Celsius liegt. In diesem Fall möchten wir alle unsere Kühler ausschalten. Anstatt also SetOn (das den Wert 1 hat) an unsere Wandkühler zu schreiben, schreiben wir SetOff (das den Wert 0 hat).
Und schließlich springen wir wieder zurück zum Main und beginnen die Schleife von vorne.
Analyse
Nun, da wir wissen, was jede einzelne Zeile tut, was macht das Programm als Ganzes eigentlich?
Beginnen wir mit einem etwas zu warmen Raum, sagen wir 30 Grad Celsius, und lassen Sie das gesamte Programm durchlaufen, um zu sehen, was es tut.
Ganz am Anfang richtet das Programm seine Aliase und Basisnummern (oder Konstanten) ein. Dieser Teil passiert ganz normal.
Jetzt kommen wir zu Zeile 11. Da der Raum 30 Grad Celsius hat, zeigt der Sensor 303 Grad Kelvin an, und daher lädt das Programm den Wert 303 in CurrTemp.
Jetzt kommen wir zu Zeile 12. Das Programm vergleicht CurrTemp mit MaxTemp: 303 mit 298. Da 303 größer als 298 ist, verzweigen (oder springen) wir zu overtemp.
Jetzt sind wir auf Zeile 15 (Übertemperatur) und fahren mit Zeile 16 fort. Wir stellen alle Wandkühler auf Einschalten und fahren dann mit der nächsten Zeile fort.
Jetzt sind wir auf Zeile 17. Wir springen zurück zu main, das ist Zeile 10, und fahren mit Zeile 11 fort.
Inzwischen hat sich der Raum etwas abgekühlt, sagen wir mal auf 27 Grad Celsius.
Wieder lädt das Programm die Temperatur in CurrTemp, die 300 ist.
Da 300 immer noch größer als 298 ist, springt es wieder auf Übertemperatur und schaltet alle Wandkühler ein.
Beachten Sie, dass die Wandkühler während dieser ganzen Zeit noch eingeschaltet waren! Es gab nichts, was ihnen sagte, sie sollten sich ausschalten, und sie einzuschalten, während sie bereits eingeschaltet sind, bewirkt nichts.
Danach gehen wir zurück zum Anfang der Hauptschleife.
Angenommen, der Raum hat sich noch weiter abgekühlt, diesmal auf 24 Grad Celsius.
Das Programm lädt erneut die Temperatur, die jetzt 297 beträgt.
Dies ist nicht höher als 298! Das Programm springt also nicht auf Übertemperatur.
Stattdessen fährt es mit Zeile 13 fort und vergleicht es mit MinTemp-293.
297 ist auch nicht niedriger als 293, und so geht das Programm weiter zu Zeile 14 und beginnt die Hauptschleife von vorne.
Beachten Sie noch einmal, dass die Kühler während dieser ganzen Zeit noch eingeschaltet sind.
Angenommen, der Raum hat sich endlich auf 19 Grad Celsius abgekühlt.
Wieder laden wir die Temperatur, die 292 beträgt.
Dies ist nicht höher als 298, und so springen wir nicht auf Übertemperatur.
Dies ist jedoch niedriger als 293, und so springen wir auf Untertemperatur.
Jetzt in Zeile 19 schalten wir endlich alle Kühler aus und springen zurück zum Anfang der Hauptschleife.
Grundsätzlich hält dieses Programm den Raum in einem Bereich zwischen 20 und 25 Grad Celsius. Wenn es über 25 ist, wird es gekühlt, bis es 20 erreicht. Sobald es 20 erreicht, beginnt es nicht wieder zu kühlen, bis die Temperatur wieder über 25 steigt.
Sie können überprüfen, ob Sie verstehen, wie das Programm funktioniert, indem Sie mit einem kalten Raum unter 20 Grad Celsius beginnen, der natürlicherweise wärmer wird, und die Schritte ausführen, die wir in diesem Abschnitt durchgeführt haben.
Schließlich können Sie Ihr Verständnis weiter überprüfen, indem Sie mit einem Raum beginnen, der über 30 Grad Celsius hat, aber anstatt natürlich wärmer zu werden, wird es natürlich bis auf 0 Grad Celsius kälter.
Organisation
Bisher haben wir gelernt, wie man Code aus der Perspektive des Computers liest und versteht, sowie einige Grundfunktionen und wie man sie benutzt.
Das Wichtigste ist jedoch, die Struktur des Programms zu verstehen.
Fast jedes Mal haben Sie die Hauptschleife. Während dieser Schleife lesen Sie Daten von verschiedenen Sensoren und Maschinen. Basierend auf den gesammelten Daten können Sie sich dann entscheiden, verschiedene Dinge zu tun, indem Sie die verschiedenen Branch-Anweisungen verwenden und möglicherweise Store-Anweisungen verwenden, um andere Geräte dazu zu bringen, etwas zu tun. Am Ende springen Sie zurück zum Anfang der Hauptschleife.
Die meisten Programme in Stationeers sind so strukturiert. Bei einem Solar-Tracking-Programm wird Ihre Hauptschleife beispielsweise verwendet, um die vertikalen und horizontalen Winkel der Sonne von Tageslichtsensoren zu erhalten. Dann führen Sie einige Berechnungen zu den Winkeln durch und verwenden die Store-Batch-Funktion, um in die horizontalen und vertikalen Variablen aller Solarmodule im Netzwerk zu schreiben.
Der Rest besteht darin, herauszufinden, welche Lade- und Schreibvorgänge verwendet werden sollen, welche mathematischen Funktionen Sie benötigen, wann und wie Sie verzweigen, und dann alles ordentlich und lesbar zu halten.
Das ist alles, was wir heute dafür teilen Stationeers führen. Dieses Handbuch wurde ursprünglich erstellt und geschrieben von warum der Zyniker. Falls wir dieses Handbuch nicht aktualisieren, finden Sie das neueste Update, indem Sie diesen folgen Link.
Hallo,
Ich habe nach einem detaillierten und erklärten Beispiel für IC-Code gesucht und finde Ihres sehr klar! Vielen Dank, dass Sie sich die Zeit dafür genommen haben.
Tolles Tutorial!
Viel Spaß! Очень подробно и понятно.