-> Hier kostenlos registrieren
Hallo zusammen,
ich habe hier gerade eine Anwendung bei der ich eine Heizungsrückschaltung einer Industrieanlage realisieren muss.
Hintergrund:
In der Anlage sind 20 Heizlasten zwischen 15kW und 66kW vorhanden. Insgesamt darf aber von der Anlage maximal 500kW gezogen werden.
Bestimmte Lasten dürfen zurückgeschaltet werden, andere auf keinen Fall.
Die Heizungsregelung ist bereits vorhanden.
Vorgehensweise:
1. Ich ersetze in der Heizungsregelung die Ausgänge mit Merkern
2. Ich summiere anhand der Merker die aktuelle Anforderung an Leistung der Anlage, entscheide welche Heizungen ich zurückschalte, welche heizen dürfen und gebe das an die Ausgänge entsprechend weiter.
Realisierung:
Ich habe 4 Datenbausteine
DB50 beinhaltet 20x die Pointeradresse der Merker
DB51 beinhaltet 20x die Pointeradresse der Ausgänge
DB52 beinhaltet 20x die jeweilige Heizlast in kW für jeden der 20 Kanäle
DB53 beinhaltet 20x die Information ob ein Kanal rückgeschaltet werden darf oder nicht.
Diese 4 DBs lasse ich im 10s Takt routieren, damit bei der nachfolgenden Schleife jeweils die Verteilung der Kanäle eine andere ist.
In einer Schleife addiere ich die angeforderten Lasten auf, überschreitet die Summe der bisheringen Lasten das Maximum werden nachfolgende Kanäle einfach nicht geschaltet.
Dabei habe ich nun folgenden Effekt.
Ich habe eine lokalvariable namens #index, die ich von 0 bis 19 hochzähle.
Um einen Pointer zu laden gehe ich wie folgt vor:
das funktioniert einwandfrei.
Lade ich allerdings nun das MW mit der Last:
bin ich immer um ein Datenwort nach hinten verschoben, im Vergleich zum Merker der ja als dword vorliegt, die Last liegt als int vor.
Weiß jemand wo mein Denkfehler liegt?
Danke.
ich habe hier gerade eine Anwendung bei der ich eine Heizungsrückschaltung einer Industrieanlage realisieren muss.
Hintergrund:
In der Anlage sind 20 Heizlasten zwischen 15kW und 66kW vorhanden. Insgesamt darf aber von der Anlage maximal 500kW gezogen werden.
Bestimmte Lasten dürfen zurückgeschaltet werden, andere auf keinen Fall.
Die Heizungsregelung ist bereits vorhanden.
Vorgehensweise:
1. Ich ersetze in der Heizungsregelung die Ausgänge mit Merkern
2. Ich summiere anhand der Merker die aktuelle Anforderung an Leistung der Anlage, entscheide welche Heizungen ich zurückschalte, welche heizen dürfen und gebe das an die Ausgänge entsprechend weiter.
Realisierung:
Ich habe 4 Datenbausteine
DB50 beinhaltet 20x die Pointeradresse der Merker
DB51 beinhaltet 20x die Pointeradresse der Ausgänge
DB52 beinhaltet 20x die jeweilige Heizlast in kW für jeden der 20 Kanäle
DB53 beinhaltet 20x die Information ob ein Kanal rückgeschaltet werden darf oder nicht.
Diese 4 DBs lasse ich im 10s Takt routieren, damit bei der nachfolgenden Schleife jeweils die Verteilung der Kanäle eine andere ist.
In einer Schleife addiere ich die angeforderten Lasten auf, überschreitet die Summe der bisheringen Lasten das Maximum werden nachfolgende Kanäle einfach nicht geschaltet.
Dabei habe ich nun folgenden Effekt.
Ich habe eine lokalvariable namens #index, die ich von 0 bis 19 hochzähle.
Um einen Pointer zu laden gehe ich wie folgt vor:
Code:
L #index
L 4
*I
SLD 3
LAR 1
AUF DB 50
L [AR1,P#0.0]
T #merker
Lade ich allerdings nun das MW mit der Last:
Code:
L #index
L 2
*I
SLD 3
LAR 1
AUF DB 52
L [AR1,P#0.0]
T #Last
Weiß jemand wo mein Denkfehler liegt?
Danke.