1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2011 Association for Decentralized Information Management in
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.trend.configuration;
\r
14 import java.util.ArrayList;
\r
15 import java.util.List;
\r
17 import org.simantics.databoard.Datatypes;
\r
18 import org.simantics.databoard.type.RecordType;
\r
19 import org.simantics.history.util.subscription.SamplingFormat;
\r
21 public class TrendSamplingFormats {
\r
23 // Template Sampling formats
\r
24 public final static SamplingFormat analog_all, analog_100ms, analog_1s, analog_10s, analog_60s, analog_minmax;
\r
25 public final static SamplingFormat binary_all, binary_100ms, binary_1s, binary_10s, binary_60s;
\r
26 public final static SamplingFormat time;
\r
28 public final static String all="all", _100ms="100ms", _1s="1s", _10s="10s", _60s="60s", minmax="minmax";
\r
31 * Create a list of sampling formats for trend's needs
\r
37 public static List<SamplingFormat> createAnalogSamplingFormats( double interval, double deadband, String unit )
\r
39 ArrayList<SamplingFormat> result = new ArrayList<SamplingFormat>( 6 );
\r
41 result.add( analog_minmax );
\r
43 if (interval==0. && deadband==0.) {
\r
44 result.add( analog_all.clone().setUnit(unit) );
\r
45 result.add( analog_100ms.clone().setUnit(unit) );
\r
46 result.add( analog_1s.clone().setUnit(unit) );
\r
47 result.add( analog_10s.clone().setUnit(unit) );
\r
48 result.add( analog_60s.clone().setUnit(unit) );
\r
52 // Format for ]0,1 .. 1[
\r
53 if (interval < 0.1) {
\r
54 result.add( analog_all.clone( interval, deadband ).setUnit(unit) );
\r
55 result.add( analog_100ms.clone( 0.1, deadband ).setUnit(unit) );
\r
56 result.add( analog_1s.clone( 1, deadband).setUnit(unit) );
\r
57 result.add( analog_10s.clone( 10, deadband).setUnit(unit) );
\r
58 result.add( analog_60s.clone( 60, deadband).setUnit(unit) );
\r
62 // Format for ]0 .. 1[
\r
63 if (interval < 1.) {
\r
64 result.add( analog_100ms.clone( interval, deadband ).setUnit(unit) );
\r
65 result.add( analog_1s.clone( 1, deadband).setUnit(unit) );
\r
66 result.add( analog_10s.clone( 10, deadband).setUnit(unit) );
\r
67 result.add( analog_60s.clone( 60, deadband).setUnit(unit) );
\r
71 // Format for [1 .. 10[
\r
72 if (interval < 10.) {
\r
73 result.add( analog_1s.clone( interval, deadband).setUnit(unit) );
\r
74 result.add( analog_10s.clone( 10, deadband).setUnit(unit) );
\r
75 result.add( analog_60s.clone( 60, deadband).setUnit(unit) );
\r
79 // Format for [10 .. 60[
\r
80 if (interval < 60.) {
\r
81 result.add( analog_10s.clone( interval, deadband).setUnit(unit) );
\r
82 result.add( analog_60s.clone( 60, deadband).setUnit(unit) );
\r
87 result.add( analog_60s.clone( interval, deadband).setUnit(unit) );
\r
92 * Create a list of sampling formats for trend's needs
\r
97 public static List<SamplingFormat> createBinarySamplingFormats( double interval )
\r
99 ArrayList<SamplingFormat> result = new ArrayList<SamplingFormat>( 5 );
\r
101 if (interval==0.) {
\r
102 result.add( binary_all );
\r
103 result.add( binary_100ms );
\r
104 result.add( binary_1s );
\r
105 result.add( binary_10s );
\r
106 result.add( binary_60s );
\r
110 // Format for ]0,1 .. 1[
\r
111 if (interval < 1.) {
\r
112 result.add( binary_all.clone( interval, Double.NaN ) );
\r
113 result.add( binary_100ms );
\r
114 result.add( binary_1s );
\r
115 result.add( binary_10s );
\r
116 result.add( binary_60s );
\r
120 // Format for ]0 .. 1[
\r
121 if (interval < 1.) {
\r
122 result.add( binary_100ms.clone( interval, Double.NaN ) );
\r
123 result.add( binary_1s );
\r
124 result.add( binary_10s );
\r
125 result.add( binary_60s );
\r
129 // Format for [1 .. 10[
\r
130 if (interval < 10.) {
\r
131 result.add( binary_1s.clone( interval, Double.NaN) );
\r
132 result.add( binary_10s );
\r
133 result.add( binary_60s );
\r
137 // Format for [10 .. 60[
\r
138 if (interval < 60.) {
\r
139 result.add( binary_10s.clone( interval, Double.NaN) );
\r
140 result.add( binary_60s );
\r
145 result.add( binary_60s.clone( interval, Double.NaN) );
\r
150 time = new SamplingFormat();
\r
151 RecordType format = (RecordType) (time.format = new RecordType());
\r
152 format.addComponent("time", Datatypes.DOUBLE);
\r
153 format.addComponent("value", Datatypes.DOUBLE);
\r
154 format.addComponent("quality", Datatypes.BYTE);
\r
155 time.interval = Double.NaN;
\r
156 time.deadband = Double.NaN;
\r
158 analog_all = new SamplingFormat();
\r
159 analog_all.formatId = all;
\r
160 format = (RecordType) (analog_all.format = new RecordType());
\r
161 format.addComponent("time", Datatypes.DOUBLE);
\r
162 format.addComponent("endTime", Datatypes.DOUBLE);
\r
163 format.addComponent("value", Datatypes.DOUBLE);
\r
164 format.addComponent("quality", Datatypes.BYTE);
\r
165 analog_all.interval = Double.NaN;
\r
166 analog_all.deadband = Double.NaN;
\r
168 analog_1s = new SamplingFormat();
\r
169 analog_1s.formatId = _1s;
\r
170 analog_1s.format = new RecordType();
\r
171 format = (RecordType) (analog_1s.format = new RecordType());
\r
172 format.addComponent("time", Datatypes.DOUBLE);
\r
173 format.addComponent("endTime", Datatypes.DOUBLE);
\r
174 format.addComponent("value", Datatypes.DOUBLE);
\r
175 format.addComponent("min", Datatypes.DOUBLE);
\r
176 format.addComponent("max", Datatypes.DOUBLE);
\r
177 format.addComponent("avg", Datatypes.DOUBLE);
\r
178 //format.addComponent("median", Datatypes.DOUBLE);
\r
179 format.addComponent("quality", Datatypes.BYTE);
\r
180 analog_1s.interval = 1.0;
\r
181 analog_1s.deadband = Double.NaN;
\r
183 analog_100ms = analog_1s.cloneTo(_100ms, 0.1, Double.NaN);
\r
184 analog_10s = analog_1s.cloneTo(_10s, 10., Double.NaN);
\r
185 analog_60s = analog_10s.cloneTo(_60s, 60., Double.NaN);
\r
187 analog_minmax = new SamplingFormat();
\r
188 analog_minmax.formatId = minmax;
\r
189 format = (RecordType) (analog_minmax.format = new RecordType());
\r
190 format.addComponent("time", Datatypes.DOUBLE);
\r
191 format.addComponent("endTime", Datatypes.DOUBLE);
\r
192 format.addComponent("value", Datatypes.DOUBLE);
\r
193 format.addComponent("min", Datatypes.DOUBLE);
\r
194 format.addComponent("max", Datatypes.DOUBLE);
\r
195 analog_minmax.interval = Double.MAX_VALUE;
\r
196 analog_minmax.deadband = Double.MAX_VALUE;
\r
198 binary_all = new SamplingFormat();
\r
199 binary_all.formatId = all;
\r
200 format = (RecordType) (binary_all.format = new RecordType());
\r
201 format.addComponent("time", Datatypes.DOUBLE);
\r
202 format.addComponent("endTime", Datatypes.DOUBLE);
\r
203 format.addComponent("value", Datatypes.BYTE);
\r
204 format.addComponent("max", Datatypes.BYTE);
\r
205 format.addComponent("quality", Datatypes.BYTE);
\r
206 binary_all.interval = Double.NaN;
\r
207 binary_all.deadband = Double.NaN;
\r
209 binary_1s = new SamplingFormat();
\r
210 binary_1s.formatId = _1s;
\r
211 format = (RecordType) (binary_1s.format = new RecordType());
\r
212 format.addComponent("time", Datatypes.DOUBLE);
\r
213 format.addComponent("endTime", Datatypes.DOUBLE);
\r
214 format.addComponent("value", Datatypes.BYTE);
\r
215 format.addComponent("max", Datatypes.BYTE);
\r
216 //format.addComponent("median", Datatypes.BYTE);
\r
217 format.addComponent("quality", Datatypes.BYTE);
\r
218 binary_1s.interval = 1.0;
\r
219 binary_1s.deadband = Double.NaN;
\r
221 binary_100ms = binary_1s.cloneTo(_100ms, 0.1, Double.NaN);
\r
222 binary_10s = binary_1s.cloneTo(_10s, 10., Double.NaN);
\r
223 binary_60s = binary_1s.cloneTo(_60s, 60., Double.NaN);
\r