Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Ausgang als Parameter übergeben

  1. #1
    Registriert seit
    08.02.2013
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Gibt es mit Awl die Möglichkeit eine Funktion zu schreiben welcher ich einen in einem Datenbaustein definierten Ausgang als Parameter gebe? Ziel ist es aus der Leitebene heraus zu bestimmen welcher Ausgang an/ausgeschaltet wird.

    Gesendet von meinem A510 mit Tapatalk 2
    Zitieren Zitieren Ausgang als Parameter übergeben  

  2. #2
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Zitat Zitat von IOSam Beitrag anzeigen
    ... Ziel ist es aus der Leitebene heraus zu bestimmen welcher Ausgang an/ausgeschaltet wird.
    ...
    Das geht sicher.

    Ansonsten solltest Du Deine Angaben weiter konkretisieren, vor allem welche CPU (S7-200, S7-300/400 ...), zw. welchen Ausgängen gewählt werden soll ...

  3. #3
    IOSam ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.02.2013
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Es ist eine S7 300/400 und es sollen digitale Ausgänge an und ausgeschaltet werden, welche sich in unterschiedlichen Modulen bzw. auch auf DZEs befinden. Ich möchte eine FC bzw. einen FB mit dem Ausgang als In-Parameter erstellen was soweit schon funktioniert.

    Die besagte Funktion rufe ich in meinem Testprogramm im OB1 auf. Jedoch bekomme ich diesen Aufruf bisher nur mit absoluten Werten hin. Ziel ist es aus der Leitebene die absolute Adresse in einen DB zu schreiben, welcher beim Funktionsaufruf ausgelesen wird.

    Die Frage ist wie schreibe ich am die Adresse am besten in den DB und viel wichtiger wie löse ich sie auf damit ich sie an meine Funktion übergeben kann.

  4. #4
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Ich verstehe Deine Anfrage wie folgt:
    Du hast einen FB bzw. FC und willst von außerhalb (Leitsystem/HMI/usw.) bestimmen welchen Ausgang dieser Baustein nun beschreiben soll.

    Eine Möglichkeit wäre es im HMI die Informationen eines S7-Pointers zusammenzubauen und an eine dem FC/FB bekannte Stelle in einem DBD bzw. MD zuschreiben. Der FB bzw. FC kann dann mittels indirekter Adressierung das Bit steuern.
    If you open your Mind too much, your Brain will fall out.

  5. #5
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Ich würde im HMI einen einfachen Integer-Wert mit einer Dezimalstelle anzeigen/eingeben lassen (das entspricht ja der Angabe des Ausganges) und aus diesem Wert den Pointer erzeugen:
    Code:
    FUNCTION "Ausgang" : BOOL
    TITLE =
    VERSION : 0.1
    
    VAR_INPUT
      Adresse : INT ;    
      Aktion : BOOL ;    
    END_VAR
    
    VAR_TEMP
      Adress_Bit : INT ;    
      Adress_Byte : INT ;    
      Adresspointer : DWORD ;    
      AR1_Temp : DWORD ;    
    END_VAR
    
    
    BEGIN
    
    NETWORK
    TITLE =Fehlermeldung rücksetzen
          SET   ; 
          R     #RET_VAL; 
    
    NETWORK
    TITLE =Gültigkeit
          L     0; 
          L     #Adresse; 
          <I    ;               //Adresse negativ? 
          SPBN  _001; 
          L     10; 
          MOD   ; 
          T     #Adress_Bit; 
          L     7; 
          >I    ;               //Bitstelle größer als 7?
          SPBN  _002; 
    _001: S     #RET_VAL; 
          BEA   ; 
    _002: NOP   0; 
    
    NETWORK
    TITLE =Pointer erzeugen
          L     #Adresse; 
          L     10; 
          /D    ;               //Byte separieren (bit wegrechnen)
          T     #Adress_Byte;   //Byte speichern (falls anderweitig benötigt)
          SLD   3;              //auf Bytestelle im Pointer verschieben
          L     #Adress_Bit; 
          OD    ;               //Byte und Bit zusammenfügen
          T     #Adresspointer; //Pointer speichern
    
    NETWORK
    TITLE =Ausgang setzen/rücksetzen
          TAR1  #AR1_Temp;      //AR1 temporär sichern; Typ: DWORD
          LAR1  #Adresspointer; //Adresspointer ins Adressregister schreiben
          U     #Aktion; 
          =     A [AR1,P#0.0];  //Aktion auf gewünschtes Ausgangsbit übertragen
          LAR1  #AR1_Temp;      //gesichertes Adressregister in AR1 zurückschreiben
    
    END_FUNCTION
    Die Gültigkeitsprüfung, die hier enthalten ist, müßtest Du dann evtl. in ähnlicher Weise bei der Eingabe am HMI machen.

  6. #6
    IOSam ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.02.2013
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank! Ich werde das gleich am Montag mal ausprobieren und im Anschluss berichten. Gruß und schönes WE!

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.317
    Danke
    932
    Erhielt 3.331 Danke für 2.689 Beiträge

    Standard

    Hallo IOSam, bei Deinem Vorhaben bekomme ich massiv Bauchschmerzen ...

    Ich würde einen Teufel tun, dem PLS zu helfen, direkt die Ausgänge meiner SPS zu schalten (höchstens vielleicht, wenn an der SPS nur Lampen angeschlossen sind). Soll die SPS zu einer dezentralen IO degradiert werden?
    Und die dazu nötige indirekte Adressierung von Ausgängen empfinde ich als ein absolutes No-Go!
    Ganz davon abgesehen, daß das Ganze höchstens für ein paar ms funktioniert, wenn der Ausgang auch eine zyklische Zuweisung aus dem SPS-Programm erhält.

    Viel Spass dann auch bei einer Fehlerdiagnose ... ohne Referenzdaten ... bei jedem Ausgang der sich "seltsam" verhält, wird der Verdacht zuerst auf das PLS fallen ...

    Es muß doch auch eine saubere Lösung für Deine Aufgabe geben. Erzähl mal mehr!

    Was willst Du bei Dir steuern? Was ist an den Ausgängen angeschlossen? Um wieviele Ausgänge geht das bei Dir? Warum ist es nicht möglich, ganz normal Einschaltbits und Ausschaltbits vom PLS an die SPS zu senden und in der SPS sauber zu verknüpfen? Willst Du Programmierarbeit sparen? Oder "Powertags"? Wie hast Du Dir die Bedienung im PLS gedacht? Soll ein Operator in ein EA-Feld eine x-beliebige Zahl eingeben und dann auf einen Button "ich weiß sicher was ich tue - schalte das jetzt mal ein!" drücken?

    Was kann an Deiner Anlage passieren, wenn sich jederzeit beliebige Ausgänge einschalten können? Was passiert, wenn die Verbindung vom PLS unterbrochen wird?


    Wenn überhaupt, dann kann ich mir die Lösung Deiner Aufgabe nur so vorstellen, daß es eine begrenzte Anzahl vorher bestimmter (programmierter) Ausgänge gibt, welche Schaltbefehle direkt vom PLS erhalten dürfen. Das PLS sendet dazu eine Index-Zahl für den gewünschten Ausgang und die SPS führt die für diesen Indexwert programmierte Programmsequenz aus - im einfachsten Fall einen Merker setzen. Nicht vereinbarte Indexwerte werden einfach ignoriert/verworfen.

    Auf keinen Fall sollte es eine direkte Umrechnung vom Indexwert in die absolute Ausgangsadresse geben - da gehört eine Rangiermöglichkeit und eine Ausgangsverknüpfung dazwischen.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    borromeus (10.02.2013)

  9. #8
    IOSam ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.02.2013
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Es handelt sich um eine Dosieranlage. Hierbei gibt ca. 40 Antriebe (Dosierschnecken) welche je nach Dosierauftrag einzeln angeschaltet und beim erreichen des vorgegebenen Sollgewichts abgeschaltet werden sollen. Vom Ablauf her würde die SPS also von der Leitebene ein Sollgewicht und den Ausgang für den jeweiligen Auftrag bekommen. Dies geschieht allerdings nicht vom Anwender direkt sondern über ein Programm. Der Bediener kann demnach die Ausgänge nicht frei wählen sondern er wählt nur ein Dosierrezept aus hinter welchem sich der jeweilige Ausgang verbirgt.

    Dein Vorschlag Einschaltbits und Ausschaltbits vom PLS an die SPS zu senden und diese in der SPS sauber zu verknüpfen ist natürlich auch eine Option. Nachteil wäre zwar, dass bei jeder späteren Umadressierung bzw. beim Hinzukommen neuer Dosierantriebe das SPS-Programm neu angepasst werden muss.

    Kann ich mir das Verknüpfen so vorstellen, dass ich aus dem PLS in einem Datenbaustein die Antriebsnummer z.B. 7 eintrage. Im FB muss ich nun bedingt abfragen und beim betroffenen Ausgang an/abschalten. Wie genau würdest du das denn aufbauen? Habe ich dann eine Art Tabelle z.B. ein Array wo ich nachsehen kann, welcher Ausgang zur 7 gehört?

  10. #9
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.255
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    @Harald: 100% ACK
    @IOSam:
    Ich würde das so lösen:
    Du hast jetzt 40 Schnecken.
    Gut, dann bereit HW-mässig mal zB 64 vor, muss ja noch nicht angeschlossen werden.
    Dann baut Du Deine 64 FC/FB's bereits im Programm ein.
    Im PLS kannst Du mittels (passwortgeschützen) Parameter angeben wieviele Dosierschnecken tatsächlich physikalisch vorhanden sind (auch das ist ein Wert in der SPS).
    Das Rezept kann sich der Bediener nun von 1-xx aussuchen und Start drücken.
    Dann arbeitet der jeweilige FC/FB mit der dieses Rezept "verbunden" ist dieses Programm ab.

    Bedenke: Schnecke hat vermute ich auch Rückmeldung, Störung, das sind 2 weitere Adressen.
    Einmal kommt ein FU dazu, dann passt wieder nichts.
    Oder man will mal mit 2 Schnecken gleichzeitig fahren... egal was die Zukunft bringt, Du bist dafür mit der trickreichen Version NICHT gerüstet.


    Gruß
    Karl

  11. #10
    IOSam ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.02.2013
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ok das mit dem Festbrennen der Ausgängen auf der SPS sehe ich ein, aber ist es wirklich notwendig für jeden Antrieb eine eigene FC oder einen FCB zu basteln? Wie wäre es wenn ich einen FB nehme in dem alle potentiell möglichen Ausgänge bedingt abgefragt werden. Sobald der richtige Ausgang dran ist wird eine globale An/Ausschaltfunktion mit den jeweiligen Aufruf Parameter aufgerufen.


    Einen Vorteil sehe hierbei in der Über und dass ich bei Änderungen nicht 64 mal die eigentlich immer gleich aussehende Funktion anpacken muss.

Ähnliche Themen

  1. ANY als Parameter in SCL
    Von Züttu im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 08.01.2013, 19:43
  2. UDT als FC-Parameter
    Von Reinhard.Steinbrueck im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 15.07.2011, 18:01
  3. Antworten: 9
    Letzter Beitrag: 15.12.2010, 12:27
  4. Block_DB typ als parameter übergeben ?
    Von michdan im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 19.02.2007, 17:59
  5. Datenbaustein als Parameter übergeben.
    Von Jochen Kühner im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 07.07.2004, 08:13

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •