vzlogger/include/unit.h
Steffen Vogel c217a9f1d7 just to much to describe it ;)
- added new structure
- added SML support
2011-09-10 00:00:26 +02:00

115 lines
4.8 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* DLMS Units as specified in ISO EN 62056-62 and used by SML
*
* @package vzlogger
* @copyright Copyright (c) 2011, The volkszaehler.org project
* @license http://www.gnu.org/licenses/gpl.txt GNU Public License
* @author Steffen Vogel <info@steffenvogel.de>
*/
/*
* This file is part of volkzaehler.org
*
* volkzaehler.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* volkzaehler.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with volkszaehler.org. If not, see <http://www.gnu.org/licenses/>.
*/
typedef struct {
char code;
char *unit;
} dlms_unit_t;
/**
* Static lookup table
*/
dlms_unit_t dlms_units[] = {
// code, unit // Quantity Unit name SI definition (comment)
//=====================================================================================================
{1, "a"}, // time year 52*7*24*60*60 s
{2, "mo"}, // time month 31*24*60*60 s
{3, "wk"}, // time week 7*24*60*60 s
{4, "d"}, // time day 24*60*60 s
{5, "h"}, // time hour 60*60 s
{6, "min."}, // time min 60 s
{7, "s"}, // time (t) second s
{8, "°"}, // (phase) angle degree rad*180/π
{9, "°C"}, // temperature (T) degree celsius K-273.15
{10, "currency"}, // (local) currency
{11, "m"}, // length (l) metre m
{12, "m/s"}, // speed (v) metre per second m/s
{13, ""}, // volume (V) cubic metre m³
{14, ""}, // corrected volume cubic metre m³
{15, "m³/h"}, // volume flux cubic metre per hour m³/(60*60s)
{16, "m³/h"}, // corrected volume flux cubic metre per hour m³/(60*60s)
{17, "m³/d"}, // volume flux m³/(24*60*60s)
{18, "m³/d"}, // corrected volume flux m³/(24*60*60s)
{19, "l"}, // volume litre 10-3 m³
{20, "kg"}, // mass (m) kilogram
{21, "N"}, // force (F) newton
{22, "Nm"}, // energy newtonmeter J = Nm = Ws
{23, "Pa"}, // pressure (p) pascal N/m²
{24, "bar"}, // pressure (p) bar 10⁵ N/m²
{25, "J"}, // energy joule J = Nm = Ws
{26, "J/h"}, // thermal power joule per hour J/(60*60s)
{27, "W"}, // active power (P) watt W = J/s
{28, "VA"}, // apparent power (S) volt-ampere
{29, "var"}, // reactive power (Q) var
{30, "Wh"}, // active energy watt-hour W*(60*60s)
{31, "VAh"}, // apparent energy volt-ampere-hour VA*(60*60s)
{32, "varh"}, // reactive energy var-hour var*(60*60s)
{33, "A"}, // current (I) ampere A
{34, "C"}, // electrical charge (Q) coulomb C = As
{35, "V"}, // voltage (U) volt V
{36, "V/m"}, // electr. field strength (E) volt per metre
{37, "F"}, // capacitance (C) farad C/V = As/V
{38, "Ω"}, // resistance (R) ohm Ω = V/A
{39, "Ωm²/m"}, // resistivity (ρ) Ωm
{40, "Wb"}, // magnetic flux (Φ) weber Wb = Vs
{41, "T"}, // magnetic flux density (B) tesla Wb/m2
{42, "A/m"}, // magnetic field strength (H) ampere per metre A/m
{43, "H"}, // inductance (L) henry H = Wb/A
{44, "Hz"}, // frequency (f, ω) hertz 1/s
{45, "1/(Wh)"}, // R_W (Active energy meter constant or pulse value)
{46, "1/(varh)"}, // R_B (reactive energy meter constant or pulse value)
{47, "1/(VAh)"}, // R_S (apparent energy meter constant or pulse value)
{48, "V²h"}, // volt-squared hour volt-squaredhours V²(60*60s)
{49, "A²h"}, // ampere-squared hour ampere-squaredhours A²(60*60s)
{50, "kg/s"}, // mass flux kilogram per second kg/s
{51, "S, mho"}, // conductance siemens 1/Ω
{52, "K"}, // temperature (T) kelvin
{53, "1/(V²h)"}, // R_U²h (Volt-squared hour meter constant or pulse value)
{54, "1/(A²h)"}, // R_I²h (Ampere-squared hour meter constant or pulse value)
{55, "1/m³"}, // R_V, meter constant or pulse value (volume)
{56, "%"}, // percentage %
{57, "Ah"}, // ampere-hours ampere-hour
{60, "Wh/m³"}, // energy per volume 3,6*103 J/m³
{61, "J/m³"}, // calorific value, wobbe
{62, "Mol %"}, // molar fraction of mole percent (Basic gas composition unit)
// gas composition
{63, "g/m³"}, // mass density, quantity of material (Gas analysis, accompanying elements)
{64, "Pa s"}, // dynamic viscosity pascal second (Characteristic of gas stream)
{253, "(reserved)"}, // reserved
{254, "(other)"}, // other unit
{255, "(unitless)"}, // no unit, unitless, count
{} // stop condition for iterator
};
char * dlms_get_unit(unsigned char code) {
dlms_unit_t *it = dlms_units;
do { /* linear search */
if (it->code == code) {
return it->unit;
}
} while ((++it)->code);
return NULL; /* not found */
}