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

Ergebnis 1 bis 6 von 6

Thema: Bräuchte Hilfe beim Nachfolziehen eines Beispielprojekts

  1. #1
    Registriert seit
    08.05.2011
    Ort
    Berlin
    Beiträge
    26
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    ich bräuchte Hilfe beim Nachfolziehen eines Beispielprojekts.

    Mein Problem ist, dass nicht bei jedem aufrufen des Bausteins "SEND" etwas gesendet wird.
    Meist gehts beim ersten Mal immer und danach erst jeweils beim 4ten bis 5ten mal drücken des Schalters.

    Woran könnte das liegen .. was übersehe ich relevantes in dem Code.
    Den Anfangsteil mit dem Aufruf den Datenbank verstehe ich noch. Der Code danach ist mir leider nichtmehr klar.
    Konkret gehts um die Teile:
    Code:
    // Generate edge P_SND_RK_REQ
    und der darunterliegenden Programmteile.

    Was davon könnte der Grund sein, das nicht immer beim Aufrufen von "SEND" etwas gesendet wird?
    Eigendlich doch nur der Teil:
    Code:
    // Generate edge P_SND_RK_REQ
    oder?

    Falls irgendwelche weiteren Daten des Programms benötigt werden einfach fragen

    Der Code des Projekts lautet:

    OB100
    ________________________________________________________________________________ __________________________
    Code:
          L     B#16#0
    
          T     DB40.DBB    0               //P_SND_RK- Work-DB
          T     DB41.DBB    0               //P_RCV_RK-  Work-DB
    
    // ---------------------------
    // Reset counters/STATUS 
    // ---------------------------
          T     "SEND WORK DB".P_SND_RK_WORK_LADDR    //P_SND_RK- Work -DB
          T     "SEND WORK DB".P_SND_RK_WORK_DB_NO
          T     "SEND WORK DB".P_SND_RK_WORK_DBB_NO
          T     "SEND WORK DB".P_SND_RK_WORK_LEN
          T     "SEND WORK DB".P_SND_RK_WORK_RES_1
          T     "SEND WORK DB".P_SND_RK_WORK_STATUS
          T     "SEND WORK DB".P_SND_RK_WORK_STATUS_SAV
          T     DB40.DBW   16
    
          T     "SEND SRC DB".P_SND_RK_COUNTER_OK    //Reset Counters
          T     "SEND SRC DB".P_SND_RK_COUNTER_ERR
    
          T     "RCV WORK DB".P_RCV_RK_WORK_LADDR    //P_RCV_RK-  Work-DB
          T     "RCV WORK DB".P_RCV_RK_WORK_DB_NO
          T     "RCV WORK DB".P_RCV_RK_WORK_DBB_NO
          T     "RCV WORK DB".P_RCV_RK_WORK_LEN
          T     "RCV WORK DB".P_RCV_RK_WORK_SAVE_LEN
          T     "RCV WORK DB".P_RCV_RK_WORK_STATUS
          T     "RCV WORK DB".P_RCV_RK_WORK_STATUS_SAV
          T     "RCV WORK DB".P_RCV_RK_WORK_RES_2
          T     "RCV WORK DB".P_RCV_RK_WORK_CNT_OK
          T     "RCV WORK DB".P_RCV_RK_WORK_CNT_ERR

    FC21 bzw. "SEND"
    ________________________________________________________________________________ __________________________
    Code:
     L     256                         //LADDR
          T     "SEND WORK DB".P_SND_RK_WORK_LADDR
    
          L     42                          //DB_NO
          T     "SEND WORK DB".P_SND_RK_WORK_DB_NO
          T     "SEND SRC DB".P_SND_RK_DB_NO
    
          L     86                          //DBB_NO  0
          T     "SEND WORK DB".P_SND_RK_WORK_DBB_NO
          T     "SEND SRC DB".P_SND_RK_DBB_NO
    
          L     10                          //114
          T     "SEND WORK DB".P_SND_RK_WORK_LEN    //LEN
          T     "SEND SRC DB".P_SND_RK_LEN  //LEN
    
    // ------------------------
    // SEND with Instance-DB
    // ------------------------
          CALL  "P_SND_RK" , "SEND IDB"
           SF      :='S'
           REQ     :="SEND WORK DB".P_SND_RK_REQ
           R       :="SEND WORK DB".P_SND_RK_R
           LADDR   :="SEND WORK DB".P_SND_RK_WORK_LADDR
           DB_NO   :="SEND WORK DB".P_SND_RK_WORK_DB_NO
           DBB_NO  :="SEND WORK DB".P_SND_RK_WORK_DBB_NO
           LEN     :="SEND WORK DB".P_SND_RK_WORK_LEN
           R_CPU_NO:=
           R_TYP   :=
           R_NO    :=
           R_OFFSET:=
           R_CF_BYT:=
           R_CF_BIT:=
           DONE    :="SEND WORK DB".P_SND_RK_DONE
           ERROR   :="SEND WORK DB".P_SND_RK_ERROR
           STATUS  :="SEND WORK DB".P_SND_RK_WORK_STATUS
    
    // ------------------------
    // Generate edge P_SND_RK_REQ
    // ------------------------
          UN    "SEND WORK DB".P_SND_RK_REQ //P_SND_RK_REQ
          S     "SEND WORK DB".P_SND_RK_REQ //set P_SND_RK_REQ
    
          O     "SEND WORK DB".P_SND_RK_DONE    //P_SND_RK_DONE
          O     "SEND WORK DB".P_SND_RK_ERROR    //P_SND_RK_ERROR
          R     "SEND WORK DB".P_SND_RK_REQ //P_SND_RK_REQ
    
    // -------------------------------
    // Check "Complete without error"
    // -------------------------------
          UN    "SEND WORK DB".P_SND_RK_DONE    //check P_SND_RK_DONE
          SPB   CHER                        //if P_SND_RK_DONE equals 0, jump to CHER
    //and check P_SND_RK_ERROR
    
    // -------------------------------
    // "Complete without error"
    //  P_SND_RK_DONE = 1
    // -------------------------------
          L     "SEND SRC DB".P_SND_RK_COUNTER_OK    //"Complete without Error"
          +     1                           //increment counter
          T     "SEND SRC DB".P_SND_RK_COUNTER_OK
    
          NOP   0
          NOP   0                           //further user functions
          NOP   0
    
          BE    
    
    // -------------------------------
    // Check "Complete with error"
    // P_SND_RK_ERROR = 1
    // -------------------------------
    CHER: UN    "SEND WORK DB".P_SND_RK_ERROR    //check P_SND_RK_ERROR
          BEB                               //if no error occured, jump to end
    
    // -------------------------------
    // "Complete with error"
    // -------------------------------
          L     "SEND SRC DB".P_SND_RK_COUNTER_ERR    //"Complete with error"
          +     1                           //increment counter
          T     "SEND SRC DB".P_SND_RK_COUNTER_ERR
    
          L     "SEND WORK DB".P_SND_RK_WORK_STATUS
          T     "SEND WORK DB".P_SND_RK_WORK_STATUS_SAV    //save STATUS
    
          NOP   0
          NOP   0                           //Error-Handling
          NOP   0
    
          BE
    Danke
    Angehängte Dateien Angehängte Dateien
    Geändert von Pneumatik (22.05.2011 um 21:25 Uhr)
    Zitieren Zitieren Bräuchte Hilfe beim Nachfolziehen eines Beispielprojekts  

  2. #2
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    Du darfst den Start nur ausgeben, wenn done bzw error da war.
    Es ist doch an sich sehr einfach im send work DB.P_sndRK_work_status auszuwerten, was als Antwort ansteht.
    Wie testest du die Kommunikation?

    Mit Beispielen ohne Grundwissen kommst du vermutlich nicht ans Ziel.


    bike

  3. Folgender Benutzer sagt Danke zu bike für den nützlichen Beitrag:

    Pneumatik (24.05.2011)

  4. #3
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    hallo zusammen,

    Zitat Zitat von Pneumatik Beitrag anzeigen
    Meist gehts beim ersten Mal immer und danach erst jeweils beim 4ten bis 5ten mal drücken des Schalters.
    hab´s nur überflogen... wo fragst du denn deinen Schalter ab, um deinen REQ anzustossen ?

    Grüsse

  5. #4
    Pneumatik ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.05.2011
    Ort
    Berlin
    Beiträge
    26
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von bike Beitrag anzeigen
    Du darfst den Start nur ausgeben, wenn done bzw error da war.
    Es ist doch an sich sehr einfach im send work DB.P_sndRK_work_status auszuwerten, was als Antwort ansteht.
    Wie testest du die Kommunikation?
    Das war genau der Punkt, Start bzw. Error wird nicht jedesmals gesetzt.
    Danke jetzt kann ich wenigstens die Ursache dafür suchen

    Ich teste die Kommunikation indem ich als Empfänger einen PC mit Hyperterm habe und das aufrufen des Sendbausteins über eine LED sichtbar mache.
    Und dank deines Hinweises habe ich jetzt im Debugger den Aktualwert der DB angeguckt.

    Gibts noch andere Möglichkeiten zum testen ?
    Zitat Zitat von bike Beitrag anzeigen

    Mit Beispielen ohne Grundwissen kommst du vermutlich nicht ans Ziel.

    bike
    Und ja es wird hart .. ich lese mir ja parallel einiges an, aber es ist am Anfang halt extrem viel und ich habe niemanden (außer euch) der sich damit auch nur im geringsten auskennt. Dementsprechend muss ich bei euch meine blöden Fragen/Probleme posten .
    Aber ich muss sagen, dass ich langsam etwas mehr durchblick bekomme und beim lesen langsam beim interessanten Grundwissen ankommen.

    @SoftMachine
    Die Funktion "Send" wird einfach in einem extra Baustein aufgerufen, der wiederum durch den Schalter aufgerufen wird.
    Das Aufrufen ist der der Impuls, oder ?

  6. #5
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    Hallo !
    Zitat Zitat von Pneumatik Beitrag anzeigen

    @SoftMachine
    Die Funktion "Send" wird einfach in einem extra Baustein aufgerufen, der wiederum durch den Schalter aufgerufen wird.

    Das Aufrufen ist der der Impuls, oder ?
    Nein, der (Sende-)Impuls ist schon da und wird hier gemacht:

    // ------------------------
    // Generate edge P_SND_RK_REQ
    // ------------------------
    UN "SEND WORK DB".P_SND_RK_REQ //P_SND_RK_REQ
    S "SEND WORK DB".P_SND_RK_REQ //set P_SND_RK_REQ <----- HIER
    O "SEND WORK DB".P_SND_RK_DONE //P_SND_RK_DONE
    O "SEND WORK DB".P_SND_RK_ERROR //P_SND_RK_ERROR
    R "SEND WORK DB".P_SND_RK_REQ //P_SND_RK_REQ

    Du darfst deinen "extra Baustein" und damit den Sendebaustein nicht bedingt durch das Betätigen des Schalters aufrufen, sondern absolut, er muss ständig bearbeitet werden.

    Der Anstoss zum Senden erfolgt durch "SEND WORK DB".P_SND_RK_REQ.
    Dies ist dein "Impuls", der hier in diesem Beispielprog. nach jedem erfolgten Senden immer erneut gesetzt wird (muss aber bei dir nicht so sein).


    Den P_SND_RK_REQ solltest du mit deinem Schalter beeinflussen, um das Senden anzustossen.

    Da Senden muss übrigens nicht zwingend in einem Zyklus fertig sein, kann auch länger dauern. Deswegen wird das DONE abgefragt.
    Und der REQ muss vor erneutem Setzen mindestens einmal mit "0" am Sendebaustein bearbeitet werden.

    Gruss

  7. #6
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von SoftMachine Beitrag anzeigen
    Da Senden muss übrigens nicht zwingend in einem Zyklus fertig sein, kann auch länger dauern. Deswegen wird das DONE abgefragt.
    Und der REQ muss vor erneutem Setzen mindestens einmal mit "0" am Sendebaustein bearbeitet werden.
    Entweder done oder Error setzt das Startsignal zurück.
    Aber du hast es richtig erkannt, es kommt nicht zuverlässig zu einem VKE 0 am REQ kommt.
    Code:
    UN "SEND WORK DB".P_SND_RK_REQ //P_SND_RK_REQ 
    S "SEND WORK DB".P_SND_RK_REQ //set P_SND_RK_REQ <----- HIER
    O "SEND WORK DB".P_SND_RK_DONE //P_SND_RK_DONE
    O "SEND WORK DB".P_SND_RK_ERROR //P_SND_RK_ERROR
    R "SEND WORK DB".P_SND_RK_REQ //P_SND_RK_REQ
    An diesem Punkt würde ich nachschauen.


    bike

Ähnliche Themen

  1. Bräuchte eure Hilfe
    Von Grisubobby im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 18.01.2011, 11:58
  2. Bräuchte Hilfe um Reihenfolge zu speichern .
    Von Chris30 im Forum Simatic
    Antworten: 19
    Letzter Beitrag: 11.07.2010, 17:51
  3. Antworten: 1
    Letzter Beitrag: 22.05.2008, 11:27
  4. Hilfe beim ansteuern eines Displays!
    Von LittleSwabi im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 09.01.2006, 11:05
  5. Bräuchte Hilfe für Schalter
    Von Anonymous im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 06.03.2004, 21:22

Lesezeichen

Berechtigungen

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