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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 36

Thema: Zustandsbits in Zustands-Integer

  1. #11
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Mangokind Beitrag anzeigen
    danke dir! aber ich kann keine Parametertypen in DBs speichern... zumindest nicht bei AWL und der Aufruf akzeptiert dann keine Zahlenwerte mehr
    Kannst du das mal genauer ausführen, interessiert mich.

    PS: Ich finde deinen Ansatz gar nicht so umständlich.
    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

  2. #12
    Registriert seit
    11.12.2008
    Beiträge
    73
    Danke
    39
    Erhielt 9 Danke für 8 Beiträge

    Standard

    das man Parametertypen nicht in DBs speichern kann, ist einfach so... ich kann auch keine ANY-pointer oder sowas in DBs speichern... (oder geht sowas mit SCL?)

    und wenn ich als IN-parameter BlockDB angebe, kann ich beim CALL aufruf nicht mehr einfach an die Varbiable die Zahl dranschreiben.


    also wenn ich als Quell-DB DB5 nehmen will und die Funktion einen BlockDB als Quelle erwartet, kann ich beim CALL bei der variable nicht einfach = 5 hinschreiben

    ich müsste also 5 in einer TEMP-variable vom typ block-DB speichern und diese dann beim Aufruf übergeben.

    Code:
          CALL  FC    XY
           BlockDBIn:=5
    erzeugt bei mir zumindest den fehler
    konstantenformat zu datentyp int passt nicht zu formalem typ block_db des formalparameters BlockDBIn
    ich finde das für die Wiederverwendbarkeit ungünstiger...

    wobei das natürlich seinen charme hätte, wenns dann bei den Querverweisen auftaucht...

  3. #13
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Du musst beim Block_DB den DB eintragen...

    sieht so aus:
    Code:
          CALL  FB    22 , DB25
           Stoermelde_DB   :=DB20
           Spiegel_DB      :=DB24
           Zaehl_DB        :=DB21
           Daten_DB        :=DB31
           Max_Anzahl_Bytes:=175
    ... dtsclipper
    Das Grauen lauert in der Zwischenablage !!

  4. Folgender Benutzer sagt Danke zu dtsclipper für den nützlichen Beitrag:

    Mangokind (05.03.2009)

  5. #14
    Registriert seit
    11.12.2008
    Beiträge
    73
    Danke
    39
    Erhielt 9 Danke für 8 Beiträge

    Standard

    ne schöne lösung, aber ich darf gerade ein programm schreiben, was ganz grob folgende aufgabe hat:

    eine maschine hat mehrere arbeitsstationen

    jeder arbeitsstation ist jeweils 1 FC und 1 DB für ihren ablauf zugeordnet

    innerhalb des DBs steht irgendwo entweder als integer oder in mehreren bits der aktuelle zustand der arbeitsstation/des ablaufs

    und das programm schaut sich jeden ablauf bzw jedes ablauf-DB nacheinander an, wertet den zustand des ablaufs aus und behandelt dann den ablauf entsprechend gewisser parameter

    das programm soll auf möglichst vielen maschinen von möglichst vielen herstellern mit jeweils eigener programmstruktur und pflichtenheft lauffähig sein, ohne - abgesehen vom setzen der parameter - nennenswert verändert zu werden.

    daneben gibts noch die lustige forderung, dass alle DB-nummern recht problemlos angepasst werden können müssen.

    heißt, jemand benennt den DB80 in DB90 um und sofern er in den kopfzeilen aller anderen FCs die nummer auch noch ändert, soll das programm immernoch gehen.

    kurzum: es gibt im gesamten programm nicht eine einzige direkte adressierung (bei 35KB code) ausgenommen FC-aufrufe, weil man da mit dem parameter übergeben probleme bekommt

    ist also insgesamt sehr sehr allgemein gehalten und bedarf ner unmenge an einstellungen...

    ich kann also die im hiesigen problem genutzten Quell-(bzw ablauf-)DBs nicht absolut übergeben, sondern muss deren nummer aus irgendwelchen Arrays auslesen, weil die Anzahl und nummern der ABlauf-DBs von hersteller zu hersteller schwanken...

    ein spaß...

    irgendwie sind mir da integer lieber als BLOCK_DB

    damit kann ich umgehen

    aber danke trotzdem für den tipp

  6. #15
    Registriert seit
    30.06.2007
    Ort
    Minden (Westf.)
    Beiträge
    178
    Danke
    42
    Erhielt 21 Danke für 21 Beiträge

    Standard

    Hi, die Idee mit dem Logarithmus (ein paar Posts vorher) habe hab ich schon mal in SCL gemacht. Die Funktion ist allerdings nur für ein Wort, kann aber problemlos erweitert werden.

    FUNCTION FC202 : INT
    VAR_INPUT
    m_word : INT; // zu prüfendes Wort
    END_VAR
    VAR_TEMP
    i_temp : INT; // temporäre Variable
    END_VAR
    IF m_word = 0 THEN
    i_temp := 0;
    ELSIF m_word = -32768 THEN
    // Anweisungsteil_ELSIF
    i_temp := 16;
    ELSE
    i_temp := 1 + REAL_TO_INT (ROUND (LN (INT_TO_REAL (m_word)) / LN (2.000000e+000)));
    END_IF;
    FC202 := i_temp;
    END_FUNCTION

    Gruß
    Stefan
    Zitieren Zitieren Logarithmus  

  7. Folgender Benutzer sagt Danke zu StefanK für den nützlichen Beitrag:

    Mangokind (05.03.2009)

  8. #16
    Registriert seit
    11.12.2008
    Beiträge
    73
    Danke
    39
    Erhielt 9 Danke für 8 Beiträge

    Standard

    mathematisch ganz klar die schönste lösung, aber 1 einziger LN befehl bedarf 227 microsekunden auf ner 315er und man braucht mindestens 2 dieser befehle
    http://www.fer.hr/_download/reposito...on_list_en.pdf
    d.h. ne halbe ms weg für so nen FC, der eigentlich kaum was macht und zig mal aufgerufen wird... das kann ich mir nicht leisten

  9. #17
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Hallo,
    wie wäre es denn dann mit :
    Code:
    FUNCTION FC202 : INT
    VAR_INPUT
    m_word : INT; // zu prüfendes Wort
    END_VAR
    VAR_TEMP
    i_temp : INT; // temporäre Variable
    END_VAR
    IF m_word = 0 THEN
    i_temp := 0; 
    ELSIF m_word = -32768 THEN
    // Anweisungsteil_ELSIF
    i_temp := 16;
    ELSE
    i_temp := 2**(m_word -1) ;
    END_IF;
    FC202 := i_temp;
    END_FUNCTION
    Gruß
    LL
    Geändert von Larry Laffer (05.03.2009 um 15:27 Uhr) Grund: Korrektur wegen Fehler

  10. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Mangokind (05.03.2009)

  11. #18
    Registriert seit
    11.12.2008
    Beiträge
    73
    Danke
    39
    Erhielt 9 Danke für 8 Beiträge

    Standard

    ich kann kein SCL

    was macht denn die grüne zeile?

    ^^ hab ich noch in keiner anderen hochsprache gesehn

  12. #19
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Hallo,
    die beiden ^^ entsprechen der hoch-Funktion. Also :
    Code:
    2^^4 = 16
    2^^8 = 256
    etc.
    Gruß
    LL

  13. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Mangokind (05.03.2009)

  14. #20
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    S7-SCL kennt die Anweisung ^^ nicht.

    Meinst Du vielleicht die die Anweisung 2**() für eine Zweierpotenz?

    Gruß Kai

  15. Folgende 2 Benutzer sagen Danke zu Kai für den nützlichen Beitrag:

    Larry Laffer (05.03.2009),Mangokind (05.03.2009)

Ähnliche Themen

  1. String in Integer
    Von Thorilla im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 24.01.2011, 13:02
  2. integer 32Bit in integer 16 Bit wandeln
    Von slk230-power im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 09.11.2009, 22:35
  3. Integer in Hex
    Von snowkopp im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 22.09.2009, 20:42
  4. Integer, Hex
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 13.01.2006, 22:08
  5. Umwandlung Integer(32bit) in Integer(16bit)
    Von Kojote im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 18.08.2005, 10:56

Lesezeichen

Berechtigungen

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