Forum: Haus & Smart Home Programmiersprache für Steuerungsaufgaben?


von Jörg H. (idc-dragon)


Lesenswert?

Ich mache mir gerade Gedanken, was für eine Art von einfacher High-Level 
Programmiersprache sich eignen würde, um eine Haussteuerung zu 
beschreiben.

(Bitte nicht verwechseln mit der eigentlichen Programmierung der 
Mikrocontroller, der Firmware.) Es geht um eine Beschreibung der 
gewünschten Abläufe, woraus eine Art Compiler als PC-Programm dann 
ladbare Tabellen erzeugen soll. Mit diesen Tabellen gefüttert verrichtet 
eine Steuerung dann ihren Dienst, ohne das die Firmware dieser verändert 
werden muß.

Vermutlich wäre das eine Sprache wie für eine SPS, womit ich mich aber 
nicht auskenne. Der klassische Ablauf ist daß externe oder interne 
Ereignisse auftreten (Schalter betätigt, Uhr abgelaufen), in Reaktion 
darauf Zustände (Merker) und Bedingungen bewertet werden und schließlich 
Kommandos ausgespuckt werden und daraus evtl. wiederum Ereignisse 
erzeugt werden. Das dreht sich dann solange bis wieder Ruhe ist.

Klassische sequentielle Sprachen wie C, Basic, etc. kommen da nicht in 
Frage. Ist alles sehr parallel, es kann ja jederzeit jedes Ereignis 
auftreten. Sieht vielleicht eher wie eine HDL-Sprache aus.

Mein Fragehintergrund ist das ich im PHC-System die vom Hersteller 
gelieferte monolithische GUI-Software gern schrittweise mit einer 
Open-Source Lösung ergänzen würde. Wir kennen mittlerweile den Aufbau 
der internen Tabellen. Nächster Schritt wäre so ein Compiler für eine 
Beschreibungssprache, die hohe Schule dann ein grafischer Drag+Drop 
Generator.

Kennt jemand Ansätze, wie solche Anlagen programmiert werden können?

von GLT (Gast)


Lesenswert?

Als "Beschreibungssprache" kämen AWL,FUP bzw. CYC in Frage - die 
Sprachen der SPS halt.

Warum keine Basic-Variante?

Das Problem ist doch nicht, welche Sprache Du zur Funktionserstellung 
bereithalten möchtest, sondern dies (Quasi)Multitasking-fähig auf dem 
PHC-System zum laufen kriegst.

von gonzo (Gast)


Lesenswert?

also wenn du ne sps spreache verwenden kannst
dann geht das aber mit c allemal
also nimm c

von Falk B. (falk)


Lesenswert?

@ Jörg Hohensohn (idc-dragon)

>Klassische sequentielle Sprachen wie C, Basic, etc. kommen da nicht in
>Frage. Ist alles sehr parallel, es kann ja jederzeit jedes Ereignis
>auftreten.

Ja und? Wir reden doch nicht über Nanosekunden Paralleltiming in einer 
CPU, sondern bissel Bitgeklaper im Millisekundentakt. Eine einfache 
Schleife mit Polling tuts da locker. Womit wir wieder bei BASIC & Co 
wären.

MFG
Falk

von Jörg H. (idc-dragon)


Lesenswert?

Ich glaube ihr versteht mich nicht...

Es geht um die Beschreibungssprache, nicht um die Ausführung. Diese 
Sprache kennt keine Ausführungszeiten, soll möglichst simpel sein, nur 
was für diese Aufgabe gebraucht wird.
Ferner wären sowas wie Makros oder Templates gut, um Vorlagen für 
wiederkehrende Aufgaben bauen zu können.

Dafür muß ich (oder wer auch immer) dann eine Art "Compiler" schreiben, 
der die Tabellen für die Steuerung erzeugt. Ziel der Übung sind diese 
Tabellen, die Sprache ist ein Werkzeug für Menschen, diese zu erstellen.

von Ralf W. (Gast)


Lesenswert?

Hallo,

ob es dafür eine fertige Lösung (Sprache) gibt weiss ich
nicht.
Wahrscheinlich mußt du dir mit Hilfe einer Sprache wie C
oder Basic selbst so eine Sprache erstellen.
Wenn du denn unbedingt eine Sprache benötigst.

Schau mal auf diese Seite http://www.mindviewinc.com und
lade dir dieses Buch "Thinking in Patterns".
Im Abschnitt "Multiple languages" wird beschrieben, wie
man sich einfache Sprachen selbst erstellen kann.

Hier ein kurzer Auszug aus dem og. Buch,
der deine Problemstellung trifft:

Interpreter motivation

If the application user needs greater run time flexibility, for example 
to create scripts describing the desired behavior of the system, you can 
use the Interpreter design pattern. Here, you create and embed a 
language interpreter into your program.

gruss ralf

von Ithamar Garbe (Gast)


Lesenswert?

Die Frage habe ich mir auch schon gestellt...

