1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Betriebsstundenerfassung - wie macht man es richtig?

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von Softi, 18 April 2011.

  1. Softi

    Softi Benutzer

    Hallo zusammen,

    habe eine Frage zur Betriebsstundenerfassung und Auswertung von Pumpen.
    Die Pumpen werden über eine SPS angesteuert und als Rückmeldung bekomme ich
    einen Digitalen Eingang pro Pumpe.

    Nun meine Frage:
    Wie sollte ich die Betriebsstunden richtig erfassen:

    - einen Zähler in der SPS generieren, der die Minuten hochzählt solange der Eingang TRUE ist
    und dann z.B. alle 15 Minuten den Wert in die Datenbankschreiben.

    oder

    - Startzeit und Stopzeit des Eingangs in die Datenbank schreiben?

    oder ...

    oder ...


    Über ein Vb Programm soll dann eine Auswertung stattfinden.

    Wie sollte ich vorgehen um möglichst offen für verschiedene Auswertungen
    (z.B. Lastprofil usw.) zu sein?

    Vielen Dank schon mal vor ab!

    mfg
    Softi
     
  2. ukulele

    ukulele Datenbank-Guru

    Ne Start und Stopzeit würde mir persönlich besser gefallen, damit kannst du dann auch mehr auswerten (z.B. Unterschiede bei den Tageszeiten). Interessant wäre eventuell noch, ob das SPS hier eventuell auch von Verbindungsproblemen betroffen sein kann. Eventuell macht ein Minuten Zähler als Kontrolle auch Sinn.
     
  3. Softi

    Softi Benutzer

    Ok. Dann werd ich das mal so versuchen :)

    Hab mir jetzt noch überlegt, wenn die Stopzeit eingetragen wird einen Trigger zu
    starten der dann die Zeitdauer berechnet.

    Jetzt bin ich nur am überlegen ob es sinnvoll ist, denn es werden ca. 400 Aggregate (Hauptsächlich Pumpen, Ventile usw.) im Endausbau sein.
    Als Datenbank kommt eine MS Sql Express R2 zum Einstatz.

    mfg
    Softi
     
  4. Softi

    Softi Benutzer

    Könnte mir evtl. noch jemand bei dem Trigger helfen der die Zeitdifferenz berechnet?

    Das hab ich bis jetzt

    Code:
    ALTER TRIGGER [dbo].[Zeitdiff]
    
    ON [dbo].[Betriebszeit_Dauer]
    after inserted
    as
    begin
    set nocount on
    declare @pwidnr int
    declare @zeit int
    declare @stopt as datetime
    declare @startt as datetime
     
    set @pwidnr = (select PWID  from inserted)
    set @startt  =  (select Startzeit from inserted )
    set @stopt =  (select Stopzeit from inserted )
    
    set  @zeit = (DATEDIFF(MINUTE ,@startt    ,@stopt    )
    
    if inserted (Stopzeit) begin
    
    insert  dbo.Betriebszeit_Dauer
    set  Dauer  = @zeit
    where PWID  = @pwidnr
    end
    
    
    Funktioniert leider noch nicht. Das mit if Insterted ist irgendwie falsch...
    :(
     
  5. ukulele

    ukulele Datenbank-Guru

    INSERTED() gibt es glaube ich nicht, aber UPDATE(). INSERTED ist die Tabelle die den neuen Datensatz beinhalted. Daher muss es auch am Anfang des Triggers AFTER INSERT heißen. Außerdem hast du mindestens ein END zuwenig, eine Klammer auf zuviel und kannst INSERT INTO tabelle nicht mit UPDATE tabelle mischen. Ich würde aber auch ein paar andere Kleinigkeiten noch anpassen :)
    Code:
    ALTER TRIGGER [dbo].[Zeitdiff]
    ON [dbo].[Betriebszeit_Dauer]
    AFTER INSERT
    AS
    BEGIN
            set nocount on
    
            declare @pwidnr int
            declare @zeit int
            declare @stopt as datetime
            declare @startt as datetime
    
            SELECT    @pwidnr = PWID,
                    @startt = Startzeit,
                    @stopt = Stopzeit
            FROM    INSERTED
    
            SET        @zeit = DATEDIFF(MINUTE,@startt,@stopt)
    
            IF        UPDATE(Stopzeit)
            AND        @stopt IS NOT NULL
            BEGIN
                    UPDATE  dbo.Betriebszeit_Dauer
                    SET        Dauer = @zeit
                    WHERE    PWID = @pwidnr
            END
    END
     
  6. ukulele

    ukulele Datenbank-Guru

    Wenn ichs mir recht überlege noch etwas anders:
    Code:
    ALTER TRIGGER [dbo].[Zeitdiff]
    ON [dbo].[Betriebszeit_Dauer]
    AFTER INSERT
    AS
    IF        UPDATE(Stopzeit)
    BEGIN
            set nocount on
    
            declare @pwidnr int
            declare @zeit int
            declare @stopt as datetime
            declare @startt as datetime
    
            SELECT    @pwidnr = PWID,
                    @startt = Startzeit,
                    @stopt = Stopzeit
            FROM    INSERTED
    
            SET        @zeit = DATEDIFF(MINUTE,@startt,@stopt)
    
            IF        @zeit IS NOT NULL
            BEGIN
                    UPDATE  dbo.Betriebszeit_Dauer
                    SET        Dauer = @zeit
                    WHERE    PWID = @pwidnr
            END
    END
    GO
     
    Charly und Walter gefällt das.
  7. Softi

    Softi Benutzer

    Hallo ukulele,

    vielen Dank!!! Funktioniert bestens!:D
     

Diese Seite empfehlen