Programm 'teilen'

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
fischerbuilder
Beiträge: 11
Registriert: 14 Jul 2018, 11:12

Programm 'teilen'

Beitrag von fischerbuilder » 05 Jan 2020, 21:58

Hallo Liebe Community,

Ich wollte fragen, ob es möglich ist ein RoboPro Programm aufzuspalten.
Also dass man zum Beispiel einen Automat hat der einen Auftrag abarbeitet und währenddessen einen Ladebalken auf dem Display anzeigt.

Wichtig: Ich will nicht das Display zwischen den einzelnen Schritten aktualisieren, sondern es in einem extra Abschnitt verwalten.

Hier eine kleine Skizze:
Dateianhänge
20200105_215306.jpg
20200105_215306.jpg (31.61 KiB) 3521 mal betrachtet

Karl
Beiträge: 2212
Registriert: 24 Sep 2016, 17:28

Re: Programm 'teilen'

Beitrag von Karl » 05 Jan 2020, 22:35

Hallo,
im Programmteil "Automat" kurz vor dem Ende in ein Nebenprogramm "Display" springen, Display aktualisieren,
dann wieder zurück zu "Automat" und weiter zu den drei Punkten.
Fehlt nach den drei Pukten noch ein Rücksprung nach oben um eine Schleife zu bilden. Wie weit der Rücksprung nach
oben führen soll hängt von der gegebenen Aufgabe samt der zugehörigen Abarbeitung des Programms ab, hier wohl
über den Teil "Automat"
Außerdem am Ende des Programmteils eine Entscheidung ob weiter das Programm ausgeführt werden soll, dann den
"Rücksprung" nach oben oder das Programm beendet werden soll, dann Ausgang mit Exit das Programm beenden.
Hoffen einigermaßen verständlich geschrieben zu haben.
Zuletzt geändert von Karl am 05 Jan 2020, 22:39, insgesamt 1-mal geändert.

Benutzeravatar
Bjoern
Beiträge: 630
Registriert: 04 Jan 2018, 12:34

Re: Programm 'teilen'

Beitrag von Bjoern » 05 Jan 2020, 22:38

Hallo Karl,

ich denke das wird nicht ganz klappen was du beschreibst. Dann würde der Ladebalken am Anfang nichts machen.

Mach einen 2ten Thread für den Ladebalken und übertrage den Status des Ladebalkens per Variable.
Die musst du natürlich im Automat aktualisieren.

Björn
https://gundermann-software.de/shop/
Der Shop für viele Community Projekte

Karl
Beiträge: 2212
Registriert: 24 Sep 2016, 17:28

Re: Programm 'teilen'

Beitrag von Karl » 05 Jan 2020, 22:43

Der Ladebalken wird doch erst initialisiert. Erst wenn der Programmteil "Automat" womöglich
sein " erstes Tun" beendet hat soll der Ladebalken aktualisiert werden. Andersrum hat doch
eigentlich wenig Sinn.
Wie es genau mit RoboPro jetzt gemacht wird, da wird der Threadsteller ein bischen tüfteln müssen.

Benutzeravatar
PHabermehl
Beiträge: 2429
Registriert: 20 Dez 2014, 22:59
Wohnort: Bad Hersfeld

Re: Programm 'teilen'

Beitrag von PHabermehl » 05 Jan 2020, 22:50

Hallo,

ich denke auch, dass man zwei Threads verwenden sollte, genau wie Björn geschrieben hat.

Der. Display-Thread zeigt immer nur den Wert der Fortschritts-Variable anzeigt, der im Hauptthread gesetzt wird.

Gruß. Peter
https://www.MINTronics.de -- der ftDuino & TX-Pi Shop!

viele Grüße
Peter

Karl
Beiträge: 2212
Registriert: 24 Sep 2016, 17:28

Re: Programm 'teilen'

Beitrag von Karl » 05 Jan 2020, 22:55

Wie genau das in RoboPro realisiert wird ist erstmal egel, kenne die Aufgabe letztendlich
nicht.
Laut der Skizze springe ich vor dem Programmteil "Automat" ins Nebenprogramm "Display"
und zurück nach dem Programmteil "Automat".
Es passiert daß der Programmteil "Automat" niemals ausgeführt wird.
Da kein Rücksprung bekannt ist wird das Programm auch nur einmal ausgeführt inkl.
des Programmteils "...". Ende
Auch wenn ich mehrere Threads parallel laufen lasse, irgendwo springe ich doch von einem
Thread in den anderen Thread und wieder zurück. Die Logik ist prinzipiell die gleiche.

Lars
Beiträge: 564
Registriert: 25 Okt 2016, 21:50

Re: Programm 'teilen'

Beitrag von Lars » 05 Jan 2020, 23:50

Hallo zusammen,
Bjoern hat geschrieben:
05 Jan 2020, 22:38
Mach einen 2ten Thread für den Ladebalken und übertrage den Status des Ladebalkens per Variable.
Die musst du natürlich im Automat aktualisieren.
es ist zwar prinzipiell eine gute Idee, eine Oberfläche in einem eigenen Thread zu betreiben - aber natürlich nur dann, wenn es Nebenläufigkeit auch tatsächlich gibt. In der Anwendung des OP ist das einzige Oberflächenelement direkt vom Fortschritt im Arbeitsthread abhängig und es bleibt auch sonst keinerlei Bedienhandlung für den Nutzer übrig, auf die ein Oberflächenthread warten könnte. Es fragt sich, warum man in dieser Lage zusätzliche Prozessorlast für die Koordination von Threads erzeugen sollte, wenn es immer genau einen einzigen Zeitpunkt gibt, zu dem eine Aktualisierung des einzigen Oberflächenelementes Sinn macht, nämlich wenn die Schleife im Arbeitsthread des OP mindestens einmal durchgelaufen ist.

