Mittelwertbildung SIWAREX U

Zuviel Werbung?
-> Hier kostenlos registrieren
1. muss bei der Abfrage von "Nicht Busy" statt einem Connector (#) eine Pulsbildung (FP).

2. Fällt mir auf das am FB Busy auf den FB gelegt wurde, aber nirgendwo auftaucht

3. Wenn gewogen wird ist Lesen immer 1, damit wird immer gewogen und eventuell ist Busy immer 1 oder immer 0


Kannst da das Projekt mal hochladen oder an jabbapoint(at)gmx.de senden?
 
Danke für deine Antwort jabba!

Ich hatte es ursprünglich so wie in deinem Beispiel versucht - also statt des Connectors einen positiven Flankenmerker gesetzt.

ABER:

Dadurch, dass der Busy-Ausgang bei mir nicht von 1 nach 0, bzw. umgekehrt (sondern immer 0 ist!) wechselt, kommt es zu keiner Flankenbildung und die Messwerte werden nicht in den DB geschoben.

Was meinst du mit... "das am FB Busy auf den FB gelegt wurde, aber nirgendwo auftaucht"?

PS: Es ist doch nicht ok, dass der Busy-Ausgang stets 0 ist, oder?

Vielen Dank!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Petzi,
bekommst Du denn überhaupt Messwerte?
Hast Du schreiben und lesen gegenseitig verriegelt?
Es darf immer nur ein Auftrag aktiv sein.
 
Hallo Paule,

ja, wenn ich den Connector verwende, dann bekomme ich die Messwerte in den DB geschrieben.

Soweit ich es verstanden habe, müsste aber doch der Busy-Ausgang während einer Leseanforderung (M15.0, M15.2, M15.4) den Status 1 haben und dann wieder den Status 0 erhalten. Bei mir ist er jedoch immer auf 0 - woran kann das liegen?

Aber gelesen, bzw. geschrieben wird ja offensichtlich trotzdem...
 
Zuletzt bearbeitet:
Hast Du schreiben und lesen gegenseitig verriegelt?
Es darf immer nur ein Auftrag aktiv sein.

Also es funktioniert soweit schon - das Problem ist jetzt noch:

Wird der Start für eine neue Wiegung oft hintereinander gedrückt, so wird ein falscher Wert in die Messwerte_1 bis 3 eingetragen.

Liegt das evtl. an der nicht vorhanden Verriegelung, bzw. wie kann ich so eine Verriegelung vornehmen?

Vielen Dank für die Unterstützung!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also es funktioniert soweit schon - das Problem ist jetzt noch:

Wird der Start für eine neue Wiegung oft hintereinander gedrückt, so wird ein falscher Wert in die Messwerte_1 bis 3 eingetragen.

Liegt das evtl. an der nicht vorhanden Verriegelung, bzw. wie kann ich so eine Verriegelung vornehmen?
Also ich triggere meine Verwiegung durch ein definiertes Startsignal an und bekomme (was ich noch weiß) meine Fertigmeldung über das Busy Signal.
Das letzte Mal als ich die genommen habe ist schon eine weile her.

Woran ich mich noch gut erinnern kann ist die ganze Verriegelung beim schreiben und lesen von verschiedenen Aufträgen wie Justage inklusive Gewichtswerte, Nullstellen Wiegen und das bei einer zweikanaligen Siwarex.
Und das das Siemensbeispiel da alles andere als sauber und korrekt war.
 
Danke Paule, ja über das Busy-Signal zu verriegeln macht wohl Sinn...

ABER:

Bei mir ist das Busy-Signal immer 0 - und trotzdem funktionieren die beiden SFC's.

Habe jetzt mal in dem Siemens Beispiel geschaut; auch dort ist das Busy-Signal immer 0. Normalerweise sollte dieses Signal doch beim Lesen oder Schreiben 1 sein und dann wieder 0.

Frage:

Wie kann das sein - muss da evtl. noch etwas anderes eingestellt werden? :confused:

Ist in meinem geposteten Code vielleicht etwas falsch, so dass Busy immer 0 ist?
 
Zuletzt bearbeitet:
Du muss nicht auf die Flanke abfragen , sondern hinter dem Aufruf auf nicht Busy.

Mit der SFC 59 “RD_REC” (read record) lesen Sie den Datensatz mit der
Nummer RECNUM von der adressierten SIWAREX U-Baugruppe. Sie starten
den Lesevorgang, indem Sie beim Aufruf der SFC 59 den Eingangsparameter
REQ mit 1 belegen. Falls der Lesevorgang sofort ausgeführt werden
konnte, liefert die SFC am Ausgangsparameter BUSY den Wert 0 zurück
.
Falls BUSY den Wert 1 hat, ist der Lesevorgang noch nicht abgeschlossen.
Der gelesene Datensatz wird nach fehlerfreier Datenübertragung in den durch
RECORD aufgespannten Zielbereich eingetragen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du muss nicht auf die Flanke abfragen , sondern hinter dem Aufruf auf nicht Busy.

In deinem Beispiel ist aber doch eine Flanke programmiert - das klappt bei mir jedoch nicht, da das Busy-Signal immer 0 ist - also niemals von 0 nach 1 oder umgekehrt wechselt!
 
Zuletzt bearbeitet:
Da bin ich aber so wie von dir beschrieben davon ausgegangen das Busy je eigentlich kommen sollte (Hab ja geschrieben das ich das nie abgefragt habe).

Jetzt da du geschrieben hast , das es immer noch auf 0 stehen bleibt, habe ich gerade mal das Handbuch geöffnet .... uns siehe da und muß gar nicht kommen. Daher war das mit der Flanke von mir falsch, da Busy nicht immer kommt. Wenn man das jetzt im Programm trotzdem abfragen will, mußt due nur auf "Nicht Busy " abfragen. Falls Busy eine Temp-Variable sein sollte aber darauf achten, das die Abfrage hinter dem SFC aufruf erfolgt.
 
Wenn man das jetzt im Programm trotzdem abfragen will, mußt due nur auf "Nicht Busy " abfragen. Falls Busy eine Temp-Variable sein sollte aber darauf achten, das die Abfrage hinter dem SFC aufruf erfolgt.

Ok, danke jabba!

Insofern wäre dann mein Connector richtig, oder?

Ich habe Busy als OUT-Variable deklariert...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn man die Variable lesen und schreiben will, müßte die In-Out sein.
Weiss jetzt nicht genau ob das immer gilt nur nur bei FB's . Bin aber schon ein paar mal darüber gestolpert.

Weiss bestimmt einer der Profis besser.

Connector ist richtig, aber nicht Busy reicht auch
 
Also es funktioniert soweit schon - das Problem ist jetzt noch:

Wird der Start für eine neue Wiegung oft hintereinander gedrückt, so wird ein falscher Wert in die Messwerte_1 bis 3 eingetragen.

Liegt das evtl. an der nicht vorhanden Verriegelung, bzw. wie kann ich so eine Verriegelung vornehmen?
So vielleicht.
Code:
       CALL  "WR_REC"
       REQ    :=M39.1
       IOID   :=B#16#54
       LADDR  :=W#16#12A
       RECNUM :=B#16#B
       RECORD :="Waage-DB_KKF".Befehl
       RET_VAL:=MW154
       BUSY   :=M39.2
 
       U     M     39.1   // Wiegung start
       S     M     40.0   // Wiegung wurde gestartet 
       SET   
       R     M     39.1
 
       U     M     40.0   // Wiegung wurde gestartet
       UN    M     39.2   // BUSY Signal > Wiegung läuft
       S     M     40.1   // Wiegung beendet > Gewichtswert schreiben und nächste Wiegung anstoßen
       R     M     40.0   // Wiegung wurde gestartet
 
       U #??? Zweite Wiegung gestartet
       R     M     40.1
Das mit dem Busy Signal ist echt etwas doof, man muss darauf reagieren wenn es High wird.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für deine Bemühungen Paule!

Verstehe ich es richtig, dass der Merker M40.0 eine Bedingung (z.B. #Wiegen_1) aus

Code:
      O     #Wiegen_1
      O     #Wiegen_2
      O     #Wiegen_3
      =     #Lesen

sein könnte?
 
hallo petzi

paule hat das gut ausprogramiert, aber

je nach dem, welche CPU du einsetzt, kann es probleme mit dem busy signal geben.

ich hatte eine 315 und auch das busy signal benutzt, um das auslesen der einzelnen kanäle zu starten.
hat nicht sauber funktioniert. Anruf bei siemens. hier habe ich die auskunft bekommen, dass cpu abhängig, das busy signal nicht sauber, wie eigentlich erwartet ausgegeben wird.
ich habe einen zeittakt auf den start gelegt und alle 300ms bei einer zweikanaligen siwarex das auslesen der kanäle gewechselt. das hat dann recht gut funktioniert
vielleicht kann dieser ansatz dein problem lösen
 
Zurück
Oben