_AnalogDetect.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Data;
  6. namespace FPER
  7. {
  8. //
  9. // 아날로그 감지기 연동
  10. //
  11. public class _AnalogDetect // cyim 2015.8.4 수신반을 위한 static 클래스 정리
  12. {
  13. // 감지기 트렌드 창 활성 여부
  14. public bool Form_Active_AnalogDetecter = false;
  15. // 현재 정의된 낮시간대
  16. public string FireDayTime_StartHour = null;
  17. public string FireDayTime_StartMin = null;
  18. public string FireDayTime_EndHour = null;
  19. public string FireDayTime_EndMin = null;
  20. // 현재 시간이 낮이라면 true, 밤이라면 false
  21. public bool FireDayTime = false;
  22. // 아날로그 감지기의 화재 모드중 낮인지 밤인지 구분하기 위한 시간대 설정 값
  23. public void Get_TB_DAYTIME(int ReceiverID) // cyim 2015.7.30 데이타베이스 접속 루틴 변경
  24. {
  25. try
  26. {
  27. DacUIProcess dacUIProcess_TB_DAYTIME = new DacUIProcess(ReceiverID);
  28. string SQL = "select rdb$relation_name ";
  29. SQL = SQL + "from rdb$relations ";
  30. SQL = SQL + "where rdb$system_flag=0 ";
  31. SQL = SQL + "and rdb$relation_name = '" + "TB_DAYTIME" + "'";
  32. DataTable checktable = dacUIProcess_TB_DAYTIME.SelectSQL(SQL); // cyim 2015.7.10 테이블이 존재하는지 먼저 살펴보도록함
  33. if (checktable.Rows.Count != 0)
  34. {
  35. SQL = "";
  36. SQL += " SELECT START_HOUR,START_MIN,END_HOUR,END_MIN";
  37. SQL += " FROM TB_DAYTIME ";
  38. DataSet dao_TB_DAYTIME = dacUIProcess_TB_DAYTIME.Select(SQL);
  39. DataTable dt_TB_DAYTIME = dao_TB_DAYTIME.Tables[0];
  40. if (dt_TB_DAYTIME.Rows.Count != 0)
  41. {
  42. foreach (DataRow dr in dt_TB_DAYTIME.Rows)
  43. {
  44. FireDayTime_StartHour = dr["START_HOUR"].ToString();
  45. FireDayTime_StartMin = dr["START_MIN"].ToString();
  46. FireDayTime_EndHour = dr["END_HOUR"].ToString();
  47. FireDayTime_EndMin = dr["END_MIN"].ToString();
  48. }
  49. }
  50. }
  51. else
  52. {
  53. // 없으면 기본값 낮시간대는 오전 6시부터 저녁 6시까지이다
  54. FireDayTime_StartHour = "6";
  55. FireDayTime_StartMin = "0";
  56. FireDayTime_EndHour = "18";
  57. FireDayTime_EndMin = "0";
  58. }
  59. }
  60. catch (Exception ex)
  61. {
  62. Util.UErrorMessage(ex, 0, 0);
  63. }
  64. }
  65. // 메인에서 1초 타이머에서 사용하는 함수
  66. public void FireDayTime_Check_Timer_Tick()
  67. {
  68. // TB_DAYTIME 이 있는 경우에만 동작한다
  69. if (FireDayTime_StartHour == null || FireDayTime_StartMin == null || FireDayTime_EndHour == null || FireDayTime_EndMin == null)
  70. return;
  71. string NowTime = DateTime.Now.ToString("HH:mm:ss"); // yyyy-MM-dd HH:mm:ss
  72. string[] Time = NowTime.Split(':');
  73. int Hour = Int32.Parse(Time[0]);
  74. int Minute = Int32.Parse(Time[1]);
  75. // 4자리 숫자로 계산하는 게 편하다
  76. int CurrentTime = (Hour * 100) + Minute;
  77. int TB_DAYTIME_START = (Int32.Parse(FireDayTime_StartHour) * 100) + Int32.Parse(FireDayTime_StartMin);
  78. int TB_DAYTIME_END = (Int32.Parse(FireDayTime_EndHour) * 100) + Int32.Parse(FireDayTime_EndMin);
  79. // 시작 시간과 분이 현재 시간보다 앞서 있고 동시에 종료 시간과 분이 현재 시간보다 뒤에 있다면 낮이다
  80. if (CurrentTime >= TB_DAYTIME_START && CurrentTime <= TB_DAYTIME_END)
  81. {
  82. // 낮
  83. FireDayTime = true;
  84. }
  85. else
  86. {
  87. // 밤
  88. FireDayTime = false;
  89. }
  90. }
  91. // 현재 레벨 상태값 구하기 (Normal : 0, Fault :1, PreFire : 2, Fire : 3)
  92. public int Get_LevelStatus(int Data, AnalogLevel Level)
  93. {
  94. // TB_DAYTIME 이 있는 경우에만 동작한다
  95. if (FireDayTime_StartHour == null || FireDayTime_StartMin == null || FireDayTime_EndHour == null || FireDayTime_EndMin == null)
  96. return 0;
  97. // 현재 밤인지 낮인지 먼저 구별이 필요함
  98. if (Data >= 0 && Data <= Convert.ToInt32(Level.FAULT_VALUE))
  99. return 1;
  100. else
  101. {
  102. // 낮
  103. if (FireDayTime == true)
  104. {
  105. if (Data >= Convert.ToInt32(Level.PREFIRE_VALUE) && (Data <= Convert.ToInt32(Level.FIRED_VALUE)))
  106. return 2;
  107. else if (Data >= Convert.ToInt32(Level.FIRED_VALUE))
  108. return 3;
  109. }
  110. // 밤
  111. else
  112. {
  113. if (Data >= Convert.ToInt32(Level.PREFIRE_VALUE) && (Data <= Convert.ToInt32(Level.FIREN_VALUE)))
  114. return 2;
  115. else if (Data >= Convert.ToInt32(Level.FIREN_VALUE))
  116. return 3;
  117. }
  118. }
  119. // 정상
  120. return 0;
  121. }
  122. }
  123. //
  124. // 아날로그 감지기 레벨 설정 클래스
  125. //
  126. public class AnalogLevel
  127. {
  128. public AnalogLevel(int pFAULT_VALUE, int pPREFIRE_VALUE, int pFIRED_VALUE, int pFIREN_VALUE)
  129. {
  130. FAULT_VALUE = pFAULT_VALUE;
  131. PREFIRE_VALUE = pPREFIRE_VALUE;
  132. FIRED_VALUE = pFIRED_VALUE;
  133. FIREN_VALUE = pFIREN_VALUE;
  134. }
  135. public int FAULT_VALUE = 0;
  136. public int PREFIRE_VALUE = 0;
  137. public int FIRED_VALUE = 0;
  138. public int FIREN_VALUE = 0;
  139. }
  140. }