Sfb47...

Mr. T

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Nach längerer Abwesenheit bin ich nun doch wieder zur SPS-Programmierung gestoßen und hoffe demnächst hier im Forum auch mal hilfreich zu werden :D

Aufgabe:
Einfache Kiste - zählen bis Referenznocke belegt, dort SW-Tor schliessen und "Referenzieren" (Zählerstand auf NULL).
Während des Zählens den aktualwert anzeigen.

Lösung:
Der Aufruf etc. Klappt. Was ich aber nicht verstehe, wo mal die verschiedenen JOB_IDs erklärt werden. Weiß da jemand was?

Meine Vermutung:
Solange nicht auf Referenznocke, SW-Tor geöffnet - Zählen.
Auf Referenznocke Tor schliessen und JOB_ID auf 0x02 (Ladewert schreiben), Ladewert 0 (NULL) in JOB_VAL.

Stimmt das so?

So und nun zum Zählen und Aktualwert auslesen. Was hat das denn für eine JOB_ID? Ich habe hier ein altes vorgängerprogramm gesehen, da verwendet er 0x04 (Vergleichswert schreiben) in jedem Zyklus als Konstante! Verstehe ich nicht...ist doch schlecht!?

Ich hoffe, Ihr könnt mir etwas Support geben!
Gruß
 
Siemens Support. Beitrags-ID:12429336

Seite 202 (5-32)

Schau dir das mal an, vielleicht bringt dich das ja weiter.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke erstmal - aber es hat mir nicht viel weitergeholfen...

Code:
      UN    #JOB_DONE[COLOR=red]                 // also wenn Baustein bereit ist[/COLOR]
      SPB   NJOB
 
      UN    #JOB_REQ                  [COLOR=red] // Auftrag starten
[/COLOR]      S     #JOB_REQ
 
      CALL  "COUNT" , "DB31 DS COUNT INSTANZ"
       LADDR   :=W#16#768
       CHANNEL :=#KANAL
       SW_GATE :=#SW_GATE
       CTRL_DO :=
       SET_DO  :=
       JOB_REQ :=#JOB_REQ
       JOB_ID  :=#JOB_ID                 [COLOR=red]        // immer "auftrag o. Funktion"[/COLOR]
       JOB_VAL :=#JOB_VAL
       STS_GATE:=
       STS_STRT:=
       STS_LTCH:=
       STS_DO  :=
       STS_C_DN:=
       STS_C_UP:=
       COUNTVAL:=#COUNTVAL
       LATCHVAL:=
       JOB_DONE:=#JOB_DONE
       JOB_ERR :=#JOB_ERR
       JOB_STAT:=#JOB_STAT
 
      U     #JOB_REQ
      R     #JOB_REQ
 
NJOB: NOP   0

