8e7f5530c3bc14ec0630c3cf0e16e39af28d60c6.svn-base 84 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. namespace IControls_FireManager
  10. {
  11. public partial class Form_Receiver_Add : Form
  12. {
  13. // 클래스 생성
  14. _RECEIVER RECEIVER = new _RECEIVER();
  15. private int _RETRY_COUNT = 2;
  16. private int _DELTA_VOLT = 10;
  17. private int _COMM_TIMEOUT = 1000;
  18. private int _COMM_DELAY = 100;
  19. // 신규추가용 인지 편집용 구분
  20. private bool EditMode = false; // true : 편집용 , false = 신규추가용
  21. // 수신기 추가 혹은 수신기 정보를 편집할때 사용되는 클래스이다
  22. // iIndex : 0 이 들어오는 경우 -> 데이타베이스에 수신기 아이디가 존재한다면 새로운 아이디를 생성하고, 폴더 생성및 데이타베이스를 카피한다
  23. // iIndex : 수신기 ID 값이 들어오는 경우 -> 수신기 정보를 편집
  24. private string DEFAULT_MODEL = "IFC3300";
  25. public Form_Receiver_Add(int iIndex)
  26. {
  27. ///
  28. /// 초기화
  29. ///
  30. InitializeComponent();
  31. // 리시버 데이터 초기화
  32. // 사용하지 않는 값들은 기본값으로 입력한다.
  33. // 사용여부 (미사용)
  34. RECEIVER.ENABLE = true;
  35. // 타입 (미사용)
  36. RECEIVER.TYPE = null;
  37. // 이중화 플래그 (항상 false 설정함. 입력용 화면도 없음.)
  38. RECEIVER.REDUNDANT_FLAG = false;
  39. // =============================================
  40. //// 통신보드 최대개수 // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  41. //if (((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER]).MODEL == "IFC3300")
  42. // RECEIVER.COM_BOARD_MAX_NUM = 68; // cyim
  43. //else
  44. // RECEIVER.COM_BOARD_MAX_NUM = 15;
  45. // IO보드 최대개수
  46. RECEIVER.IO_BOARD_MAX_NUM = 15;
  47. RECEIVER.ID = iIndex.ToString();
  48. // 프로젝트 새로 만들기 구조 변경
  49. // -> 프로젝트 폴더는 해쉬테이블에 없다면 곧바로 생성
  50. // -> 해쉬테이블이 있다면 분명 편집모드로 진입
  51. // -> 해쉬테이블에 없다면 새로운 수신기 추가 -> Initialize_Defalut 실행
  52. // -> 해쉬테이블에 없지만 기존의 데이타베이스에 있는경우 (데이타베이스 열기 시도하는 경우) -> Initialize_SubPort_FromDB 실행
  53. // -> 참고 : 프로젝트 폴더 생성시 중복된 데이타베이스 파일 예외처리되므로 가능함
  54. // 기존의 ID 가 있는지 체크.
  55. if (_Data.HASH_RECEIVER.ContainsKey(RECEIVER.ID) == false)
  56. {
  57. //
  58. // 데이타베이스 접근 경로 지정부
  59. //
  60. _Data.DataBaseFilePath_Set(null);//RECEIVER.ID);
  61. // 수신기 폴더 생성
  62. _File.Create_ReceiverFolder(_Data.Project_Path, _Data.Project_Name, RECEIVER.ID);
  63. // 수신기 ID 조회 : 0 이면 수신기 ID 가 없다
  64. if (Initialize_Receiver_FromDB(RECEIVER.ID) == 0)
  65. {
  66. // 아이디 생성
  67. RECEIVER.ID = Convert.ToString(_Data.CREATE_RECEIVER_ID());
  68. // Initialize_Defalut 함수안에 Initialize_SubPort 함수를 이미 포함하고 있다
  69. Initialize_Defalut();
  70. }
  71. else
  72. {
  73. // DB에서 SubPort 값까지 모두 불러온다.
  74. Initialize_SubPort_FromDB(RECEIVER.ID);
  75. }
  76. // 새로운 수신기를 추가함
  77. EditMode = false;
  78. }
  79. else
  80. {
  81. // 수신기 아이디를 토대로 해쉬테이블의 있는 정보를 가져온다
  82. RECEIVER = (_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID];
  83. // 기존의 수신기 수정함
  84. EditMode = true;
  85. }
  86. // RECEIVER 내용을 화면에 표출한다.
  87. Fill_ReceiverData();
  88. ///
  89. /// 이벤트
  90. ///
  91. // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)
  92. this.FormClosing += new FormClosingEventHandler(CreateForm_FormClosing);
  93. // 윈도우 스타일 변경 이벤트 핸들러 등록
  94. _Event.WindowStyleSet_SendMessage_Event += new _Event.WindowStyleSet_SendMessage_Handler(_Event_WindowStyleSet_SendMessage_Event);
  95. ///
  96. /// 스타일 변경
  97. ///
  98. UI_Style_Initialize();
  99. }
  100. // Receiver 데이터를 DB에 저장하자!
  101. public void _Event_Project_Receiver_Save_Event()
  102. {
  103. try
  104. {
  105. int iReceiverID = Util.StrToInt(RECEIVER.ID, 0);
  106. // TB_BOARD에 쓰기 (통신 보드, I/O 보드, KEYPAD)
  107. // 기존 데이터는 지운다. (이미 모든 데이터는 RECEIVER에 들어있다!)
  108. _Db.Execute(_Sql.Delete_Table("TB_BOARD", RECEIVER.ID));
  109. string sSQL_BOARD = null;
  110. //
  111. // 통신보드
  112. //
  113. // 강제 쿼리 (특별히 펌프로 인하여 추가되는 보드가 존재한다)
  114. try
  115. {
  116. if (((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).MODEL == "IFC3300")
  117. {
  118. sSQL_BOARD = _Sql.TB_BOARD_table_Insert_BigReceiver(
  119. iReceiverID, // ReceiverID
  120. 1, // COMMID (1 고정)
  121. 0, // BOARDID (0 고정)
  122. "통신보드 0", // BOARD_NAME
  123. "Y", // LOOP0 Use Flag
  124. "N", // LOOP1 Use Flag
  125. "N", // LOOP2 Use Flag
  126. "N", // LOOP3 Use Flag
  127. "Y"); // Use Flag
  128. }
  129. else
  130. {
  131. sSQL_BOARD = _Sql.TB_BOARD_table_Insert(
  132. iReceiverID, // ReceiverID
  133. 1, // COMMID (1 고정)
  134. 15, // BOARDID (15 고정)
  135. "통신보드 15", // BOARDID
  136. "Y", // LOOP0 Use Flag
  137. "N", // LOOP1 Use Flag
  138. "Y"); // Use Flag
  139. }
  140. _Db.Execute(sSQL_BOARD);
  141. }
  142. catch
  143. {; }
  144. // cyim 2016.09.21 : TB_BOARD 에 루프 0~3 저장 하도록 한다
  145. foreach (string COM_BOARD_ID in ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).List_COM_BOARD_ID)
  146. {
  147. // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  148. if (((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).MODEL == "IFC3300")
  149. {
  150. sSQL_BOARD = _Sql.TB_BOARD_table_Insert_BigReceiver(
  151. iReceiverID, // ReceiverID
  152. 1, // COMMID (1로 고정)
  153. ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).BOARD_ID, // BOARDID
  154. ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).BOARD_NAME, // BOARDID
  155. (((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bCh1_Use_Flag ? "Y" : "N"), // LOOP0 Use Flag
  156. (((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bCh2_Use_Flag ? "Y" : "N"), // LOOP1 Use Flag
  157. (((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bCh3_Use_Flag ? "Y" : "N"), // LOOP2 Use Flag
  158. (((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bCh4_Use_Flag ? "Y" : "N"), // LOOP3 Use Flag
  159. (((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bUse_Flag ? "Y" : "N")); // Use Flag
  160. }
  161. else
  162. {
  163. sSQL_BOARD = _Sql.TB_BOARD_table_Insert(
  164. iReceiverID, // ReceiverID
  165. 1, // COMMID (1로 고정)
  166. ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).BOARD_ID, // BOARDID
  167. ((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).BOARD_NAME, // BOARDID
  168. (((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bCh1_Use_Flag ? "Y" : "N"), // LOOP0 Use Flag
  169. (((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bCh2_Use_Flag ? "Y" : "N"), // LOOP1 Use Flag
  170. (((_COM_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_COM_BOARD[COM_BOARD_ID]).bUse_Flag ? "Y" : "N")); // Use Flag
  171. }
  172. _Db.Execute(sSQL_BOARD);
  173. }
  174. //
  175. // IO 보드
  176. //
  177. // 강제 쿼리 (특별히 IO 보드는 셋팅하지 않아도 기본적으로 사용함으로 셋팅한다. 모델에 상관없이 IO 보드는 15는 무조건 사용하는 보드이다)
  178. try
  179. {
  180. if (((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).MODEL == "IFC3300")
  181. {
  182. // cyim 2017.02.02 : IFC3300 에서는 통신보드, IO 보드 아이디가 0번이 존재한다
  183. sSQL_BOARD = _Sql.TB_BOARD_table_Insert_BigReceiver(
  184. iReceiverID, // ReceiverID
  185. 3, // COMMID (3 고정)
  186. 0, // BOARDID (0 고정) // cyim 2016.01.10 IO 보드 강제쿼리에 코드 버그
  187. "I/O 보드 0", // BOARD_NAME
  188. "Y", // LOOP0 Use Flag
  189. "N", // LOOP1 Use Flag
  190. "N", // LOOP2 Use Flag
  191. "N", // LOOP3 Use Flag
  192. "Y"); // Use Flag
  193. }
  194. else
  195. {
  196. sSQL_BOARD = _Sql.TB_BOARD_table_Insert(
  197. iReceiverID, // ReceiverID
  198. 3, // COMMID (3 고정)
  199. 15, // BOARDID (15 고정)
  200. "I/O 보드 15", // BOARDID
  201. "Y", // LOOP0 Use Flag
  202. "N", // LOOP1 Use Flag
  203. "Y"); // Use Flag
  204. }
  205. _Db.Execute(sSQL_BOARD);
  206. }
  207. catch
  208. {; }
  209. // cyim 2016.09.21 : TB_BOARD 에 루프 0~3 저장 하도록 한다
  210. foreach (string IO_BOARD_ID in ((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).List_IO_BOARD_ID)
  211. {
  212. // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  213. if (((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).MODEL == "IFC3300")
  214. {
  215. sSQL_BOARD = _Sql.TB_BOARD_table_Insert_BigReceiver(
  216. iReceiverID, // ReceiverID
  217. 3, // IO Board ID (3로 고정)
  218. ((_IO_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_IO_BOARD[IO_BOARD_ID]).BOARD_ID, // BOARDID
  219. ((_IO_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_IO_BOARD[IO_BOARD_ID]).BOARD_NAME, // BOARDID
  220. (((_IO_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_IO_BOARD[IO_BOARD_ID]).bUse_Flag ? "Y" : "N"), // LOOP0 Use Flag (Use Flag와 같은 같으로 넣는다.)
  221. "N", // LOOP1 Use Flag
  222. "N", // LOOP2 Use Flag
  223. "N", // LOOP3 Use Flag
  224. (((_IO_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_IO_BOARD[IO_BOARD_ID]).bUse_Flag ? "Y" : "N")); // Use Flag
  225. }
  226. else
  227. {
  228. sSQL_BOARD = _Sql.TB_BOARD_table_Insert(
  229. iReceiverID, // ReceiverID
  230. 3, // IO Board ID (3로 고정)
  231. ((_IO_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_IO_BOARD[IO_BOARD_ID]).BOARD_ID, // BOARDID
  232. ((_IO_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_IO_BOARD[IO_BOARD_ID]).BOARD_NAME, // BOARDID
  233. (((_IO_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_IO_BOARD[IO_BOARD_ID]).bUse_Flag ? "Y" : "N"), // LOOP0 Use Flag (Use Flag와 같은 같으로 넣는다.)
  234. "N", // LOOP1 Use Flag
  235. (((_IO_BOARD)((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).Hash_IO_BOARD[IO_BOARD_ID]).bUse_Flag ? "Y" : "N")); // Use Flag
  236. }
  237. _Db.Execute(sSQL_BOARD);
  238. }
  239. // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  240. if (((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER.ID]).MODEL == "IFC3300")
  241. {
  242. // cyim 2016.09.21 : TB_BOARD 에 루프 0~3 저장 하도록 한다
  243. sSQL_BOARD = _Sql.TB_BOARD_table_Insert_BigReceiver(
  244. iReceiverID, // ReceiverID
  245. 4, // KeyPAD ID (4로 고정)
  246. RECEIVER.KEYPAD.BOARD_ID, // BOARDID
  247. RECEIVER.KEYPAD.BOARD_NAME, // BOARDID
  248. "N", // LOOP0 Use Flag
  249. "N", // LOOP1 Use Flag
  250. "N", // LOOP2 Use Flag
  251. "N", // LOOP3 Use Flag
  252. (RECEIVER.KEYPAD.bUse_Flag ? "Y" : "N")); // Use Flag
  253. }
  254. else
  255. {
  256. sSQL_BOARD = _Sql.TB_BOARD_table_Insert(
  257. iReceiverID, // ReceiverID
  258. 4, // KeyPAD ID (4로 고정)
  259. RECEIVER.KEYPAD.BOARD_ID, // BOARDID
  260. RECEIVER.KEYPAD.BOARD_NAME, // BOARDID
  261. "N", // LOOP0 Use Flag
  262. "N", // LOOP1 Use Flag
  263. (RECEIVER.KEYPAD.bUse_Flag ? "Y" : "N")); // Use Flag
  264. }
  265. _Db.Execute(sSQL_BOARD);
  266. // TB_COMM
  267. // 기존 데이터는 지운다.
  268. _Db.Execute(_Sql.Delete_Table("TB_COMM", RECEIVER.ID));
  269. string sSQL_COMM_CommBoard = _Sql.TB_COMM_table_Insert(iReceiverID, // Receiver ID
  270. 1, // COMM ID (고정)
  271. "FRONT LOOP", // 명칭 (고정)
  272. 1, // COMM LOOP (고정)
  273. RECEIVER.Port4CommBoard.Get_COM_PORT(), // COMM_PORT
  274. RECEIVER.Port4CommBoard.BaudRate, // BAUD_RATE
  275. RECEIVER.Port4CommBoard.Get_COM_PARITY(), // Parity
  276. RECEIVER.Port4CommBoard.DataBits, // DATABits
  277. RECEIVER.Port4CommBoard.Get_COM_STOPBIT(), // StopBits
  278. RECEIVER.Port4CommBoard.TimeOut, // TimeOut
  279. RECEIVER.Port4CommBoard.Delay, // Delay
  280. RECEIVER.Port4CommBoard.Delta_Volt, // Delta Volt (전압차 발생시 표시)
  281. RECEIVER.Port4CommBoard.Retry_Count, // 통신 Retry Count
  282. (RECEIVER.Port4CommBoard.Use_Flag ? "Y" : "N")); // 사용여부
  283. string sSQL_COMM_IOBoard = _Sql.TB_COMM_table_Insert(iReceiverID, // Receiver ID
  284. 3, // COMM ID (고정)
  285. "IO BOARD", // 명칭 (고정)
  286. 3, // COMM LOOP (고정)
  287. RECEIVER.Port4IOBoard.Get_COM_PORT(), // COMM_PORT
  288. RECEIVER.Port4IOBoard.BaudRate, // BAUD_RATE
  289. RECEIVER.Port4IOBoard.Get_COM_PARITY(), // Parity
  290. RECEIVER.Port4IOBoard.DataBits, // DATABits
  291. RECEIVER.Port4IOBoard.Get_COM_STOPBIT(), // StopBits
  292. RECEIVER.Port4IOBoard.TimeOut, // TimeOut
  293. RECEIVER.Port4IOBoard.Delay, // Delay
  294. RECEIVER.Port4IOBoard.Delta_Volt, // Delta Volt (전압차 발생시 표시)
  295. RECEIVER.Port4IOBoard.Retry_Count, // 통신 Retry Count
  296. (RECEIVER.Port4IOBoard.Use_Flag ? "Y" : "N")); // 사용여부
  297. string sSQL_COMM_KeyPAD = _Sql.TB_COMM_table_Insert(iReceiverID, // Receiver ID
  298. 4, // COMM ID (고정)
  299. "KEYPAD", // 명칭 (고정)
  300. 4, // COMM LOOP (고정)
  301. RECEIVER.Port4KeyPAD.Get_COM_PORT(), // COMM_PORT
  302. RECEIVER.Port4KeyPAD.BaudRate, // BAUD_RATE
  303. RECEIVER.Port4KeyPAD.Get_COM_PARITY(), // Parity
  304. RECEIVER.Port4KeyPAD.DataBits, // DATABits
  305. RECEIVER.Port4KeyPAD.Get_COM_STOPBIT(), // StopBits
  306. RECEIVER.Port4KeyPAD.TimeOut, // TimeOut
  307. RECEIVER.Port4KeyPAD.Delay, // Delay
  308. RECEIVER.Port4KeyPAD.Delta_Volt, // Delta Volt (전압차 발생시 표시)
  309. RECEIVER.Port4KeyPAD.Retry_Count, // 통신 Retry Count
  310. (RECEIVER.Port4KeyPAD.Use_Flag ? "Y" : "N")); // 사용여부
  311. string sSQL_COMM_EmergencyBroadcast = _Sql.TB_COMM_table_Insert(iReceiverID, // Receiver ID
  312. 5, // COMM ID (고정)
  313. "BroadCast", // 명칭 (고정)
  314. 5, // COMM LOOP (고정)
  315. RECEIVER.Port4EmergencyBroadcast.Get_COM_PORT(), // COMM_PORT
  316. RECEIVER.Port4EmergencyBroadcast.BaudRate, // BAUD_RATE
  317. RECEIVER.Port4EmergencyBroadcast.Get_COM_PARITY(), // Parity
  318. RECEIVER.Port4EmergencyBroadcast.DataBits, // DATABits
  319. RECEIVER.Port4EmergencyBroadcast.Get_COM_STOPBIT(), // StopBits
  320. RECEIVER.Port4EmergencyBroadcast.TimeOut, // TimeOut
  321. RECEIVER.Port4EmergencyBroadcast.Delay, // Delay
  322. RECEIVER.Port4EmergencyBroadcast.Delta_Volt, // Delta Volt (전압차 발생시 표시)
  323. RECEIVER.Port4EmergencyBroadcast.Retry_Count, // 통신 Retry Count
  324. (RECEIVER.Port4EmergencyBroadcast.Use_Flag ? "Y" : "N")); // 사용여부
  325. _Db.Execute(sSQL_COMM_CommBoard);
  326. _Db.Execute(sSQL_COMM_IOBoard);
  327. _Db.Execute(sSQL_COMM_KeyPAD);
  328. _Db.Execute(sSQL_COMM_EmergencyBroadcast);
  329. // TB_CONFIG
  330. _Db.Execute(_Sql.Delete_Table("TB_CONFIG", RECEIVER.ID));
  331. string sSQL_Config = _Sql.TB_CONFIG_table_Insert(iReceiverID, // 수신기 ID
  332. (RECEIVER.FIRE_ACCUMULATION_MODE ? "Y" : "N"), // 축적 모드 여부
  333. RECEIVER.FIRE_ACCUMULATION_SECOND, // 축적 시간
  334. (RECEIVER.RECOVER_MODE ? "Y" : "N"), // 자동복구 (N) / 지속(Y)
  335. RECEIVER.USERID, // Master USER ID
  336. RECEIVER.USER_PASSWORD, // Master Password
  337. RECEIVER.NAME, // 빌딩명 (수신기명)
  338. (RECEIVER.JUMP_TO_VIEW ? "Y" : "N"), // 화재시 화면 이동 여부 (Y/N)
  339. (RECEIVER.MASTER_FLAG ? "Y" : "N"), // 네트워크 수신기 설정 기능 추가 MASTER_FLAG 여부 (Y/N)
  340. "N" // 시운전모드 // cyim 2013.7.3 시운전모드 초기값 변경 // 기본값 변경 cyim 2013.7.29 Y->N
  341. );
  342. _Db.Execute(sSQL_Config);
  343. // TB_DEVICE_TYPE 중에 타입이 SYMBOL_TYPE 중 O 는 무조건 N 으로 변경한다
  344. _Db.UPDATE("TB_DEVICE_TYPE", "SYMBOL_TYPE=O", "USE_FLAG=N");
  345. // TB_RECEIVER
  346. // 기존 데이터는 지운다.
  347. _Db.Execute(_Sql.Delete_Table("TB_RECEIVER", RECEIVER.ID));
  348. string sSQL_Receiver = _Sql.TB_RECEIVER_table_Insert(iReceiverID, RECEIVER.NAME, RECEIVER.IP, RECEIVER.EVENT_PORT, RECEIVER.COMMAND_PORT, RECEIVER.sUseFlag, RECEIVER.MODEL);
  349. _Db.Execute(sSQL_Receiver);
  350. }
  351. catch (Exception ex)
  352. {
  353. // LOG
  354. _Event.DebugView_SendMessage_Write(ex.ToString());
  355. // 실패하였습니다
  356. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.FailInform, 0);
  357. }
  358. }
  359. // 폼닫기 이벤트를 등록 (이벤트 핸들러 해제용)
  360. public void CreateForm_FormClosing(object sender, FormClosingEventArgs e)
  361. {
  362. // 윈도우 스타일 변경 이벤트 핸들러 해제
  363. _Event.WindowStyleSet_SendMessage_Event -= new _Event.WindowStyleSet_SendMessage_Handler(_Event_WindowStyleSet_SendMessage_Event);
  364. }
  365. // 윈도우 스타일 변경 이벤트
  366. public void _Event_WindowStyleSet_SendMessage_Event()
  367. {
  368. UI_Style_Initialize();
  369. }
  370. // 스타일 초기화 함수
  371. private void UI_Style_Initialize()
  372. {
  373. }
  374. // 기본 데이터를 RECEIVER에 채운다.
  375. public void Initialize_Defalut()
  376. {
  377. //수신기 기본 아이피는 127.0.0.1 -> 네트워크수신기 설정시에는 반드시 Static 아이피를 사용해야한다
  378. // 기본값 (현재아이피)
  379. string[] myip = { "127", "0", "0", "1" };//_Convert.String_to_ArrayString(_Convert.Split_IPAddress, _Tcp.MyIP());
  380. EditBox_IP1.Text = myip[0];
  381. EditBox_IP2.Text = myip[1];
  382. EditBox_IP3.Text = myip[2];
  383. EditBox_IP4.Text = myip[3];
  384. // 기본 데이터로 RECEIVER 클래스의 내용을 채운다.
  385. // IP
  386. RECEIVER.IP = EditBox_IP1.Text + _Text.Period + EditBox_IP2.Text + _Text.Period + EditBox_IP3.Text + _Text.Period + EditBox_IP4.Text;
  387. RECEIVER.EVENT_PORT = 9001;
  388. RECEIVER.COMMAND_PORT = 9002;
  389. // 축적 모드 (true:축척, false:비축척)
  390. //RECEIVER.FIRE_ACCUMULATION_MODE = false; <= 자동 설정이 됨.
  391. RECEIVER.FIRE_ACCUMULATION_SECOND = 0;
  392. // 수신기 모델
  393. RECEIVER.MODEL = DEFAULT_MODEL;
  394. // 수신기 모델에 따른 통신보드 개수
  395. RECEIVER.COM_BOARD_MAX_NUM = 64;
  396. // 복구 모드 (false: 자동복구, true: 지속)
  397. RECEIVER.RECOVER_MODE = false;
  398. RECEIVER.NAME = "";
  399. // 화재 감지되면 해당 화면으로 점프함.
  400. RECEIVER.JUMP_TO_VIEW = false; // 기본값 변경 cyim 2013.7.29 Y->N
  401. // 네트워크 수신기 설정 기능 추가 (신규로 들어가는 경우 슬레이브)
  402. RECEIVER.MASTER_FLAG = false;
  403. // 서브 포트 내용을 초기화한다.
  404. Initialize_SubPort();
  405. // 이름
  406. RECEIVER.KEY_NAME = _Text.UI_TREE_RECEIVER + RECEIVER.ID + " [" + RECEIVER.MODEL + "]";
  407. }
  408. // 수신기 표시 내용 채워넣기
  409. public void Fill_ReceiverData()
  410. {
  411. // 빌딩명칭 표시
  412. editBox_BuildingName.Text = RECEIVER.NAME;
  413. // 기본값 (현재아이피)
  414. string[] myip = _Convert.String_to_ArrayString(_Convert.Split_IPAddress, RECEIVER.IP);
  415. EditBox_IP1.Text = myip[0];
  416. EditBox_IP2.Text = myip[1];
  417. EditBox_IP3.Text = myip[2];
  418. EditBox_IP4.Text = myip[3];
  419. // 축적 내용 표시
  420. uiComboBox_FireAccumulation.Items.Clear();
  421. uiComboBox_FireAccumulation.Items.Add("0 (축적안함)");
  422. uiComboBox_FireAccumulation.Items.Add("30");
  423. uiComboBox_FireAccumulation.Items.Add("40");
  424. uiComboBox_FireAccumulation.Items.Add("50");
  425. uiComboBox_FireAccumulation.Items.Add("60");
  426. switch (RECEIVER.FIRE_ACCUMULATION_SECOND)
  427. {
  428. case 0:
  429. uiComboBox_FireAccumulation.SelectedIndex = 0;
  430. break;
  431. case 30:
  432. uiComboBox_FireAccumulation.SelectedIndex = 1;
  433. break;
  434. case 40:
  435. uiComboBox_FireAccumulation.SelectedIndex = 2;
  436. break;
  437. case 50:
  438. uiComboBox_FireAccumulation.SelectedIndex = 3;
  439. break;
  440. case 60:
  441. uiComboBox_FireAccumulation.SelectedIndex = 4;
  442. break;
  443. }
  444. // 포트번호 표시 (이벤트 포트, 명령 포트)
  445. editBox_CommandPort.Text = Convert.ToString(RECEIVER.COMMAND_PORT);
  446. editBox_EventPort.Text = Convert.ToString(RECEIVER.EVENT_PORT);
  447. // Jump To View 플래그 표시
  448. uiCheckBox_ViewChange.Checked = RECEIVER.JUMP_TO_VIEW;
  449. // 네트워크 수신기 설정 기능 추가
  450. uiCheckBox_MasterFlag.Checked = RECEIVER.MASTER_FLAG;
  451. // cyim 2016.12.02 : 수신기 모델 설정 기능 추가
  452. if (RECEIVER.MODEL == "IFC3300") uiRadioButton_IFC3300.Checked = true;
  453. else if (RECEIVER.MODEL == "IFC3000") uiRadioButton_IFC3000.Checked = true;
  454. else if (RECEIVER.MODEL == "IFC2000") uiRadioButton_IFC2000.Checked = true;
  455. else if (RECEIVER.MODEL == "IFC1000") uiRadioButton_IFC1000.Checked = true;
  456. else uiRadioButton_IFC1000.Checked = true;
  457. // 화재 모드 표시 (False = 자동복구, True = 지속)
  458. if (RECEIVER.RECOVER_MODE == false) uiRadioButton_AutoRecover.Checked = true;
  459. else uiRadioButton_Steady.Checked = true;
  460. }
  461. private bool Check_IP_Range(string Data)
  462. {
  463. try
  464. {
  465. int ip = Int32.Parse(Data);
  466. if (ip >= 0 && ip <= 255)
  467. return true;
  468. else
  469. return false;
  470. }
  471. catch
  472. {
  473. return false;
  474. }
  475. }
  476. // 추가 버튼
  477. public void UiButton_SubPortAdd_Click(object sender, EventArgs e)
  478. {
  479. // 예외처리 (미구현)
  480. // ID 가 양수형 숫자인지
  481. // IP 라면 범위초과인지
  482. string IP1 = EditBox_IP1.Text;
  483. string IP2 = EditBox_IP2.Text;
  484. string IP3 = EditBox_IP3.Text;
  485. string IP4 = EditBox_IP4.Text;
  486. // IP
  487. RECEIVER.IP = IP1 + _Text.Period + IP2 + _Text.Period + IP3 + _Text.Period + IP4;
  488. //// 기존의 IP 가 있는지 체크해서 있다면 경고 팝업창 처리
  489. //foreach (string RECEIVER_KEY in _Data.LIST_RECEIVER_ID)
  490. //{
  491. // if (((_RECEIVER)_Data.HASH_RECEIVER[RECEIVER_KEY]).IP == RECEIVER.IP)
  492. // {
  493. // _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.OverLapIP, 0);
  494. // return;
  495. // }
  496. //}
  497. // 공백 허용 안함
  498. if (IP1.Trim().Length == 0
  499. || IP2.Trim().Length == 0
  500. || IP3.Trim().Length == 0
  501. || IP4.Trim().Length == 0)
  502. {
  503. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.NullIP, 0);
  504. return;
  505. }
  506. // 허용 범위 체크
  507. if (Check_IP_Range(IP1) == false
  508. || Check_IP_Range(IP2) == false
  509. || Check_IP_Range(IP3) == false
  510. || Check_IP_Range(IP4) == false)
  511. {
  512. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.NotIP, 0);
  513. return;
  514. }
  515. // 편집모드가 아닌 신규추가용인 경우
  516. if (EditMode == false)
  517. {
  518. // 기존의 ID 가 있는지 체크해서 있다면 경고 팝업창 처리
  519. if (_Data.HASH_RECEIVER.ContainsKey(RECEIVER.ID) == true)
  520. {
  521. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.OverLapKey, 0);
  522. return;
  523. }
  524. }
  525. // 빌딩명칭 체크
  526. if (editBox_BuildingName.Text == null || editBox_BuildingName.Text.Trim().Length == 0)
  527. {
  528. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.NotCorrectBuildName, 0);
  529. //return; // 프로젝트 열기시에 빌딩명이 없어도 읽을수 있도록 처리 - cyim 2013.6.18
  530. }
  531. else if (_Error.Data_Confirm_NotDefineString(this.editBox_BuildingName.Text.Trim()) != null)
  532. {
  533. // 상위 비교문에서 팝업처리
  534. return;
  535. }
  536. // 빌딩명칭 표시 (선후행공백처리)
  537. RECEIVER.NAME = editBox_BuildingName.Text.Trim();
  538. if (uiComboBox_FireAccumulation.SelectedIndex == 0)
  539. {
  540. RECEIVER.FIRE_ACCUMULATION_SECOND = 0;
  541. }
  542. else
  543. {
  544. RECEIVER.FIRE_ACCUMULATION_SECOND = Convert.ToInt16(uiComboBox_FireAccumulation.SelectedValue);
  545. }
  546. // COMMAND Port
  547. RECEIVER.COMMAND_PORT = Util.StrToInt(editBox_CommandPort.Text, 0);
  548. // Event Port
  549. RECEIVER.EVENT_PORT = Util.StrToInt(editBox_EventPort.Text, 0);
  550. // Jump To View 플래그 표시
  551. RECEIVER.JUMP_TO_VIEW = uiCheckBox_ViewChange.Checked;
  552. // 네트워크 수신기 설정 기능 추가
  553. RECEIVER.MASTER_FLAG = uiCheckBox_MasterFlag.Checked;
  554. // 복구 모드 (False = 자동복구, False = 지속)
  555. if (uiRadioButton_AutoRecover.Checked == true)
  556. {
  557. RECEIVER.RECOVER_MODE = false;
  558. }
  559. else
  560. {
  561. RECEIVER.RECOVER_MODE = true;
  562. }
  563. // cyim 2016.12.02 : 수신기 모델 설정 기능 추가
  564. if (uiRadioButton_IFC3300.Checked == true) RECEIVER.MODEL = "IFC3300";
  565. else if (uiRadioButton_IFC1000.Checked == true) RECEIVER.MODEL = "IFC1000";
  566. else if (uiRadioButton_IFC2000.Checked == true) RECEIVER.MODEL = "IFC2000";
  567. else if (uiRadioButton_IFC3000.Checked == true) RECEIVER.MODEL = "IFC3000";
  568. // 이름
  569. RECEIVER.KEY_NAME = _Text.UI_TREE_RECEIVER + RECEIVER.ID + " [" + RECEIVER.MODEL + "]";
  570. // 편집모드가 아닌 신규추가용인 경우
  571. if (EditMode == false)
  572. {
  573. // 해쉬에 추가
  574. if (_Hash.Add(_Data.HASH_RECEIVER, RECEIVER.ID, RECEIVER) == true)
  575. {
  576. // 키리스트에 추가
  577. _Data.LIST_RECEIVER_ID.Add(RECEIVER.ID);
  578. }
  579. // 트리에 추가
  580. _Event.TreeView_ReceiverNodeSet_SendMessage_Write(RECEIVER);
  581. }
  582. else
  583. {
  584. // 완료 이벤트 발생
  585. _Event.WorkViewPageName_Receiver_SendMessage_Write(RECEIVER.ID);
  586. }
  587. // DB 에 저장
  588. _Event_Project_Receiver_Save_Event();
  589. // 수신기 편집만 저장한다고 나옴, 즉 추가의 경우는 팝업창이 출력되지 않는다
  590. if (EditMode == true)
  591. {
  592. // 저장하였습니다
  593. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.SaveInform, 0);
  594. }
  595. else
  596. {
  597. // 신규 수신기 아이디 추가
  598. if (_Data.LIST_XMLRECEIVER_ID.Contains(RECEIVER.ID) == false)
  599. _Data.LIST_XMLRECEIVER_ID.Add(RECEIVER.ID);
  600. // 수신기 파일 생성
  601. _File.Write_Receiver_XML(_Data.Project_Path + "\\" + _Data.Project_Name);
  602. }
  603. // 프로젝트 수정
  604. _Data.ProJect_Save_Complete = false;
  605. // 폼종료
  606. this.Close();
  607. }
  608. COMM_STOPBIT GetStopBits(string sParam)
  609. {
  610. COMM_STOPBIT eRet = COMM_STOPBIT.ONESTOPBIT; // 디폴트값
  611. if (sParam == "2") eRet = COMM_STOPBIT.TWOSTOPBITS;
  612. if (sParam == "1.5") eRet = COMM_STOPBIT.ONE5STOPBITS;
  613. return eRet;
  614. }
  615. COMM_PARITY GetParity(string sParam)
  616. {
  617. COMM_PARITY eRet = COMM_PARITY.NONE; // 디폴트값
  618. if (sParam == "E") eRet = COMM_PARITY.EVEN;
  619. if (sParam == "O") eRet = COMM_PARITY.ODD;
  620. return eRet;
  621. }
  622. int GetComPort(string sParam)
  623. {
  624. int iRet = 0;
  625. if (sParam == "COM1") iRet = 1;
  626. if (sParam == "COM2") iRet = 2;
  627. if (sParam == "COM3") iRet = 3;
  628. if (sParam == "COM4") iRet = 4;
  629. if (sParam == "COM5") iRet = 5;
  630. if (sParam == "COM6") iRet = 6;
  631. if (sParam == "COM7") iRet = 7;
  632. if (sParam == "COM8") iRet = 8;
  633. return iRet;
  634. }
  635. // 무작정 Alter 명령어를 사용하면 기존의 데이타가 삭제되어 버린다
  636. public bool Column_Check(string ColumnName, string TableName)
  637. {
  638. string SQL = string.Format("SELECT Count({0}) FROM {1}", ColumnName, TableName);
  639. // 접속 세션
  640. FirebirdSql.Data.FirebirdClient.FbConnection session = null;
  641. // 접속된 상태의 명령어
  642. FirebirdSql.Data.FirebirdClient.FbCommand command = null;
  643. // 접속 세션 주소
  644. string address = null;
  645. try
  646. {
  647. // 접속 세션 주소 셋팅
  648. address = string.Format("Server={0};User={1};Password={2};Database={3};Charset={4};ServerType={5}",
  649. _Data.DB_IP, // IP ex)192.168.63.22
  650. _Data.DB_ID, // 사용자
  651. _Data.DB_PassWord, // 암호
  652. _Data.DB_FullPath, // 절대위치.. ex) C:\TEST\TEST.FDB
  653. "KSC_5601", // KSC_5601 같은 문자셋을 지정
  654. "0");
  655. // 상위 문구를 신뢰하고 보내는 루틴
  656. session = new FirebirdSql.Data.FirebirdClient.FbConnection(address);
  657. session.Open();
  658. command = new FirebirdSql.Data.FirebirdClient.FbCommand(SQL, session);
  659. command.ExecuteNonQuery();
  660. if (session != null) session.Close();
  661. if (command != null) command.Dispose();
  662. return true;
  663. }
  664. catch (Exception e)
  665. {
  666. // LOG
  667. _Event.DebugView_SendMessage_Write(e.ToString() + "SQL:" + SQL);
  668. if (session != null) session.Close();
  669. if (command != null) command.Dispose();
  670. return false;
  671. }
  672. }
  673. public bool Data_Check(string TableName, string DataName, string DataValue)
  674. {
  675. string SQL = string.Format("SELECT * FROM {0} WHERE {1}='{2}'", TableName, DataName, DataValue);
  676. // 접속 세션
  677. FirebirdSql.Data.FirebirdClient.FbConnection session = null;
  678. // 접속된 상태의 명령어
  679. FirebirdSql.Data.FirebirdClient.FbCommand command = null;
  680. // 접속 세션 주소
  681. string address = null;
  682. // 접속 아답터
  683. FirebirdSql.Data.FirebirdClient.FbDataAdapter dataAdapter = null;
  684. DataSet dataSet = null;
  685. try
  686. {
  687. // 접속 세션 주소 셋팅
  688. address = string.Format("Server={0};User={1};Password={2};Database={3};Charset={4};ServerType={5}",
  689. _Data.DB_IP, // IP ex)192.168.63.22
  690. _Data.DB_ID, // 사용자
  691. _Data.DB_PassWord, // 암호
  692. _Data.DB_FullPath, // 절대위치.. ex) C:\TEST\TEST.FDB
  693. "KSC_5601", // KSC_5601 같은 문자셋을 지정
  694. "0");
  695. // 상위 문구를 신뢰하고 보내는 루틴
  696. session = new FirebirdSql.Data.FirebirdClient.FbConnection(address);
  697. session.Open();
  698. command = new FirebirdSql.Data.FirebirdClient.FbCommand(SQL, session);
  699. dataAdapter = new FirebirdSql.Data.FirebirdClient.FbDataAdapter(SQL, session);
  700. dataAdapter.SelectCommand = command;
  701. dataSet = new DataSet();
  702. dataAdapter.Fill(dataSet, "GetData");
  703. if (dataAdapter != null) dataAdapter.Dispose();
  704. if (session != null) session.Close();
  705. if (command != null) command.Dispose();
  706. if (dataSet != null) dataSet.Dispose();
  707. if (dataSet.Tables["GetData"].Rows.Count > 0) return true;
  708. else return false;
  709. }
  710. catch (Exception e)
  711. {
  712. // LOG
  713. _Event.DebugView_SendMessage_Write(e.ToString() + "SQL:" + SQL);
  714. if (dataAdapter != null) dataAdapter.Dispose();
  715. if (session != null) session.Close();
  716. if (command != null) command.Dispose();
  717. if (dataSet != null) dataSet.Dispose();
  718. return false;
  719. }
  720. }
  721. // 아래 함수는 프로젝트 읽기하는 경우 무조건 진입하는 함수이다.
  722. // DB에서 수신기 정보를 읽어 RECEIVER에 값을 넣는다.
  723. // 또한 강제쿼리를 날려서 데이타베이스 변경이 필요한 경우에 반영하도록 한다
  724. public int Initialize_Receiver_FromDB(string Receiver_ID)
  725. {
  726. //
  727. // cyim 2016.12.02 : 프로젝트를 열때 강제 쿼리
  728. //
  729. // cyim 2016.09.21 : TB_BOARD_2 테이블 사용하도록 한내용을 다시 TB_BOARD 로 변경한다. 결국은 무조건 프로젝트를 열때 컬럼이 추가된다. 기존에 있다면 예외 처리됨
  730. if (Column_Check("LOOP2_USE_FLAG", "TB_BOARD") == false) _Db.Execute("ALTER TABLE TB_BOARD ADD LOOP2_USE_FLAG VARCHAR(1)");
  731. if (Column_Check("LOOP3_USE_FLAG", "TB_BOARD") == false) _Db.Execute("ALTER TABLE TB_BOARD ADD LOOP3_USE_FLAG VARCHAR(1)");
  732. if (Column_Check("LOOP2_BAUD_RATE", "TB_BOARD") == false) _Db.Execute("ALTER TABLE TB_BOARD ADD LOOP2_BAUD_RATE VARCHAR(1)"); // cyim 2016.11.04 : 잘못된 쿼리 수정
  733. if (Column_Check("LOOP3_BAUD_RATE", "TB_BOARD") == false) _Db.Execute("ALTER TABLE TB_BOARD ADD LOOP3_BAUD_RATE VARCHAR(1)");
  734. if (Column_Check("LOOP2_CUT_FLAG", "TB_BOARD") == false) _Db.Execute("ALTER TABLE TB_BOARD ADD LOOP2_CUT_FLAG VARCHAR(1)");
  735. if (Column_Check("LOOP3_CUT_FLAG", "TB_BOARD") == false) _Db.Execute("ALTER TABLE TB_BOARD ADD LOOP3_CUT_FLAG VARCHAR(1)");
  736. if (Column_Check("MODEL", "TB_RECEIVER") == false) _Db.Execute("ALTER TABLE TB_RECEIVER ADD MODEL VARCHAR(20)");
  737. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "EW") == false)
  738. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  739. "EW", "설비출력상태 ON", "FireManager", "current_timestamp"));
  740. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "EF") == false)
  741. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  742. "EF", "설비출력상태 OFF", "FireManager", "current_timestamp"));
  743. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "ED") == false)
  744. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  745. "ED", "설비전체연동조작버튼", "FireManager", "current_timestamp"));
  746. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "A1") == false)
  747. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  748. "A1", "가압펌프1 스위치 기동", "FireManager", "current_timestamp"));
  749. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "A2") == false)
  750. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  751. "A2", "가압펌프1 스위치 정지", "FireManager", "current_timestamp"));
  752. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "A3") == false)
  753. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  754. "A3", "가압펌프2 스위치 기동", "FireManager", "current_timestamp"));
  755. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "A4") == false)
  756. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  757. "A4", "가압펌프2 스위치 정지", "FireManager", "current_timestamp"));
  758. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "A5") == false)
  759. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  760. "A5", "비상발전기 스위치 기동", "FireManager", "current_timestamp"));
  761. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "A6") == false)
  762. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  763. "A6", "비상발전기 스위치 정지", "FireManager", "current_timestamp"));
  764. // cyim 2017.01.17 신규 이벤트 추가 (펌프 수동기동)
  765. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "PA") == false)
  766. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  767. "PA", "PUMP1 스위치 수동", "FireManager", "current_timestamp"));
  768. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "PB") == false)
  769. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  770. "PB", "PUMP2 스위치 수동", "FireManager", "current_timestamp"));
  771. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "PC") == false)
  772. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  773. "PC", "PUMP3 스위치 수동", "FireManager", "current_timestamp"));
  774. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "PD") == false)
  775. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  776. "PD", "PUMP4 스위치 수동", "FireManager", "current_timestamp"));
  777. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "SA") == false)
  778. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  779. "SA", "PUMP5 스위치 수동", "FireManager", "current_timestamp"));
  780. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "SB") == false)
  781. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  782. "SB", "PUMP6 스위치 수동", "FireManager", "current_timestamp"));
  783. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "SC") == false)
  784. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  785. "SC", "PUMP7 스위치 수동", "FireManager", "current_timestamp"));
  786. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "SD") == false)
  787. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  788. "SD", "PUMP8 스위치 수동", "FireManager", "current_timestamp"));
  789. // cyim 2017.02.14 : 강제쿼리
  790. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "O3") == false)
  791. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  792. "O3", "화재축적모드설정(30초)", "FireManager", "current_timestamp"));
  793. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "O4") == false)
  794. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  795. "O4", "화재축적모드설정(40초)", "FireManager", "current_timestamp"));
  796. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "O5") == false)
  797. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  798. "O5", "화재축적모드설정(50초)", "FireManager", "current_timestamp"));
  799. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "O6") == false)
  800. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  801. "O6", "화재축적모드설정(60초)", "FireManager", "current_timestamp"));
  802. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "AO") == false)
  803. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  804. "AO", "화재축적모드설정", "FireManager", "current_timestamp"));
  805. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "AF") == false)
  806. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  807. "AF", "화재축적모드비설정", "FireManager", "current_timestamp"));
  808. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "HM") == false)
  809. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  810. "HM", "화재지속모드설정", "FireManager", "current_timestamp"));
  811. if (Data_Check("TB_EVENT_TYPE", "EVENT_TYPE", "RM") == false)
  812. _Db.Execute(string.Format("insert into TB_EVENT_TYPE (EVENT_TYPE,EVENT_TYPE_NAME,UPDATE_USER_ID,UPDATE_TIME) values ('{0}','{1}','{2}',{3})",
  813. "RM", "자동복구모드설정", "FireManager", "current_timestamp"));
  814. // cyim 2016.12.15 : 프로젝트를 열때 강제 쿼리 (수신반용 테이블)
  815. // 존재할때 삭제하는 코드는 유보하고, 존재하지 않는 경우에는 테이블 신규 생성
  816. DataRowCollection DB_TABLE_Check = null;
  817. DB_TABLE_Check = _Db.ExecuteRead_SqlDataAdapter(_Sql.Table_Exist("TB_USERS"));
  818. if (DB_TABLE_Check == null || DB_TABLE_Check.Count == 0)
  819. _Db.Execute(_Sql.Create_TB_USERS());
  820. DB_TABLE_Check = _Db.ExecuteRead_SqlDataAdapter(_Sql.Table_Exist("TB_PUSH_DEVICE"));
  821. if (DB_TABLE_Check == null || DB_TABLE_Check.Count == 0)
  822. _Db.Execute(_Sql.Create_TB_PUSH_DEVICE());
  823. DB_TABLE_Check = _Db.ExecuteRead_SqlDataAdapter(_Sql.Table_Exist("TB_RECEIVER_ERROR_COUNT"));
  824. if (DB_TABLE_Check == null || DB_TABLE_Check.Count == 0)
  825. _Db.Execute(_Sql.Create_TB_RECEIVER_ERROR_COUNT());
  826. DB_TABLE_Check = _Db.ExecuteRead_SqlDataAdapter(_Sql.Table_Exist("TB_RECEIVER_ERROR_COUNT_DETAILS"));
  827. if (DB_TABLE_Check == null || DB_TABLE_Check.Count == 0)
  828. _Db.Execute(_Sql.Create_TB_RECEIVER_ERROR_COUNT_DETAILS());
  829. int iRetCode = 0;
  830. try
  831. {
  832. // DB에서 수신기 정보를 읽어온다.
  833. DataRowCollection DB_TABLE_TB_RECEIVER = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_RECEIVER", Receiver_ID));
  834. if (DB_TABLE_TB_RECEIVER != null && DB_TABLE_TB_RECEIVER.Count != 0) // 데이터가 DB에 있다.
  835. {
  836. // DB내의 리시버 데이터를 읽는다.
  837. DataRow dr = DB_TABLE_TB_RECEIVER[0];
  838. // DB 데이터를 기준으로 RECEIVER 클래스에 내용을 채운다.
  839. RECEIVER.ID = dr["RECEIVER_ID"].ToString();
  840. // cyim 2016.12.02 : 수신기 모델 설정 기능 추가
  841. RECEIVER.MODEL = Util.NullToStr(dr["MODEL"]);
  842. if (RECEIVER.MODEL == "")
  843. {
  844. // cyim 2016.12.05 : 만약 프로젝트를 열다가 중간에 예외 처리 및 강제 저장 옵션이 발동되었다면 경고 폼 출력
  845. _Data.Receiver_Model_TempSetting = true;
  846. RECEIVER.MODEL = DEFAULT_MODEL;
  847. _Db.Execute(string.Format("update TB_RECEIVER set MODEL='{0}' where RECEIVER_ID={1}", RECEIVER.MODEL, Receiver_ID));
  848. }
  849. // 이름
  850. RECEIVER.KEY_NAME = _Text.UI_TREE_RECEIVER + RECEIVER.ID + " [" + RECEIVER.MODEL + "]";
  851. RECEIVER.IP = dr["IP_ADDRESS"].ToString();
  852. RECEIVER.EVENT_PORT = Util.StrToInt(dr["EVENT_PORT_NO"], 0);
  853. RECEIVER.COMMAND_PORT = Util.StrToInt(dr["COMMAND_PORT_NO"], 0);
  854. // TB_CONFIG 테이블을 읽는다.
  855. DataRowCollection DB_TABLE_TB_CONFIG = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_ConfigTable(Util.StrToInt(RECEIVER.ID, 0)));
  856. if (DB_TABLE_TB_CONFIG != null)
  857. {
  858. dr = DB_TABLE_TB_CONFIG[0];
  859. RECEIVER.FIRE_ACCUMULATION_SECOND = Util.StrToInt(dr["FIRE_ACCUMULATION_TIME"], 0);
  860. RECEIVER.NAME = dr["BUILDING_NAME"].ToString();
  861. if (dr["JUMP_FIELD"].ToString() == "Y")
  862. {
  863. RECEIVER.JUMP_TO_VIEW = true;
  864. }
  865. else
  866. {
  867. RECEIVER.JUMP_TO_VIEW = false;
  868. }
  869. if (dr["FIRE_PROCESS_MODE"].ToString() == "N")
  870. {
  871. RECEIVER.RECOVER_MODE = false;
  872. }
  873. else
  874. {
  875. RECEIVER.RECOVER_MODE = true;
  876. }
  877. if (dr["MASTER_FLAG"].ToString() == "Y")
  878. {
  879. RECEIVER.MASTER_FLAG = true;
  880. }
  881. else
  882. {
  883. RECEIVER.MASTER_FLAG = false;
  884. }
  885. }
  886. // 리턴 코드에 RECEIVER.ID를 넣는다.
  887. iRetCode = Util.StrToInt(RECEIVER.ID, 0);
  888. }
  889. }
  890. catch (Exception ex)
  891. {
  892. Util.UErrorMessage(ex, 0, 0);
  893. }
  894. return iRetCode;
  895. }
  896. // DB에서 읽은 값으로 RECEIVER의 서브 포트를 채운다.
  897. public void Initialize_SubPort_FromDB(string Receiver_ID)
  898. {
  899. try
  900. {
  901. // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  902. DataRowCollection DB_TABLE_TB_RECEIVER = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_RECEIVER", Receiver_ID));
  903. if (DB_TABLE_TB_RECEIVER != null && DB_TABLE_TB_RECEIVER.Count != 0)
  904. {
  905. DataRow dr = DB_TABLE_TB_RECEIVER[0];
  906. // 통신보드 최대개수
  907. if (Util.NullToStr(dr["MODEL"]) == "IFC3300")
  908. RECEIVER.COM_BOARD_MAX_NUM = 64;
  909. else
  910. RECEIVER.COM_BOARD_MAX_NUM = 15;
  911. }
  912. // 통신 보드 설정 읽기 (TB_COMM)
  913. DataRowCollection DB_TABLE_TB_COMM = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_COMM", Receiver_ID));
  914. if (DB_TABLE_TB_COMM != null)
  915. {
  916. foreach (DataRow dr in DB_TABLE_TB_COMM)
  917. {
  918. COMM_STOPBIT eStopBit = GetStopBits(dr["STOP_BITS"].ToString());
  919. COMM_PARITY eParity = GetParity(dr["PARITY"].ToString());
  920. int iComPort = GetComPort(dr["COMM_PORT"].ToString());
  921. int iBaudRate = Convert.ToInt32(dr["BAUD_RATE"]);
  922. int iDataBits = Convert.ToInt32(dr["DATA_BITS"]);
  923. int iID = Convert.ToInt16(dr["COMM_ID"]);
  924. int iTimeOut = Convert.ToInt16(dr["COMM_TIMEOUT"]);
  925. int iCommDelay = Convert.ToInt16(dr["COMM_DELAY"]);
  926. int iDelta_Volt = Convert.ToInt16(dr["DELTA_VOLT"]);
  927. int iRetryCount = Convert.ToInt16(dr["RETRY_COUNT"]);
  928. bool bUseFlag = false;
  929. if (dr["USE_FLAG"].ToString() == "Y")
  930. {
  931. bUseFlag = true;
  932. }
  933. switch (iID)
  934. {
  935. case 1: // Front Loop
  936. {//case 2: // Back Loop (현재 사용하지 않음.)
  937. RECEIVER.Port4CommBoard.COMM_ID = iID;
  938. // 포트 넘버 (COM1, COM2..)
  939. RECEIVER.Port4CommBoard.PortNo = iComPort;
  940. // 포트BPS (1200,9600,14400, 38400 ...)
  941. RECEIVER.Port4CommBoard.BaudRate = iBaudRate;
  942. // 포트 데이터 비트 설정 (5,6,7,8)
  943. RECEIVER.Port4CommBoard.DataBits = iDataBits;
  944. // 포트 스톱비트 설정 (1, 1.5, 2)
  945. RECEIVER.Port4CommBoard.StopBits = eStopBit;
  946. // 포트 패리티 설정 (None, Even, Odd)
  947. RECEIVER.Port4CommBoard.Parity = eParity;
  948. // 타임아웃 설정
  949. RECEIVER.Port4CommBoard.TimeOut = iTimeOut;
  950. // 통신 지연 설정
  951. RECEIVER.Port4CommBoard.Delay = iCommDelay;
  952. // 표시용 전압변화값
  953. RECEIVER.Port4CommBoard.Delta_Volt = iDelta_Volt;
  954. // 재시도 횟수
  955. RECEIVER.Port4CommBoard.Retry_Count = iRetryCount;
  956. // 사용 여부
  957. RECEIVER.Port4CommBoard.Use_Flag = bUseFlag;
  958. int temp = 1;
  959. if (RECEIVER.MODEL == "IFC3300")
  960. temp = 0;
  961. // 통신 보드 세팅
  962. for (int i = temp; i <= RECEIVER.COM_BOARD_MAX_NUM; i++) // cyim 2017.02.02 : IFC3300 에서는 통신보드, IO 보드 아이디가 0번이 존재한다
  963. {
  964. // 클래스 생성
  965. _COM_BOARD COM_BOARD = new _COM_BOARD();
  966. // ID
  967. COM_BOARD.ID = RECEIVER.Set_SubKey(RECEIVER, string.Format(_Text.UI_TREE_COM_BOARD_KEY, i));
  968. // 이름
  969. COM_BOARD.Set_KEY_NAME(_Text.UI_TREE_COM_BOARD + i.ToString());
  970. //데이터 읽기
  971. DataRowCollection DB_TABLE_TB_BOARD = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Board_Table(Util.StrToInt(RECEIVER.ID, 0), iID, i));
  972. if (DB_TABLE_TB_BOARD != null && DB_TABLE_TB_BOARD.Count != 0)
  973. {
  974. DataRow dtr = DB_TABLE_TB_BOARD[0];
  975. string sUseFlag = dtr["USE_FLAG"].ToString();
  976. COM_BOARD.Set_Use_Flag(sUseFlag);
  977. if (sUseFlag == "Y")
  978. {
  979. COM_BOARD.Set_CH1_Use(dtr["LOOP0_USE_FLAG"].ToString());
  980. COM_BOARD.Set_CH2_Use(dtr["LOOP1_USE_FLAG"].ToString());
  981. COM_BOARD.Set_CH3_Use(dtr["LOOP2_USE_FLAG"].ToString());// cyim 2016.09.21 : TB_BOARD 에 루프 0~3 저장 하도록 한다
  982. COM_BOARD.Set_CH4_Use(dtr["LOOP3_USE_FLAG"].ToString());
  983. }
  984. else
  985. {
  986. COM_BOARD.Set_CH1_Use("N");
  987. COM_BOARD.Set_CH2_Use("N");
  988. COM_BOARD.Set_CH3_Use("N");// cyim 2016.09.21 : TB_BOARD 에 루프 0~3 저장 하도록 한다
  989. COM_BOARD.Set_CH4_Use("N");
  990. }
  991. COM_BOARD.BOARD_ID = Util.StrToInt(dtr["BOARD_ID"].ToString(), 0);
  992. COM_BOARD.BOARD_NAME = dtr["BOARD_NAME"].ToString();
  993. }
  994. else
  995. {
  996. COM_BOARD.Set_CH1_Use("N");
  997. COM_BOARD.Set_CH2_Use("N");
  998. COM_BOARD.Set_CH3_Use("N");// cyim 2016.09.21 : TB_BOARD 에 루프 0~3 저장 하도록 한다
  999. COM_BOARD.Set_CH4_Use("N");
  1000. COM_BOARD.Set_Use_Flag("N");
  1001. COM_BOARD.BOARD_ID = i;
  1002. COM_BOARD.BOARD_NAME = String.Format("통신보드 {0}", i);
  1003. }
  1004. // 해쉬 추가
  1005. if (_Hash.Add(RECEIVER.Hash_COM_BOARD, COM_BOARD.ID, COM_BOARD) == true)
  1006. {
  1007. RECEIVER.List_COM_BOARD_ID.Add(COM_BOARD.ID);
  1008. }
  1009. }
  1010. }
  1011. break;
  1012. case 3: // IO Board
  1013. {
  1014. // IO 보드
  1015. RECEIVER.Port4IOBoard.COMM_ID = iID;
  1016. // 포트 넘버 (COM1, COM2..)
  1017. RECEIVER.Port4IOBoard.PortNo = iComPort;
  1018. // 포트BPS (1200,9600,14400, 38400 ...)
  1019. RECEIVER.Port4IOBoard.BaudRate = iBaudRate;
  1020. // 포트 데이터 비트 설정 (5,6,7,8)
  1021. RECEIVER.Port4IOBoard.DataBits = iDataBits;
  1022. // 포트 스톱비트 설정 (1, 1.5, 2)
  1023. RECEIVER.Port4IOBoard.StopBits = eStopBit;
  1024. // 포트 패리티 설정 (None, Even, Odd)
  1025. RECEIVER.Port4IOBoard.Parity = eParity;
  1026. // 타임아웃 설정
  1027. RECEIVER.Port4IOBoard.TimeOut = iTimeOut;
  1028. // 통신 지연 설정
  1029. RECEIVER.Port4IOBoard.Delay = iCommDelay;
  1030. // 표시용 전압변화값
  1031. RECEIVER.Port4IOBoard.Delta_Volt = iDelta_Volt;
  1032. // 재시도 횟수
  1033. RECEIVER.Port4IOBoard.Retry_Count = iRetryCount;
  1034. // 사용 여부
  1035. RECEIVER.Port4IOBoard.Use_Flag = bUseFlag;
  1036. int temp = 1;
  1037. if (RECEIVER.MODEL == "IFC3300")
  1038. temp = 0;
  1039. // IO 보드 세팅
  1040. for (int i = temp; i <= RECEIVER.IO_BOARD_MAX_NUM; i++) // cyim 2017.02.02 : IFC3300 에서는 통신보드, IO 보드 아이디가 0번이 존재한다
  1041. {
  1042. // 클래스 생성
  1043. _IO_BOARD IO_BOARD = new _IO_BOARD();
  1044. // ID
  1045. IO_BOARD.ID = RECEIVER.Set_SubKey(RECEIVER, string.Format(_Text.UI_TREE_IO_BOARD_KEY, i));
  1046. // 이름
  1047. IO_BOARD.Set_KEY_NAME(_Text.UI_TREE_IO_BOARD + i.ToString());// 클래스 생성
  1048. //데이터 읽기
  1049. DataRowCollection DB_TABLE_TB_BOARD = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Board_Table(Util.StrToInt(RECEIVER.ID, 0), iID, i));
  1050. if (DB_TABLE_TB_BOARD != null && DB_TABLE_TB_BOARD.Count != 0)
  1051. {
  1052. DataRow dtr = DB_TABLE_TB_BOARD[0];
  1053. IO_BOARD.Set_Use_Flag(dtr["USE_FLAG"].ToString());
  1054. IO_BOARD.BOARD_ID = Util.StrToInt(dtr["BOARD_ID"].ToString(), 0);
  1055. IO_BOARD.BOARD_NAME = dtr["BOARD_NAME"].ToString();
  1056. }
  1057. else
  1058. {
  1059. IO_BOARD.Set_Use_Flag("N");
  1060. IO_BOARD.BOARD_ID = i;
  1061. IO_BOARD.BOARD_NAME = String.Format("I/O 보드 {0}", i);
  1062. }
  1063. // 해쉬 추가
  1064. if (_Hash.Add(RECEIVER.Hash_IO_BOARD, IO_BOARD.ID, IO_BOARD) == true)
  1065. {
  1066. RECEIVER.List_IO_BOARD_ID.Add(IO_BOARD.ID);
  1067. }
  1068. }
  1069. }
  1070. break;
  1071. case 4: // KeyPAD
  1072. RECEIVER.Port4KeyPAD.COMM_ID = iID;
  1073. // 포트 넘버 (COM1, COM2..)
  1074. RECEIVER.Port4KeyPAD.PortNo = iComPort;
  1075. // 포트BPS (1200,9600,14400, 38400 ...)
  1076. RECEIVER.Port4KeyPAD.BaudRate = iBaudRate;
  1077. // 포트 데이터 비트 설정 (5,6,7,8)
  1078. RECEIVER.Port4KeyPAD.DataBits = iDataBits;
  1079. // 포트 스톱비트 설정 (1, 1.5, 2)
  1080. RECEIVER.Port4KeyPAD.StopBits = eStopBit;
  1081. // 포트 패리티 설정 (None, Even, Odd)
  1082. RECEIVER.Port4KeyPAD.Parity = eParity;
  1083. // 타임아웃 설정
  1084. RECEIVER.Port4KeyPAD.TimeOut = iTimeOut;
  1085. // 통신 지연 설정
  1086. RECEIVER.Port4KeyPAD.Delay = iCommDelay;
  1087. // 표시용 전압변화값
  1088. RECEIVER.Port4KeyPAD.Delta_Volt = iDelta_Volt;
  1089. // 재시도 횟수
  1090. RECEIVER.Port4KeyPAD.Retry_Count = iRetryCount;
  1091. // 사용 여부
  1092. RECEIVER.Port4KeyPAD.Use_Flag = bUseFlag;
  1093. _KEYPAD KEYPAD = new _KEYPAD();
  1094. // ID
  1095. KEYPAD.ID = RECEIVER.Set_SubKey(RECEIVER, string.Format(_Text.UI_TREE_KEYPAD_KEY, 1));
  1096. // 이름
  1097. KEYPAD.Set_KEY_NAME(_Text.UI_TREE_KEYPAD); // 오직 하나뿐
  1098. //데이터 읽기
  1099. DataRowCollection DB_TABLE_TB_BOARD_KEYPAD = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Board_Table(Util.StrToInt(RECEIVER.ID, 0), iID, 0));
  1100. if (DB_TABLE_TB_BOARD_KEYPAD != null && DB_TABLE_TB_BOARD_KEYPAD.Count != 0) // DB가 데이터에 있는 경우..
  1101. { // 데이터로 KEYPAD 클래스의 프로퍼티를 채운다.
  1102. DataRow dtr = DB_TABLE_TB_BOARD_KEYPAD[0];
  1103. KEYPAD.Set_Use_Flag(dtr["USE_FLAG"].ToString());
  1104. KEYPAD.BOARD_ID = Util.StrToInt(dtr["BOARD_ID"].ToString(), 0);
  1105. KEYPAD.BOARD_NAME = dtr["BOARD_NAME"].ToString();
  1106. }
  1107. else // DB에 데이터가 없는 경우..
  1108. { // 디폴트값으로 KEYPAD 클래스의 프로퍼티를 채우자.
  1109. KEYPAD.Set_Use_Flag("N"); // 사용 안함으로 세팅한다.
  1110. KEYPAD.BOARD_ID = 0;
  1111. KEYPAD.BOARD_NAME = "키패드";
  1112. }
  1113. RECEIVER.KEYPAD = KEYPAD;
  1114. break;
  1115. case 5: // BroadCast (비상방송)
  1116. RECEIVER.Port4EmergencyBroadcast.COMM_ID = iID;
  1117. // 포트 넘버 (COM1, COM2..)
  1118. RECEIVER.Port4EmergencyBroadcast.PortNo = iComPort;
  1119. // 포트BPS (1200,9600,14400, 38400 ...)
  1120. RECEIVER.Port4EmergencyBroadcast.BaudRate = iBaudRate;
  1121. // 포트 데이터 비트 설정 (5,6,7,8)
  1122. RECEIVER.Port4EmergencyBroadcast.DataBits = iDataBits;
  1123. // 포트 스톱비트 설정 (1, 1.5, 2)
  1124. RECEIVER.Port4EmergencyBroadcast.StopBits = eStopBit;
  1125. // 포트 패리티 설정 (None, Even, Odd)
  1126. RECEIVER.Port4EmergencyBroadcast.Parity = eParity;
  1127. // 타임아웃 설정
  1128. RECEIVER.Port4EmergencyBroadcast.TimeOut = iTimeOut;
  1129. // 통신 지연 설정
  1130. RECEIVER.Port4EmergencyBroadcast.Delay = iCommDelay;
  1131. // 표시용 전압변화값
  1132. RECEIVER.Port4EmergencyBroadcast.Delta_Volt = iDelta_Volt;
  1133. // 재시도 횟수
  1134. RECEIVER.Port4EmergencyBroadcast.Retry_Count = iRetryCount;
  1135. // 사용 여부
  1136. RECEIVER.Port4EmergencyBroadcast.Use_Flag = bUseFlag;
  1137. _EMERGENCY_BROADCAST EMERGENCY_BROADCAST = new _EMERGENCY_BROADCAST();
  1138. // ID
  1139. EMERGENCY_BROADCAST.ID = RECEIVER.Set_SubKey(RECEIVER, string.Format(_Text.UI_TREE_EMERGENCY_BROADCAST_KEY, 1));
  1140. // 이름
  1141. EMERGENCY_BROADCAST.Set_KEY_NAME(_Text.UI_TREE_EMERGENCY_BROADCAST); // 오직 하나뿐
  1142. RECEIVER.EMERGENCY_BROADCAST = EMERGENCY_BROADCAST;
  1143. break;
  1144. }
  1145. }
  1146. }
  1147. }
  1148. catch (Exception ex)
  1149. {
  1150. Util.UErrorMessage(ex, 0, 0);
  1151. }
  1152. }
  1153. // RECEIVER의 서브 포트를 디폴트값으로 채운다.
  1154. public void Initialize_SubPort()
  1155. {
  1156. // 통신 보드와 메인보드가 통신하기 위한 통신보드용 Serial 포트 설정. (메인보드)
  1157. RECEIVER.Port4CommBoard.COMM_ID = 1;
  1158. // 포트 넘버 (COM1, COM2..)
  1159. RECEIVER.Port4CommBoard.PortNo = 1;
  1160. // 포트BPS (1200,9600,14400, 38400 ...)
  1161. RECEIVER.Port4CommBoard.BaudRate = 115200;
  1162. // 포트 데이터 비트 설정 (5,6,7,8)
  1163. RECEIVER.Port4CommBoard.DataBits = 8;
  1164. // 포트 스톱비트 설정 (1, 1.5, 2)
  1165. RECEIVER.Port4CommBoard.StopBits = COMM_STOPBIT.ONESTOPBIT;
  1166. // 포트 패리티 설정 (None, Even, Odd)
  1167. RECEIVER.Port4CommBoard.Parity = COMM_PARITY.NONE;
  1168. // 타임아웃 설정
  1169. RECEIVER.Port4CommBoard.TimeOut = _COMM_TIMEOUT;
  1170. // 통신 지연 설정
  1171. RECEIVER.Port4CommBoard.Delay = _COMM_DELAY;
  1172. // 표시용 전압변화값
  1173. RECEIVER.Port4CommBoard.Delta_Volt = _DELTA_VOLT;
  1174. // 재시도 횟수
  1175. RECEIVER.Port4CommBoard.Retry_Count = _RETRY_COUNT;
  1176. // 사용 여부
  1177. RECEIVER.Port4CommBoard.Use_Flag = true;
  1178. int temp = 1;
  1179. if (RECEIVER.MODEL == "IFC3300")
  1180. temp = 0;
  1181. for (int i = temp; i <= RECEIVER.COM_BOARD_MAX_NUM; i++) // cyim 2017.02.02 : IFC3300 에서는 통신보드, IO 보드 아이디가 0번이 존재한다
  1182. {
  1183. // 클래스 생성
  1184. _COM_BOARD COM_BOARD = new _COM_BOARD();
  1185. // ID
  1186. COM_BOARD.ID = RECEIVER.Set_SubKey(RECEIVER, string.Format(_Text.UI_TREE_COM_BOARD_KEY, i));
  1187. // 이름
  1188. COM_BOARD.Set_KEY_NAME(_Text.UI_TREE_COM_BOARD + i.ToString());
  1189. // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  1190. DataRowCollection DB_TABLE_TB_RECEIVER = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_RECEIVER", RECEIVER.ID));
  1191. if (DB_TABLE_TB_RECEIVER != null && DB_TABLE_TB_RECEIVER.Count != 0)
  1192. {
  1193. DataRow dr = DB_TABLE_TB_RECEIVER[0];
  1194. if (Util.NullToStr(dr["MODEL"]) == "IFC3300")
  1195. {
  1196. if (i == 0)
  1197. {
  1198. COM_BOARD.Set_Use_Flag("Y");
  1199. COM_BOARD.Set_CH1_Use("Y");
  1200. COM_BOARD.Set_CH2_Use("N");
  1201. COM_BOARD.Set_CH3_Use("N");
  1202. COM_BOARD.Set_CH4_Use("N");
  1203. }
  1204. else
  1205. {
  1206. COM_BOARD.Set_Use_Flag("N");
  1207. COM_BOARD.Set_CH1_Use("N");
  1208. COM_BOARD.Set_CH2_Use("N");
  1209. COM_BOARD.Set_CH3_Use("N");
  1210. COM_BOARD.Set_CH4_Use("N");
  1211. }
  1212. }
  1213. else
  1214. {
  1215. if (i == 15)
  1216. {
  1217. COM_BOARD.Set_CH1_Use("Y");
  1218. COM_BOARD.Set_CH2_Use("N");
  1219. COM_BOARD.Set_Use_Flag("Y");
  1220. }
  1221. else
  1222. {
  1223. COM_BOARD.Set_CH1_Use("N");
  1224. COM_BOARD.Set_CH2_Use("N");
  1225. COM_BOARD.Set_Use_Flag("N");
  1226. }
  1227. }
  1228. }
  1229. COM_BOARD.BOARD_ID = i;
  1230. COM_BOARD.BOARD_NAME = String.Format("통신보드 {0}", i);
  1231. // 해쉬 추가
  1232. if (_Hash.Add(RECEIVER.Hash_COM_BOARD, COM_BOARD.ID, COM_BOARD) == true)
  1233. {
  1234. RECEIVER.List_COM_BOARD_ID.Add(COM_BOARD.ID);
  1235. }
  1236. }
  1237. // IO 보드
  1238. RECEIVER.Port4IOBoard.COMM_ID = 3;
  1239. // 포트 넘버 (COM1, COM2..)
  1240. RECEIVER.Port4IOBoard.PortNo = 3;
  1241. // 포트BPS (1200,9600,14400, 38400 ...)
  1242. RECEIVER.Port4IOBoard.BaudRate = 115200;
  1243. // 포트 데이터 비트 설정 (5,6,7,8)
  1244. RECEIVER.Port4IOBoard.DataBits = 8;
  1245. // 포트 스톱비트 설정 (1, 1.5, 2)
  1246. RECEIVER.Port4IOBoard.StopBits = COMM_STOPBIT.ONESTOPBIT;
  1247. // 포트 패리티 설정 (None, Even, Odd)
  1248. RECEIVER.Port4IOBoard.Parity = COMM_PARITY.NONE;
  1249. // 타임아웃 설정
  1250. RECEIVER.Port4IOBoard.TimeOut = _COMM_TIMEOUT;
  1251. // 통신 지연 설정
  1252. RECEIVER.Port4IOBoard.Delay = _COMM_DELAY;
  1253. // 표시용 전압변화값
  1254. RECEIVER.Port4IOBoard.Delta_Volt = _DELTA_VOLT;
  1255. // 재시도 횟수
  1256. RECEIVER.Port4IOBoard.Retry_Count = _RETRY_COUNT;
  1257. // 사용 여부
  1258. RECEIVER.Port4IOBoard.Use_Flag = true;
  1259. int tmp = 1;
  1260. if (RECEIVER.MODEL == "IFC3300")
  1261. tmp = 0;
  1262. for (int i = tmp; i <= RECEIVER.IO_BOARD_MAX_NUM; i++) // cyim 2017.02.02 : IFC3300 에서는 통신보드, IO 보드 아이디가 0번이 존재한다
  1263. {
  1264. // 클래스 생성
  1265. _IO_BOARD IO_BOARD = new _IO_BOARD();
  1266. // ID
  1267. IO_BOARD.ID = RECEIVER.Set_SubKey(RECEIVER, string.Format(_Text.UI_TREE_IO_BOARD_KEY, i));
  1268. // 이름
  1269. IO_BOARD.Set_KEY_NAME(_Text.UI_TREE_IO_BOARD + i.ToString());
  1270. if (i == 15)
  1271. {
  1272. IO_BOARD.Set_Use_Flag("Y");
  1273. }
  1274. else
  1275. {
  1276. IO_BOARD.Set_Use_Flag("N");
  1277. }
  1278. IO_BOARD.BOARD_ID = i;
  1279. IO_BOARD.BOARD_NAME = String.Format("I/O 보드 {0}", i);
  1280. // 해쉬 추가
  1281. if (_Hash.Add(RECEIVER.Hash_IO_BOARD, IO_BOARD.ID, IO_BOARD) == true)
  1282. {
  1283. RECEIVER.List_IO_BOARD_ID.Add(IO_BOARD.ID);
  1284. }
  1285. }
  1286. // 키패드
  1287. RECEIVER.Port4KeyPAD.COMM_ID = 4;
  1288. // 포트 넘버 (COM1, COM2..)
  1289. RECEIVER.Port4KeyPAD.PortNo = 5; // cyim 기본값 변경 비상방송은 4->5
  1290. // 포트BPS (1200,9600,14400, 38400 ...)
  1291. RECEIVER.Port4KeyPAD.BaudRate = 115200;
  1292. // 포트 데이터 비트 설정 (5,6,7,8)
  1293. RECEIVER.Port4KeyPAD.DataBits = 8;
  1294. // 포트 스톱비트 설정 (1, 1.5, 2)
  1295. RECEIVER.Port4KeyPAD.StopBits = COMM_STOPBIT.ONESTOPBIT;
  1296. // 포트 패리티 설정 (None, Even, Odd)
  1297. RECEIVER.Port4KeyPAD.Parity = COMM_PARITY.NONE;
  1298. // 타임아웃 설정
  1299. RECEIVER.Port4KeyPAD.TimeOut = _COMM_TIMEOUT;
  1300. // 통신 지연 설정
  1301. RECEIVER.Port4KeyPAD.Delay = _COMM_DELAY;
  1302. // 표시용 전압변화값
  1303. RECEIVER.Port4KeyPAD.Delta_Volt = _DELTA_VOLT;
  1304. // 재시도 횟수
  1305. RECEIVER.Port4KeyPAD.Retry_Count = _RETRY_COUNT;
  1306. // 사용 여부
  1307. RECEIVER.Port4KeyPAD.Use_Flag = true;
  1308. _KEYPAD KEYPAD = new _KEYPAD();
  1309. // ID
  1310. KEYPAD.ID = RECEIVER.Set_SubKey(RECEIVER, string.Format(_Text.UI_TREE_KEYPAD_KEY, 1));
  1311. // 이름
  1312. KEYPAD.Set_KEY_NAME(_Text.UI_TREE_KEYPAD); // 오직 하나뿐
  1313. KEYPAD.Set_Use_Flag("Y"); // 사용 안함으로 세팅한다. // 재수정 2012.8.29
  1314. KEYPAD.BOARD_ID = 0;
  1315. KEYPAD.BOARD_NAME = "키패드";
  1316. RECEIVER.KEYPAD = KEYPAD;
  1317. // 비상방송
  1318. RECEIVER.Port4EmergencyBroadcast.COMM_ID = 5;
  1319. // 포트 넘버 (COM1, COM2..)
  1320. RECEIVER.Port4EmergencyBroadcast.PortNo = 4; // cyim 기본값 변경 비상방송은 5->4,
  1321. // 포트BPS (1200,9600,14400, 38400 ...)
  1322. RECEIVER.Port4EmergencyBroadcast.BaudRate = 9600;
  1323. // 포트 데이터 비트 설정 (5,6,7,8)
  1324. RECEIVER.Port4EmergencyBroadcast.DataBits = 8;
  1325. // 포트 스톱비트 설정 (1, 1.5, 2)
  1326. RECEIVER.Port4EmergencyBroadcast.StopBits = COMM_STOPBIT.ONESTOPBIT;
  1327. // 포트 패리티 설정 (None, Even, Odd)
  1328. RECEIVER.Port4EmergencyBroadcast.Parity = COMM_PARITY.NONE;
  1329. // 타임아웃 설정
  1330. RECEIVER.Port4EmergencyBroadcast.TimeOut = _COMM_TIMEOUT;
  1331. // 통신 지연 설정
  1332. RECEIVER.Port4EmergencyBroadcast.Delay = _COMM_DELAY;
  1333. // 표시용 전압변화값
  1334. RECEIVER.Port4EmergencyBroadcast.Delta_Volt = _DELTA_VOLT;
  1335. // 재시도 횟수
  1336. RECEIVER.Port4EmergencyBroadcast.Retry_Count = _RETRY_COUNT;
  1337. // 사용 여부
  1338. RECEIVER.Port4EmergencyBroadcast.Use_Flag = true;
  1339. _EMERGENCY_BROADCAST EMERGENCY_BROADCAST = new _EMERGENCY_BROADCAST();
  1340. // ID
  1341. EMERGENCY_BROADCAST.ID = RECEIVER.Set_SubKey(RECEIVER, string.Format(_Text.UI_TREE_EMERGENCY_BROADCAST_KEY, 1));
  1342. // 이름
  1343. EMERGENCY_BROADCAST.Set_KEY_NAME(_Text.UI_TREE_EMERGENCY_BROADCAST); // 오직 하나뿐
  1344. // 포트 넘버 (COM1, COM2..)
  1345. RECEIVER.EMERGENCY_BROADCAST = EMERGENCY_BROADCAST;
  1346. }
  1347. private void uiButton_cancel_Click(object sender, EventArgs e)
  1348. {
  1349. // 신규 추가 시에만
  1350. if (EditMode == false)
  1351. {
  1352. // 데이타베이스 경로 초기화
  1353. _Data.DB_FullPath = null;
  1354. // 프로세스 삭제
  1355. System.Diagnostics.Process[] mProcess = System.Diagnostics.Process.GetProcessesByName("fbserver");
  1356. foreach (System.Diagnostics.Process p in mProcess)
  1357. p.Kill();
  1358. System.Threading.Thread.Sleep(1000);
  1359. // 수신기 폴더 삭제
  1360. string ReiceiverFolderName = _Text.DEFAULT_FOLDER_RECEIVER_PREFIX + RECEIVER.ID;
  1361. _File.Delete_Folder(_Data.Project_Path, _Data.Project_Name + "\\" + ReiceiverFolderName);
  1362. }
  1363. Close();
  1364. }
  1365. }
  1366. }