cvtdriver
Driver for SmartFarm Device Converter
cvtdevice.h
이 파일의 문서화 페이지로 가기
1 
12 #ifndef _CVT_DEVICE_
13 #define _CVT_DEVICE_
14 
15 #include <iostream>
16 #include <string>
17 #include <glog/logging.h>
18 
19 #include "cvtcode.h"
20 #include "cvtdevicespec.h"
21 #include "cvtcommand.h"
22 
23 using namespace std;
24 
25 namespace stdcvt {
26 
27 /*
28  @brief CvtDevice 는 개별 장비를 추상화한 클래스이다.
29 */
30 class CvtDevice {
31 private:
32  string _id;
33  CvtDeviceSpec _devspec;
34  devstat_t _status;
35 
36 protected:
37  void _copy(CvtDevice *pdevice) {
38  _id = pdevice->_id;
39  _devspec.copy (pdevice->getspec ());
40  _status = pdevice->_status;
41  }
42 
43 public:
44 
51  CvtDevice(string devid, CvtDeviceSpec *pdevspec, devstat_t devstatus) {
52  _id = devid;
53  _devspec.copy (pdevspec);
54  _status = devstatus;
55  }
56 
65  CvtDevice(string devid, devtype_t devtype,
66  devsec_t section, devtarget_t target, devstat_t devstatus)
67  : _devspec(devtype, section, target) {
68 
69  _id = devid;
70  _status = devstatus;
71  }
72 
73  virtual ~CvtDevice() {
74  }
75 
80  string getid() {
81  return _id;
82  }
83 
89  return &_devspec;
90  }
91 
97  return _status;
98  }
99 
106  _status = devstatus;
107  return _status;
108  }
109 
113  string tostring() {
114  return "CvtDevice(" + _id + ") [" + _devspec.tostring()
115  + "], status : " + std::to_string(_status);
116  }
117 
122  virtual CvtDevice *clone() = 0;
123 
128  virtual bool copy(CvtDevice *pdevice) = 0;
129 
133  static devgroup_t getgroup(devtype_t devtype) {
134  return (devgroup_t) (devtype / 10000);
135  }
136 };
137 
138 /*
139  @brief CvtSensor는 CvtDevice를 상속하여, 개별 센서를 추상화한 클래스이다.
140 */
141 class CvtSensor : public CvtDevice {
142 private:
143  obsunit_t _unit;
144  double _value;
145 
146 public:
154  CvtSensor (string devid, CvtDeviceSpec *pdevspec,
155  devstat_t devstatus, obsunit_t unit)
156  : CvtDevice (devid, pdevspec, devstatus) {
157  _unit = unit;
158  _value = 0;
159  }
160 
170  CvtSensor (string devid, devtype_t devtype, devsec_t section,
171  devtarget_t target, devstat_t devstatus, obsunit_t unit)
172  : CvtDevice (devid, devtype, section, target, devstatus) {
173  _unit = unit;
174  _value = 0;
175  }
176 
182  CvtSensor *psensor = new CvtSensor(getid(), getspec(), getstatus(), _unit);
183  if (psensor) {
184  psensor->writeobservation (_value);
185  return (CvtDevice *)psensor;
186  }
187  return nullptr;
188  }
189 
194  bool copy(CvtDevice *pdevice) {
195  CvtSensor *psensor = dynamic_cast<CvtSensor *>(pdevice);
196  if (psensor) {
197  _copy (pdevice);
198  _unit = psensor->_unit;
199  _value = psensor->_value;
200  return true;
201  }
202  return false;
203  }
204 
210  return _unit;
211  }
212 
219  _unit = unit;
220  return _unit;
221  }
222 
228  double writeobservation (double value) {
229  _value = value;
230  return _value;
231  }
232 
237  double readobservation () {
238  return _value;
239  }
240 
244  string tostring() {
245  return "CvtSensor [" + CvtDevice::tostring ()
246  + "] observation : " + std::to_string (_value)
247  + ", unit : " + std::to_string (_unit);
248  }
249 };
250 
251 /*
252  @brief CvtActuator는 CvtDevice를 상속하여, 개별 구동기를 추상화한 클래스이다.
253 */
254 class CvtActuator : public CvtDevice {
255 private:
256  int _lastcmdid;
257  bool _onoff;
258 
259 protected:
264  void setcommand (CvtCommand *pcmd) {
265  _lastcmdid = pcmd->getid ();
266  }
267 
268 public:
275  CvtActuator(string devid, CvtDeviceSpec *pdevspec, devstat_t devstatus)
276  : CvtDevice (devid, pdevspec, devstatus) {
277  _lastcmdid = -1;
278  _onoff = false; // off
279  }
280 
289  CvtActuator(string devid, devtype_t devtype,
290  devsec_t section, devtarget_t target, devstat_t devstatus)
291  : CvtDevice (devid, devtype, section, target, devstatus) {
292  _lastcmdid = -1;
293  _onoff = false; // off
294  }
295 
301  CvtActuator *pactuator = new CvtActuator(getid(), getspec(), getstatus());
302  if (pactuator) {
303  pactuator->copy (this);
304  return (CvtDevice *)pactuator;
305  }
306  return nullptr;
307  }
308 
313  bool copy(CvtDevice *pdevice) {
314  CvtActuator *pactuator = dynamic_cast<CvtActuator *>(pdevice);
315  if (pactuator) {
316  _copy (pdevice);
317  _lastcmdid = pactuator->_lastcmdid;
318  _onoff = pactuator->_onoff;
319  return true;
320  }
321  return false;
322  }
323 
328  int getlastcmdid () {
329  return _lastcmdid;
330  }
331 
336  bool turnon () {
337  _onoff = true;
338  return _onoff;
339  }
340 
345  bool turnoff () {
346  _onoff = false;
347  return _onoff;
348  }
349 
354  bool getonoff () {
355  return _onoff;
356  }
357 
364  bool order(CvtCommand *pcmd) {
365  pcmd->getonoff() ? turnon() : turnoff();
366  setcommand (pcmd);
367  return true;
368  }
369 
374  void executed(int cmdid) {
375  if (cmdid >= _lastcmdid)
376  _lastcmdid = 0;
377  }
378 
383  string tostring() {
384  return "CvtActuator [" + CvtDevice::tostring()
385  + "], lastcmdid : " + std::to_string(getlastcmdid())
386  + ", onoff : " + std::to_string(getonoff());
387  }
388 };
389 
390 /*
391  @brief CvtMotor는 CvtActuator를 상속하여, 개별 모터형 구동기를 추상화한 클래스이다.
392 */
393 class CvtMotor : public CvtActuator {
394 private:
395  double _current;
396  double _target;
397 
398 public:
405  CvtMotor (string devid, CvtDeviceSpec *pdevspec, devstat_t devstatus)
406  : CvtActuator (devid, pdevspec, devstatus) {
407  _current = 0;
408  _target = 0;
409  }
410 
419  CvtMotor (string devid, devtype_t devtype,
420  devsec_t section, devtarget_t target, devstat_t devstatus)
421  : CvtActuator (devid, devtype, section, target, devstatus) {
422  _current = 0;
423  _target = 0;
424  }
425 
431  CvtMotor *pmotor = new CvtMotor(getid(), getspec(), getstatus());
432  if (pmotor) {
433  pmotor->copy (this);
434  return (CvtDevice *)pmotor;
435  }
436  return nullptr;
437  }
438 
443  bool copy(CvtDevice *pdevice) {
444  CvtMotor *pmotor = dynamic_cast<CvtMotor *>(pdevice);
445  if (pmotor) {
446  pmotor->CvtActuator::copy(pdevice);
447  _current = pmotor->_current;
448  _target = pmotor->_target;
449  return true;
450  }
451  return false;
452  }
453 
459  double settarget(double ratio) {
460  _target= ratio;
461  return _target;
462  }
463 
468  double gettarget() {
469  return _target;
470  }
471 
477  double setcurrent(double ratio) {
478  _current = ratio;
479  return _current;
480  }
481 
486  double getcurrent() {
487  return _current;
488  }
489 
494  string tostring() {
495  return "CvtMotor [" + CvtDevice::tostring()
496  + "], lastcmdid : " + std::to_string(getlastcmdid())
497  + "], current : " + std::to_string(_current)
498  + ", onoff : " + std::to_string(getonoff())
499  + ", target : " + std::to_string(_target);
500  }
501 
508  bool order(CvtCommand *pcmd) {
509  CvtRatioCommand *prcmd = dynamic_cast<CvtRatioCommand *>(pcmd);
510  if (prcmd == nullptr) {
511  return false;
512  }
513 
514  if (prcmd->getonoff()) {
515  // on
516  settarget (prcmd->getratio ());
517  turnon ();
518  } else {
519  // off
520  turnoff ();
521  }
522  setcommand (pcmd);
523  return true;
524  }
525 };
526 
527 } // namespace stdcvt
528 #endif
CvtSensor(string devid, devtype_t devtype, devsec_t section, devtarget_t target, devstat_t devstatus, obsunit_t unit)
Definition: cvtdevice.h:170
CvtDevice * clone()
Definition: cvtdevice.h:430
devtype_t
Definition: cvtcode.h:63
bool copy(CvtDevice *pdevice)
Definition: cvtdevice.h:194
bool order(CvtCommand *pcmd)
Definition: cvtdevice.h:364
string tostring()
Definition: cvtdevice.h:383
double writeobservation(double value)
Definition: cvtdevice.h:228
devstat_t
Definition: cvtcode.h:29
bool turnoff()
Definition: cvtdevice.h:345
Definition: cvtdevice.h:393
CvtActuator(string devid, CvtDeviceSpec *pdevspec, devstat_t devstatus)
Definition: cvtdevice.h:275
void executed(int cmdid)
Definition: cvtdevice.h:374
bool order(CvtCommand *pcmd)
Definition: cvtdevice.h:508
string getid()
Definition: cvtdevice.h:80
double getcurrent()
Definition: cvtdevice.h:486
double readobservation()
Definition: cvtdevice.h:237
Definition: cvtcommand.h:92
bool copy(CvtDevice *pdevice)
Definition: cvtdevice.h:313
Definition: cvtdevice.h:30
double getratio()
Definition: cvtcommand.h:113
static devgroup_t getgroup(devtype_t devtype)
Definition: cvtdevice.h:133
obsunit_t setunit(obsunit_t unit)
Definition: cvtdevice.h:218
Definition: cvtcommand.h:22
bool copy(CvtDevice *pdevice)
Definition: cvtdevice.h:443
CvtActuator(string devid, devtype_t devtype, devsec_t section, devtarget_t target, devstat_t devstatus)
Definition: cvtdevice.h:289
Definition: cvtdevice.h:254
devgroup_t
Definition: cvtcode.h:55
obsunit_t getunit()
Definition: cvtdevice.h:209
int getlastcmdid()
Definition: cvtdevice.h:328
CvtSensor(string devid, CvtDeviceSpec *pdevspec, devstat_t devstatus, obsunit_t unit)
Definition: cvtdevice.h:154
Definition: cvtdevice.h:141
int getid()
Definition: cvtcommand.h:48
double setcurrent(double ratio)
Definition: cvtdevice.h:477
string tostring()
Definition: cvtdevicespec.h:179
CvtMotor(string devid, CvtDeviceSpec *pdevspec, devstat_t devstatus)
Definition: cvtdevice.h:405
double gettarget()
Definition: cvtdevice.h:468
bool copy(CvtDeviceSpec *pdevspec)
Definition: cvtdevicespec.h:167
bool turnon()
Definition: cvtdevice.h:336
long devsec_t
Definition: cvtcode.h:19
CvtDevice(string devid, CvtDeviceSpec *pdevspec, devstat_t devstatus)
Definition: cvtdevice.h:51
CvtDevice(string devid, devtype_t devtype, devsec_t section, devtarget_t target, devstat_t devstatus)
Definition: cvtdevice.h:65
void setcommand(CvtCommand *pcmd)
Definition: cvtdevice.h:264
CvtDevice * clone()
Definition: cvtdevice.h:181
devstat_t getstatus()
Definition: cvtdevice.h:96
devtarget_t
Definition: cvtcode.h:40
obsunit_t
Definition: cvtcode.h:103
double settarget(double ratio)
Definition: cvtdevice.h:459
devstat_t setstatus(devstat_t devstatus)
Definition: cvtdevice.h:105
string tostring()
Definition: cvtdevice.h:113
string tostring()
Definition: cvtdevice.h:494
Definition: cvtcode.h:17
CvtDeviceSpec * getspec()
Definition: cvtdevice.h:88
bool getonoff()
Definition: cvtdevice.h:354
CvtDevice * clone()
Definition: cvtdevice.h:300
Definition: cvtdevicespec.h:40
CvtMotor(string devid, devtype_t devtype, devsec_t section, devtarget_t target, devstat_t devstatus)
Definition: cvtdevice.h:419
string tostring()
Definition: cvtdevice.h:244
bool getonoff()
Definition: cvtcommand.h:74