Hi!
Ich habe ein gewerblich genutztel Projekt mit einem AVR (Atmega128).
Die Firmware ist über die Jahre immer ausgereifter geworden und
behandelt inzwischen alle aus der Praxis denkbaren Fehler-Szenarien
recht zuverlässig.
Eines stört jedoch:
Das Gerät enthält eine "Logic", die das vom Bediener wahrnehmbare
Geräte-Verhalten darstellt.
Genau dieser Teil soll immer wieder ein bisschen anders sein:
- leicht anderer Ablauf
- ein HW-Zustand wird berücksichtigt / ignoriert
Darum die Frage:
Kann man so ein Legacy-Projekt im nachhinein noch mit einer
SPS-Fähigkeit ausstatten?
SPS:
- soll user definierbare Logik ausführen
- per grafischem PC-Programm durch User editierbar
- eigene HW (siehe Bild) kann in PC-Editor als selbst definierter Block
eingebunden werden
Optimal wäre natürlich,
wenn es ein Stück C-Code + PC-Tool gibt, die über UART mit einander
reden können.
für mich wäre es aber auch akzeptabel, die vorhandene HW mit einem
embedded AddOn-Board zu versehen, auf dem dann die SPS + PC-Anbindung
läuft.
max. Footprint für SPS auf AVR:
- 30k Flash
- 4k RAM
- Zykluszeit biszu 100ms ok, da Schnelles direkt in der AVR-FW erledigt
wird.
Habt Ihr da Tips?
Man kann, ist aber ziemlich aufwändig.
Möglichkeit 1: Du schreibt einen Code-Generator der aus dem
Programmablaufplan (möglicherweise UML) ein C-Programm erzeugt, welches
dann in eine binäre Firmware für den AVR compiliert wird.
Möglichkeit 2: Du schreibt einen Interpreter, der vom AVR ausgeführt
wird. Das zu interpretierende Programm wird von einem austauschbaren
Speicher (z.B. SD Karte) geladen.
Möglichkeit 3: Du wechselst auf einen anderen µC, der Code aus dem RAM
ausführen kann. Dann kann die Firmware aus einem festen Teil bestehen,
die änderbaren Funktionen werden von extern ins RAM geladen und dort
ausgeführt. Das wird man dann warscheinlich mit einem Code-Generator
kombinieren wollen.
Beides ist nicht mal eben so an einem Wochenende erledigt, der Aufwand
lohnt sich nur bei Anwendung in größerer Stückzahl.
Also PC-seitig bin ich um jeden Tip dankbar, der auf was fertiges
verweist.
zu Deinen Vorschlägen:
1) die FW soll beim User unverändert laufen, will auch keine libs etc.
von der FW rausgeben und der User soll seine Logik selbst verändern
können.
1) ist also eher ungeeignet.
2)Hab ich schon drüber nachgedacht, dazu kommt aber noch die Integration
in ein PC-Tool, das dann Edit & Sync zum uC macht.
Das wird dann aber schon ne größere Nummer. Sowas würd ich lieber
zukaufen.
Hast du da einen Tip?
3) Sehr interessanter Vorschlag, den ich mir für zukünftige Projekte im
Hinterkopf behalte. Vorteil: der Code läuft dann auch sehr schnell (muss
aber dennoch gegen libs gebaut werden).
Meine derzeitige HW im Feld will ich lediglich um ein (zu entwickelndes)
Steckmodul oder nur FW aufrüsten.
Und auch hier braucht man noch die PC-Seite.
Ich find sowas hier einen guten Ansatz:
www.microsps.com
Nur da bekommt man eben einen monolithischen uC mit FW .. ohne
Intrgration ins eigene Projekt.
kennt jemand noch andere Möglichkeiten, sodass ich meine HW so lassen
kann und PC-Tool mit dazu bekomme?
SPS_auf_uC schrieb:> Genau dieser Teil soll immer wieder ein bisschen anders sein:> - leicht anderer Ablauf> - ein HW-Zustand wird berücksichtigt / ignoriert
Parametrierbar machen. Schau, was in der Vergangenheit warum und wie
geändert wurde, das alles abstrahieren, und parametrierbar machen.
Vor allem wenn man schon viele Anpassungen gemacht hat, müssten genügend
Erfahrung vorliegen.
Am Anfang erscheint das oft unmöglich, aber mit etwas nachdenken geht
das.
Was für Änderungen sind das denn genau? Erzähl mal ein wenig...
SPS_auf_uC schrieb:> Eines stört jedoch:> Das Gerät enthält eine "Logic", die das vom Bediener wahrnehmbare> Geräte-Verhalten darstellt.> Genau dieser Teil soll immer wieder ein bisschen anders sein:> - leicht anderer Ablauf> - ein HW-Zustand wird berücksichtigt / ignoriert>> Darum die Frage:> Kann man so ein Legacy-Projekt im nachhinein noch mit einer> SPS-Fähigkeit ausstatten?
Natürlich.
> max. Footprint für SPS auf AVR:> - 30k Flash> - 4k RAM> - Zykluszeit biszu 100ms ok, da Schnelles direkt in der AVR-FW erledigt> wird.>> Habt Ihr da Tips?
Du brauchst es bloß zu programmieren, wobei die Hauptarbeit auf dem PC
zu erledigen ist.
Auf µC-Seite sind nur zwei Sachen zu implementieren:
1) Kommunikation mit dem Host zum Download des Programmstücks und dessen
Ablage im Flash.
2) Aufruf der entsprechenden Programmstücke während der Laufzeit.
Alles in allem: Kinderkram, reine Fleißarbeit. Genau das dürfte auch
dein Problem sein, mit Fleiß haben die C&P-Programmierer es ja
üblicherweise nicht so...
Hi
Die Menü-Reihenfolge kann man ja durch eine Art Zähler/ID anpassbar
machen.
Wenn ein Menü nicht mehr zur Verfügung stehen soll, eine Null rein,
weg/nicht mehr anwählbar.
Wenn es nur Ja/Nein Entscheidungen sind (Menü sichtbar, HW-Zustand wird
berücksichtigt), sollte eine ID/Funktionsbyte schon gehen.
Schreib Mal ein Beispiel, daß wir nicht so abstrakt herum raten müssen.
MfG
@Automatisierungsexperte
> Parametrierbar machen. Schau, was in der Vergangenheit warum und wie> geändert wurde, das alles abstrahieren, und parametrierbar machen.
Den Weg hab ich versucht mit der Erkenntnis, dass man damit die
Varianten abbilden kann, die man heute kennt - nicht aber die
Kreativität der Leute und ihrer Ideen in der Zukunft.
Vorteil:
- FW-Verhalten kann in Grenzen gehalten werden
- FW ist gut testbar
Nachteil:
- FW wird über die Zeit immer unübersichtlicher
- Die Konfiguration FW-interner Schalter wird auch für den User schnell
unübersichtlich und damit schwer bedienbar
@c-hater
> reine Fleißarbeit
korrekt! Damit eine grafische Software zur Formulierung eine
"Funktionsplans" (FUP) + Fehlertolerante-Anbindung an uC
nutzerfreundlich funktioniert, ist eine Menge Fleißarbeit nötig - zumal
das andere sicher schon ausgereifter hinbekommen haben.
Im Hobby-Bereich ist das per Definition anders, aber im gewerblichen
Bereich muss man sich schon fragen, ob man sich solche Fleißarbeit
leisten will.
@ho-bit-hun-ter
> Schreib Mal ein Beispiel, daß wir nicht so abstrakt herum raten müssen.
Ok, Beispiel is eine Statemachine:
DI(a) = digital Input abstrahiert aus komplexen Sensor-Daten
DI(d) = digital Input aus abstrakten Daten-Quellen
DO = digital Output
- prüfe Füllstand DI(a)
- hole Parametrierung aus dem Speicher
- prüfe auf Versorgung mit validen Parametern DI(d)
- errechne zu errechendes Volumen (je nach Parametrierung)
- rechne Volumen in erwartete Sensor-Daten um
- schalte Pumpe ein (DO)
- zeitabhängig muss nun eine Reaktion am Sensor kommen, sonst Fehler
- schalte Ventil an (DO)
- innherhalb einer Zeit muss zusätzliche Sensor-Reaktion kommen, sonst
Fehler
- je nach aktuellem Stand der Sensor-Daten muss die Pumpleistung
erhöht/reduziert werden, um in einem Sollwert-Korridor zu bleiben
- Sensor-Wert des Gesamt-Prozesses erreicht? -> Dann schalte alles ab
- bei Fehler: alles abschalten & zugehörigen Fehler ausgeben
Themen wie Visualisierung (Menu-Texte, LEDs, Fehlermeldungen) und
Datalogging will ich als SystemService außerhalb dieser Business-Logic
halten.
Die Frage ist also, gibt es da Frameworks / Automatisierungs-Baukästen,
an die ich mein System anbinden kann (idealerweise über UART / SPI).
Wobei mein Projekt closed source ist .. und auch bleiben soll.
Dise Projekte befassen sich mit SPS auf uC Ebene, habe jedoch alle
gemein, dass mit dem Ergebnis nur ein einziger uC und seine IOs
angesteuer werden können:
- Flowcode
- lunaavr
- picaxe
- www.microsps.com
... ist alles schon dicht dran mit grafischem FUP/KOP-Editor, jedoch
alles ohne Integrations-Möglichkeit in ein bestehendes Projekt :-/
Kennt jemand integrierbare Soft-SPS-Projekte?
wie ganz am Anfang beschrieben wären für mich 2 Varianten interessant:
1) SoftSPS in den vorhandenen Atmega128 integrieren
2) SoftSPS auf separate uC laufenlassen & zyklisch Daten mit Atmega128
austauschen (dazu müsste halt ein Huckepackboard her)
Viele Grüße
SPS_auf_uC schrieb:> Den Weg hab ich versucht mit der Erkenntnis, dass man damit die> Varianten abbilden kann, die man heute kennt - nicht aber die> Kreativität der Leute und ihrer Ideen in der Zukunft.
Naja, es gibt schon einen Unterschied zwischen "parametrieren" und
"auswählen". Du hast vermutlich letzteres gemacht bzw. Dich davon zu
sehr beeinflussen lassen.
Eine Aneinanderreihung von Varianten aus der Vergangenheit, erzeugt
keine Parametrierbarkeit wie ich sie meine, sondern nur eine
Auswahlmöglichkeit.
Der Trick ist, aus den schon bekannten Optionen zu abstrahieren. Dazu
müssen die Gemeinsamkeiten der schon umgesetzten Optionen gesucht
werden, und ganz wichtig, aktiv nach noch nicht umgesetzten Optionen
suchen die denkbar wären. Und aus dieser Sammlung von Optionen, realen
und gedachten, kann man die Gemeinsamkeiten und Konzepte
verallgemeinern, und zwar so, dass schon umgesetzte und gedachte
Optionen nur noch eine Spezialisierung der Verallgemeinerung sind.
Das klingt erstmal abstrakt und unmöglich, geht aber bei Systemen die
immer aus den gleichen Teilen gebaut werden, sehr gut. Dein Gerät
arbeitet im Kern ja immer gleich.
Als Ideengeber schau Dir mal ordentliche Frequenzumrichter und
Servoregler diverser Hersteller an. Diese Regler sind ein einziger,
großer Signalflussplan und Du kannst an vielen verschiedenen Stellen
virtuelle Schalter durch Parameter umlegen, und so eine extreme
Parametrierbarkeit erreichen.
Stefan U. schrieb:> Die Frage war schon von Anfang an klar. Ich schätze nur, daß Dir da> nieman so direkt weiter helfen kann, wie du hoffst.
Es gab ja hier im Forum auch schon genau solche Projekt-Ideen:
"MINI-SPS mit AVR od. ARM" 2009
Beitrag "MINI-SPS mit AVR od. ARM"
Hätte ja auch gut sein können, dass jemand dazu auch Anbieter kennt. Ich
würde mir auch "Bezahl-Lösungen" anschauen.
@ Automatisierungsexperte:
Ja, hab die Idee schon verstanden. Damit kann man die Anwendungsfälle
abdecken, die einem heute einfallen. (wie auf dem Foto)
Ich hab die Erfahrung gemacht, dass die User meine Hardware auch gern
"zweckentfremden" und dann in Szenarien einsetzen wollen, an die ich in
der Software-Parametrierung noch gar nicht gedacht habe.
Genau das will ich mit einer freieren Programmierbarkeit erreichen
(solange meine Aufbauvorschriften und Anwendungsfeld nicht verlassen
wird).
SPS_auf_uC schrieb:> Damit kann man die Anwendungsfälle> abdecken, die einem heute einfallen. (wie auf dem Foto)
Kleiner gehts nicht? Probiere es mal mit anständiger Auflösung und dann
als PNG. Dann kann man vielleicht auch irgendetwas erkennen.
Es gibt SPS Steuerungen, auf der man mehrere Tasks (SPS Programme)
gleichzeitig laufen lassen kann. Damit könntest Du deine Programm laufen
lassen und der Kunde kann für sich auch einen Task auf machen.
Kommunikation zwischen den Programmen geht mittels "Globalem
Datenbereich".
Damit brauchst Du Dein Programm nicht veröffentlichen und jeder kann
noch sein individuelles Programm einspielen. Eingänge können von jedem
Task gelesen werden, Ausgänge sollten nur von einem gesetzt werden.
Einen ordentlichen Editor bietet die Firma natürlich auch.
https://www.bachmann.info/produkte/steuerungssystem/
Ist ein Industrieprodukt und kostet entsprechend Geld.