Unter Windows gehören selbst einfache Textausgaben auf der graphischen Oberfläche zu den langsamsten Operationen - auch im Vergleich zu den vielen anderen "langsamen" Operationen, die eine Anwendung so anstoßen kann. Je nach "Kleinteiligkeit" der Schleife muß man daher oft sicherstellen, daß eine Aktualisierung nicht nach jedem einzelnen, sondern beispielsweise nur nach jedem 10., 100. oder gar 1000. Durchlauf erfolgt - und zwar ganz gleich, ob nebenläufig in einem eigenen Thread oder seriell in der Schleife angestoßen. Einmal ganz abgesehen davon, daß ein Fortschrittsbalken den Fortschritt eines einzelnen oder auch nur weniger Durchläufe vielleicht gar nicht sichtbar machen kann.

Mit freundlichen Grüßen
Lars

vleeuwen
Beiträge: 1557
Registriert: 31 Okt 2010, 22:23
Wohnort: Enschede (NL)
Kontaktdaten:

Re: Programm 'teilen'

Beitrag von vleeuwen » 06 Jan 2020, 11:28

I think that you need to take in account in your programming design strategy that RoboPro is workflow oriented programming paradigm with data flow for process synchronization. It also doesn't know event driven programming.
It doen't have threads.
This differs essentially from sequential programming (C, C++, C#, Java, Python, ECMAScript (Jscipt) etc.) or functional/declarative programming (F#, SQL, lambda expressions in C++,C#, etc.)
===========Googl translate for what it is.================================================================
Ik denk dat je in je programmeerontwerpstrategie rekening moet houden met het feit dat RoboPro een workflow-georiënteerd programmeerparadigma is met gegevensstroom voor processynchronisatie. Het kent ook geen gebeurtenisgestuurde programmering.
Het heeft geen threads.
Dit verschilt wezenlijk van sequentieel programmeren (C, C ++, Python, C #, ECMAScript (Jscipt) enz.) Of functioneel/declaratief programmeren (F #, SQL, lambda in C++, C# enz.)

Je pense que vous devez prendre en compte dans votre stratégie de conception de programmation que RoboPro est un paradigme de programmation orienté workflow avec flux de données pour la synchronisation des processus. Il ne connaît pas non plus la programmation événementielle.
Il n'a pas de "threads".
Cela diffère essentiellement de la programmation séquentielle (C, C ++, Python, C #, ECMAScript (Jscipt) etc.) ou de la programmation fonctionnelle (F #, SQL etc.)

Ich denke, dass Sie in Ihrer Programmierstrategie berücksichtigen müssen, dass RoboPro ein Workflow-orientiertes Programmierparadigma mit Datenfluss für die Prozesssynchronisation ist. Es kennt auch keine ereignisgesteuerte Programmierung.
Es hat keine Fäden.
Dies unterscheidet sich wesentlich von der sequentiellen Programmierung (C, C ++, Python, C #, ECMAScript (Jscipt) usw.) oder der funktionalen Programmierung (F #, SQL usw.).

Lars
Beiträge: 564
Registriert: 25 Okt 2016, 21:50

Re: Programm 'teilen'

Beitrag von Lars » 06 Jan 2020, 17:57

Hallo vleeuwen,
vleeuwen hat geschrieben:
06 Jan 2020, 11:28
I think that you need to take in account in your programming design strategy that RoboPro is workflow oriented programming paradigm with data flow for process synchronization. It also doesn't know event driven programming.
It doen't have threads.
it has in fact threads because it has workflows (which is just another term for thread here) and you could start multiple workflows or threads (conceptually) parallel.
vleeuwen hat geschrieben:
06 Jan 2020, 11:28
This differs essentially from sequential programming (C, C++, C#, Java, Python, ECMAScript (Jscipt) etc.) or functional/declarative programming (F#, SQL, lambda expressions in C++,C#, etc.)
ROBO Pro differs, but it belongs still to the group of sequential programming tools. But you can (conceptually) run more than one sequence at a time, so it provides routines to synchronize access to commonly used variables.

Mit freundlichen Grüßen
Lars

vleeuwen
Beiträge: 1557
Registriert: 31 Okt 2010, 22:23
Wohnort: Enschede (NL)
Kontaktdaten:

Re: Programm 'teilen'

Beitrag von vleeuwen » 07 Jan 2020, 09:22

Certainly below the surface RoboPro is using all the low level stuff.
The CPU is still a sequential system. At that level even thread don't exist, if present only hardware context switches.
However the question is "what is RoboPro offering" in terms of his workflow elements.
For example with functional programming you also don't ask yourself how it is working but only what will be the result.
RoboPro is only offering processes.

RoboPro is sequential in terms of the functional workflow elements. For example: "change the power of a motor" or "what is the value of a variable at this moment" or "wait until the value of a variable will change in the futur".
The programmer doen't describe how the workflow element change the power of the motor.
It is not sequential in terms of C or C# programming elements.

Antworten