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

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

Thema: Möglichkeit eine Funktion nur einmal auszuführen ?

  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
    Ich versuche(muss) mich gerade an einem Beispiel von Siemens an Simatic ranzutasten.
    Mein Prof (arbeite als studentischer Mitarbieter) will, dass ich ein SMS Modul für eine Hochregallager programmiere. Dies soll Fehlermeldungen und Statusmeldungen per SMS senden.
    Simatic ist vollkommen neu für mich .. und überfordert mich ehrlich gesagt.

    Beim Start soll ja erstmal die Anmeldung im GSM Netz durchgeführt werden.
    Das Ganze soll natürlich nur einmal durchgeführt werden.

    Hardware:
    CPU315-2 DP
    CP341

    Software:
    Step7 5.3

    Meine Überlegung (welche bisher nicht funktioniert ^^) ist folgende:

    Zuerst habe ich mittels Infos aus dem Forum 2 Merker im OB100 definiert die jeweils immer 0 und 1 sind.
    Code:
    U „always_false“
    R „always_false“
    
    UN “always_true”
    S”always_true”
    Dann habe ich einen Merker für die Anmeldung im OB 100 auf 0 gesetzt.
    Code:
    U „always_false“
    U “always_true“
    =”Modem_anmeldung”
    Im OB 1 wird nun folgendes aufgerufen:
    Code:
    U “Modem_anmeldung“ // Modem_anmeldung UND always_true =1 dann Jump
    U “always_true“
    SPB jump
    
    Call „GSM_anmeldung“ // Funktion zum Anmdelden im GSM Netz
    
    Jump: NOP 0
    UC  „SEND“
    UC  “RECV“
    Wo ist mein Denkfehler ? Wie gesagt STEP7 und SPS ist vollkommen neu für mich und bis auf ein bisschen Erfahrungen mit C bin ich auch kein erfahrener Programmierer 

    Schonmal Danke im vorraus

    Fehler wie Groß- und Kleinschreibung oder Rechtschreibfehler im Code bitte nicht beachten ... der Rechner an dem ich programmiere hat kein Internet .. dementsprechend ist der Code nur abgetippt und stimmen im echten Code wahrscheinlich.
    Geändert von Pneumatik (10.05.2011 um 19:55 Uhr) Grund: ergänzende Infos
    Zitieren Zitieren Möglichkeit eine Funktion nur einmal auszuführen ?  

  2. #2
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von Pneumatik Beitrag anzeigen
    Code:
    U „always_false“
    R „always_false“
     
    UN “always_true”
    S”always_true”
    Das ist OK
    Zitat Zitat von Pneumatik Beitrag anzeigen
    Dann habe ich einen Merker für die Anmeldung im OB 100 auf 0 gesetzt.
    Code:
    U „always_false“
    U “always_true“
    =”Modem_anmeldung”
    Umsonst
    Zitat Zitat von Pneumatik Beitrag anzeigen
    [CODE]
    Im OB 1 wird nun folgendes aufgerufen:
    Code:
    U “Modem_anmeldung“ // Modem_anmeldung UND always_true =1 dann Jump
    U “always_true“
    SPB jump
     
    Call „GSM_anmeldung“ // Funktion zum Anmdelden im GSM Netz
     
    Jump: NOP 0
    UC  „SEND“
    UC  “RECV“
    OB 1 ändern in
    Code:
         U ”always_true”
         SPBN Jump
         Call „GSM_anmeldung“ // Funktion zum Anmdelden im GSM Netz
    Jump: U ”always_true”
         R ”always_true”
    Falls Du "always_true" wirklich als immer "High" verwenden willst erzeuge im OB100 einen separten Merker für den Anlauf.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

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

    Pneumatik (10.05.2011)

  4. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    Eigentlich reicht es, wenn du im OB100 fpr das Setzen von ”Modem_anmeldung” schreibst:

    Code:
    U “always_true“
    =”Modem_anmeldung”
    U „always_false“

    ist Unsinn, da das ja immer False ist, also wird dein Merker

    =”Modem_anmeldung”

    gar nicht gesetzt.

    Du solltest aber auc die Möglichkeit zulassen, die Anmeldung z.Bsp. von einem HMI aus anzustoßen, denn der OB100 wird ja nur beim Anlauf der SPS 1 Mal bearbeitet. Was machst du, wenn zwischendurch das GSM-Modul mal ausgeschalten wird, dann müßtest du die SPS in Stop und wieder Run schalten. Also noch einen Merker, der dann über das Panel geschalten werden kann.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  5. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Pneumatik (10.05.2011)

  6. #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

    Danke für die schnelle Antwort.

    Leider wird jetzt aber GSM Anmeldung übersprungen ..

    Mein Code lautet jetzt:

    OB100:
    Code:
          U     "always_false"
          R     "always_false"
    
          UN    "always_true"
          S     "always_true"
    OB1:
    Code:
    //   U     "always_false"
    //   R     "always_false"
    
    //   UN    "always_true"
    //   S     "always_true"
    
          U     "always_true"
          SPBN  jump
          CALL  "GSM_Anmeldung"
    jump: U     "always_true"
          R     "always_true"
          UC    "SEND"                      //Call of FC for executing P_SND_RK -Jobs
          UC    "RECV"                      //Call of FC for executing RCV   -Jobs
    Abgeshen davon, dass es noch nicht ganz funktioniert kann ich momentan auch noch nicht erkennen an welcher Stelle dafür gesorgt wird, dass "GSM_Anmeldung" nur einmal ausgeführt wird ?
    Hab ich was falsch verstanden ?

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

    Standard

    Dein Programm hat den Fehler:

    U "always_true" // Wenn hier VKE = 0 wird weggesprungen
    SPBN jump
    CALL "GSM_Anmeldung"
    jump: U "always_true"
    R "always_true"

    Nach dem ersten Druchlauf wird der Merker auf Null gesetzt und dann wird immer weggesprungen.
    Außerdem ist der Merker schlecht bezeichnet.
    Allways true sollte immer 1 sein, als immer gesetzt aber nie zurück gesetzt werden.


    bike

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

    Pneumatik (10.05.2011)

  9. #6
    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 Ralle Beitrag anzeigen
    Eigentlich reicht es, wenn du im OB100 fpr das Setzen von ”Modem_anmeldung” schreibst:

    Code:
    U “always_true“
    =”Modem_anmeldung”
    U „always_false“

    ist Unsinn, da das ja immer False ist, also wird dein Merker

    =”Modem_anmeldung”

    gar nicht gesetzt.

    Du solltest aber auc die Möglichkeit zulassen, die Anmeldung z.Bsp. von einem HMI aus anzustoßen, denn der OB100 wird ja nur beim Anlauf der SPS 1 Mal bearbeitet. Was machst du, wenn zwischendurch das GSM-Modul mal ausgeschalten wird, dann müßtest du die SPS in Stop und wieder Run schalten. Also noch einen Merker, der dann über das Panel geschalten werden kann.
    Auch dir Ralle Danke

    Aber wird durch:
    Code:
    U “always_true“
    =”Modem_anmeldung”
    nicht der Merker ”Modem_anmeldung” auf 1 gesetzt ? Das soll doch erst passieren, wenn die Funktion „GSM_anmeldung“ einmal durchgelaufen ist ?


    Zum 2ten Punkt: Du hast vollkommen recht, später sollte das auf jedenfalls auch über ein Interface per Hand neuinitialisierbar sein.
    Ich müsste aber doch dann eigentlich den "always_true" Merker recht einfach durch einen geschalteten Eingang ersetzen können oder ?

  10. #7
    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
    Dein Programm hat den Fehler:

    U "always_true" // Wenn hier VKE = 0 wird weggesprungen
    SPBN jump
    CALL "GSM_Anmeldung"
    jump: U "always_true"
    R "always_true"

    Nach dem ersten Druchlauf wird der Merker auf Null gesetzt und dann wird immer weggesprungen.
    Außerdem ist der Merker schlecht bezeichnet.
    Allways true sollte immer 1 sein, als immer gesetzt aber nie zurück gesetzt werden.


    bike
    Mans seit ihr schnell ...
    und ja eigentllich sollte "always_true" immer 1 sein.. das war zumindest meine Intention am Anfang. Für die Idee von Paule wäre das aber nicht so und ich würde den Merker dementsprechend später umbennenen, falls ich mit der Variante zum Erfolg gelange ^^.

    Zur Sache mit dem VKE .. ich habe mir jetzt 2 Bücher gekauft die ich nebenbei versuche durchzuarbeiten. Aber mir ist noch nicht so richtig klar was das Verknüpfungsergebniss ist.

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

    Standard

    Zitat Zitat von Pneumatik Beitrag anzeigen
    Mans seit ihr schnell ...
    und ja eigentllich sollte "always_true" immer 1 sein.. das war zumindest meine Intention am Anfang. Für die Idee von Paule wäre das aber nicht so und ich würde den Merker dementsprechend später umbennenen, falls ich mit der Variante zum Erfolg gelange ^^.

    Zur Sache mit dem VKE .. ich habe mir jetzt 2 Bücher gekauft die ich nebenbei versuche durchzuarbeiten. Aber mir ist noch nicht so richtig klar was das Verknüpfungsergebniss ist.
    Das VKE ist das Ergebnis aller Verknüpfungen, die nach der letzten Zuweisung bis zur nächsten Verknüpfung programmiert sind. Das VKE ist NICHT abhängig von Netzwerk oder Bausteingrenze!
    Bei U muss das Signal 1, bei UN muss das Signal 0 sein, damit das VKE 1 wird.


    bike

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

    Pneumatik (10.05.2011)

  13. #9
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von Pneumatik Beitrag anzeigen
    Mans seit ihr schnell ...
    und ja eigentllich sollte "always_true" immer 1 sein.. das war zumindest meine Intention am Anfang. Für die Idee von Paule wäre das aber nicht so und ich würde den Merker dementsprechend später umbennenen, falls ich mit der Variante zum Erfolg gelange ^^.
    Genau, das meinte ich ja mit einem separatem Merker für den Anlauf.
    Zitat Zitat von Pneumatik Beitrag anzeigen
    Abgeshen davon, dass es noch nicht ganz funktioniert kann ich momentan auch noch nicht erkennen an welcher Stelle dafür gesorgt wird, dass "GSM_Anmeldung" nur einmal ausgeführt wird ?
    Hab ich was falsch verstanden ?
    Ich erkenne jetzt da keinen Fehler.
    Deshalb mal die "Wegbeschreibung" in Worten (wobei das oft verwirrender ist).
    > Im OB100 wird ein Merker (in diesem [noch] Fall "always_true" auf High gesetzt wenn er den Zustand Low hatte.
    > Im OB1 wird im ersten Zyklus der Sprung nicht ausgeführt da der Merker High ist (Springe nur bei Low), also wird "CALL GSM_Anmeldung" ausgeführt.
    > anschließend wird der Merker auf Low gesetzt.
    > im nächsten Zyklus ist der Merker immer noch Low (bis zum nächsten Neustart) und deshalb wird über die CALL Anweisung gesprungen.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  14. Folgender Benutzer sagt Danke zu Paule für den nützlichen Beitrag:

    Pneumatik (10.05.2011)

  15. #10
    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

    Lächeln


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Paule Beitrag anzeigen
    Genau, das meinte ich ja mit einem separatem Merker für den Anlauf.
    Umso besser

    Zitat Zitat von Paule Beitrag anzeigen
    Ich erkenne jetzt da keinen Fehler.
    Deshalb mal die "Wegbeschreibung" in Worten (wobei das oft verwirrender ist).
    > Im OB100 wird ein Merker (in diesem [noch] Fall "always_true" auf High gesetzt wenn er den Zustand Low hatte.
    > Im OB1 wird im ersten Zyklus der Sprung nicht ausgeführt da der Merker High ist (Springe nur bei Low), also wird "CALL GSM_Anmeldung" ausgeführt.
    > anschließend wird der Merker auf Low gesetzt.
    > im nächsten Zyklus ist der Merker immer noch Low (bis zum nächsten Neustart) und deshalb wird über die CALL Anweisung gesprungen.
    Ich habe gerade rausgefunden, dass wenn ich das "UC RECV" auskommentiere alles so funktioniert wie es soll.
    Momentan verstehe ich zwar noch nicht warum, aber das ist ein Problem für Donnerstag (nächtser Arbeitstag ).

    Ich bin mal gespannt wie das mit mir uns SPS endet ^^ ich schwanke immer zwischen Wohlwollen und Flüchen.

    Naja auf jedenfalls erstmal vielen Dank! .. dank euch kann ich jetzt guten Gewissens Feierabend machen.

Ähnliche Themen

  1. Noch einmal eine Frage zur Querverweisliste
    Von bullimen im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 12.11.2010, 22:47
  2. Antworten: 8
    Letzter Beitrag: 08.10.2010, 10:10
  3. Antworten: 12
    Letzter Beitrag: 28.09.2010, 10:31
  4. Möglichkeit, um zyklisch eine Kopie einer Datei anzulegen
    Von olitheis im Forum Hochsprachen - OPC
    Antworten: 5
    Letzter Beitrag: 11.03.2008, 08:21
  5. Antworten: 8
    Letzter Beitrag: 19.10.2005, 18:19

Lesezeichen

Berechtigungen

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