Hallo Zusammen,
ich muss für einen Auftrag eine Maschine automatisieren. Diese Maschine soll Schuttgüter in Container füllen. Die alte Programmstruktur war, eher klassisch. Also FBs, welche die Ventile, Motoren usw Steuern und regeln. Dann entsprechende Schrittketten, welche je nach Betriebsmodus die einzelnen Aktoren in Abhängigkeit von Sensoren und Logik steuern und Regeln.
Nun ist es so, dass die Software nun so aufgebaut werden soll, dass bestimmte Standards erfüllt werden. Das bedeutet, es könne sein, dass in der nächsten Maschine eine völlig andere Waage genutzt wird. Oder eine ganz andere FUs oder andere Komponenten.
Daher ist meine Idee, alles nach dem System State Machine zu erstellen. Das bedeutet, es gibt z.B. eine State Machine für die Dosierung. Gleichgültig, welche Waage oder welche unterliegenden Komponenten verwendet werden. Genau so Motor Controller usw.
Mal als Idee, es gibt 4 State Machines welche als Waage eingesetzt werden können. Diese in intern völlig unterschiedlich aber alle könne die gleichen Befehle empfangen und identische Rückmeldungen geben.
Mit andern Worten, einem Taxifahrer ist es egal ob er einen VW nutzt oder einen Skoda. Welche zwar völlig unterschiedlich sind (Dieses/ Benzin/ Marke) aber von der Bedienung ist alles identisch.
Oder ein anderes Beispiel: dem Fahrer eines LKW ist es egal, ob hinter dem LKW ein Tiefkühler, ein Tieflader oder ein Holztransporter ist. Alle haben den Zweck etwas zu transportieren.
An folgenden Punkten habe ich noch ein Verständnis Problem oder bitte ich mir ein paar Tipps zu geben.
a. Wie solle man die Steuerung einer State Machine aufbauen? Wenn ein solche Einheit z.B. einen bestimmten Ablauf ausführen muss, dann würde es doch ausreichen, einen Befehl zu senden "fahr in Grundstellung" und ab da nur noch den Befehl "next". Oder sollte man Befehle geben wir "fahren in Grundstellung" und dann "Zustand 1 ausführen" und dann "Zustand 2 ausführen" usw usw. Also sollte die Transaktion individuelle sein (ein Bool Eingang für jeden Schritt) oder ein Bool Eingang, welcher nur den Puls gibt um automatisch in den nächsten Schritt zu wechseln.
Ich sehe den Nachteil darin, dass eine komplexes Interface aufwendig in der Verschaltung ist aber auch gut zu lesen.
b. Was sind aus eurer Sicht die Vor und Nachteile wenn man als Befehl Zahlen übergibt. Also z.B. es gibt eine Variable als Kommando (int) 1=Fahre in Grundstellung; 2=Start Schritt A; 3=Start SchrittB usw.
Das bedeutet, die State Machine erhält Befehle über einen Eingang, welche verschiedene Befehle in Form eine Zahl empfängt und gibt den Status auch in Form eine Zahl heraus. 1=Befehl erfolgreich ausgeführt; 2= Busy; 3= Error usw.
Ich sehe den Nachteil, dass es eher etwas unübersichtlich ist wenn man einen Fehler sucht. Daher ist meine Idee, einen string zu übergeben. 'grundstell'= fahre in Grundstellung; 'SchrittA'= Start schritt A usw. Also anstelle einer Zahl wird eine Text übergeben. So wäre der Quelltext nicht so kryptisch und auch eine Servicetechniker kann das ganze noch lesen.
Was denkt Ihr über diese Idee?