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

Results 1 to 3 of 3

Thread: Impulsgeber mit SCL in TIA V16 programmieren

  1. #1
    Join Date
    26.03.2020
    Posts
    2
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich bin totaler Anfänger was die SCL Programmierung angeht.
    Allerdings brauche ich jetzt für ein Projekt einen Impulsgeber für meine SPS S7-1200.
    Leider habe ich absolut keine Ahnung, wie ich diesen programmieren kann, sodass ich später meine Puls und Pausenzeiten im Millisekunden Bereich einstellen kann.

    Kann mir da jemand eine möglichst detaillierte Erklärung geben?

    LG
    Reply With Quote Reply With Quote Impulsgeber mit SCL in TIA V16 programmieren  

  2. #2
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    15,182
    Danke
    1,243
    Erhielt 4,469 Danke für 3,603 Beiträge

    Default

    Du brauchst ein Element was die Pulszeit misst und mit einer vorgegebenen Zeitdauer vergleicht, und ein weiteres Element was das gleiche mit der Pausenzeit macht und danach die Pulszeit wieder startet. Solche Basic Signalgeneratoren gibt es natürlich schon fertig, z.B. von OSCAT der FB "GEN_PULSE". Aber da lernt man ja kaum was dabei...

    Du könntest auch aus der Siemens-Bibliothek Bibliothek mit generellen Funktionen (LGF) für SIMATIC STEP 7 (TIA Portal) und SIMATIC S7-1200 / S7-1500 den fertigen FB "LGF_Frequency" nehmen und so ummodeln, daß Du die Pulsdauer und die Pausendauer nicht berechnest sondern als INPUT vorgibst.
    Code:
    FUNCTION_BLOCK "LGF_Frequency"
    { S7_Optimized_Access := 'TRUE' }
       VAR_INPUT 
          frequency : Real;   // Input in Hz
          pulsePauseRatio : Real := 1.0;   // Pulse pause ratio
       END_VAR
    
       VAR_OUTPUT 
          clock : Bool;   // -
          countdown : Time;   // -
       END_VAR
    
       VAR 
          instTofTimePulse {InstructionName := 'TOF_TIME'; LibVersion := '1.0'} : TOF_TIME;   // -
          instTofTimePause {InstructionName := 'TOF_TIME'; LibVersion := '1.0'} : TOF_TIME;   // -
          statFrequency : Real;   // -
          statTimePeriod : Time;   // -
          statTimePulse : Time;   // -
          statTimePause : Time;   // -
          statPulsePauseRatio : Real;   // -
       END_VAR
    
       VAR_TEMP 
          tempPulseRate : Real;   // -
          tempPauseRate : Real;   // -
       END_VAR
    
       VAR CONSTANT 
          "NULL" : Real := 0.0;   // -
       END_VAR
    
    
    BEGIN
    //=============================================================================
    // SIEMENS AG
    // (c)Copyright 2017
    //-----------------------------------------------------------------------------
    // Library:       LGF (Library General Functions)
    // Tested with:   CPU1214C DC/DC/DC FW:V4.2
    // Engineering:   TIA Portal V14
    // Restrictions:  -
    // Requirements:  PLC (S7-1200, S7-1500)
    // Functionality: Generates frequency signal
    //-----------------------------------------------------------------------------
    // Change log table:
    // Version  Date        Expert in charge / Changes applied
    // 01.00.00 19.08.2015  Siemens Industry Online Support
    //                      First released version
    // 01.01.00 25.05.2016  Siemens Industry Online Support
    //                      New function: pulse pause ratio
    // 01.01.01 26.05.2016  Siemens Industry Online Support
    //                      Add comments
    // 01.01.02 02.01.2017  Siemens Industry Online Support
    //                      Upgrade: TIA Portal V14 Update 1
    // 01.01.03 17.08.2018  Siemens Industry Online Support
    //                      Upgrade: TIA V15 Update 2
    // 01.01.04 23.11.2018  Siemens Industry Online Support
    //                      Upgrade: TIA V15.1
    //=============================================================================
    
    IF (#frequency <= #NULL) OR (#pulsePauseRatio <= #NULL)  // If input is <= 0.0 : block is off
    THEN
      #clock := FALSE;
      #countdown := t#0s;
    ELSE
      // assign frequency and pulse pause ratio one time 
      IF #statFrequency <> #frequency OR #statPulsePauseRatio <> #pulsePauseRatio THEN
        RESET_TIMER(TIMER := #instTofTimePause);
        RESET_TIMER(TIMER := #instTofTimePulse);
        
        #tempPulseRate := #pulsePauseRatio / (#pulsePauseRatio + 1); // Calculate pulse rate   
        #tempPauseRate := 1.0 - #tempPulseRate;                      // Calculate pause rate   
        #statTimePeriod := UDINT_TO_TIME(REAL_TO_UDINT((1000.0 / #frequency)));                 // Calculate period time 
        #statTimePulse := UDINT_TO_TIME(REAL_TO_UDINT((1000.0 * #tempPulseRate / #frequency))); // Calculate pulse time   
        #statTimePause := UDINT_TO_TIME(REAL_TO_UDINT((1000.0 * #tempPauseRate / #frequency))); // Calculate pause time
        #statFrequency := #frequency;
        #statPulsePauseRatio := #pulsePauseRatio;
      END_IF;
      
      // TOF_off expired >> Start again
      #instTofTimePulse(IN := NOT #instTofTimePause.Q,
                        PT := #statTimePulse);
      #countdown := #statTimePulse - #instTofTimePulse.ET;
      
      #instTofTimePause(IN := #instTofTimePulse.Q,
                        PT := #statTimePause);
      
      IF #countdown = t#0s THEN
        #countdown := #statTimePause - #instTofTimePause.ET;
      END_IF;
      
      #clock := #instTofTimePulse.Q; // Assign ouptut 
    END_IF;
    END_FUNCTION_BLOCK
    Wie genau brauchst Du Deinen Signalgenerator? Die meisten naiven Lösungen mit 1 oder 2 Timern erzeugen eine Pulsfolge die 1 bis 2 mal OB1-Zykluszeit zu langsam ist. Es gibt auch Lösungen, die mit Weckalarm-OB arbeiten und da einfach nur die ms abzählen. Andere Lösungen addieren die Länge des vergangenen OB1-Zyklus.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    Anfänger98 (30.03.2020)

  4. #3
    Anfänger98 is offline Neuer Benutzer
    Themenstarter
    Join Date
    26.03.2020
    Posts
    2
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Super vielen Dank!
    Ich probiere es mal mit den LGF´s aus.

Similar Threads

  1. Replies: 6
    Last Post: 28.02.2020, 09:01
  2. TIA TIA V16 Version Control Interface mit Git
    By Mike100 in forum Simatic
    Replies: 4
    Last Post: 31.01.2020, 08:56
  3. S120 CU310-2PN Motor mit Haltebremse - brake Relais TIA V16
    By Andy_Scheck in forum Antriebstechnik
    Replies: 2
    Last Post: 27.01.2020, 12:50
  4. TIA Sammelanzeige WinCC V7.5 mit TIA V16
    By _Mike_ in forum Simatic
    Replies: 11
    Last Post: 15.01.2020, 07:20
  5. Replies: 10
    Last Post: 25.04.2012, 23:30

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •