Betriebsstundenerfassung - wie macht man es richtig?

Softi

Benutzer
Beiträge
19
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
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.394
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.
 

Softi

Benutzer
Beiträge
19
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
 

Softi

Benutzer
Beiträge
19
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...
:(
 

ukulele

Datenbank-Guru
Beiträge
4.394
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
 

ukulele

Datenbank-Guru
Beiträge
4.394
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
 
Werbung:
Oben