Ich verstehe nicht, warum er nicht einfach zählt...et tutet nicht...:(

Meine HW-Einstellung sollte es doch ermöglichen, einfach nur zu zählen, sobald das SW-Gate weg geht...Ich möchte einfach nur den Aktualwert haben, keine andere Funktionalität wie Wert schrieben wird gebraucht...

Ich hoffe Ihr habt noch mehr Tipps.
Gruß!
 

Anhänge

  • HW.PNG
    HW.PNG
    21,1 KB · Aufrufe: 45
Servus,

geb mal als Job-ID eine feste eins (also W#16#0001) vor, der Zähler sollte sich dann über das SW-Tor starten und stoppen und über Job_Req auf Null setzen lassen.

Gruß
Andreas
 
Die 1 bedeutet doch "Zählwert schreiben", also müsste ich doch dann einen Zählwert an den SFB übergeben, der dann dem Startwert entspräche, ab dem dann gezählt würde - oder?

Mal sehen....THX!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie die Zusammenhänge sind weiß ich auch nicht mehr so genau, ist schon wieder eine Zeit lang her als ich mich mit den SFB47 zu tun hatte. Mit diesen Einstellungen hab ich einen Zähler aber schon Monate am laufen, es funktioniert also.
 
Okay!

Ich versuche es mal, sobald ich wieder in der Nähe der Hardware bin...gestern ist da schon ganzschön spät geworden... :D

Hehe Danke - wenns dann funzt poste ich den Code für alle armen Suchenden nach mir :rolleyes:

Gruß!
 
Also speziell dein
Code:
      UN    #JOB_DONE[COLOR=red]                 // also wenn Baustein bereit ist[/COLOR]
      SPB   NJOB
stellt natürlich ein Riesenproblem dar, da der SFB47 nicht mehr aufgerufen wird, sobald du ihn mal mit JOB_REQ=TRUE gestartet hast. Es wird von diesem Moment an jeder SFB47 Aufruf übersprungen.

Rufe den SFB47 immer, in jedem Zyklus, auf und setze das JOB_REQ nur für's Referenzieren auf TRUE (zusammen mit JOB_ID=W#16#1 und JOB_VAL=L#0)

Die Ausgänge #COUNTVAL und #LATCHVAL liefern immer den aktuellen Stand, dazu ist kein JOB_REQ nötig.

Zusatz: Zu spät gesehen: so wie deine HW-Einstellung des Zählers ist, brauchst du gar keine Referenzierung durchzuführen, da jedes Deaktivieren des SW-Gates deinen Zähler nullt (HW-Konfig: Torfunktion: Zählvorgang abbrechen).
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Hier mal ein Code von mir mit einem SFB47
Da ist im Prinzip alles drinnen:
Code:
      L     768
      T     #EA_Adresse                 //EA-Adresse des Zählers
 
      L     0
      T     #Kanalnummer                //Schreibe Kanalnummer für Zähler
 
      SET   
      =     #Freigabe_Zaehler           //Softwarefreigabe für Zähler
 
      U(    
      O     #Auftragsanstoss_Referenz
      O     #Auftragsanstoss_Grundpos
      O     #Auftragsanstoss_Vergl
      O     #Kontrolle_Vergleicher
      )     
      U     #Auftragsfreigabe
      =     #Auftragsanstoss            //Freigabe für Auftrag
 
      U     #Auftragsanstoss
      SPBN  X1
 
      L     L#88                        //Referenzposition
      U     #Auftragsanstoss_Referenz
      SPB   Wert
      L     L#100                       //Grundposition
      U     #Auftragsanstoss_Grundpos
      SPB   Wert
      L     #SOLL_Position              //Sollposition für Vergleicher
      ITD   
      U     #Auftragsanstoss_Vergl
      SPB   Wert
      L     L#0                         //Dummywert für lesende Aufträge
      U     #Kontrolle_Vergleicher
      SPB   Wert
      SPA   X1
Wert: T     #Auftragswert               //Schreibe Auftragswert
 
      L     W#16#1                      //Auftrag für Zählwert schreiben
      U     #Auftragsanstoss_Referenz
      SPB   NR
      L     W#16#1                      //Auftrag für Zählwert schreiben
      U     #Auftragsanstoss_Grundpos
      SPB   NR
      L     W#16#4                      //Auftrag für Vergleicher Schreiben
      U     #Auftragsanstoss_Vergl
      SPB   NR
      L     W#16#84                     //Auftrag für Vergleicher Lesen
      U     #Kontrolle_Vergleicher
      SPB   NR
      SPA   X1
NR:   T     #Auftragsnummer             //schreibe Auftragsnummer
 
X1:   NOP   0
      CALL  #Achse_Zaehler              //Zähler
       LADDR   :=#EA_Adresse
       CHANNEL :=#Kanalnummer
       SW_GATE :=#Freigabe_Zaehler
       CTRL_DO :=#Freigabe_Ausgang
       SET_DO  :=#Steuern_Ausgang
       JOB_REQ :=#Auftragsanstoss
       JOB_ID  :=#Auftragsnummer
       JOB_VAL :=#Auftragswert
       STS_GATE:=#Status_Internes_Tor
       STS_STRT:=#Status_Hardware_Tor
       STS_LTCH:=#Latcheingang
       STS_DO  :=#Status_Ausgang
       STS_C_DN:=#Richtung_rueckwaerts
       STS_C_UP:=#Richtung_vorwaerts
       COUNTVAL:=#Zaehlwert
       LATCHVAL:=#Latchwert
       JOB_DONE:=#Auftragsfreigabe
       JOB_ERR :=#Fehler_Auftrag
       JOB_STAT:=#Fehlernummer

Ich hoffe er kann dir weiterhelfen.

godi
 
Zurück
Oben