2 Programme parallel laufen lassen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
arnie25
Beiträge: 1
Registriert: Mi Okt 14, 2009 7:26 am

2 Programme parallel laufen lassen

Beitrag von arnie25 » Mi Okt 14, 2009 7:31 am

Hallo,

ich bin gerade das erste mal mit C++ in Kontakt getreten.

Mir stellt sich ein Problem:

Ich möchte 3 Relais ansteuern, 2 davon laufen alle 15 minuten an und das andere soll Parallel dazu alle 5 Sekunden ein Signal bekommen.

Wie ist es machbar das man Quasi 2 Programme Parallel laufen lässt?
Sozusagen wie bei Siemens Step 7, wo man verschiedene Bausteine hat und die dort Ablaufen lässt!

Hier das Programm für die 2 Relais:

Code: Alles auswählen

#LOOP
STATION_IO=OFF
EXTPORT=STATION_IO
LCD.POS 1,1
LCD.PRINT "REL 1"
REL1=on
EXTPORT=STATION_IO
PAUSE 10
Rel1=off
extport=station_io
pause 100                           
'-----------------------------------------------------
LCD.POS 1,1
LCD.PRINT "REL 2"
REL2=ON
EXTPORT=STATION_IO
PAUSE 10
Rel2=off
extport=station_io
pause 100
'-----------------------------------------------------
goto LOOP
Danke MfG

*edit by Dirty Oerti: Code-Tags eingefügt*

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: 2 Programme parallel laufen lassen

Beitrag von Dirty Oerti » Mi Okt 14, 2009 7:56 am

Dein Code da ist aber kein C++ Code, zumindest würde ich das mal so behaupten.
2 Programme parallel laufen zu lassen, darum kümmert sich dein Betriebssystem.
Du musst dem also nur mitteilen, dass zwei Programme "parallel" (das werden sie nicht, außer evtl auf Dual Core CPUs) laufen sollen.

Für dein Problem könnte ich mir folgendes vorstellen (vorrausgesetzt, das läuft über einen normalen Computer mit aktiven Betriebssystem):

Du schreibst EIN Programm, das als Argumente z.B. die Schnittstelle (die angesprochen werden soll) sowie einen Zeitintervall bekommt.
Das Programm spricht dann die gegebene Schnittstelle im gegebenen Intervall an.

Dieses Programm startest du dann 3 mal, mit jeweils der richtigen Schnittstelle. 2 Programme bekommen als Argument ein 15 Minuten-Intervall, eines bekommt ein 5-Sekunden-Intervall.
Um den Rest sollte sich dann das Betriebssystem kümmern.

Wenn du kein laufendes Betriebssystem hast, dann gehe ich erstmal davon aus, dass du in der Lage bist, Code auszuführen (das mal als Vorraussetzung).
Dann nehme ich an, dass du irgendeine Art Zeitgeber (einen Counter, der irgendeine Art Interrupt auslöst) hast.
Von diesem Zeitgeber sollte dir die Frequenz bekannt sein (er spricht jede Sekunde z.B. an).

Dann erstellst du dir 3 Variablen, für jede Schnittstelle eine.
Jede der Variablen wird bei einem Auslösen des Zeitgebers um eins herabgesetzt.
Ist die Variable bei 0 angelangt, dann wird die zugehörige Schnittstelle angesprochen und anschließend die Variable wieder auf ihren Startwert gesetzt.
Den Startwert erhältst du folgendermaßen:

Im Beispiel jetzt für den 5-Sekunden-Intervall:
Alle 5 Sekunde soll "ausgelöst" werden, dass heißt, du nimmst 5 * (Anzahl der Auslösungen des Zeitgebers pro Sekunde) als Startwert.

Ideal wäre es natürlich, wenn du die Frequenz deines Zeitgebers einstellen kannst (dann wäre in deinem Fall alle 5 Sekunden ideal).

Ich hoffe ich konnte dir soweit erstmal helfen :)
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8861
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: 2 Programme parallel laufen lassen

Beitrag von Xin » Mi Okt 14, 2009 8:29 am

arnie25 hat geschrieben:Hallo,
ich bin gerade das erste mal mit C++ in Kontakt getreten.

Mir stellt sich ein Problem:

Ich möchte 3 Relais ansteuern, 2 davon laufen alle 15 minuten an und das andere soll Parallel dazu alle 5 Sekunden ein Signal bekommen.

Wie ist es machbar das man Quasi 2 Programme Parallel laufen lässt?
Sozusagen wie bei Siemens Step 7, wo man verschiedene Bausteine hat und die dort Ablaufen lässt!
Du scheinst aus der SPS Ecke zu kommen?

In C/C++ würde ich mir einen Timer einrichten und mit alle 5 Sekunden ein Signal schicken lassen. Bei jedem Signal würde ich Relais 1 ansteuern und alle 300 Signale zusätzlich Relais 2 und 3. Wie Dirty schon sagte, dafür brauchst Du ein Betriebsystem, dass Dir einen Timer anbietet.
Mit einem Multitasking fähigem OS, könnte man das ganze noch in drei Threads aufteilen, damit alle Schaltungen gleichzeitig arbeiten. Da Deine Operation aber sowieso atomar ist ( "klack!" ), kann die Ansteuerung des einen Relais auf die Ansteuerung des zweiten Relais warten. Es würde erst einen unterschied machen, wenn eine Aktion wirklich Zeit verbraucht.
Hast Du die CPU für Dich alleine, so kannst Du laufend den Timer abfragen und bis er einem vorher berechneten Punkt erreicht. Dann berechnest Du den Punkt neu und steuerst die Relais an, die an diesem Punkt notwendig sind.

Ansonsten - willkommen im Forum!
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten