TIA MM420 über Profibus steuern -> Drivelib wird wegen Know How Schutz nicht übersetzt

Nethacks

Level-1
Beiträge
123
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

Möcht einen MM420 über Profibus steuern.
Im TIA 13 SP1 Update 3 ist der MM420 eingebunden über das Standartprotokoll.
Ich habe nun den FB SINA_Speed aus der Biobiothek in den OB1 gezogen.
Es wurde auch ein FB angelegt.
Ich kann den Baustein aber nicht übersetzen, weil er den Baustein aktualisieren will,
ich aber das Passwort (natürlicherweise) nicht weiss :-(

Genaue Meldung:
SINA_SPEED (FB285),Der vorliegende Baustein ist inkompatibel und muss neu übersetzt werden. Dies ist nur mit gültigem Passwort möglich.,,,23:31:30
SINA_SPEED (FB285),Der Baustein kann nur mit gültigem Passwort übersetzt werden.,,,23:31:30

Was kann ich da machen?
Habe mich jetzt 4 Stunden gespielt. Morgen sollte das Ding laufen :-(

Hat eventuell einer einen Baustein um über PPO3 oder sonstige Protokolle mit dem Umformer zu kommunizieren?
Brauche nur Aus/Ein/Drehrichtungsumkehr/Störung quittieren und Sollwertvorgabe.
Status brauche ich nur Läuft/Störung.
 
Zuletzt bearbeitet:
Ich wußte gar nicht, dass es dazu einen fertigen Baustein von Siemens gibt ...

Was du eigentlich nur machen mußt :
In deinem Fall sendest du das Steuerwort und den Sollwert (auch ein Wort) zum Umrichter hin (an die projektierte Perepherie-Adresse).
Du erhältst das Statuswort und den Istwert (auch ein Wort) zurück.
Dafür könntest du dir relativ schnell einen eigenen FB erstellen in Steuerbits richtig beschaltest und den Sollwert passend übergibst.
Entsprechend den Status wieder auflösen.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... so könnte das dann z.B. in AWL aussehen :
Code:
FUNCTION_BLOCK "FB302"
TITLE =UP Fahren Siemens MicroMaster 4xx
AUTHOR : 'Larry'
VERSION : 1.2

VAR_INPUT
  PxB_Kopplung : INT ; //1.Perepherie-Adresse vom Koppelbereich
  Freigabe : BOOL ; //Betriebs-Freigabe des Bausteins
  Antrieb_vorwaerts : BOOL ; //Freigabe für "Antrieb fahren"
  Antrieb_rueckwaerts : BOOL ; //Freigabe für "Antrieb rückwärts"
  Stoerung_Quit : BOOL ; //Störung Regler quittieren
  Motor_n_Soll : INT ; //Solldrehzahl des Motors   [1/Min.]
  Motor_n_50Hz : INT ; //Motor-Drehzahl bei 50Hz   [1/Min.]
  Regler_f_max : INT ; //Regler-Einstellung für f_max  [Hz]
END_VAR
VAR_OUTPUT
  RM_Antrieb_vorwaerts : BOOL ; //MM4_ZSW1_Bit_2
  RM_Antrieb_rueckwaerts : BOOL ; //MM4_ZSW1_Bit_2
  RM_Antrieb_bereit : BOOL ; //MM4_ZSW1_Bit_3
  RM_Antrieb_Warnung : BOOL ; //MM4_ZSW1_Bit_7
  RM_Antrieb_f_Ist : INT ; //MM4_Frequenzistwert
END_VAR
VAR
  SendeDaten : STRUCT  
   STW1 : STRUCT  
    _08_Tippen_Rechts : BOOL ; //1=Tippen rechts EIN/ 0=Tippen rechts AUS
    _09_Tippen_Links : BOOL ; //1=Tippen links EIN/ 0=Tippen links AUS
    _10_Fuehrung_vom_AG : BOOL ; //1=Führung von AG gefordert/ 0=keine Führung von AG gefordert
    _11_Sollwert_Invertiert : BOOL ; //1=Sollwertinvertierung/ 0=keine Sollwertinvertierung
    _12 : BOOL ; //-
    _13_Motorpoti_inc : BOOL ; //1=Motorpoti rauf EIN/ 0=Motorpoti rauf AUS
    _14_Motorpoti_dec : BOOL ; //1=Motorpoti runterEIN/ 0=Motorpoti rauf AUS
    _15_Steuerung_an_BOP : BOOL ; //1=Vorortsteuerung(BOP/AOP) aktiv/ 0=Fernsteuerung aktiv
    _00_EIN : BOOL ; //1=EIN/ 0=AUS1 
    _01_EIN2 : BOOL ; //1=Betriebsbedingung/ 0=AUS2 - Impulssperre sofortige Spannungfreischaltung
    _02_EIN3 : BOOL ; //1=Betriebsbedingung/ 0=AUS3 - Schnellhalt
    _03_Betriebs_Freigabe : BOOL ; //1=Betrieb freigeben/ 0=Betrieb sperren
    _04_Betriebs_Freigabe2 : BOOL ; //1=Betriebsbedingung/ 0=Hochlaufgeber sperren
    _05_Betreibs_Freigabe3 : BOOL ; //1=Hochlaufgeber freigaben/ 0= HLG stoppen
    _06_Sollwert_Freigabe : BOOL ; //1=Sollwert freigaben/ 0=Sollwert sperren
    _07_Quit_Stoerung : BOOL ; //1=Störung quittieren/ 0= keine Bedeutung
   END_STRUCT ; 
   N_Soll : WORD ; 
  END_STRUCT ; 
  EmpfangsDaten : STRUCT  
   ZSW1 : STRUCT  
    _08_keine_Abweichung : BOOL ; //1=Keine Soll-Istabweichung/ 0=Soll-Istabweichung
    _09_AG_Fuehrung : BOOL ; //1=Führung von AG gefordert/ 0=keine Führung von AG gefordert
    _10_fmax : BOOL ; //1=fmax erreicht/ 0=fmax unterschritten
    _11_keine_Warnung : BOOL ; //1=Keine Warnung/ 0=Warnung:Motor an der Stromgrenze
    _12_Motor_Haltebremse : BOOL ; //1= / 0=Motor Haltebremse
    _13_Motor_bereit : BOOL ; //1= / 0=Motor Überlast
    _14_Links_Rechtslauf : BOOL ; //1=Rechtslauf / 0=Linkslauf
    _15_Regler_bereit : BOOL ; //1= /0=Umrichter Überlast
    _00_Einschaltbereit : BOOL ; //1=Einschaltbereit/ 0=Nicht einschaltbereit
    _01_Betriebsbereit : BOOL ; //1=Betriebsbereit/  0=Nicht betriebsbereit
    _02_Betrieb_Freigabe : BOOL ; //1=Betrieb freigegeben/ 0=Betrieb gesperrt
    _03_Stoerung : BOOL ; //1=Störung / 0=keine Störung
    _04_nicht_AUS2 : BOOL ; //1=Kein AUS2 / 0=AUS2 Befehl steht an 
    _05_nicht_AUS3 : BOOL ; //1=Kein AUS3 / 0=AUS3 Befehl steht an  
    _06_Einschaltsperre : BOOL ; //1=Einschaltsperre / 0=Keine Einschaltsperre 
    _07_Warnung : BOOL ; //1=Warnung / 0= keine Warnung 
   END_STRUCT ; 
   N_Ist : WORD ; 
  END_STRUCT ; 
  Reset_Impuls : "TP"; 
END_VAR
VAR_TEMP
  Pxx_Adresse : DWORD ; 
  Faktor_n_50Hz : REAL ; 
  Motor_f_Soll : REAL ; 
  Regler_fmax : REAL ; 
  Faktor_f : REAL ; 
  RM_Regler_OK : BOOL ; 
END_VAR
BEGIN
NETWORK
TITLE =Adresse umkopieren
      L     #PxB_Kopplung; // Adresse laut HW-Konfig im Integer-Format
      SLD   3; // Konvertierung ins Pointerformat: 3 Stellen nach links schieben 
      T     #Pxx_Adresse; // Bit-Pointer von Adresse in Doppelwort
NETWORK
TITLE =Prozessdaten vom MM4xx empfangen mittels Direktzugriff 
      L     P##EmpfangsDaten; 
      LAR1  ; 
      TAR2  ; 
      +AR1  ; 
      L     PED [#Pxx_Adresse]; // Prozessdaten vom MM4xx empfangen
      T     D [AR1,P#0.0]; 
NETWORK
TITLE = 
      U     #EmpfangsDaten.ZSW1._00_Einschaltbereit; 
      U     #EmpfangsDaten.ZSW1._01_Betriebsbereit; 
      U     #EmpfangsDaten.ZSW1._02_Betrieb_Freigabe; 
      U     #EmpfangsDaten.ZSW1._04_nicht_AUS2; 
      U     #EmpfangsDaten.ZSW1._05_nicht_AUS3; 
      UN    #EmpfangsDaten.ZSW1._06_Einschaltsperre; 
      =     #RM_Regler_OK; 
NETWORK
TITLE =Steuersignale + Sollwert generieren
      U     #Freigabe; 
      =     #SendeDaten.STW1._03_Betriebs_Freigabe; 
      =     #SendeDaten.STW1._04_Betriebs_Freigabe2; 
      =     #SendeDaten.STW1._05_Betreibs_Freigabe3; 
      =     #SendeDaten.STW1._10_Fuehrung_vom_AG; 
      =     #SendeDaten.STW1._01_EIN2; 
      =     #SendeDaten.STW1._02_EIN3; 
      CLR   ; 
      =     #SendeDaten.STW1._08_Tippen_Rechts; 
      =     #SendeDaten.STW1._09_Tippen_Links; 
//      =     #SendeDaten.STW1._12
      =     #SendeDaten.STW1._13_Motorpoti_inc; 
      =     #SendeDaten.STW1._14_Motorpoti_dec; 
      =     #SendeDaten.STW1._15_Steuerung_an_BOP; 
      U     #Freigabe; 
      U(    ; 
      O     #Antrieb_vorwaerts; 
      O     #Antrieb_rueckwaerts; 
      )     ; 
      =     #SendeDaten.STW1._06_Sollwert_Freigabe; 
      =     #SendeDaten.STW1._00_EIN; 
      U     #Freigabe; 
      U     #Antrieb_rueckwaerts; 
      =     #SendeDaten.STW1._11_Sollwert_Invertiert; 
      CALL #Reset_Impuls (
           IN                       := #Freigabe,
           PT                       := T#200MS);
      U     #Stoerung_Quit; 
      O     #Reset_Impuls.Q; 
      =     #SendeDaten.STW1._07_Quit_Stoerung; 
NETWORK
TITLE = 
      L     #Regler_f_max; 
      ITD   ; 
      DTR   ; 
      T     #Regler_fmax; 
      L     #Motor_n_Soll; 
      ITD   ; 
      DTR   ; 
      L     #Motor_n_50Hz; 
      ITD   ; 
      DTR   ; 
      /R    ; 
      T     #Faktor_n_50Hz; // Umrechnungsfaktor nMax / n50Hz
      L     5.000000e+001; 
      *R    ; 
      T     #Motor_f_Soll; // errechnete Soll-Frequenz
      L     #Regler_fmax; 
      /R    ; 
      T     #Faktor_f; // Formfaktor für f-max
      SPA   chk1; 
chk1: L     #Faktor_f; 
      L     0.000000e+000; 
      >=R   ; 
      SPB   chk2; 
      L     0.000000e+000; 
      T     #Faktor_f; 
chk2: L     #Faktor_f; 
      L     1.000000e+000; 
      <=R   ; 
      SPB   chkX; 
      L     1.000000e+000; 
      T     #Faktor_f; 
chkX: L     1.638400e+004; // max.Wert Ansteuerung Regler (Hex 4000) 
      L     #Faktor_f; 
      *R    ; 
      RND-  ; 
      T     #SendeDaten.N_Soll; 
NETWORK
TITLE =Zustandswort 1 + Drehzahlistwert 
      U     #EmpfangsDaten.ZSW1._02_Betrieb_Freigabe; 
      U     #EmpfangsDaten.ZSW1._14_Links_Rechtslauf; 
      =     #RM_Antrieb_vorwaerts; 
      U     #EmpfangsDaten.ZSW1._02_Betrieb_Freigabe; 
      UN    #EmpfangsDaten.ZSW1._14_Links_Rechtslauf; 
      =     #RM_Antrieb_rueckwaerts; 
      U     #Freigabe; 
      U     #EmpfangsDaten.ZSW1._15_Regler_bereit; 
      UN    #EmpfangsDaten.ZSW1._03_Stoerung; 
      =     #RM_Antrieb_bereit; 
      U     #EmpfangsDaten.ZSW1._07_Warnung; 
      =     #RM_Antrieb_Warnung; 
NETWORK
TITLE = 
// PZD2 - Drehzahlistwert
      L     #EmpfangsDaten.N_Ist; 
      ITD   ; 
      DTR   ; 
      L     1.638400e+004; 
      /R    ; 
      L     #Motor_n_Soll; 
      *R    ; 
      RND+  ; 
      T     #RM_Antrieb_f_Ist; 
NETWORK
TITLE =Senden der Prozessdaten zum MM4
      L     P##SendeDaten; 
      LAR1  ; 
      TAR2  ; 
      +AR1  ; 
      L     D [AR1,P#0.0]; 
      T     PAD [#Pxx_Adresse]; // Steuerwort 1 + Hauptsollwert zum MM4 schicken
END_FUNCTION_BLOCK
 
Danke Leute.
Komme erst in 3 Stunden zur Anlage.
Werde ein feedback geben, was besser funktioniert hat ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

Wie versprochen ein Feedback:
Leider konnte ich den Code in AWL im TIA nicht übersetzen.
Habe jetzt doch den Sina_Speed verwendet.
Es gibt zwei Versionen der Drivelib!!!
Eine davon (die V4) lässt sich anstandslos übersetzen und funktioniert auch einwandfrei.
Danke nochmals für die Hilfe.
 
Zurück
Oben