Page 1 of 1

Harte Echtzeit mit Python oder C?

Posted: 20 May 2021, 12:40
by Rechenschieber
Hallo Forum,

ich würde gerne den RevPi als digitalen Regler einsetzen und benötige deswegen harte Echtzeit Anforderungen. Das bedeutet, das beispielsweise alle 20 ms ein Wert ausgegeben werden muß!
Jetzt stellt sich für mich die Frage wie das umzusetzen ist. Geht das mit Pyton oder nur mit C bzw. was ist dann dabei zu berücksichtigen?

Gruß, Rechenschieber

Re: Harte Echtzeit mit Python oder C?

Posted: 21 May 2021, 09:40
by p.rosenberger
Hallo Rechenschieber,

das Thema Echtzeit ist leider Komplexer auf einem Linux System ist komplexer als man denkt. Wir haben auf unserem System den PREEMPT_RT Echtzeitpatch. Dies ist aber nur die halbe Miete. Mit welchen Schnittstellen willst du arbeiten? Und ich glaube kaum dass Python für Echtzeitprogrammierung taugt. Nach eine kurzen suche bin ich über dies gestolpert:
https://stackoverflow.com/questions/707 ... via-python
Python's stop-the-world garbage collector makes latency non-deterministic. When Python decides it needs to run the garbage collector, your program gets stopped until it finishes. You may be able to avoid this through careful memory management and carefully setting the garbage collector parameters, but depending on what libraries you are using, you may not, too.
Und auch bei der Programmierung mit C muss man auf verschiedene Dinge achten. Ohne weiter Informationen kann ich dir aber kaum sagen ob dein Projekt auf dem RevPi realisierbar ist.

Viele Grüße

Re: Harte Echtzeit mit Python oder C?

Posted: 21 May 2021, 10:30
by Rechenschieber
Hallo Herr Rosenberger,

das mit dem Garbage Collector in Python hatte ich mir auch schon so gedacht. Dann muß man auf C ausweichen.
Es würde darum gehen einen analogen Wert einzulesen und nach entsprechenden Berechnungen wieder einen analogen Wert auszugeben (z.B. über RevPi AIO). Die Ausgabe muß dabei immer im gleichen Tankt erfolgen. Eine Feldbus-Schnittstelle wäre nicht notwendig.

Wäre soetwas machbar?

Gruß, Rechenschieber

Re: Harte Echtzeit mit Python oder C?

Posted: 22 May 2021, 08:10
by danielcharles
Hello

No, you cannot write real-time programs with it. But even with C ++ or C you need an underlying real-time operating system.

I don't know what you want to do. But a lot can be solved by passing the real-time evaluations on to microcontrollers. These then only forward the information to the computer if it is relevant for global control. For communication with the microcontrollers you are usually well served with USB. This means that the data can be transferred to and from the µC with 1.5 Mbit, 12 Mbit or even 480 Mbit.

For example:http://www.siphec.com/converter/index.html#USB2PARALLEL

Communication with the microcontrollers via USB is again something that can be done with Python.

- PyUSB:http://pyusb.berlios.de/
- http://web.media.mit.edu/~dmerrill/sens ... howto.html

Thanks
Daniel Charles

Re: Harte Echtzeit mit Python oder C?

Posted: 25 May 2021, 11:59
by Rechenschieber
Hi Charles,

i understand that Python is not the way for Realtime Applications. I am fine to do it in C with the RevPI Core (including the well known Linux Preempt-RT-Patch).
I want to programm a digital controller that reads an analog value and after some calculations output an analog value every 20 ms . I think the RevPi AIO Modul can do this. But it is very important that the value will be refreshed exactly every 20 ms. Otherwise the control loop will get in trouble.

Best regards,
Rechenschieber

Re: Harte Echtzeit mit Python oder C?

Posted: 25 May 2021, 13:59
by dirk
Hi 20ms Zykluszeit ist sportlich. Das Worst Case Szenario bedeutet 2x Zykluszeit plus die Zeit der Verarbeitung durch das Programm.
Du kannst die Zykluszeit abfragen durch die Variable “RevPiIOCycle”. Beschreibung siehe hier:
https://revolution.kunbus.de/pictory-ne ... -2-jessie/
Ich denke wenn Du einen Wert von 5 hast bist Du auf der sicheren Seite.