Brauche Hilfe-weiß nicht mehr weiter

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute!
Habe ein großes Problem!
Folgendes habe ich in einem FB programmiert:

in Start BOOL
in TaStoerPumpe BOOL
in Betrieb TIMER
in Betriebsdauer S5TIME (20sec)
in Pause TIMER
in Pausenzeit S5TIME (60sec)
out Pumpe BOOL
out LaRotStoe BOOL
out LaGelbPau BOOL
in_out StartStoerMerk BOOL
in_out StartMerker BOOL
var FlankeHilfsBitPumpe BOOL
var FlankePumpe BOOL
var MerkerStoerPumpe BOOL


u #Start
un #Pause
l #Betriebsdauer
sa #Betrieb
u #Betrib
= #Pumpe


Den Rest schenk ich mir,weil das nicht so wichtig ist.
So soll es laufen:Ich hab im FB das Verhalten einer Pumpe programmiert.
Dieser FB wird im OB 8 mal aufgerufen (für 8 Pumpen).
Die Pumpe läuft 20sec,macht dann 60sec Pause.
Nun soll man,und das ist jetzt das große Problem,im DB einen DWORD Parameter anlegen (wo mache ich das),und auf diesen soll jeweils die Zeit,die die Pumpe läuft,aufaddiert werden.Man kann einen Konstanten Wert nehmen,also immer die 20sec aufaddieren,besser wäre aber,den Zeitwert,der aufgerufen wird (#Betriebsdauer) auf dieses DWORD zu addieren.Man soll die Zeitbasis ausmaskieren,den BCD-Wert nach Integer wandeln und anschließend auf den Wert im DB addieren aber wie mache ich das?
Wer kann mir helfen?


Danke schon mal!!

Gerd
 
Anonymous schrieb:
Man soll die Zeitbasis ausmaskieren,den BCD-Wert nach Integer wandeln und anschließend auf den Wert im DB addieren aber wie mache ich das?
Gerd

nehmen wir an dein zeitwert steht in db10.dbw1
mit der negativen flanke der pumpe (ein->aus) löst du das addieren aus.

Code:
un #negFla
spb m001
l db10.dbw1
l w#16#0FFF // linke tertrade enthält die zeitbasis
uw // die hiermit entfernt wird
bti //bcd -> int
itd  // int -> dint
l db10.dbd2  //die gespeicherte zeit
+d
t db10.dbd2
m001: nop 0

zeitbasis in hex:
3 = 10 sek
2 = 1 sek
1 = 0,1 sek
0 = 0,01 sek
 
Als was soll ich das DWORD im FB deklarieren:in,out,in_out,var oder temp?Es reicht,wenn der Wert des DWORD im Datenbaustein abrufbar ist!


Danke Jungs!



Gerd
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Gast schrieb:
Dieser FB wird im OB 8 mal aufgerufen (für 8 Pumpen).
und weiter:
Als was soll ich das DWORD im FB deklarieren:in,out,in_out,var oder temp?Es reicht,wenn der Wert des DWORD im Datenbaustein abrufbar ist!

1. es immer eine gute Idee, einen FB/FC mit Parametern zu programmieren, besonders wenn er 8 mal verwendet werden soll.

2. das DWORD hier muß als in_out deklariert werden - Du benötigst einerseits den alten Wert und möchtest andererseits den neuen Wert abspeichern.

Warum eigentlich einen FB und keinen FC?

Peter
 
1. Ich würde das Programm im FC shreiben (man braucht keinen IDB)
2. Warum S5 Zeiten nutzen und das Ergebnis wandeln ? Man kann S7 Zeiten nehmen z.B. SFB 3,4 oder 5. In dem Fall hat man sofort das was man wollte, d.h. in einem DD gibt man die Länge der Zeit und in zweitem DD kriegt man die Antwort von SFB (S7 Zeiten sind in ms parametriert, Beispiel 1234 = 1,234 sek oder 123 456 789 = 123456,789 sek)
 
Zurück
Oben