eebed21efd2a8d27a69288f0b06a128fc3e83582.svn-base 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #include "realvalue.h"
  2. #include "yt_unit_shm.h"
  3. extern YT_UNIT_SHM *ytShm;
  4. void set_realtime_io_value(quint8 commid, quint8 busadd, quint8 value, uint timestamp)
  5. {
  6. quint8 alarmStatus = 0x00;
  7. QDateTime datetime = QDateTime::fromTime_t(timestamp);
  8. if((ytShm->sPointList.sPoint[commid][busadd].PNO_ALARM>0)
  9. &&(ytShm->sPointList.sPoint[commid][busadd].PNO_VALUE<2))
  10. {
  11. if(value==ytShm->sPointList.sPoint[commid][busadd].PNO_VALUE)
  12. alarmStatus = ytShm->sPointList.sPoint[commid][busadd].PNO_ALARM;
  13. }
  14. if(alarmStatus!=ytShm->spStatusList.spStatus[commid][busadd].ALARM_STATUS)
  15. {
  16. ytShm->spStatusList.spStatus[commid][busadd].ALARM_STATUS = alarmStatus;
  17. ytShm->spStatusList.spStatus[commid][busadd].ALARM_TIMESTAMP = timestamp;
  18. if(alarmStatus==0)
  19. {
  20. if(ytShm->spStatusList.spStatus[commid][busadd].ALARM_SENT==0x00)
  21. ytShm->spStatusList.spStatus[commid][busadd].ALARM_SENT = 0x01;
  22. else
  23. ytShm->spStatusList.spStatus[commid][busadd].ALARM_SENT = 0x00;
  24. }
  25. else
  26. ytShm->spStatusList.spStatus[commid][busadd].ALARM_SENT = 0x00;
  27. }
  28. ytShm->spStatusList.spStatus[commid][busadd].REALTIME_VALUE = value*1.0;
  29. ytShm->spStatusList.spStatus[commid][busadd].REALTIME_TIMESTAMP = timestamp;
  30. if(ytShm->spStatusList.spStatus[commid][busadd].COUNT==0)
  31. {
  32. ytShm->spStatusList.spStatus[commid][busadd].MAX_VALUE = value*1.0;
  33. ytShm->spStatusList.spStatus[commid][busadd].MAX_TIMESTAMP = timestamp;
  34. ytShm->spStatusList.spStatus[commid][busadd].MIN_VALUE = value*1.0;
  35. ytShm->spStatusList.spStatus[commid][busadd].MIN_TIMESTAMP = timestamp;
  36. ytShm->spStatusList.spStatus[commid][busadd].TOTAL_VALUE = value*1.0;
  37. ytShm->spStatusList.spStatus[commid][busadd].AVE_VALUE = value*1.0;
  38. ytShm->spStatusList.spStatus[commid][busadd].COUNT = 1;
  39. }else{
  40. ytShm->spStatusList.spStatus[commid][busadd].TOTAL_VALUE += value*1.0;
  41. ytShm->spStatusList.spStatus[commid][busadd].COUNT += 1;
  42. ytShm->spStatusList.spStatus[commid][busadd].AVE_VALUE
  43. = ytShm->spStatusList.spStatus[commid][busadd].TOTAL_VALUE
  44. /ytShm->spStatusList.spStatus[commid][busadd].COUNT;
  45. if(value>ytShm->spStatusList.spStatus[commid][busadd].MAX_VALUE)
  46. {
  47. ytShm->spStatusList.spStatus[commid][busadd].MAX_VALUE = value;
  48. ytShm->spStatusList.spStatus[commid][busadd].MAX_TIMESTAMP = timestamp;
  49. }
  50. if(value<ytShm->spStatusList.spStatus[commid][busadd].MIN_VALUE)
  51. {
  52. ytShm->spStatusList.spStatus[commid][busadd].MIN_VALUE = value;
  53. ytShm->spStatusList.spStatus[commid][busadd].MIN_TIMESTAMP = timestamp;
  54. }
  55. }
  56. }
  57. void set_realtime_real_value(quint8 commid, quint8 busadd, float value, uint timestamp)
  58. {
  59. quint8 alarmStatus = 0x00;
  60. QDateTime datetime = QDateTime::fromTime_t(timestamp);
  61. if((ytShm->sPointList.sPoint[commid][busadd].PNO_ALARM>0)
  62. &&(ytShm->sPointList.sPoint[commid][busadd].PNO_VALUE<4)
  63. &&(ytShm->sPointList.sPoint[commid][busadd].PNO_VALUE>0))
  64. {
  65. if((ytShm->sPointList.sPoint[commid][busadd].PNO_VALUE&0x01)==0x01)
  66. {
  67. if(value>ytShm->sPointList.sPoint[commid][busadd].ALARM_H)
  68. {
  69. alarmStatus = 0x20|ytShm->sPointList.sPoint[commid][busadd].PNO_ALARM;
  70. }
  71. }
  72. if((ytShm->sPointList.sPoint[commid][busadd].PNO_VALUE&0x02)==0x02)
  73. {
  74. if(value<ytShm->sPointList.sPoint[commid][busadd].ALARM_L)
  75. {
  76. alarmStatus = 0x10|ytShm->sPointList.sPoint[commid][busadd].PNO_ALARM;
  77. }
  78. }
  79. }
  80. if(alarmStatus!=ytShm->spStatusList.spStatus[commid][busadd].ALARM_STATUS)
  81. {
  82. ytShm->spStatusList.spStatus[commid][busadd].ALARM_STATUS = alarmStatus;
  83. ytShm->spStatusList.spStatus[commid][busadd].ALARM_TIMESTAMP = timestamp;
  84. if(alarmStatus==0)
  85. {
  86. if(ytShm->spStatusList.spStatus[commid][busadd].ALARM_SENT==0x00)
  87. ytShm->spStatusList.spStatus[commid][busadd].ALARM_SENT = 0x01;
  88. else
  89. ytShm->spStatusList.spStatus[commid][busadd].ALARM_SENT = 0x00;
  90. }
  91. else
  92. ytShm->spStatusList.spStatus[commid][busadd].ALARM_SENT = 0x00;
  93. }
  94. ytShm->spStatusList.spStatus[commid][busadd].REALTIME_VALUE = value;
  95. ytShm->spStatusList.spStatus[commid][busadd].REALTIME_VALUE = value*1.0;
  96. ytShm->spStatusList.spStatus[commid][busadd].REALTIME_TIMESTAMP = timestamp;
  97. if(ytShm->spStatusList.spStatus[commid][busadd].COUNT==0)
  98. {
  99. ytShm->spStatusList.spStatus[commid][busadd].MAX_VALUE = value;
  100. ytShm->spStatusList.spStatus[commid][busadd].MAX_TIMESTAMP = timestamp;
  101. ytShm->spStatusList.spStatus[commid][busadd].MIN_VALUE = value;
  102. ytShm->spStatusList.spStatus[commid][busadd].MIN_TIMESTAMP = timestamp;
  103. ytShm->spStatusList.spStatus[commid][busadd].TOTAL_VALUE = value;
  104. ytShm->spStatusList.spStatus[commid][busadd].AVE_VALUE = value;
  105. ytShm->spStatusList.spStatus[commid][busadd].COUNT = 1;
  106. }else{
  107. ytShm->spStatusList.spStatus[commid][busadd].TOTAL_VALUE += value;
  108. ytShm->spStatusList.spStatus[commid][busadd].COUNT += 1;
  109. ytShm->spStatusList.spStatus[commid][busadd].AVE_VALUE
  110. = ytShm->spStatusList.spStatus[commid][busadd].TOTAL_VALUE
  111. /ytShm->spStatusList.spStatus[commid][busadd].COUNT;
  112. if(value>ytShm->spStatusList.spStatus[commid][busadd].MAX_VALUE)
  113. {
  114. ytShm->spStatusList.spStatus[commid][busadd].MAX_VALUE = value;
  115. ytShm->spStatusList.spStatus[commid][busadd].MAX_TIMESTAMP = timestamp;
  116. }
  117. if(value<ytShm->spStatusList.spStatus[commid][busadd].MIN_VALUE)
  118. {
  119. ytShm->spStatusList.spStatus[commid][busadd].MIN_VALUE = value;
  120. ytShm->spStatusList.spStatus[commid][busadd].MIN_TIMESTAMP = timestamp;
  121. }
  122. }
  123. }
  124. void set_realtime_value(quint8 commid, quint8 busadd, float value, uint timestamp)
  125. {
  126. if(commid<4)
  127. {
  128. if(ytShm->commList.comm[commid].ENABLED==0x01)
  129. {
  130. if(ytShm->sPointList.sPoint[commid][busadd].ENABLED==0x01)
  131. {
  132. switch(ytShm->sPointList.sPoint[commid][busadd].PNO_TYPE)
  133. {
  134. case 0x01://开关量输入
  135. set_realtime_io_value(commid, busadd, (value==0)?0x00:0x01, timestamp);
  136. break;
  137. case 0x02://模拟量输入
  138. set_realtime_real_value(commid, busadd, value, timestamp);
  139. break;
  140. default:
  141. break;
  142. }
  143. }
  144. }
  145. }
  146. }