"PPO Typ3" (4 Bytes) über Profib ohne SFC15 senden

A

Anonymous

Guest
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo ich habe eine Frage zum Thema Profibus !

Gibt es eine Möglichkeit 4 Bytes ( 2 PAW ) konsistent an einen Profibus Slave (Frequenzumrichter) zu übertragen ohne SFC15 zu benutzen?
Wenn ja gebt mir bitte einen Tip!
Zurzeit kann ich leider nur die 4 Bytes also genaugenommen Zustandswort und Drehzahlistwert Anzeigen !
Das Aber ohne SFC14 :x :?:

Grüsse Torsten
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
Nein, T PAD überträgt 2 Worte wortkonsistent. In 999 von 1000 Fällen oder noch häufiger wird das keinen Unterschied machen, aber prinzipiell ist es möglich, damit Unsinn zu lesen.
 
OP
A

Anonymous

Guest
Ich möchte auf diesem weg des Steuerwort und die Sollfrequenz an den FU mit PPO3 senden, aber der FU macht nix :cry:

Grüsse Torsten
 

volker

Supermoderator
Teammitglied
Beiträge
5.469
Punkte Reaktionen
935
Zuviel Werbung?
->Hier kostenlos registrieren
hallo

ich habe im mom ein ähnliches problem nur andersrum.

ich wollte mit sfc 14/15 die daten an einen mm440 (typ: ppo1) übertragen.
cpu ist eine 315-2-dp.(315-2af03-0ab0)
aber das klappt nicht. der gleiche baustein funktioniert mit einer 313c-2dp und einem mm430 einwandfrei.

siemens meint das wird wohl an der cpu liegen. die haben das an den custumersupport weitergeleitet und werden sich nochmal bei mir melden.
ich werd dann mal berichten was dabei rauskommt.

wenn ich direkt die peripherie anspreche funktionierts.
sollte auch bei dir. unabhängig von ppo1/ppo3.

so funktionierts bei mir.
Code:
PZD_Addr_1_temp	DWORD		PZD Anfangsadresse 1	
PZD_Addr_2_temp	DWORD		PZD Anfangsadresse 2	

      L     #PZD_Addr
      T     #PZD_Addr_1_temp
      L     2
      +I    
      T     #PZD_Addr_2_temp