Du kannst das ganze evtl. als Signalflussplan darstellen, mit schönen 
Kästchen und Pfeilen von den einen Blöcken zu den anderen, aber das 
ganze dann für einen Mikrocontroller verständlich zu machen dürfte sehr 
schwer sein. Vorteil: Mit einer hochsprachen-ähnlichen Programmierung 
wie C oder Basic kann ein Laie eher wenig anfangen, Blöcke sind wohl 
einigermaßen selbsterklärend.

Nachteil: Blöcke können meist nicht so viel Umfang bieten wie eine 
textorientierte Programmierung.

Schau dir mal die C-Control an, die kann man grafisch oder in Basic 
programmieren...

Die nächste Frage ist ob du eine Skripsprache haben willst oder das 
ganze vorkompiliert auf den Controller laden willst. Als Skriptsprache 
müsstest du auf dem Controller einen Interpreter laufen lassen, was wohl 
sehr langsam und speicherhungrig ist. Wenn du kompilierst brauchst du 
auch ne vernünftige Möglichkeit das in dein bestehendes Programm 
einzufügen.

Ist ein schwieriges Thema - wenn du einen Ansatz hast, sag bescheid, 
würde mich auch interessieren. Auf jeden Fall brauchst du nen Parser, 
und der allein dürfte schon sehr viel Aufwand bedeuten (allein zwecks 
Syntaxprüfung etc.)

von GLT (Gast)


Lesenswert?

>Es geht um die Beschreibungssprache, nicht um die Ausführung. Diese

Als "Beschreibungssprache" kämen AWL,FUP bzw. CYC in Frage - die
Sprachen der SPS halt - nicht zu vergessen AS für Abläufe ;-)

von Jörg H. (idc-dragon)


Lesenswert?

@Ithamar:
Die Diskussion läuft derzeit im PHC-Forum weiter, siehe hier und den 
dort verlinkten Vorläuferthread:
http://phc.foren-city.de/topic,337,-eigene-programmiersprache-fuer-phc.html
Was auf dem Controller läuft ist nicht das Problem (eine 
Tabellenlösung), das gibt es ja schon.
Parser generieren die Tools yacc oder Bison.

@GLT: Danke, habe ich mir angesehen. Ist leider doch zu verschieden, 
viel konnte ich da nicht abgucken.

von Markus B. (Firma: Embedit Mikrocontrollertechnik) (_mb_)


Lesenswert?

Jörg Hohensohn wrote:

> Es geht um die Beschreibungssprache, nicht um die Ausführung. Diese
> Sprache kennt keine Ausführungszeiten

Sicher hat diese Sprache eine Ausführungszeit. In einer SPS arbeitet 
eine normale CPU und die Beschreibungssprache ist eigentlich ein 
Interpreter der selbst in C geschrieben ist.

Die Abarbeitung ist nicht wirklich parallel

von Sucher (Gast)


Lesenswert?

Hallo

@Jörg einige Gedanken zu deiner Frage

-Grafische Programmierung so eine Art Labview for PHC (Sehr aufwändige 
Entwicklung  sollte man nicht das -teuere-  "Orginal" verwenden)

- Kennst Du die Seite http://www.microsps.com/ und deren grafische 
Programmierung

Von beiden Methoden halte ich nicht all zu viel zwecks Doku und 
nachvollziehbarkeit wen jemand drittes das erstellt hat.

Ein für mich neuer Ansatz wäre zun zunächst mal eine (mächtige) 
Funktions-Libreary in einer Text-Orientierten Sprache erstellen

Das eigentliche Benutzerprogramm wird dann mit (grafischen) UML-Tools 
erstellt.
-  Stichworte/ Schlagworte  Sequenzdiagramme, Zustandsdiagramme 
("Sequence diagram und Activity Diagram")

Das ist nur mal ein Adhoc Gedanke der nach viel Arbeit riecht.

Viele Grüsse
Achim

Ps.: Meine Hochachtung zu deinem vorgestellten  OpenPHC Projekt.Solltest 
Du da jemals Module verkaufen (Hutschienenausführung) hätte ich da sehr 
großes Interesse um mal damit zu "spielen". Hast du sowas geplant?

von Sucher (Gast)


Lesenswert?

Sorry vergessen:

http://sdedit.sourceforge.net/multithreading/example/index.html

in der Art. daraus dann deine Tabellen generieren.......

von Jörg H. (idc-dragon)


Lesenswert?

@Sucher:
> Solltest Du da jemals Module verkaufen (Hutschienenausführung) hätte ich da
> sehr großes Interesse um mal damit zu "spielen". Hast du sowas geplant?

Hast du den Thread mit der Platinen-Sammelbestellung gesehen?
Je nach Wunsch werde ich die auch bestücken lassen, dann ist es nicht 
mehr weit zum Modul, die beiden Platinen verbinden und die 
Gehäuseausbrüche feilen/fräsen.
Ein Platinensatz wird ca. 6-7€ kosten, bestückt weiß ich noch nicht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.