Probleme mit SFC15

breno

Level-1
Beiträge
46
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

betrifft unten gezeigten Code.Durch den Startbefehl wird der FU aktiv. Danach werden Steuerwort und Sollwert an den FU übertragen. Zusätzlich wird der FU mit der angegebenen Hardwareadresse gestartet. Das ganze wird über den SFC15 an den FU gesendet. Dieses genannte Beispiel wurde in den FB1 geschrieben. Sollte ich jetzt im FB1 weiter programmieren ensteht das totale durcheinander. Mir ist schon klar warum (durch die Angabe von Hardwareadressen). Mir ist aber nicht klar wie ich dies abändern soll!?!?
Kann mir jemand einen Denkanstoss verabreiche.

mfg breno

Code:
      U     #bMessstelle1Aktiv          //Startbefehl für FU 
      =     #bStartFU
     
      L     W#16#47E
      T     #wSteuerwortFU              //db1.dbw 180

      L     #iStellgroesse              //normierte Stellgroesse 
      T     #wSollwertFU                //db1.dbw 182

      U     #bStartFU
      =     DB1.DBX  181.0              //FU wird gestartet
    
//SFC 15 Prozessdaten schreiben

      CALL  "DPWR_DAT"
       LADDR  :=W#16#104                //Anfangsadresse FU (EA 260) in Hex codiert 
       RECORD :=P#DBX 180.0 BYTE 4      //Steuerwort und Sollwert werden an FU gesendet
       RET_VAL:=MW12                    //Fehlercode
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

betrifft unten gezeigten Code.Durch den Startbefehl wird der FU aktiv. Danach werden Steuerwort und Sollwert an den FU übertragen. Zusätzlich wird der FU mit der angegebenen Hardwareadresse gestartet. Das ganze wird über den SFC15 an den FU gesendet. Dieses genannte Beispiel wurde in den FB1 geschrieben. Sollte ich jetzt im FB1 weiter programmieren ensteht das totale durcheinander. Mir ist schon klar warum (durch die Angabe von Hardwareadressen). Mir ist aber nicht klar wie ich dies abändern soll!?!?
Kann mir jemand einen Denkanstoss verabreiche.

mfg breno

Code:
      U     #bMessstelle1Aktiv          //Startbefehl für FU 
      =     #bStartFU
     
      L     W#16#47E
      T     #wSteuerwortFU              //db1.dbw 180

      L     #iStellgroesse              //normierte Stellgroesse 
      T     #wSollwertFU                //db1.dbw 182

      U     #bStartFU
      =     DB1.DBX  181.0              //FU wird gestartet
    
//SFC 15 Prozessdaten schreiben

      CALL  "DPWR_DAT"
       LADDR  :=W#16#104                //Anfangsadresse FU (EA 260) in Hex codiert 
       RECORD :=P#DBX 180.0 BYTE 4      //Steuerwort und Sollwert werden an FU gesendet
       RET_VAL:=MW12                    //Fehlercode


Steuerwort und Sollwert überträgst du immer, die sind nicht VKE-Abhängig. Wenn sie nur bei Start übertragen werden sollen, dann mußt du sie umspringen bzw. etwas anderes eintragen, wenn Start False ist!

PS: Irgendwie vermischt du im Code statische oder temporäre und direkte DB-Zugriffe (Instanz-DB???). Das ist zumindest nicht schön!
 
Zuletzt bearbeitet:
Kein Problem.Zu aller erst würd ich gern eine Variable für den Parameter RECORD anlegen/deklarieren.Bisher hab ich eine Hardwareadresse genommen, aber auf Dauer würd ich dies gern abändern.Da ist mein erstes Problem. Z.b. Keine Ahnung welcher Datentyp

mfg breno
 
Hallo Ralle ,

genau diese Vermischung der statischen und des Instanz DB´s würd ich gerne abschaffen.Weiss nur nicht wie ich das machen soll das nacher mein Programm noch funktioniert. Wenn ich den Baustein erweitere bleiben die Instanz-Adressen so stehen und die statischen verändern sich d.h. danach funktioniert gar nichts mehr.

mfg breno
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

warum willst du den Parameter RECORD variabel halten ?. Willst du deinen FB1 universell einsetzen und den SFC 15 somit nur einmal aufrufen ?
Dann muss ja zusätzlich noch die LADDR variabel sein.
Dann hast du mit dem Datenhandling mehr Arbeit als alles andere.
Ich würde den SFC15 pro FU projketieren und mit den entsprechenden Daten versorgen, sonst geht schnell die Übersicht verloren und einen Vorteil sehe ich auch nicht.

Gruß
 
Hallo,
Dieses genannte Beispiel wurde in den FB1 geschrieben. Sollte ich jetzt im FB1 weiter programmieren ensteht das totale durcheinander. Mir ist schon klar warum (durch die Angabe von Hardwareadressen). Mir ist aber nicht klar wie ich dies abändern soll!?!?
Kann mir jemand einen Denkanstoss verabreiche.
Es muss kein "totales Durcheinander" geben.
Ich hätte da 2 Vorschläge :

1.) du baust dir zum Steuern deines Reglers einen FB. Dieser FB macht nichts anderes als den Regler zu steuern. Info's nach Aussen gibt er über die OUT-Schnittstelle heraus - Info's von Aussen erhält er über seine IN-Schnittstelle.

2.)der Datenblock für den Regler kann eine Structur sein:
Code:
Steuer_Daten : struct
   Bits : struct
       hier die entsprechenden Steuerbits
   end_struct ;
   Sollwert_Drehzahl : INT ;
end_struct ;
auf diesen Datenblock kannst du einen Pointer bilden, den du dann an den SFC15 übergibst.
Code:
     CALL  "DPWR_DAT"
       LADDR  :=W#16#104                //Anfangsadresse FU (EA 260) in Hex codiert 
       RECORD :=#Steuer_Daten
       RET_VAL:=MW12                    //Fehlercode
Der Fehlercode muß dann natürlich auch ein symbolischer Bezeichner (ggf. aus dem TEMP-Bereich) des FB sein ...

Gruß
LL
 
Dazu benötige ich doch einen neuen datenbaustein, das will ich eigentlich vermeiden. Gibt es denn nicht eine Möglichkeit Steuerwort und Sollwert zu einem geeigneten Format zu verschweissen und dieses dann an RECORD anzulegen?!?!

Code:
      L     W#16#47E
      T     #wSteuerwortFU    //WORD

      L     #iStellgroesse              
      T     #wSollwertFU     //WORD
 
      CALL  "DPWR_DAT"
       LADDR  :=
       RECORD :=
       RET_VAL:=
 
Hab bisher mit Struct noch nie geabeitet.
Hab jetzt eine im STAT-Bereich angelegt und die dazugehörigen Komponenten.Wenn ich aber abspeichern will heisst es das ein STRUCT ohne Komponente nicht zulässig sei .Was mach ich denn falsch.Muss ich END_STRUCT eingeben oder etwas was ähmliches.

mfg breno
 
Du legst im Kopf des FB den Struct an, dann Doppelklick auf die Sruct und die gewünschten Variaben anlegen.
 

Similar threads

Zurück
Oben