Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Datenerfassung mit DDESERVER

Anonymous
2005-10-24
2005-11-14
  • Anonymous - 2005-10-24

    Originally created by: Tino

    Hallo!

    Habe Daten aus einem Projekt über DDESERVER in Excel anzeigen lassen, was auch ohne Probleme funktioniert...

    Mein Problem ist, dass der Wert der Variable im jeweiligen Feld in Excel immer aktualisiert wird. Bräuchte aber eine Lösung, die in bestimmten Abständen (z.B. 5 Minuten) den aktuellen Wert fortlaufend in eine Tabelle oder ein Logfile einträgt... Wäre schön, wenn jemand ein Makro für Excel oder eine andere Lösung hat.

    MfG Tino

     
  • Anonymous - 2005-10-27

    Originally created by: Weinbuch

    Eine Access db anlegen mit einem Formular mit der DDE Verknüpfung. Über den Zeitgeber des Formulars ein Makro zyklisch anstoßen und die Daten in einer Tabelle abspeichern. In der Tabelle ein Datumsfeld mitdefinieren mit Einstellung (Standardwert: Datum()). So hast Du immer die Uhrzeit bzw. das Datum mit dabei.

    Oder aber die Daten von der Exceltabelle zyklisch in eine Access db exportieren....Beispiele gibt Microsoft - Hilfe her.

    Gruß Ralf Weinbuch

     
  • Anonymous - 2005-11-06

    Originally created by: Tino

    Erstmal vielen Dank für die Antwort...

    Hab das jetzt mal selber mit nem Makro in Excel versucht (unten angehängt). Schreibe damit den aktuellen Wert jeweils in eine neue Datei in einem bestimmten Zeitabstand; wenn diese mit einer bestimmten Anzahl von Werten gefüllt ist, wird sie gespeichert und die nächste geöffnet...

    Das Problem dabei ist, dass dafür dieses Makro ständig laufen muss. Dadurch habe ich eine Prozessorauslastung von 100% und die DDE-Werte werden nicht mehr aktualisiert.

    Vielleicht hat jemand ne Idee, wie ich das ändern könnte, damit es so funktioniert, wie oben beschrieben?

    Sub Makro1()

    '

    ' Makro1 Makro

    ' Makro am 30.10.2005 von Tino aufgezeichnet

    k = 0

    Do While k < 3

    Workbooks.Open Filename:= _

    "C:\Projekt\Aufzeichnung\Wind_Vorlage.xls"

    k = k + 1

    i = 0

    Zaehler = 1

        Do While i < 12
    
    
    
         Pausenlänge = 1    ' Dauer festlegen.
    
         Start = Timer    ' Anfangszeit setzen.
    
    
    
            Do While Timer < Start + Pausenlänge
    
    
    
            Loop
    
    
    
         Zaehler = Zaehler + 1
    
         i = i + 1
    
    
    
         Windows("Aufzeichnung.xls").Activate
    
         Range("B1").Copy
    
    
    
         Windows("Wind_Vorlage.xls").Activate
    
         Range("B" & Zaehler & "").Select
    
         ActiveSheet.Paste
    
         Application.CutCopyMode = False
    
    
    
         Range("A" & Zaehler & "").Select
    
         ActiveCell.FormulaR1C1 = Time
    
    
    
        Loop
    

    ActiveWorkbook.SaveAs Filename:= _

    "C:\Projekt\Aufzeichnung\Wind_" & Date & "_" & k & ".xls", _

    FileFormat:=xlNormal, Password:="", WriteResPassword:="", _

    ReadOnlyRecommended:=False, CreateBackup:=False

    ActiveWindow.Close

    Loop

    End Sub

     
  • Anonymous - 2005-11-08

    Originally created by: Joohrte

    Ich hatte für Siemens etwas ähnliches gemacht

    hirfür habe ich zeitgesteuert einen alarm generirt

    Um den ersten Alarm zu setzen ist in der Arbeitsmappe Folgende

    Visuel Prosedure einzubinden.


    Private Sub Workbook_Open()

    Dim Mldg, Stil, Titel, Hilfe, Ktxt, Antwort, Text1

    Mldg = "Möchten Sie die Zeitsteuerung starten ?"   ' Meldung definieren.
    
    Stil = vbYesNo + vbCritical + vbDefaultButton2  ' Schaltflächen
    
        ' definieren.
    
    Titel = "Zeitsteuerung"  ' Titel definieren.
    
    'Hilfe = "DEMO.HLP"  ' Hilfedatei
    
        ' definieren.
    
    Ktxt = 1000 ' Kontext für Thema
    
        ' definieren.
    
    Antwort = MsgBox(Mldg, Stil, Titel, Hilfe, Ktxt)    ' Meldung anzeigen.
    
    If Antwort = vbYes Then ' Benutzer hat "Ja"
    
                            ' gewählt.
    
        Call Alarm_15   ' Operation ausführen.
    
    Else    ' Benutzer hat "Nein"
    
        ' gewählt.
    
    End If
    

    End Sub


    Die Procedure Alarm_15 Startet die Procedure "Start_Lesen" nach 15 Minuten in der du deine Anwendung schreiben kannst.

    Sub Alarm_15()

    Dim Heute
    
    Dim Minuten As Integer
    
    Heute = Now ' aktuelle zeit lesen
    
    Stunde = Hour(Heute)
    
    Minuten = Minute(Heute) / 15 ' Runden auf 15 Minuten Raster
    
    Minuten = Minuten * 15
    
    Neuer_Alarm = TimeSerial(Stunde, Minuten + 15, 0) ' Neue Zeit für Alarm
    
    Application.OnTime TimeValue(Neuer_Alarm), "Start_Lesen" 'Zeitgesteuerter aufruf Setzen
    

    End Sub


    in der Procedure Start_Lesen wir zusätzlich zum anwender Programm die

    Procedure Alarm_15 aufgerufen um die neue Alarmzeit zu setzen.

    Sub Alarm_15()

    Call Alarm_15 ' Zeitsteuerung auf nächsten fünfzeh minuten setzen

    End Sub

     
  • Anonymous - 2005-11-14

    Originally created by: Tino

    Das war genau das, was ich gesucht hab... Vielen Dank!

     

Log in to post a comment.