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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: 2 DBs ein Problem

  1. #11
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    wäre mal spannend oder?

    Vielleicht probier ich das mal aus.

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

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

    Standard

    Vielleicht ein weiterer Lösungsansatz:

    Den DB1 zwischenspeichern (DB xx) und in jedem Zyklus auf Änderung prüfen.
    Bei erkannter Änderung einen Zeiger auf dieses Bit zusammen mit einem
    Zeitstempel der Systemzeit (DB yy) ablegen.
    Die abgelegten Zeitstempel in jedem Zyklus mit der aktuellen Systemzeit
    auf >=10s prüfen, wenn ja, dann in DB 2 kopieren.

    Das spart die ganzen Zeiten/TON´s, wie sich dabei die Schleifen auswirken, wäre dabei
    einen Versuch wert.
    kind regards
    SoftMachine

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

    Standard

    Warten wir aber mal auf den TE, was der zu den Lösungsansätzen sagt
    kind regards
    SoftMachine

  4. #14
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Stimmt. Genau so wäre es richtig. 100%

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

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

    SoftMachine (02.05.2012)

  6. #15
    Registriert seit
    17.05.2010
    Ort
    Paderborn
    Beiträge
    824
    Danke
    84
    Erhielt 125 Danke für 94 Beiträge

    Standard

    Aktuelle CPU können doch 16000 DB's verwalten!

    Dennoch, was sind das für Bit's? Was haben die für eine Funktion? 5000 : 32 = 156,.. Doppelwörter. Würde es ein Doppelwortvergleich nicht auch tun?
    Grüße
    Michael

    1001101110110100... Das ist meine Welt

  7. #16
    RON_87 ist offline Benutzer
    Themenstarter
    Registriert seit
    13.10.2011
    Beiträge
    36
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo
    Danke erstmal für die Antworten....

    Habe auch schon die Idee gehabt einen DB anzulegen, in welchem die Zeit von jedem einzelnen Bit sozusagen gespeichert wird. Allerdings braucht man ja mindest ein Word pro Bit für die Zeit-
    Dies würde allerdings die DB Bausteingröße sprengen.

    Der zweite Gedanke war die Einheit auf ein Byte zu verkleinern. In dem man
    die Anzahl der Zyklen in der eingestellten Zeit ermittelt, um dann im DB Hochzählen zu können => Zähler.

  8. #17
    Registriert seit
    05.10.2005
    Beiträge
    188
    Danke
    31
    Erhielt 16 Danke für 14 Beiträge

    Standard

    hmmm nette Denksportaufgabe
    Softmaschines Lösung wäre die Richtige. ABER:
    Lösung 1:
    5000bit = 625 byte (Quelle) //Nicht wirklich groß
    5000 x TIME_OF_DAY (32) = 160 000 byte + 5000 x DATE(32) = 320 000byte //Ja nee is klar. Für so eine Aufgabe so viel Speicher opfern........
    Tageszeit Tag
    5000bit = 625 byte (Ziel) //Nicht wirklich groß

    Lösung 2:
    5000bit = 625 byte (Quelle) //Nicht wirklich groß
    5000 x time (32) = 160 000 byte //Sind mindestens 3DB´s. Für "alte" CPU´s 10DB´s (da bei 16k Schluss ist) und die CPU brauch auch min 256k speicher
    T#24D_20H_31M_23S_648MS => damit es "dauerhaft" funzt musst EINEN Timer nehmen und alle 24Tage diesen reseten. Dadurch kann es im ungünstigsten fall, alle 24 Tage einmal vorkommen, dass statt 10 19sec gebraucht werden bis das Bit gesetzt wird.
    5000bit = 625 byte (Ziel) //nicht wirklich groß

    Lösung 3 (eigentlich einzig machbare):
    5000bit = 625 byte (Quelle) //Nicht wirklich groß
    5000bit x 1byte= 5000 byte //Sec Zähler
    5000bit = 625 byte (Ziel) //Nicht wirklich groß

    Ausführung:
    Es wird ein Impuls von einer Sekunde genutzt(Flanke). Dieser läuft durch eine Schleife (können auch zwei sein und jeder wird 500ms nach der Anderen gestartet. Jeh nach CPU)

    //reset wenn bit=0
    U DB1.DBX0.0
    spb res
    L 0
    T Zaehler_Byte_1
    res: nop 0

    //Zähler hochzählen bit=1
    U DB1.DBX0.0
    spbn plus
    L Zaehler_Byte_1
    L 1
    +i
    T Zaehler_Byte_1
    plus: nop 0

    //Auswertung
    L Zaehler_Byte_1
    L 10
    >=i
    S DB2.DBX0.0

    Da der Durchlauf nur alle Sekunde ausgeführt wird, ist das der Timer und im Zaehler_Byte stehn die abgelaufenen Sekunden.

    Zur Schleife darfst es selber machen
    Geändert von Fanta-Er (11.05.2012 um 23:37 Uhr)

  9. #18
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.241 Danke für 973 Beiträge

    Standard

    Ganz ohne Timer und mit weniger Speicherbedarf als mit TON:
    1. Bits in DB1 auf positiven Zustandwechsel prüfen (Flanke)
    2. Aktuelle Zeit und Datum in ein Array of Date_and_Time (DT) eintragen
    3. Dieses Array zyklisch durchsuchen auf Zeiten älter als 10s untersuchen und entsprechendes Bit im DB2 setzen

    Das Verfahren lässt sich natürlich weiter verbessern (Wertepaare, Sortierung, ...). In SCL eigentlich gar kein so großer Aufwand.

    Gruß
    Dieter

  10. #19
    Registriert seit
    11.05.2007
    Beiträge
    194
    Danke
    22
    Erhielt 53 Danke für 43 Beiträge

    Standard

    Hallo

    Wenn die Genauigkeit von einer Sekunde reicht, würde ich einen weiteren DB mit 5000 Integer-Werten, in welchen 5000 Istzeiten abgelegt werden erstellen.
    Desweiteren erstellst Du einen FC, welcher nur jede Sekunde aufgerufen wird (zB. Weckalarm OB). In diesem FC machst Du eine Schlaufe in der Du jeweils jedes der 5000 Bit's im auf True kontrollierst. Ist das Bit True, so wird der dazugehörige Istwert um eins erhöht. In der gleichen Schlaufe wird der Istwert auf >=10 kontrolliert und das entsprechende Bit im zweiten DB auf True gesetzt. Wird das erste Bit wieder False, muss der Istwert und das Bit im zweiten DB wieder auf 0 gesetzt werden.

    Benutze AWL und beachte die Ausführungszeiten der Befehle (in der Schlaufe) die Du verwendest, dann wird sich die Zykluszeit in Grenzen halten.

    Um Zykluszeit zu sparen , könnte man z.B. alle 100mS 500 Bit's prufen.

    Das Ganze erinnert mich wieder an die gute alte Zeit der S5, wo man bei jedem Befehl versuchte Zykluszeit zu sparen.

    Gruss Hoyt

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Hoyt Beitrag anzeigen
    Wenn die Genauigkeit von einer Sekunde reicht, würde ich einen weiteren DB mit 5000 Integer-Werten, in welchen 5000 Istzeiten abgelegt werden erstellen.
    Desweiteren erstellst Du einen FC, welcher nur jede Sekunde aufgerufen wird (zB. Weckalarm OB). In diesem FC machst Du eine Schlaufe in der Du jeweils jedes der 5000 Bit's im auf True kontrollierst. Ist das Bit True, so wird der dazugehörige Istwert um eins erhöht. In der gleichen Schlaufe wird der Istwert auf >=10 kontrolliert und das entsprechende Bit im zweiten DB auf True gesetzt. Wird das erste Bit wieder False, muss der Istwert und das Bit im zweiten DB wieder auf 0 gesetzt werden.

    Also wenn ich dieses Problem zu lösen hätte, würde ich mich jetzt ganz klar für die Lösung von Hoyt entscheiden.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

Ähnliche Themen

  1. Ein Problem mit ProTool
    Von anne im Forum HMI
    Antworten: 21
    Letzter Beitrag: 20.02.2011, 12:11
  2. Wiedermal ein Programm problem
    Von COOLT im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 28.07.2009, 16:57
  3. habe ein kleines problem
    Von sago im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 24.01.2009, 17:21
  4. Antworten: 3
    Letzter Beitrag: 31.10.2008, 07:34
  5. OP73 - ich habe da ein Problem
    Von ksb im Forum HMI
    Antworten: 6
    Letzter Beitrag: 30.09.2007, 14:57

Lesezeichen

Berechtigungen

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