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

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

Thema: UC Aufruf in SCL?

  1. #1
    Registriert seit
    25.05.2007
    Beiträge
    19
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich stehe vor dem Problem das in einer 1500er keine UC Aufrufe mehr machen kann wie ich es in einer 300er konnte.
    Folgendes Szenario habe ich:
    In der 300er gibt es von uns Bausteine die eine TCP Verbindung aufgebaut haben und an bestimmten Punkten (Verbindung wurde aufgebaut/abgebaut oder Daten wurden empfangen) einen UC Aufruf ausgeführt haben um zu diesem Zeitpunkt irgendwelche Aktionen auszuführen.
    Beispielsweise wurde beim Empfang von Daten ein FC aufgerufen der dann den Empfangspuffer ausgewertet und verschiedene weitere Aktionen erledigt hat. (Bild 1)

    Die Nummer des FCs der beim Eingang von Daten ausgeführt werden sollte konnte von außen per INT angelegt werden. Somit hatten wir eine hohe Flexibilität (wenn ich Daten von einem Scanner bekomme habe ich einen anderen FC der mir die auswerten soll wie wenn ich Daten von einem Leitrechner bekomme etc.)

    Dies ist so nun nicht mehr möglich. Ich kann den UC Aufruf zwar immer noch ausführen nur müssen dann die Bausteine die damit aufgerufen werden immer in AWL sein und das ist was uns angeht nicht praktikabel (die meisten Baustein die bei einem Event aufgerufen werden sind FCs die in SCL geschrieben sind)

    Nun meine Frage. Gibt es eine Möglichkeit einen UC Befehl (oder einen irgendwie gearteten) in SCL zu integrieren, damit wir weiterhin von außen ein INT anlegen können und dieser FC dann beim erfolgen des Event aufgerufen wird?
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren UC Aufruf in SCL?  

  2. #2
    Registriert seit
    15.03.2013
    Beiträge
    188
    Danke
    6
    Erhielt 36 Danke für 31 Beiträge

    Standard

    So etwas kann man z.B. mit einer CASE-Anweisung programmieren: http://de.wikipedia.org/wiki/Strukturierter_Text

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Programmiere eine FC ("Test_UC_AWL") in AWL, der enthält:


    Code:
    L     #Nummer    //Input-Var
    T     #Nummer_Temp    //Temp-Var Word
    UC FC [ #Nummer_Temp]
    Diesen kannsz du dann in SCL aufrufen:

    Code:
    "Test_UC_AWL"(#MyNummer);
    Was das gemeint?
    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

  4. #4
    Registriert seit
    25.05.2007
    Beiträge
    19
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo,

    Zitat Zitat von Ralle Beitrag anzeigen
    Programmiere eine FC ("Test_UC_AWL") in AWL, der enthält:


    Code:
    L     #Nummer    //Input-Var
    T     #Nummer_Temp    //Temp-Var Word
    UC FC [ #Nummer_Temp]
    Diesen kannsz du dann in SCL aufrufen:

    Code:
    "Test_UC_AWL"(#MyNummer);
    Was das gemeint?
    Das geht leider nur wenn es durchgängig AWL Bausteine sind. Weil nur bei denen kann man in der 1500er das Attribut "Parameterversorgung über Register" aktivieren. Wenn der aufzurufende Baustein aber in SCL ist (was bei uns zu 90% der Fall ist) geht es nicht.
    Habe ich dann auch in der Doku für die Migration von AWL gefunden.

    Die Case Anweisung ist prinzipell eine gute Idee nur muß ich diese dann jedes Mal wenn ein neuer Baustein dazukommt erweitern. Das wollte ich mir ersparen.

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Ah, ich hab das eh bei einer 300-er getestet, aber da geht das ja alles.
    Bei der 1500-er ist das wieder anders ... oh Mann.
    Deshalb hätte ich gerne, daß man sich die Variablen zur Laufzeit (auch für FC) zusammensetzen kann, dann erst kann man vernünftig durchgängig symbolisch programmieren.
    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

  6. #6
    Registriert seit
    03.02.2015
    Ort
    Hatten
    Beiträge
    183
    Danke
    16
    Erhielt 32 Danke für 29 Beiträge

    Standard

    Muß das dann bis zur untersten Verschachtelungsebene AWL sein oder nur der durch UC aufgerufene Bausteine?
    Falls letzteres, macht Euch doch einfach einen "Wrapper"-Baustein: AWL, der nichts anderes macht, als einen bestimmten Baustein aufzurufen.
    Also bspw. FC1000 willst Du aufrufen und FC2000 ruft den als AWL auf. Dann hast Du zwar für jeden Aufruf zwei Bausteine, es würde aber funktionieren...

  7. #7
    Registriert seit
    25.05.2007
    Beiträge
    19
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Ja das muß bis ganz runter AWL sein. Das ist das Problem.
    Weil nur bei AWL Bausteinen das nötige Attribut des Bausteins aktiviert werden kann damit es geht

  8. #8
    Registriert seit
    03.02.2015
    Ort
    Hatten
    Beiträge
    183
    Danke
    16
    Erhielt 32 Danke für 29 Beiträge

    Standard

    Bist Du ganz sicher?

    Laut Siemens-Dokument http://support.automation.siemens.co...odeid=68181316
    Die Werte aus Registern, Akkumulatoren und dem Statuswort werden grundsätzlich
    nicht an aufgerufene Bausteine übergeben. Eine Ausnahme besteht nur bei den
    Anweisungen "CC" und "UC". Wenn Sie "UC" oder "CC" verwenden und dem
    aufgerufenen Baustein Parameter über Register, Statuswort oder Akkumulatoren
    übergeben möchten, müssen Sie in den Eigenschaften des aufgerufenen Bausteins die
    Option "Parameterversorgung über Register" aktivieren. Beachten Sie, dass diese
    Option nur für AWL-Bausteine mit Standardzugriff zur Verfügung steht und der Baustein
    keine Formalparameter haben darf. Wenn die Option aktiviert ist, können Sie
    Registerinhalte zwischen Bausteinen übergeben.
    muß ich die Option nur aktivieren, wenn ich Parameter übergeben möchte - und die kann man ja notfalls über einen DB austauschen!?

  9. #9
    Registriert seit
    29.03.2004
    Beiträge
    5.793
    Danke
    144
    Erhielt 1.706 Danke für 1.238 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Deshalb hätte ich gerne, daß man sich die Variablen zur Laufzeit (auch für FC) zusammensetzen kann, dann erst kann man vernünftig durchgängig symbolisch programmieren.
    Bei der 1500 ist das leider in Ansätzen möglich. Meiner Meinung nach ist so eine Funktion das was man NICHT in einem SPS-Programm haben will. Mal angenommen du setzt einen Variablennamen aus einzelnen Strings zusammen:
    wasauchimmer := INT_TO_STRING(intVar);
    varname := CONCAT(IN1:='MeinDBfuer', wasauchimmer);

    Dann wird bei einer Namensänderung nichts an der Symbolik automatisch korrigiert, bei jedem Zugriff musst du eine Fehlerprüfung machen ob der Name überhaupt vorhanden ist. Und sowas ist Ressourcenverschwendung hoch 100. In einem SPS-Programm ist das eine größere Schmiererei als die S5-Schmiermerker.
    C, C++, Pascal und Konsorten kommen auch ohne Reflektion aus. Nur weil Siemens der 1500 keine vernünftigen Zeiger spendiert muss man zu so einem Unfug greifen.

  10. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    rostiger Nagel (23.04.2015)

  11. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Bei der 1500 ist das leider in Ansätzen möglich. Meiner Meinung nach ist so eine Funktion das was man NICHT in einem SPS-Programm haben will. Mal angenommen du setzt einen Variablennamen aus einzelnen Strings zusammen:
    wasauchimmer := INT_TO_STRING(intVar);
    varname := CONCAT(IN1:='MeinDBfuer', wasauchimmer);

    Dann wird bei einer Namensänderung nichts an der Symbolik automatisch korrigiert, bei jedem Zugriff musst du eine Fehlerprüfung machen ob der Name überhaupt vorhanden ist. Und sowas ist Ressourcenverschwendung hoch 100. In einem SPS-Programm ist das eine größere Schmiererei als die S5-Schmiermerker.
    C, C++, Pascal und Konsorten kommen auch ohne Reflektion aus. Nur weil Siemens der 1500 keine vernünftigen Zeiger spendiert muss man zu so einem Unfug greifen.
    Ja da hast du Recht, aber wenn man unbedingt ausschließlich vollsymbolisch programmieren will, dann eben richtig und nicht nur halb. Oder man läßt eben eine vernünftige ind. Adressierung zu, aber wie geht das dann?
    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

Ähnliche Themen

  1. Step 7 DB Aufruf in S7 SCL
    Von SAB2002 im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 23.06.2013, 22:57
  2. TIA DB Aufruf in SCL
    Von Martinsky im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 04.06.2013, 21:32
  3. FB Aufruf in S7 SCL
    Von Starter im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 24.10.2011, 14:16
  4. Aufruf SFC64 in SCL
    Von Carsten77 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 13.04.2011, 09:34
  5. SCL: FB Aufruf unter SCL mit Variablen DB
    Von ThorstenK im Forum Programmierstrategien
    Antworten: 32
    Letzter Beitrag: 10.02.2011, 19:15

Lesezeichen

Berechtigungen

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