/
PM175.class.php
123 lines (99 loc) · 4.24 KB
/
PM175.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php
/**
* Драйвер за електромер SATEC
*
*
* @category bgerp
* @package satec
*
* @author Dimiter Minekov <mitko@extrapack.com>
* @copyright 2006 - 2015 Experta OOD
* @license GPL 3
*
* @since v 0.1
* @title Електромер SATEC
*
* @see http://www.satec-global.com/UserFiles/satec/files/314_PM175%20Modbus.pdf
*/
class satec_PM175 extends sens2_ProtoDriver
{
/**
* Заглавие на драйвера
*/
public $title = 'SATEC PM175';
/**
* Описание на входовете
*/
public $inputs = array(
'kvahTotal' => array('caption' => 'Обща енергия', 'uom' => 'kVAh'),
'kWhImport' => array('caption' => 'Входяща енергия', 'uom' => 'kWh'),
'kvarhExport' => array('caption' => 'Реакт. изх. енергия', 'uom' => 'kVArh'),
'kvarhImport' => array('caption' => 'Реакт. вх. енергия', 'uom' => 'kVArh'),
'kWTotal' => array('caption' => '1 сек. мощност', 'uom' => 'kW'),
'kvarTotal' => array('caption' => '1 сек. реакт. мощност', 'uom' => 'kVAr'),
'kVATotal' => array('caption' => '1 сек. акт. мощност', 'uom' => 'kVA'),
'PFTotal' => array('caption' => 'Косинус Фи', 'uom' => ''),
);
/**
* Информация за входните портове на устройството
*
* @see sens2_ControllerIntf
*
* @return array
*/
public function getInputPorts($config = null)
{
foreach ($this->inputs as $name => $params) {
$res[$name] = (object) array('caption' => $params['caption'], 'uom' => $params['uom']);
}
return $res;
}
/**
* Подготвя форма с настройки на контролера, като добавя полета с $form->FLD(....)
*
* @see sens2_ControllerIntf
*
* @param core_Form
*/
public function prepareConfigForm($form)
{
$form->FNC('ip', 'ip', 'caption=IP,hint=Въведете IP адреса на устройството, input, mandatory');
$form->FNC('port', 'int(5)', 'caption=Port,hint=Порт, input, mandatory,value=502');
$form->FNC('unit', 'int(5)', 'caption=Unit,hint=Unit, input, mandatory,value=1');
// Стойности по подразбиране
$form->setDefault('port', 502);
$form->setDefault('unit', 1);
}
/**
* Връща масив със стойностите на изразходваната активна мощност
*/
public function readInputs($inputs, $config, &$persistentState)
{
$driver = new modbus_Driver();
$driver->ip = $config->ip;
$driver->port = $config->port;
$driver->unit = $config->unit;
$driver->type = 'words';
// Прочитаме изчерпаната до сега мощност
$addresses = $driver->read(405073, 2);
$res['kvahTotal'] = $addresses['405073'] + $addresses['405074'] * 65535;
$addresses = $driver->read(405057, 2);
$res['kWhImport'] = $addresses['405057'] + $addresses['405058'] * 65535;
$addresses = $driver->read(405067, 2);
$res['kvarhExport'] = $addresses['405067'] + $addresses['405068'] * 65535;
$addresses = $driver->read(414337, 2);
$res['kWTotal'] = $addresses['414337'] + $addresses['414338'] * 65535;
$addresses = $driver->read(405065, 2);
$res['kvarhImport'] = $addresses['405065'] + $addresses['405066'] * 65535;
$addresses = $driver->read(414339, 2);
$res['kvarTotal'] = $addresses['414339'] - $addresses['414340'];
$addresses = $driver->read(414341, 2);
$res['kVATotal'] = $addresses['414341'] + $addresses['414342'] * 65535;
$addresses = $driver->read(414343, 2);
$res['PFTotal'] = round(($addresses['414343'] - $addresses['414344']) / 1000, 4);
if (empty($addresses)) {
return "Грешка при четене от {$config->ip}";
}
return $res;
}
}