標準時間、ピーク時間、オフピーク時間の 3 つの時間範囲に分割された、2 つの日付間の合計マシン稼働時間を取得します。
コンテキスト
プログラミング環境: Wonderware ArchestrA
プログラミング言語: ArchestrA Quick Script .Net
データベース: Historian - SQL Server (In-SQL)
外部:鉱業業界の 2 つのポンプで、3 つの異なる電力料金時間 (ピーク時) のポンプの使用状況を知る必要があります。 、標準、オフピーク時間)。
平日:
標準時間: 09:00 から 17:00 および 19:00 から 22:00
ピーク時間: 06:00 から 09:00 および 17:00 から 19:00
オフピーク時間: 22:00 から 06:00
土曜日:
標準時間: 07:00 から 12:00 および 18:00 から 20:00
オフピーク時間: 20:00 から 07:00 および 12:00 から 18:00
日曜日:
オフピーク時間:日曜日全体がオフピーク
私は
2つの日付の間が必要です:
- ピーク時間中にポンプが作動した合計時間。
- オフピーク時間中にポンプが稼働した合計時間。
- 標準時間中にポンプが作動した合計時間。
私が試したこと:(マシンが実行されたオフピーク時間の合計時間)。
それはうまくいきますが、ほとんどの場合、得られるべき時間よりも少ない時間しか得られません。
-- This script only gets the total off-peak time hours
SET NOCOUNT ON
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
DECLARE @var1 REAL;
DECLARE @var2 REAL;
DECLARE @var3 REAL;
SET @StartDate = '2015/08/01 05:00:00.000'
SET @EndDate = GetDate()
SET NOCOUNT OFF
SET @var1 =
(
SELECT
'Count' = Count(DiscreteHistory.Value)/60.0
FROM
DiscreteHistory
WHERE
DiscreteHistory.TagName
IN ('KDCE_S04_22PMP01_Machine.FA_RF')
AND DiscreteHistory.Value = 1
AND wwRetrievalMode = 'Cyclic'
AND wwResolution = 60000
AND DateTime >= @StartDate
AND DateTime <= @EndDate
AND DATEPART(dw, DateTime) NOT IN (2, 3, 4, 5, 6, 7)
)
SET @var2 =
(
SELECT
'Count' = Count(DiscreteHistory.Value)/60.0
FROM
DiscreteHistory
WHERE
DiscreteHistory.TagName
IN ('KDCE_S04_22PMP01_Machine.FA_RF')
AND DiscreteHistory.Value = 1
AND wwRetrievalMode = 'Cyclic'
AND wwResolution = 60000
AND DateTime >= @StartDate
AND DateTime <= @EndDate
AND DATEPART(dw, DateTime) NOT IN (1, 2, 3, 4, 5, 6)
AND (CAST(DateTime as time) >= '20:00:00' AND CAST(DateTime as time) < '07:00:00')
)
SET @var3 =
(
SELECT
'Count' = Count(DiscreteHistory.Value)/60.0
FROM
DiscreteHistory
WHERE
DiscreteHistory.TagName
IN ('KDCE_S04_22PMP01_Machine.FA_RF')
AND DiscreteHistory.Value = 1
AND wwRetrievalMode = 'Cyclic'
AND wwResolution = 60000
AND DateTime >= @StartDate
AND DateTime <= @EndDate
AND DATEPART(dw, DateTime) NOT IN (1, 2, 3, 4, 5, 6)
AND (CAST(DateTime as time) >= '12:00:00' AND CAST(DateTime as time) < '18:00:00')
)
IF @var1 IS NULL SET @var1 = 0
IF @var2 IS NULL SET @var2 = 0
IF @var3 IS NULL SET @var3 = 0
SELECT
'Count' = (Count(DiscreteHistory.Value)/60.0) + @var1 + @var2 + @var3
FROM
DiscreteHistory
WHERE
DiscreteHistory.TagName
IN ('KDCE_S04_22PMP01_Machine.FA_RF')
AND DiscreteHistory.Value = 1
AND wwRetrievalMode = 'Cyclic'
AND wwResolution = 60000
AND DateTime >= @StartDate
AND DateTime <= @EndDate
AND DATEPART(dw, DateTime) NOT IN (1, 7)
AND (CAST(DateTime as time) >= '22:00:00' OR CAST(DateTime as time) < '06:00:00');
ありがとうございました。
サンプルデータ
次の情報をデータベースに記録します。
実行フィードバックの一意のタグ名: KDCE_S04_22PMP01_Machine.FA_RFこれは、「1」または「0」または「null」値である実行フィードバックです。
マシン稼働時間の一意のタグ名: me.a0_MainPump.RunningHours.FA_PVこれは、ポンプ稼働時間の整数値です。
両方のタグ名が、TagName、Value、DateTime、quality などでログに記録されます。
次の列を含むテーブルがあります。
| DateTime | TagName | Value | QualityDetail |
DB でサンプル データを取得するスクリプト:
SET NOCOUNT ON
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
SET @StartDate = '20150701 05:00:00.000'
SET @EndDate = '20150731 05:00:00.000'
SET NOCOUNT OFF
SELECT
DateTime, TagName, Value, Quality
FROM
DiscreteHistory
WHERE
DiscreteHistory.TagName IN ('KDCE_S04_22PMP01_Machine.FA_RF')
AND DateTime >= @StartDate AND DateTime <= @EndDate
csv にエクスポートすると、次の出力が返されます: (短縮しました)
DateTime,TagName,Value,Quality
2015/07/01 05:00:00 AM,KDCE_S04_22PMP01_Machine.FA_RF,0,133
2015/07/01 05:09:46 AM,KDCE_S04_22PMP01_Machine.FA_RF,(null),1
2015/07/01 05:09:53 AM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/01 06:44:20 AM,KDCE_S04_22PMP01_Machine.FA_RF,(null),1
2015/07/01 06:45:54 AM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/01 07:36:22 AM,KDCE_S04_22PMP01_Machine.FA_RF,(null),1
2015/07/01 07:36:48 AM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/01 01:53:44 PM,KDCE_S04_22PMP01_Machine.FA_RF,(null),1
2015/07/01 01:53:44 PM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/01 02:04:52 PM,KDCE_S04_22PMP01_Machine.FA_RF,(null),1
2015/07/01 02:05:27 PM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/01 02:07:25 PM,KDCE_S04_22PMP01_Machine.FA_RF,(null),1
2015/07/01 02:09:13 PM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/01 02:14:54 PM,KDCE_S04_22PMP01_Machine.FA_RF,(null),1
2015/07/02 12:10:48 AM,KDCE_S04_22PMP01_Machine.FA_RF,1,0
2015/07/02 05:24:06 AM,KDCE_S04_22PMP01_Machine.FA_RF,(null),1
2015/07/02 05:24:16 AM,KDCE_S04_22PMP01_Machine.FA_RF,1,0
2015/07/02 05:50:52 AM,KDCE_S04_22PMP01_Machine.FA_RF,(null),1
2015/07/02 05:50:59 AM,KDCE_S04_22PMP01_Machine.FA_RF,1,0
2015/07/02 06:00:15 AM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/02 06:55:18 AM,KDCE_S04_22PMP01_Machine.FA_RF,(null),1
2015/07/02 06:55:18 AM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/02 09:46:58 AM,KDCE_S04_22PMP01_Machine.FA_RF,(null),1
2015/07/02 09:46:58 AM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/02 01:30:27 PM,KDCE_S04_22PMP01_Machine.FA_RF,(null),1
2015/07/02 01:30:27 PM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/02 05:38:03 PM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/02 07:01:56 PM,KDCE_S04_22PMP01_Machine.FA_RF,1,0
2015/07/03 03:41:09 AM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/03 09:05:18 AM,KDCE_S04_22PMP01_Machine.FA_RF,1,0
2015/07/03 10:42:00 AM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/03 10:57:31 AM,KDCE_S04_22PMP01_Machine.FA_RF,1,0
2015/07/03 04:53:36 PM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/04 10:08:17 PM,KDCE_S04_22PMP01_Machine.FA_RF,1,0
2015/07/05 06:43:50 AM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/05 09:43:08 AM,KDCE_S04_22PMP01_Machine.FA_RF,1,0
2015/07/05 01:04:03 PM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/06 09:37:53 AM,KDCE_S04_22PMP01_Machine.FA_RF,1,0
2015/07/06 11:07:15 AM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/06 11:29:48 AM,KDCE_S04_22PMP01_Machine.FA_RF,1,0
2015/07/06 05:02:38 PM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/07 06:15:33 AM,KDCE_S04_22PMP01_Machine.FA_RF,(null),1
2015/07/07 06:32:24 AM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/07 09:05:20 AM,KDCE_S04_22PMP01_Machine.FA_RF,1,0
2015/07/07 01:10:09 PM,KDCE_S04_22PMP01_Machine.FA_RF,(null),1
2015/07/07 01:10:16 PM,KDCE_S04_22PMP01_Machine.FA_RF,1,0
2015/07/07 04:45:12 PM,KDCE_S04_22PMP01_Machine.FA_RF,0,0
2015/07/07 08:19:40 PM,KDCE_S04_22PMP01_Machine.FA_RF,1,0
2015/07/07 09:01:35 PM,KDCE_S04_22PMP01_Machine.FA_RF,0,0