//Zustandswort lesen
      L     PEW [#PZD_Addr_1_temp]
      T     DBW   22
      L     PEW [#PZD_Addr_2_temp]
      T     DBW   24
erea: NOP   0


//Steuerwort schreiben
      L     DBW    8
      T     PAW [#PZD_Addr_1_temp]
      L     DBW   10
      T     PAW [#PZD_Addr_2_temp]
ewri: NOP   0

so gehts komischerweise nicht
Code:
//Zustandswort lesen
      CALL  SFC   14
       LADDR  :=#PZD_Addr_1_temp
       RET_VAL:=#Ret_Val_SFC14
       RECORD :=P#DBX 22.0 BYTE 4


//Steuerwort schreiben
      CALL  SFC   15
       LADDR  :=#PZD_Addr_1_temp
       RECORD :=P#DBX 8.0 BYTE 4
       RET_VAL:=#Ret_Val_SFC15

ob das mit dem direkten peripheriezugriff auch auf die 4 pkw's klappt werde ich morgen testen und berichten.
 

sps-concept

Well-known member
Beiträge
2.235
Punkte Reaktionen
251
Konsistenz

Hallo, das is mir aber neu dass T PAD xy nicht konsistent ist. Wie kommste denn darauf? Und was kommt an RET_VAL vom SFC raus wenns nich funktioniert?

MfG
André Räppel
 

Ingo dV

Well-known member
Beiträge
61
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Kositenz und so

Moin,
um einen Frequenzumrichter mit dem PPO3 Protokoll anzusteuern musst du nicht unbedingt konsitent arbeiten, da das Steuerwort und der Sollwert für sich jeweils Wortkonsistent übertragen werden. Ich nutze die konsistente Übertragung nur bei grösseren Protokollen wie PPO4, wenn ich eine 'wortübergreifende Funktionsbelegung' benötige.

Ich habe hier mal ein einfaches aufgeschlüsseltes Listing, welches einen PPO3 Danfoss-VLT ansteuert. Über den Eingang ANXX kann die Adresse aus der Hardwarekonfiguration vorgegeben werden.

Ich habe die jeweiligen Steuer- und Statusbits aufgeschlüsselt, damit man (falls nötig) die FC für individuelle Zwecke anpassen kann. Die Sollwertvorgabe entspricht 0-1024 (0-1000 wegen einfacher Rechnen -0-100% Anwendervorgabe *10)

Code:
FUNCTION "VLT_Steuern" : VOID
TITLE =Ansteuerung VLT über Profibus und Istwert/Status auslesen
AUTHOR : de_Vries
FAMILY : Multi_FC
NAME : VLT_PB
VERSION : 0.1


VAR_INPUT
  ANXX_VLT : INT ;  //PEW/PAW Adresse für ANEI/ANAU VLT
  Sollwert : INT ;  //Sollwert VLT
  Start : BOOL ;    //Start Reglerfreigabe VLT
END_VAR
VAR_IN_OUT
  Stoerung : BOOL ; //M :Störung Allgemein
  Speed_Ist : INT ; //Istwert VLT
  Status : INT ;    //Statuswort von VLT Regler
END_VAR
VAR_TEMP
  Steuern_VLT : STRUCT  //Steuerwort für Danfoss Profibusanbindung
   Bit_8 : BOOL ;   //VLT Steuerbit: Bit 0 = OFF            Bit 1 = Festdrehzahl ein
   Bit_9 : BOOL ;   //VLT Steuerbit: Bit 0 = Rampe 1 ein    Bit 1 = Rampe 2 ein
   Bit_10 : BOOL ;  //VLT Steuerbit: Bit 0 = Daten ungültig Bit 1 = Daten gültig
   Bit_11 : BOOL ;  //VLT Steuerbit: Bit 0 = Relais 01 off  Bit 1 = Relais 01 on
   Bit_12 : BOOL ;  //VLT Steuerbit: Bit 0 = Relais 01 off  Bit 1 = Relais 01 on
   Bit_13 : BOOL ;  //VLT Steuerbit: Wahleinstellung 1 lsb
   Bit_14 : BOOL ;  //VLT Steuerbit: Wahleinstellung 1 msb
   Bit_15 : BOOL ;  //VLT Steuerbit: Bit 0 = Vorfahrt       Bit 1 = Reversierung
   Bit_0 : BOOL ;   //VLT Steuerbit: Wahl Festsollwert lsb
   Bit_1 : BOOL ;   //VLT Steuerbit: Wahl Festsollwert msb
   Bit_2 : BOOL ;   //VLT Steuerbit: Bit 0 = DC-Bremse       Bit 1 = Rampe
   Bit_3 : BOOL ;   //VLT Steuerbit: Bit 0 = Freilauf        Bit 1 = Aktiv
   Bit_4 : BOOL ;   //VLT Steuerbit: Bit 0 = Schnellstop     Bit 1 = Rampe
   Bit_5 : BOOL ;   //VLT Steuerbit: Bit 0 = Halten          Bit 1 = Rampe aktiv
   Bit_6 : BOOL ;   //VLT Steuerbit: Bit 0 = Rampenstop      Bit 1 = Start
   Bit_7 : BOOL ;   //VLT Steuerbit: Bit 0 = n.Quittieren    Bit 1 = Quittieren
  END_STRUCT ;  
  Status_VLT : STRUCT   //Statuswort für Danfoss Profibusanbindung
   Bit_8 : BOOL ;   //VLT Statusbit: Bit 0 = Drehzahl >< Soll  Bit 1 = Drehzahl = Soll
   Bit_9 : BOOL ;   //VLT Statusbit: Bit 0 = Ortbetrieb        Bit 1 = Busbetrieb
   Bit_10 : BOOL ;  //VLT Statusbit: Bit 0 = Frequenzgrenze    Bit 1 = Frequenz OK
   Bit_11 : BOOL ;  //VLT Statusbit: Bit 0 = Läuft             Bit 1 = Läuft nicht
   Bit_12 : BOOL ;  //VLT Statusbit: Bit 0 = VLT OK            Bit 1 = VLT nicht OK
   Bit_13 : BOOL ;  //VLT Statusbit: Bit 0 = Spannung OK       Bit 1 = Spannungsgrenze
   Bit_14 : BOOL ;  //VLT Statusbit: Bit 0 = Drehmoment OK     Bit 1 = Momentengrenze
   Bit_15 : BOOL ;  //VLT Statusbit: Bit 0 = Timer OK          Bit 1 = Timergrenze
   Bit_0 : BOOL ;   //VLT Statusbit: Bit 0 = Steuer. n.bereit  Bit 1 = Steuerung bereit 
   Bit_1 : BOOL ;   //VLT Statusbit: Bit 0 = VLT nicht bereit  Bit 1 = VLT bereit
   Bit_2 : BOOL ;   //VLT Statusbit: Bit 0 = Motor Freilauf    Bit 1 = Motor Aktiv
   Bit_3 : BOOL ;   //VLT Statusbit: Bit 0 = Kein Fehler       Bit 1 = Abschaltung
   Bit_4 : BOOL ;   //VLT Statusbit: Bit 0 = Reserve           Bit 1 = Reserve
   Bit_5 : BOOL ;   //VLT Statusbit: Bit 0 = Reserve           Bit 1 = Reserve
   Bit_6 : BOOL ;   //VLT Statusbit: Bit 0 = Reserve           Bit 1 = Reserve
   Bit_7 : BOOL ;   //VLT Statusbit: Bit 0 = Keine Warnung     Bit 1 = Warnung
  END_STRUCT ;  
  Nicht_genutzt : INT ; //Nicht genutzter Bereich (Schmiermerker)
  Statuswort : INT ;    //Statuswort für VLT Regler
  Steuerwort : INT ;    //Steuerwort für VLT Regler
END_VAR
BEGIN
NETWORK
TITLE =Ansteuerung VLT über Profibus und Istwert/Status auslesen

      L     #ANXX_VLT; // Eingangsadresse als Formaloperant 
      SLW   3; // Bitregister ausblenden
      LAR1  ; // in Adressregister laden

// -------------------------  Steuerwort vorbelegen  --------------------------------

      SET   ; // VKE auf '1' setzen
      R     #Steuern_VLT.Bit_0; // = Festsollwert lsb aus
      R     #Steuern_VLT.Bit_1; // = Festsollwert msb aus
      =     #Steuern_VLT.Bit_2; // = DC-Bremse aus, Rampenbetrieb ein
      =     #Steuern_VLT.Bit_3; // = Motor aktiv
      =     #Steuern_VLT.Bit_4; // = Schnellstop aus, Rampenbetrieb ein
      =     #Steuern_VLT.Bit_5; // = Haltebetrieb aus, Rampenbetrieb ein
      R     #Steuern_VLT.Bit_6; // = Rampenstop
      R     #Steuern_VLT.Bit_7; // = nicht quittieren
      R     #Steuern_VLT.Bit_8; // = Festdrehzahl aus
      R     #Steuern_VLT.Bit_9; // = Rampe 1 ein
      R     #Steuern_VLT.Bit_10; // = Bit 10 > 0 aktiv
      R     #Steuern_VLT.Bit_11; // = Relais 1 aus
      R     #Steuern_VLT.Bit_12; // = Relais 2 aus
      R     #Steuern_VLT.Bit_13; // = Wahleinstellung 1 lsb aus
      R     #Steuern_VLT.Bit_14; // = Wahleinstellung 1 msb aus
      R     #Steuern_VLT.Bit_15; // = Reversierung aus

// ------------------------  Statuswort / Istwert auslesen  ---------------------------

      L     PEW [AR1,P#0.0]; // Statuswort
      T     #Statuswort; // in LD laden
      T     #Status; // zur Ausgabe
      CALL "BLKMOV" (// Statuswort
           SRCBLK                   := #Statuswort,// in Statuswort Struktur schreiben
           RET_VAL                  := #Nicht_genutzt,// 
           DSTBLK                   := #Status_VLT);// 

      L     PEW [AR1,P#2.0]; // Istgeschwindigkeit laden
      SSI   4; // Rechtsbündig ausrichten (Vorzeichen beibehalten)
      T     #Speed_Ist; // Übergabe an Ausgang

      O     #Status_VLT.Bit_3; // Oder VLT Abschaltung
      O     #Status_VLT.Bit_12; // oder VLT ist nicht OK
      =     #Stoerung; // VLT Störung

// -----------------------------  Antrieb starten  -----------------------------------

      U     #Start; // Und Start VLT
      U     #Status_VLT.Bit_0; // und Steuerung ist bereit
      U     #Status_VLT.Bit_1; // und VLT ist bereit
      UN    #Status_VLT.Bit_12; // und VLT ist OK
      =     #Steuern_VLT.Bit_6; // = VLT Start

      CALL "BLKMOV" (// Steuerword Struktur
           SRCBLK                   := #Steuern_VLT,// in Steuerwort für Übergabe schreiben
           RET_VAL                  := #Nicht_genutzt,// 
           DSTBLK                   := #Steuerwort);// 

// -----------------------------  Werte zum VLT  -------------------------------------

      L     #Steuerwort; // Steuerwort 
      T     PAW [AR1,P#0.0]; // in VLT laden
      L     #Sollwert; // Sollwert
      SLW   4; // Linksbündig Ausrichten
      T     PAW [AR1,P#2.0]; // in VLT laden
END_FUNCTION
 
OP
A

Anonymous

Guest
Hallo mit dem SFC15 gehts jetzt aber Dein Script probier ich morgen auch mal!
Warom nehmen denn hier fast alle PPO1?
Was erleichtert mir das?

Torsten
 

volker

Supermoderator
Teammitglied
Beiträge
5.469
Punkte Reaktionen
935
mit dem pwk telegrammteil kann jeder beliebige parameter im umrichter beobachtet und/oder geändert werden.

mit dem pzd können steuerworte und sollwerte bzw zustandsworte und istwerte übertragen werden.

ppo1: 4 pwk, 2 pzd
ppo2: 4 pkw, 6 pzd
ppo3: 2 pzd
ppo4: 6 pzd
pp05: 4 pwk, 10 pzd

der mm420 unterstützt ppo1 und ppo3
der mm430/440 ünterstützt ppo1 - ppo4

um also einen standartbaustein für einen mm4xx nutzen zu können zwingt sich ppo1 geraezu auf.
 

kiestumpe

Well-known member
Beiträge
726
Punkte Reaktionen
84
Frage zu ppo3

mit dem pwk telegrammteil kann jeder beliebige parameter im umrichter beobachtet und/oder geändert werden.

mit dem pzd können steuerworte und sollwerte bzw zustandsworte und istwerte übertragen werden.

Hallo,

Heißt das, dass ich mir beides anzeigen kann, oder kann ich nur entweder steuerworte und sollwerte oder zustandsworte und istwerte anzeigen?

wollte heut morgen einen FU-FC300 in Betrieb nehmen, jedoch konnte ich über die Variablentabelle nur die beiden PEWs, nicht jedoch die PAWs beobachten (kopfkratz)
(liegen beide ab Adresse PEW bzw. PAW 544 - aber das dürfte doch kein Problem sein)
 

Larry Laffer

Supermoderator
Teammitglied
Beiträge
13.043
Punkte Reaktionen
2.698
@Volker:
Das ist interessant. Genau das Gegenteil von dem was du geschrieben hast (ca. 10 Beiträge zurück), also SFC15 funktioniert nicht und T PAW funktioniert war bei mir der Fall. Ich musste mit dem SFC15 arbeiten, weil es sonst hin und wieder dazu kam, dass der Umrichter (auch ein MM440) zwar die Steuerbits angenommen hatte, nicht aber den Sollwert. Logisch war das nicht, aber mit dem SFC klappte es dann immer. CPU dabei übrigens auch 315-2DP ...
 
Oben