frmControlMode_BigReceiver.cs 114 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Collections;
  9. using System.Threading;
  10. using System.IO;
  11. namespace FPER
  12. {
  13. public partial class frmControlMode_BigReceiver : Form
  14. {
  15. MDIParent mdi = null;
  16. LogFileCreate LFC = new LogFileCreate();
  17. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  18. CheckBox[] checkLoop0; // 64
  19. CheckBox[] checkLoop1;
  20. CheckBox[] checkLoop2;
  21. CheckBox[] checkLoop3;
  22. // cyim 2015.2.16 계통차단이후에 차단해제의 경우에 한해서 복구 실행하도록 한다
  23. bool[] Check_checkLoop0 = new bool[64];
  24. bool[] Check_checkLoop1 = new bool[64];
  25. bool[] Check_checkLoop2 = new bool[64];
  26. bool[] Check_checkLoop3 = new bool[64];
  27. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  28. // Loop2 와 Loop3 의 경우 1~8 아이디는 Dummy 다
  29. // LCH 2018.02.27 : 수정됨
  30. //CheckBox cb_COMM1_CH3Use = new CheckBox();
  31. //CheckBox cb_COMM2_CH3Use = new CheckBox();
  32. //CheckBox cb_COMM3_CH3Use = new CheckBox();
  33. //CheckBox cb_COMM4_CH3Use = new CheckBox();
  34. //CheckBox cb_COMM5_CH3Use = new CheckBox();
  35. //CheckBox cb_COMM6_CH3Use = new CheckBox();
  36. //CheckBox cb_COMM7_CH3Use = new CheckBox();
  37. //CheckBox cb_COMM8_CH3Use = new CheckBox();
  38. //CheckBox cb_COMM1_CH4Use = new CheckBox();
  39. //CheckBox cb_COMM2_CH4Use = new CheckBox();
  40. //CheckBox cb_COMM3_CH4Use = new CheckBox();
  41. //CheckBox cb_COMM4_CH4Use = new CheckBox();
  42. //CheckBox cb_COMM5_CH4Use = new CheckBox();
  43. //CheckBox cb_COMM6_CH4Use = new CheckBox();
  44. //CheckBox cb_COMM7_CH4Use = new CheckBox();
  45. //CheckBox cb_COMM8_CH4Use = new CheckBox();
  46. BoardTypeInfo[] brdinfos;
  47. delegate void deleFormInit();
  48. int selectRepNo = 0;
  49. //중계기 읽기를 진행하기 위해
  50. private Thread tRepeaterReadThread;
  51. private int tRepeaterReadThreadStatus = 0;
  52. public frmControlMode_BigReceiver()
  53. {
  54. InitializeComponent();
  55. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  56. Dummy_Init();
  57. // cyim 2013.7.12 디자인개선작업 : 제어 - 중계기차단
  58. this.button_LoopCut.BackgroundImage = (Image)Properties.Resources.탭메뉴버튼_주황_100_30;
  59. // cyim 2015.2.24 쓰기버튼 사용금지
  60. btnOutWrite.Text = null;
  61. btnOutWrite.Enabled = false;
  62. }
  63. int savBoardID = -1;
  64. int savLoop = -1;
  65. //중계기및 회로 설정정보
  66. RepeaterDeviceTypeInfo[] REP;
  67. RepeaterPointUnit[] REPDATA;
  68. public void Form_Init()
  69. {
  70. try
  71. {
  72. if (this.InvokeRequired)
  73. {
  74. deleFormInit d = new deleFormInit(Form_Init);
  75. this.Invoke(d, new object[] { });
  76. }
  77. else
  78. {
  79. Board_getData();
  80. Repeater_getData();
  81. }
  82. }
  83. catch (Exception ex)
  84. {
  85. Util.UErrorMessage(ex, 0, 0);
  86. }
  87. }
  88. public void Dummy_Init()
  89. {
  90. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  91. // Loop2 와 Loop3 의 경우 1~8 아이디는 Dummy 다
  92. // LCH 2018.02.27 : 수정됨
  93. //cb_COMM1_CH3Use.Name = "cb_COMM1_CH3Use";
  94. //cb_COMM2_CH3Use.Name = "cb_COMM2_CH3Use";
  95. //cb_COMM3_CH3Use.Name = "cb_COMM3_CH3Use";
  96. //cb_COMM4_CH3Use.Name = "cb_COMM4_CH3Use";
  97. //cb_COMM5_CH3Use.Name = "cb_COMM5_CH3Use";
  98. //cb_COMM6_CH3Use.Name = "cb_COMM6_CH3Use";
  99. //cb_COMM7_CH3Use.Name = "cb_COMM7_CH3Use";
  100. //cb_COMM8_CH3Use.Name = "cb_COMM8_CH3Use";
  101. //cb_COMM1_CH4Use.Name = "cb_COMM1_CH4Use";
  102. //cb_COMM2_CH4Use.Name = "cb_COMM2_CH4Use";
  103. //cb_COMM3_CH4Use.Name = "cb_COMM3_CH4Use";
  104. //cb_COMM4_CH4Use.Name = "cb_COMM4_CH4Use";
  105. //cb_COMM5_CH4Use.Name = "cb_COMM5_CH4Use";
  106. //cb_COMM6_CH4Use.Name = "cb_COMM6_CH4Use";
  107. //cb_COMM7_CH4Use.Name = "cb_COMM7_CH4Use";
  108. //cb_COMM8_CH4Use.Name = "cb_COMM8_CH4Use";
  109. //this.Controls.Add(cb_COMM1_CH3Use);
  110. //this.Controls.Add(cb_COMM2_CH3Use);
  111. //this.Controls.Add(cb_COMM3_CH3Use);
  112. //this.Controls.Add(cb_COMM4_CH3Use);
  113. //this.Controls.Add(cb_COMM5_CH3Use);
  114. //this.Controls.Add(cb_COMM6_CH3Use);
  115. //this.Controls.Add(cb_COMM7_CH3Use);
  116. //this.Controls.Add(cb_COMM8_CH3Use);
  117. //this.Controls.Add(cb_COMM1_CH4Use);
  118. //this.Controls.Add(cb_COMM2_CH4Use);
  119. //this.Controls.Add(cb_COMM3_CH4Use);
  120. //this.Controls.Add(cb_COMM4_CH4Use);
  121. //this.Controls.Add(cb_COMM5_CH4Use);
  122. //this.Controls.Add(cb_COMM6_CH4Use);
  123. //this.Controls.Add(cb_COMM7_CH4Use);
  124. //this.Controls.Add(cb_COMM8_CH4Use);
  125. }
  126. //판넬의 checkbox를 체크및 해제한다.
  127. private void checkPanelLoad(int BoardID, Boolean Loop0CutFlag, Boolean Loop1CutFlag, Boolean Loop2CutFlag, Boolean Loop3CutFlag)
  128. {
  129. try
  130. {
  131. // cyim 2016.10.31 : 대용량 수신기용 UI 변경 : 1~8 은 통신보드 아이디
  132. // LCH 2018.02.27 : 수정됨
  133. //if (BoardID > 0 && BoardID < 9)
  134. //{
  135. // this.checkLoop0[BoardID - 1].Checked = Loop0CutFlag;
  136. // this.checkLoop1[BoardID - 1].Checked = Loop1CutFlag;
  137. //}
  138. //else
  139. //{
  140. // this.checkLoop0[BoardID - 1].Checked = Loop0CutFlag;
  141. // this.checkLoop1[BoardID - 1].Checked = Loop1CutFlag;
  142. // this.checkLoop2[BoardID - 1].Checked = Loop2CutFlag;
  143. // this.checkLoop3[BoardID - 1].Checked = Loop3CutFlag;
  144. //}
  145. if (BoardID > 0)
  146. {
  147. this.checkLoop0[BoardID - 1].Checked = Loop0CutFlag;
  148. this.checkLoop1[BoardID - 1].Checked = Loop1CutFlag;
  149. this.checkLoop2[BoardID - 1].Checked = Loop2CutFlag;
  150. this.checkLoop3[BoardID - 1].Checked = Loop3CutFlag;
  151. }
  152. }
  153. catch (Exception ex)
  154. {
  155. Util.UErrorMessage(ex, 0, 0);
  156. }
  157. }
  158. private void frmControlMode_Load(object sender, EventArgs e)
  159. {
  160. // cyim 2013.8.1 : 더블버퍼링 적용
  161. SetStyle(ControlStyles.UserPaint, true);
  162. //this.UpdateStyles();
  163. SetStyle(ControlStyles.AllPaintingInWmPaint, true);
  164. //this.UpdateStyles();
  165. SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
  166. this.UpdateStyles();
  167. try
  168. {
  169. mdi = (MDIParent)this.MdiParent;
  170. txtThisReceiverID.Text = string.Format("{0:00}", mdi.myReceiverID);
  171. txtThisReceiverID2.Text = string.Format("{0:00}", mdi.myReceiverID);
  172. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  173. checkLoop0 = new CheckBox[64] {
  174. cb_COMM1_CH1Use , cb_COMM2_CH1Use , cb_COMM3_CH1Use , cb_COMM4_CH1Use , cb_COMM5_CH1Use , cb_COMM6_CH1Use , cb_COMM7_CH1Use , cb_COMM8_CH1Use , cb_COMM9_CH1Use , cb_COMM10_CH1Use , cb_COMM11_CH1Use , cb_COMM12_CH1Use , cb_COMM13_CH1Use , cb_COMM14_CH1Use , cb_COMM15_CH1Use , cb_COMM16_CH1Use ,
  175. cb_COMM17_CH1Use , cb_COMM18_CH1Use , cb_COMM19_CH1Use , cb_COMM20_CH1Use , cb_COMM21_CH1Use , cb_COMM22_CH1Use , cb_COMM23_CH1Use , cb_COMM24_CH1Use , cb_COMM25_CH1Use , cb_COMM26_CH1Use , cb_COMM27_CH1Use , cb_COMM28_CH1Use , cb_COMM29_CH1Use , cb_COMM30_CH1Use , cb_COMM31_CH1Use , cb_COMM32_CH1Use ,
  176. cb_COMM33_CH1Use , cb_COMM34_CH1Use , cb_COMM35_CH1Use , cb_COMM36_CH1Use , cb_COMM37_CH1Use , cb_COMM38_CH1Use , cb_COMM39_CH1Use , cb_COMM40_CH1Use , cb_COMM41_CH1Use , cb_COMM42_CH1Use , cb_COMM43_CH1Use , cb_COMM44_CH1Use , cb_COMM45_CH1Use , cb_COMM46_CH1Use , cb_COMM47_CH1Use , cb_COMM48_CH1Use ,
  177. cb_COMM49_CH1Use , cb_COMM50_CH1Use , cb_COMM51_CH1Use , cb_COMM52_CH1Use , cb_COMM53_CH1Use , cb_COMM54_CH1Use , cb_COMM55_CH1Use , cb_COMM56_CH1Use , cb_COMM57_CH1Use , cb_COMM58_CH1Use , cb_COMM59_CH1Use , cb_COMM60_CH1Use , cb_COMM61_CH1Use , cb_COMM62_CH1Use , cb_COMM63_CH1Use , cb_COMM64_CH1Use
  178. };
  179. checkLoop1 = new CheckBox[64]{
  180. cb_COMM1_CH2Use , cb_COMM2_CH2Use , cb_COMM3_CH2Use , cb_COMM4_CH2Use , cb_COMM5_CH2Use , cb_COMM6_CH2Use , cb_COMM7_CH2Use , cb_COMM8_CH2Use , cb_COMM9_CH2Use , cb_COMM10_CH2Use , cb_COMM11_CH2Use , cb_COMM12_CH2Use , cb_COMM13_CH2Use , cb_COMM14_CH2Use , cb_COMM15_CH2Use , cb_COMM16_CH2Use ,
  181. cb_COMM17_CH2Use , cb_COMM18_CH2Use , cb_COMM19_CH2Use , cb_COMM20_CH2Use , cb_COMM21_CH2Use , cb_COMM22_CH2Use , cb_COMM23_CH2Use , cb_COMM24_CH2Use , cb_COMM25_CH2Use , cb_COMM26_CH2Use , cb_COMM27_CH2Use , cb_COMM28_CH2Use , cb_COMM29_CH2Use , cb_COMM30_CH2Use , cb_COMM31_CH2Use , cb_COMM32_CH2Use ,
  182. cb_COMM33_CH2Use , cb_COMM34_CH2Use , cb_COMM35_CH2Use , cb_COMM36_CH2Use , cb_COMM37_CH2Use , cb_COMM38_CH2Use , cb_COMM39_CH2Use , cb_COMM40_CH2Use , cb_COMM41_CH2Use , cb_COMM42_CH2Use , cb_COMM43_CH2Use , cb_COMM44_CH2Use , cb_COMM45_CH2Use , cb_COMM46_CH2Use , cb_COMM47_CH2Use , cb_COMM48_CH2Use ,
  183. cb_COMM49_CH2Use , cb_COMM50_CH2Use , cb_COMM51_CH2Use , cb_COMM52_CH2Use , cb_COMM53_CH2Use , cb_COMM54_CH2Use , cb_COMM55_CH2Use , cb_COMM56_CH2Use , cb_COMM57_CH2Use , cb_COMM58_CH2Use , cb_COMM59_CH2Use , cb_COMM60_CH2Use , cb_COMM61_CH2Use , cb_COMM62_CH2Use , cb_COMM63_CH2Use , cb_COMM64_CH2Use
  184. };
  185. checkLoop2 = new CheckBox[64]{
  186. cb_COMM1_CH3Use , cb_COMM2_CH3Use , cb_COMM3_CH3Use , cb_COMM4_CH3Use , cb_COMM5_CH3Use , cb_COMM6_CH3Use , cb_COMM7_CH3Use , cb_COMM8_CH3Use , cb_COMM9_CH3Use , cb_COMM10_CH3Use , cb_COMM11_CH3Use , cb_COMM12_CH3Use , cb_COMM13_CH3Use , cb_COMM14_CH3Use , cb_COMM15_CH3Use , cb_COMM16_CH3Use ,
  187. cb_COMM17_CH3Use , cb_COMM18_CH3Use , cb_COMM19_CH3Use , cb_COMM20_CH3Use , cb_COMM21_CH3Use , cb_COMM22_CH3Use , cb_COMM23_CH3Use , cb_COMM24_CH3Use , cb_COMM25_CH3Use , cb_COMM26_CH3Use , cb_COMM27_CH3Use , cb_COMM28_CH3Use , cb_COMM29_CH3Use , cb_COMM30_CH3Use , cb_COMM31_CH3Use , cb_COMM32_CH3Use ,
  188. cb_COMM33_CH3Use , cb_COMM34_CH3Use , cb_COMM35_CH3Use , cb_COMM36_CH3Use , cb_COMM37_CH3Use , cb_COMM38_CH3Use , cb_COMM39_CH3Use , cb_COMM40_CH3Use , cb_COMM41_CH3Use , cb_COMM42_CH3Use , cb_COMM43_CH3Use , cb_COMM44_CH3Use , cb_COMM45_CH3Use , cb_COMM46_CH3Use , cb_COMM47_CH3Use , cb_COMM48_CH3Use ,
  189. cb_COMM49_CH3Use , cb_COMM50_CH3Use , cb_COMM51_CH3Use , cb_COMM52_CH3Use , cb_COMM53_CH3Use , cb_COMM54_CH3Use , cb_COMM55_CH3Use , cb_COMM56_CH3Use , cb_COMM57_CH3Use , cb_COMM58_CH3Use , cb_COMM59_CH3Use , cb_COMM60_CH3Use , cb_COMM61_CH3Use , cb_COMM62_CH3Use , cb_COMM63_CH3Use , cb_COMM64_CH3Use
  190. };
  191. checkLoop3 = new CheckBox[64]{
  192. cb_COMM1_CH4Use , cb_COMM2_CH4Use , cb_COMM3_CH4Use , cb_COMM4_CH4Use , cb_COMM5_CH4Use , cb_COMM6_CH4Use , cb_COMM7_CH4Use , cb_COMM8_CH4Use , cb_COMM9_CH4Use , cb_COMM10_CH4Use , cb_COMM11_CH4Use , cb_COMM12_CH4Use , cb_COMM13_CH4Use , cb_COMM14_CH4Use , cb_COMM15_CH4Use , cb_COMM16_CH4Use ,
  193. cb_COMM17_CH4Use , cb_COMM18_CH4Use , cb_COMM19_CH4Use , cb_COMM20_CH4Use , cb_COMM21_CH4Use , cb_COMM22_CH4Use , cb_COMM23_CH4Use , cb_COMM24_CH4Use , cb_COMM25_CH4Use , cb_COMM26_CH4Use , cb_COMM27_CH4Use , cb_COMM28_CH4Use , cb_COMM29_CH4Use , cb_COMM30_CH4Use , cb_COMM31_CH4Use , cb_COMM32_CH4Use ,
  194. cb_COMM33_CH4Use , cb_COMM34_CH4Use , cb_COMM35_CH4Use , cb_COMM36_CH4Use , cb_COMM37_CH4Use , cb_COMM38_CH4Use , cb_COMM39_CH4Use , cb_COMM40_CH4Use , cb_COMM41_CH4Use , cb_COMM42_CH4Use , cb_COMM43_CH4Use , cb_COMM44_CH4Use , cb_COMM45_CH4Use , cb_COMM46_CH4Use , cb_COMM47_CH4Use , cb_COMM48_CH4Use ,
  195. cb_COMM49_CH4Use , cb_COMM50_CH4Use , cb_COMM51_CH4Use , cb_COMM52_CH4Use , cb_COMM53_CH4Use , cb_COMM54_CH4Use , cb_COMM55_CH4Use , cb_COMM56_CH4Use , cb_COMM57_CH4Use , cb_COMM58_CH4Use , cb_COMM59_CH4Use , cb_COMM60_CH4Use , cb_COMM61_CH4Use , cb_COMM62_CH4Use , cb_COMM63_CH4Use , cb_COMM64_CH4Use
  196. };
  197. ReceiverTypeInfo Receiverinfo = this.mdi.ui.MyReceiverTypeInfo; //수신기설정
  198. this.brdinfos = Receiverinfo.MyBoardType; //통신보드설정값
  199. Board_getData();
  200. Repeater_getData();
  201. // cyim 2015.2.16 계통차단이후에 차단해제의 경우에 한해서 복구 실행하도록 한다
  202. Save_LineCutStatus();
  203. Reg_EventHandler_ChangeChecked();
  204. }
  205. catch (Exception ex)
  206. {
  207. Util.UErrorMessage(ex, 0, 0);
  208. }
  209. }
  210. private void frmControlMode_Activated(object sender, EventArgs e)
  211. {
  212. try
  213. {
  214. this.mdi.SelectMenuIndex = 6;
  215. }
  216. catch (Exception ex)
  217. {
  218. Util.UErrorMessage(ex, 0, 0);
  219. }
  220. }
  221. private void frmControlMode_Disposed(object sender, EventArgs e)
  222. {
  223. try
  224. {
  225. // cyim 2015.2.16 계통차단이후에 차단해제의 경우에 한해서 복구 실행하도록 한다
  226. Del_EventHandler_ChangeChecked();
  227. this.mdi.SelectMenuIndex = 0;
  228. }
  229. catch (Exception ex)
  230. {
  231. Util.UErrorMessage(ex, 0, 0);
  232. }
  233. }
  234. /********************************************************************
  235. * 통신보드 데이터 불러오기
  236. *********************************************************************/
  237. private void Board_getData()
  238. {
  239. try
  240. {
  241. if (this.InvokeRequired)
  242. {
  243. deleFormInit d = new deleFormInit(Board_getData);
  244. this.Invoke(d, new object[] { });
  245. }
  246. else
  247. {
  248. // cyim 2016.10.31 : 대용량 수신기용 UI 변경 : 1~16 -> 1~64
  249. for (int i = 1; i <= 64; i++)
  250. {
  251. //Panel panelBoard = (Panel)Util.FineControl(tabPage_Board, "panelBoard" + i);
  252. //UIImageChange(false, panelBoard);
  253. //this.checkLoop0[i - 1].Visible = false;
  254. //this.checkLoop1[i - 1].Visible = false;
  255. //this.checkLoop2[i - 1].Visible = false;
  256. //this.checkLoop3[i - 1].Visible = false;
  257. // cyim 2016.10.31 : 대용량 수신기용 UI 변경 : 상위 주석은 차후 삭제
  258. Label lableBoard = (Label)Util.FineControl(tabPage_Board, "lbl_COMM" + i);
  259. UIImageChange(false, lableBoard);
  260. this.checkLoop0[i - 1].Enabled = false;
  261. this.checkLoop1[i - 1].Enabled = false;
  262. this.checkLoop2[i - 1].Enabled = false;
  263. this.checkLoop3[i - 1].Enabled = false;
  264. }
  265. DacBoardConfig dacBoardConfig = new DacBoardConfig(mdi.myReceiverID); // cyim 2015.7.30 데이타베이스 접속 루틴 변경
  266. DataTable dt = dacBoardConfig.Board_Select(mdi.myReceiverID, 0, null);
  267. if (dt.Rows.Count > 0)
  268. {
  269. foreach (DataRow dr in dt.Rows)
  270. {
  271. int BoardId = int.Parse(Convert.ToString(dr[0]));
  272. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  273. Boolean Loop0CutFlag = Convert.ToString(dr["LOOP0_CUT_FLAG"]) == "Y" ? true : false;
  274. Boolean Loop1CutFlag = Convert.ToString(dr["LOOP1_CUT_FLAG"]) == "Y" ? true : false;
  275. Boolean Loop2CutFlag = Convert.ToString(Util.NullToStr(dr["LOOP2_CUT_FLAG"])) == "Y" ? true : false;
  276. Boolean Loop3CutFlag = Convert.ToString(Util.NullToStr(dr["LOOP3_CUT_FLAG"])) == "Y" ? true : false;
  277. Boolean Loop0UseFlag = Convert.ToString(dr["LOOP0_USE_FLAG"]) == "Y" ? true : false;
  278. Boolean Loop1UseFlag = Convert.ToString(dr["LOOP1_USE_FLAG"]) == "Y" ? true : false;
  279. Boolean Loop2UseFlag = Convert.ToString(Util.NullToStr(dr["LOOP2_USE_FLAG"])) == "Y" ? true : false;
  280. Boolean Loop3UseFlag = Convert.ToString(Util.NullToStr(dr["LOOP3_USE_FLAG"])) == "Y" ? true : false;
  281. Boolean UseFlag = Convert.ToString(dr["USE_FLAG"]) == "Y" ? true : false;
  282. // LCH 2018.02.27 : 수정됨
  283. if (BoardId > 0)
  284. {
  285. if (UseFlag)
  286. {
  287. //if (Loop0UseFlag) this.checkLoop0[BoardId - 1].Visible = true;
  288. //if (Loop1UseFlag) this.checkLoop1[BoardId - 1].Visible = true;
  289. //if (Loop2UseFlag) this.checkLoop2[BoardId - 1].Visible = true;
  290. //if (Loop3UseFlag) this.checkLoop3[BoardId - 1].Visible = true;
  291. // cyim 2016.10.31 : 대용량 수신기용 UI 변경 : 상위 주석은 차후 삭제
  292. if (Loop0UseFlag) this.checkLoop0[BoardId - 1].Enabled = true;
  293. if (Loop1UseFlag) this.checkLoop1[BoardId - 1].Enabled = true;
  294. if (Loop2UseFlag) this.checkLoop2[BoardId - 1].Enabled = true;
  295. if (Loop3UseFlag) this.checkLoop3[BoardId - 1].Enabled = true;
  296. }
  297. //Panel panelBoard = (Panel)Util.FineControl(tabPage_Board, "panelBoard" + BoardId);
  298. //UIImageChange(UseFlag, panelBoard);
  299. //checkPanelLoad(BoardId, Loop0CutFlag, Loop1CutFlag);
  300. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  301. Label lableBoard = (Label)Util.FineControl(tabPage_Board, "lbl_COMM" + BoardId);
  302. UIImageChange(UseFlag, lableBoard);
  303. checkPanelLoad(BoardId, Loop0CutFlag, Loop1CutFlag, Loop2CutFlag, Loop3CutFlag);
  304. }
  305. }
  306. }
  307. }
  308. }
  309. catch (Exception ex)
  310. {
  311. Util.UErrorMessage(ex, 0, 0);
  312. }
  313. }
  314. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  315. private void UIImageChange(bool chkUse, Label p)
  316. {
  317. try
  318. {
  319. if (chkUse == false) p.BackColor = Color.Gray;
  320. else p.BackColor = Color.Transparent;
  321. }
  322. catch (Exception ex)
  323. {
  324. Util.UErrorMessage(ex, 0, 0);
  325. }
  326. }
  327. //사용여부 체크하면 중계반 이미지 변경 및 UI입력모드를 바꿔준다.
  328. private void UIImageChange(bool chkUse, Panel p)
  329. {
  330. try
  331. {
  332. if (chkUse)
  333. {
  334. // cyim 2013.8.1 디자인개선작업 : 제어 - 계통차단 ImgLstBoardUseFlag->imageList_BoardUseFlag
  335. p.BackgroundImage = imageList_BoardUseFlag.Images[0];
  336. }
  337. else
  338. {
  339. // cyim 2013.8.1 디자인개선작업 : 제어 - 계통차단 ImgLstBoardUseFlag->imageList_BoardUseFlag
  340. p.BackgroundImage = imageList_BoardUseFlag.Images[1];
  341. }
  342. }
  343. catch (Exception ex)
  344. {
  345. Util.UErrorMessage(ex, 0, 0);
  346. }
  347. }
  348. private void btnBoardSave_Click(object sender, EventArgs e)
  349. {
  350. // cyim 2013.8.5 제어화면 버튼 포커스 조절
  351. this.panel_Menu.Focus();
  352. try
  353. {
  354. // cyim 2015.2.16 차단명령을 내리겠습니까 팝업창출력후 취소하면 진행되버리는 문제 수정
  355. if (MessageBox.Show("수신기에 차단명령을 내리시겠습니까?", Application.ProductName, MessageBoxButtons.YesNo) == DialogResult.Yes)
  356. {
  357. DacBoardConfig dacBoardConfig = new DacBoardConfig(mdi.myReceiverID); // cyim 2015.7.30 데이타베이스 접속 루틴 변경
  358. int chkChangeCount = 0;
  359. // cyim 2016.10.24 : 통신보드 15번 -> 0번카드로 대체 (통신보드는 최대 8개, 중계반은 최대 60개 아이디는 9 ~ 64까지 설정이 가능하다)
  360. for (int i = 0; i < 64; i++)
  361. // cyim 2013.8.2 통신보드 16은 사용안함 16->15
  362. //for (int i = 0; i < 15; i++)
  363. {
  364. int BoardId = i + 1;
  365. Boolean Loop0CutFlag = false;
  366. Boolean Loop1CutFlag = false;
  367. Boolean Loop2CutFlag = false;
  368. Boolean Loop3CutFlag = false;
  369. //Panel pan = (Panel)Util.FineControl(tabPage_Board, "panelBoard" + Convert.ToString(BoardId));
  370. //CheckBox checkLoop0 = (CheckBox)Util.FineControl(pan, "checkLoop0Board" + Convert.ToString(BoardId));
  371. //CheckBox checkLoop1 = (CheckBox)Util.FineControl(pan, "checkLoop1Board" + Convert.ToString(BoardId));
  372. // LCH 2018.02.27 : 수정됨
  373. CheckBox checkLoop0 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH1Use", BoardId));
  374. CheckBox checkLoop1 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH2Use", BoardId));
  375. CheckBox checkLoop2 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH3Use", BoardId));
  376. CheckBox checkLoop3 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH4Use", BoardId));
  377. if (checkLoop0 != null && checkLoop0.Enabled) // Visible -> Enabled
  378. {
  379. Loop0CutFlag = checkLoop0.Checked;
  380. this.brdinfos[i].Loop0CutFlagChange = Loop0CutFlag;
  381. if (this.brdinfos[i].Loop0CutFlagChange) chkChangeCount++;
  382. }
  383. if (checkLoop1 != null && checkLoop1.Enabled) // Visible -> Enabled
  384. {
  385. Loop1CutFlag = checkLoop1.Checked;
  386. this.brdinfos[i].Loop1CutFlagChange = Loop1CutFlag;
  387. if (this.brdinfos[i].Loop1CutFlagChange) chkChangeCount++;
  388. }
  389. if (checkLoop2 != null && checkLoop2.Enabled) // Visible -> Enabled
  390. {
  391. Loop2CutFlag = checkLoop2.Checked;
  392. this.brdinfos[i].Loop2CutFlagChange = Loop2CutFlag;
  393. if (this.brdinfos[i].Loop2CutFlagChange) chkChangeCount++;
  394. }
  395. if (checkLoop3 != null && checkLoop3.Enabled) // Visible -> Enabled
  396. {
  397. Loop3CutFlag = checkLoop3.Checked;
  398. this.brdinfos[i].Loop3CutFlagChange = Loop3CutFlag;
  399. if (this.brdinfos[i].Loop3CutFlagChange) chkChangeCount++;
  400. }
  401. //DB에 자료저장
  402. dacBoardConfig.Board_Cut_Update(mdi.myReceiverID, BoardId, Loop0CutFlag ? "Y" : "N", Loop1CutFlag ? "Y" : "N", Loop2CutFlag ? "Y" : "N", Loop3CutFlag ? "Y" : "N");
  403. }
  404. // cyim 2015.2.16 계통차단이후에 차단해제의 경우에 한해서 복구 실행하도록 한다
  405. bool RecoverExcuteEnable = false;
  406. if (chkChangeCount > 0) // 여기서 0이 들어올 확률이 있는가?.........................................................
  407. {
  408. if (Check_Change() == true)
  409. {
  410. LFC.Log("타입: 수신기 조작 로그, 메세지: 차단-계통차단 해제");
  411. }
  412. else
  413. {
  414. LFC.Log("타입: 수신기 조작 로그, 메세지: 차단-계통차단 적용");
  415. }
  416. // cyim 2015.2.17 적용하기 버튼 누르자마자 DB 에 반영되버리는 문제 수정 -> 상위에서 묻도록 함
  417. //if (MessageBox.Show("수신기에 차단명령을 내리시겠습니까?", Application.ProductName, MessageBoxButtons.YesNo) == DialogResult.Yes)
  418. {
  419. this.Cursor = Cursors.WaitCursor;
  420. /***************************************************************/
  421. /* 통신보드 차단명령 */
  422. /***************************************************************/
  423. frmProgress frm = new frmProgress(mdi); // cyim 2016.12.07 : 수신기 모델별 내부 로직 변경
  424. //중계기 설정 데이터를 CmdInfo에 넣어준다..
  425. CmdInfo cmd = new CmdInfo(prt_cmd_define.read_command_status, mdi.myReceiverID, 1, 0, 0, null);
  426. cmd.CommandType = "DC";
  427. cmd.ApplyRange = "L";
  428. cmd.CommandData = this.brdinfos;
  429. frm.Commandinfo = cmd;
  430. frm.ui = this.mdi.ui;
  431. frm.ShowDialog();
  432. /**************************************************************/
  433. this.Cursor = Cursors.Default;
  434. // cyim 2015.2.16 계통차단이후에 차단해제의 경우에 한해서 복구 실행하도록 한다
  435. RecoverExcuteEnable = true;
  436. }
  437. }
  438. // cyim 2013.8.5 화면갱신전 대기화면 팝업창 출력
  439. mdi.Popup.CommonPopupShow(this); // cyim 2015.8.4 수신반을 위한 static 클래스 정리
  440. // cyim 2013.9.23 화면갱신코드 추가
  441. this.Update();
  442. //수신기설정및차단카운트 다시 계산
  443. this.mdi.ui.ReceiverDBRead();
  444. // cyim 2013.8.5 화면갱신전 대기화면 팝업창 출력
  445. mdi.Popup.CommonPopupClose(this); // cyim 2015.8.4 수신반을 위한 static 클래스 정리
  446. // cyim 2013.9.26 중계기차단 보완
  447. // UI 갱신
  448. Repeater_getData();
  449. // cyim 2015.2.16 계통차단이후에 차단해제의 경우에 한해서 복구 실행하도록 한다
  450. if (RecoverExcuteEnable == true)
  451. {
  452. if (Check_Change() == true)
  453. {
  454. mdi.FireReset_Process();
  455. mdi.socketUI.ReceiverDemonReset();
  456. }
  457. }
  458. this.label_InfoApplyComment.Visible = false;
  459. // 현재 상태를 저장해둔다
  460. Save_LineCutStatus();
  461. }
  462. }
  463. catch (Exception ex)
  464. {
  465. Util.UErrorMessage(ex, 0, 0);
  466. //MessageBox.Show(ex.Message, Application.ProductName);
  467. //MessageBox.Show(string.Format("[{0}]\r\n{1}", ex.Message, ex.StackTrace), Application.ProductName);
  468. }
  469. }
  470. //
  471. // cyim 2015.2.16 계통차단이후에 차단해제의 경우에 한해서 복구 실행하도록 한다
  472. //
  473. // 현재상태가 변경되었는지 체크한다
  474. private bool Check_Change()
  475. {
  476. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  477. for (int i = 1; i <= 64; i++)
  478. {
  479. // CheckBox uCheckBoxLoop0 = (CheckBox)Util.FineControl(tabPage_Board, "checkLoop0Board" + i);
  480. // CheckBox uCheckBoxLoop1 = (CheckBox)Util.FineControl(tabPage_Board, "checkLoop1Board" + i);
  481. CheckBox uCheckBoxLoop0 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH1Use", i));
  482. CheckBox uCheckBoxLoop1 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH2Use", i));
  483. CheckBox uCheckBoxLoop2 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH3Use", i));
  484. CheckBox uCheckBoxLoop3 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH4Use", i));
  485. // 1개라도 기존의 값에서 차단해제로 변경되었는 경우에는 무조건 true 반환
  486. if (this.checkLoop0[i - 1].Enabled == true // Visible -> Enabled
  487. && (uCheckBoxLoop0.Checked != Check_checkLoop0[i - 1]) && uCheckBoxLoop0.Checked == false)
  488. return true;
  489. if (this.checkLoop1[i - 1].Enabled == true // Visible -> Enabled
  490. && (uCheckBoxLoop1.Checked != Check_checkLoop1[i - 1]) && uCheckBoxLoop1.Checked == false)
  491. return true;
  492. if (this.checkLoop2[i - 1].Enabled == true // Visible -> Enabled
  493. && (uCheckBoxLoop2.Checked != Check_checkLoop2[i - 1]) && uCheckBoxLoop2.Checked == false)
  494. return true;
  495. if (this.checkLoop3[i - 1].Enabled == true // Visible -> Enabled
  496. && (uCheckBoxLoop3.Checked != Check_checkLoop3[i - 1]) && uCheckBoxLoop3.Checked == false)
  497. return true;
  498. }
  499. return false;
  500. }
  501. // 화면 처음 시작 혹은 적용하기 누른후에 동작하도록 한다
  502. private void Save_LineCutStatus()
  503. {
  504. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  505. for (int i = 1; i <= 64; i++)
  506. {
  507. //CheckBox uCheckBoxLoop0 = (CheckBox)Util.FineControl(tabPage_Board, "checkLoop0Board" + i);
  508. //CheckBox uCheckBoxLoop1 = (CheckBox)Util.FineControl(tabPage_Board, "checkLoop1Board" + i);
  509. CheckBox uCheckBoxLoop0 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH1Use", i));
  510. CheckBox uCheckBoxLoop1 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH2Use", i));
  511. CheckBox uCheckBoxLoop2 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH3Use", i));
  512. CheckBox uCheckBoxLoop3 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH4Use", i));
  513. Check_checkLoop0[i - 1] = uCheckBoxLoop0.Checked;
  514. Check_checkLoop1[i - 1] = uCheckBoxLoop1.Checked;
  515. Check_checkLoop2[i - 1] = uCheckBoxLoop2.Checked;
  516. Check_checkLoop3[i - 1] = uCheckBoxLoop3.Checked;
  517. }
  518. }
  519. // 값이 변경되는 경우의 이벤트를 일괄적으로 등록한다 (주의할점 체크박스가 셋팅이 완료된후에 이벤트를 등록해야한다)
  520. private void Reg_EventHandler_ChangeChecked()
  521. {
  522. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  523. for (int i = 1; i <= 64; i++)
  524. {
  525. //CheckBox uCheckBoxLoop0 = (CheckBox)Util.FineControl(tabPage_Board, "checkLoop0Board" + i);
  526. //CheckBox uCheckBoxLoop1 = (CheckBox)Util.FineControl(tabPage_Board, "checkLoop1Board" + i);
  527. CheckBox uCheckBoxLoop0 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH1Use", i));
  528. CheckBox uCheckBoxLoop1 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH2Use", i));
  529. CheckBox uCheckBoxLoop2 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH3Use", i));
  530. CheckBox uCheckBoxLoop3 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH4Use", i));
  531. uCheckBoxLoop0.CheckStateChanged += new EventHandler(uCheckBoxLoop_CheckStateChanged);
  532. uCheckBoxLoop1.CheckStateChanged += new EventHandler(uCheckBoxLoop_CheckStateChanged);
  533. uCheckBoxLoop2.CheckStateChanged += new EventHandler(uCheckBoxLoop_CheckStateChanged);
  534. uCheckBoxLoop3.CheckStateChanged += new EventHandler(uCheckBoxLoop_CheckStateChanged);
  535. }
  536. }
  537. // 값이 변경되는 경우의 이벤트를 일괄적으로 등록한다
  538. private void Del_EventHandler_ChangeChecked()
  539. {
  540. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  541. for (int i = 1; i <= 64; i++)
  542. {
  543. //CheckBox uCheckBoxLoop0 = (CheckBox)Util.FineControl(tabPage_Board, "checkLoop0Board" + i);
  544. //CheckBox uCheckBoxLoop1 = (CheckBox)Util.FineControl(tabPage_Board, "checkLoop1Board" + i);
  545. CheckBox uCheckBoxLoop0 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH1Use", i));
  546. CheckBox uCheckBoxLoop1 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH2Use", i));
  547. CheckBox uCheckBoxLoop2 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH3Use", i));
  548. CheckBox uCheckBoxLoop3 = (CheckBox)Util.FineControl(tabPage_Board, string.Format("cb_COMM{0}_CH4Use", i));
  549. uCheckBoxLoop0.CheckStateChanged -= new EventHandler(uCheckBoxLoop_CheckStateChanged);
  550. uCheckBoxLoop1.CheckStateChanged -= new EventHandler(uCheckBoxLoop_CheckStateChanged);
  551. uCheckBoxLoop2.CheckStateChanged -= new EventHandler(uCheckBoxLoop_CheckStateChanged);
  552. uCheckBoxLoop3.CheckStateChanged -= new EventHandler(uCheckBoxLoop_CheckStateChanged);
  553. }
  554. }
  555. private void uCheckBoxLoop_CheckStateChanged(object sender, EventArgs e)
  556. {
  557. if (Check_Change() == true)
  558. this.label_InfoApplyComment.Visible = true;
  559. else
  560. this.label_InfoApplyComment.Visible = false;
  561. }
  562. private void btnWinClose_Click(object sender, EventArgs e)
  563. {
  564. this.Close();
  565. }
  566. private void btnInputOpen_Click(object sender, EventArgs e)
  567. {
  568. try
  569. {
  570. InputIDVo vo = new InputIDVo();
  571. vo.ReceiverID = int.Parse(txtThisReceiverID2.Text);
  572. vo.CommID = 1;
  573. vo.BoardID = Util.StrToInt(txtBoardID.Text, 0);
  574. vo.LoopNo = Util.StrToInt(txtLoopNo.Text, 0);
  575. IWin32Window window = this;
  576. frmModalLoopSelect frm = new frmModalLoopSelect(mdi);
  577. frm.InputVo = vo;
  578. frm.ShowDialog(window);
  579. vo = frm.InputVo;
  580. //입력한 코드가 있다면
  581. if (vo.InputOK)
  582. {
  583. txtThisReceiverID.Text = String.Format("{0:00}", vo.ReceiverID);
  584. txtBoardID.Text = String.Format("{0:00}", vo.BoardID);
  585. txtLoopNo.Text = String.Format("{0}", vo.LoopNo);
  586. Repeater_getData();
  587. // cyim 2013.9.26 중계기차단 보완
  588. //중계기 전체 읽기 명령
  589. dCommandResponse d = new dCommandResponse(RepeaterInfoAll);
  590. //명령생성 및 실행
  591. CmdInfo cmd = new CmdInfo(prt_cmd_define.read_repeater_all, mdi.myReceiverID, 1, vo.LoopNo, vo.BoardID, d);
  592. this.mdi.ui.runCommand(cmd);
  593. }
  594. }
  595. catch (Exception ex)
  596. {
  597. Util.UErrorMessage(ex, 0, 0);
  598. }
  599. }
  600. //cell값으로 중계기 설정을 Radio버튼에 표시
  601. private void RepeaterStatus(String CellText)
  602. {
  603. try
  604. {
  605. String RepeaterID = CellText;
  606. String RepeaterType = "";
  607. if (CellText.Length > 3)
  608. {
  609. RepeaterType = CellText.Substring(0, 1);
  610. RepeaterID = CellText.Substring(1, 3);
  611. }
  612. lblRepeaterID.Text = RepeaterID;
  613. //RepeaterTypeRadio(RepeaterType);
  614. }
  615. catch (Exception ex)
  616. {
  617. Util.UErrorMessage(ex, 0, 0);
  618. }
  619. }
  620. private void Repeater_init()
  621. {
  622. try
  623. {
  624. //dataGridView1,dataGridView2
  625. try
  626. {
  627. this.dataGridView1.Columns.Clear();
  628. }
  629. catch (Exception ex)
  630. {
  631. Util.UErrorMessage(ex, 0, 0);
  632. }
  633. /************************************************************************/
  634. /* dataGridView1 헤더 설정 */
  635. /************************************************************************/
  636. DataGridViewCellStyle sty = new DataGridViewCellStyle();
  637. sty.Alignment = DataGridViewContentAlignment.MiddleCenter;
  638. for (int col = 0; col < 10; col++)
  639. {
  640. dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());
  641. dataGridView1.Columns[col].ReadOnly = true;
  642. dataGridView1.Columns[col].Resizable = DataGridViewTriState.False;
  643. dataGridView1.Columns[col].Width = 70;
  644. dataGridView1.Columns[col].DefaultCellStyle = sty;
  645. }
  646. /************************************************************************/
  647. /************************************************************************/
  648. /* dataGridView1 Row 생성.. 총 127개 Cell */
  649. /************************************************************************/
  650. this.dataGridView1.Rows.Clear();
  651. DataGridViewRowCollection rows = this.dataGridView1.Rows;
  652. for (int row = 0; row <= 12; row++)
  653. {
  654. String[] rowData = new String[10];
  655. for (int col = 1; col <= 10; col++)
  656. {
  657. int no = row * 10 + col;
  658. if (no <= 127)
  659. {
  660. rowData[col - 1] = String.Format("{0:000}", no);
  661. //REP[no - 1] = new RepeaterDeviceTypeInfo(no); //중계기및 회로 설정정보
  662. }
  663. }
  664. rows.Add(rowData);
  665. }
  666. /************************************************************************/
  667. //중계기 설정내용 표시
  668. RepeaterStatus("");
  669. }
  670. catch (Exception ex)
  671. {
  672. Util.UErrorMessage(ex, 0, 0);
  673. throw ex;
  674. }
  675. }
  676. // cyim 2013.9.26 중계기차단 보완
  677. // 중계기 정보를 조회해서 하나라로 (입력 혹은 출력) 회로 차단이 있는 경우 true 반환
  678. private bool Repeater_GetData_Circuit_CutInfo(RepeaterDeviceTypeInfo dev, RepeaterPointUnit unit)
  679. {
  680. int Count = 0;
  681. if (dev == null)
  682. return false;
  683. // cyim 2015.6.8 아날로그 감지기 연동 추가
  684. // '1' = A : 2X2
  685. // '2' = B : 4X4
  686. // '4' = C : 아날로그연감지기
  687. // '5' = D : 아날로그열감지기
  688. if (dev.RepeaterType.Equals("A"))
  689. Count = 2;
  690. else if (dev.RepeaterType.Equals("B"))
  691. Count = 4;
  692. else if (dev.RepeaterType.Equals("C") || dev.RepeaterType.Equals("D"))
  693. Count = 1;
  694. else
  695. return false;
  696. // 검색하는 경우 하나라로 차단이 있는 경우가 있는지 살펴본다
  697. for (int i = 0; i < Count; i++)
  698. {
  699. // cyim 2013.10.2 : 입력 출력 쌍으로 존재하지않으면 에러가 발생함
  700. // 입력
  701. if (dev.inDeviceTypeInfos[i] != null && dev.inDeviceTypeInfos[i].CutFlag == true)
  702. return true;
  703. // 출력
  704. else if (dev.outDeviceTypeInfos[i] != null && dev.outDeviceTypeInfos[i].CutFlag == true)
  705. return true;
  706. }
  707. // 단, 출력은 차단 플래그가 설정이 안되어있더라도 블럭킹이 되어있다면 차단으로 한다 (본래 코드에는 이렇게 되어있으므로 그대로 적용함)
  708. if (unit == null)
  709. return false;
  710. else
  711. {
  712. // '1' = A : 2X2
  713. if (Count == 2)
  714. {
  715. if (unit.Repeater_Output1 == OutputDeviceStatus.Blocking)
  716. return true;
  717. else if (unit.Repeater_Output2 == OutputDeviceStatus.Blocking)
  718. return true;
  719. }
  720. // '2' = B : 4X4
  721. else if (Count == 4)
  722. {
  723. if (unit.Repeater_Output1 == OutputDeviceStatus.Blocking)
  724. return true;
  725. else if (unit.Repeater_Output2 == OutputDeviceStatus.Blocking)
  726. return true;
  727. else if (unit.Repeater_Output3 == OutputDeviceStatus.Blocking)
  728. return true;
  729. else if (unit.Repeater_Output4 == OutputDeviceStatus.Blocking)
  730. return true;
  731. }
  732. // '4' = C : 아날로그연감지기
  733. // '5' = D : 아날로그열감지기
  734. else
  735. {
  736. if (unit.Repeater_Output1 == OutputDeviceStatus.Blocking) // cyim 2015.7.6 차단의 경우 아날로그 감지기는 입력은 1개뿐이므로 루틴을 새로 추가한다
  737. return true;
  738. }
  739. }
  740. return false;
  741. }
  742. //중계기 DB에서 자료가져오기
  743. private void Repeater_getData()
  744. {
  745. try
  746. {
  747. if (this.InvokeRequired)
  748. {
  749. deleFormInit d = new deleFormInit(Repeater_getData);
  750. this.Invoke(d, new object[] { });
  751. }
  752. else
  753. {
  754. int BoardID = Util.StrToInt(txtBoardID.Text, 0);
  755. int LoopNo = Util.StrToInt(txtLoopNo.Text, 0);
  756. bool LoopCutFlag = false;
  757. //if (BoardID == savBoardID && LoopNo == savLoop) return;
  758. savBoardID = BoardID;
  759. savLoop = LoopNo;
  760. Repeater_init();
  761. ReceiverTypeInfo Receiverinfo = mdi.ui.MyReceiverTypeInfo; //수신기설정
  762. BoardTypeInfo brdinfo = Receiverinfo.Get_RepeaterType(savBoardID); //통신보드savBoardID의 loop0의 설정값
  763. // cyim 2016.10.31 : 계통정보는 0,1,2,3 으로 변경
  764. if (savLoop == 0)
  765. {
  766. LoopCutFlag = brdinfo.Loop0CutFlag;
  767. REP = brdinfo.Loop0_RepeaterType; //통신보드 + Loop0 + 127개 중계기 설정값
  768. REPDATA = brdinfo.Loop0_RepeaterUnit_Data; //127개 중계기 데이터
  769. }
  770. else if (savLoop == 1)
  771. {
  772. LoopCutFlag = brdinfo.Loop1CutFlag;
  773. REP = brdinfo.Loop1_RepeaterType; //통신보드 + Loop1 + 127개 중계기 설정값
  774. REPDATA = brdinfo.Loop1_RepeaterUnit_Data; //127개 중계기 데이터
  775. }
  776. else if (savLoop == 2)
  777. {
  778. LoopCutFlag = brdinfo.Loop2CutFlag;
  779. REP = brdinfo.Loop2_RepeaterType; //통신보드 + Loop2 + 127개 중계기 설정값
  780. REPDATA = brdinfo.Loop2_RepeaterUnit_Data; //127개 중계기 데이터
  781. }
  782. else if (savLoop == 3)
  783. {
  784. LoopCutFlag = brdinfo.Loop3CutFlag;
  785. REP = brdinfo.Loop3_RepeaterType; //통신보드 + Loop3 + 127개 중계기 설정값
  786. REPDATA = brdinfo.Loop3_RepeaterUnit_Data; //127개 중계기 데이터
  787. }
  788. int rowCnt = 0, colCnt = 0;
  789. //중계기 비사용 스타일
  790. DataGridViewCellStyle styUnUse = new DataGridViewCellStyle();
  791. styUnUse.Alignment = DataGridViewContentAlignment.MiddleCenter;
  792. styUnUse.BackColor = System.Drawing.Color.White;
  793. // 중계기 사용 스타일
  794. DataGridViewCellStyle styUse = new DataGridViewCellStyle();
  795. styUse.Alignment = DataGridViewContentAlignment.MiddleCenter;
  796. styUse.BackColor = System.Drawing.Color.Aqua;
  797. // cyim 2013.9.26 중계기차단 보완
  798. // 중계기 차단은 회색이며, 중계기차단이 아닌 1개이상 회로차단인 경우 색상은 구분되어야 한다
  799. // 회로차단 스타일
  800. DataGridViewCellStyle styOut_Circuit = new DataGridViewCellStyle();
  801. styOut_Circuit.Alignment = DataGridViewContentAlignment.MiddleCenter;
  802. styOut_Circuit.BackColor = System.Drawing.Color.Pink;
  803. // 중계기 차단 스타일
  804. DataGridViewCellStyle styOut = new DataGridViewCellStyle();
  805. styOut.Alignment = DataGridViewContentAlignment.MiddleCenter;
  806. styOut.BackColor = System.Drawing.Color.Silver;
  807. foreach (DataGridViewRow row in this.dataGridView1.Rows)
  808. {
  809. colCnt = 0;
  810. foreach (DataGridViewCell col in row.Cells)
  811. {
  812. ++colCnt;
  813. int no = rowCnt * 10 + colCnt;
  814. if (no <= 127)
  815. {
  816. if (LoopCutFlag)
  817. {
  818. col.Style = styOut;
  819. }
  820. else
  821. {
  822. RepeaterDeviceTypeInfo dev = REP[no - 1]; //중계기및 회로 설정정보
  823. if (dev != null)
  824. {
  825. if (dev.RepeaterType != null)
  826. col.Value = String.Format("{0}{1:000}", dev.RepeaterType, no);
  827. else
  828. col.Value = String.Format("{0:000}", no);
  829. if (dev.UseFlag)
  830. {
  831. if (dev.CutFlag)
  832. {
  833. col.Style = styOut;
  834. }
  835. else
  836. {
  837. // cyim 2013.9.26 중계기차단 보완
  838. // 중계기 차단은 회색이며, 중계기차단이 아닌 1개이상 회로차단인 경우 색상은 구분되어야 한다
  839. // 단, 중계기 차단이 먼저 우선순위가 높으므로 나중에 중계기 차단 스타일이 있다면 적용된다
  840. if (Repeater_GetData_Circuit_CutInfo(REP[no - 1], REPDATA[no - 1]) == true)
  841. col.Style = styOut_Circuit;
  842. else
  843. col.Style = styUse;
  844. }
  845. }
  846. else
  847. {
  848. col.Style = styUnUse;
  849. }
  850. }
  851. else
  852. {
  853. col.Value = String.Format("{0:000}", no);
  854. col.Style = styUnUse;
  855. }
  856. }
  857. }
  858. }
  859. ++rowCnt;
  860. }
  861. if (this.selectRepNo > 0)
  862. {
  863. if (dataGridView1.SelectedCells.Count > 0)
  864. {
  865. foreach (DataGridViewCell cell in dataGridView1.SelectedCells)
  866. {
  867. cell.Selected = false;
  868. }
  869. }
  870. int row = (this.selectRepNo - 1) / 10;
  871. int col = (this.selectRepNo - 1) % 10;
  872. dataGridView1.Rows[row].Cells[col].Selected = true;
  873. }
  874. else
  875. {
  876. this.selectRepNo = 1;
  877. }
  878. //중계기가 선택되므로 회로 표시
  879. if (REP[this.selectRepNo - 1] != null)
  880. {
  881. if (REP[this.selectRepNo - 1].RepeaterType != null) RepeaterStatus(String.Format("{0}{1:000}", REP[this.selectRepNo - 1].RepeaterType, this.selectRepNo));
  882. else RepeaterStatus(string.Format("{0:000}", this.selectRepNo));
  883. }
  884. else
  885. {
  886. RepeaterStatus(string.Format("{0:000}", this.selectRepNo));
  887. }
  888. DeviceStatus(REP[this.selectRepNo - 1], REPDATA[this.selectRepNo - 1]);
  889. if (LoopCutFlag)
  890. {
  891. chkRepeaterCut.Enabled = false; //중계기차단
  892. chkDeviceCutFlag.Enabled = false; //회로차단
  893. btnInWrite.Enabled = false;
  894. btnOutWrite.Enabled = false;
  895. }
  896. // cyim 2014.4.3 : 화면 전환시에 중계기가 없는 경우에도 회로차단 버튼이 활성화된다
  897. // 루프가 차단이라면 전부 비활성화가 맞다
  898. // 아래 버튼의 활성화는 주석으로 처리함. DeviceStatus 에서 이미 처리함
  899. //else
  900. //{
  901. // chkRepeaterCut.Enabled = true;
  902. // chkDeviceCutFlag.Enabled = true; // 이미 상위에서 처리함
  903. // btnInWrite.Enabled = true;
  904. // btnOutWrite.Enabled = true;
  905. //}
  906. if (LoopCutFlag)
  907. {
  908. //MessageBox.Show(string.Format("해당 계통은 차단설정 중입니다.. 통신보드[{0}] 계통[{1}] 차단설정 해제후 제어하십시요..", savBoardID, LoopNo));
  909. }
  910. }
  911. }
  912. catch (Exception ex)
  913. {
  914. Util.UErrorMessage(ex, 0, 0);
  915. //MessageBox.Show(ex.Message, Application.ProductName);
  916. //MessageBox.Show(string.Format("[{0}]\r\n{1}", ex.Message, ex.StackTrace), Application.ProductName);
  917. // throw ex;
  918. }
  919. }
  920. //선택셀이 바뀔때마다 해당중계기 설정내용 및 데이터 표시
  921. private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
  922. {
  923. try
  924. {
  925. if (dataGridView1.SelectedCells.Count > 0)
  926. {
  927. DataGridViewCell cell = this.dataGridView1.SelectedCells[0];
  928. int no = (cell.RowIndex * 10) + cell.ColumnIndex + 1;
  929. this.selectRepNo = no; //선택중계기 저장
  930. }
  931. }
  932. catch (Exception ex)
  933. {
  934. Util.UErrorMessage(ex, 0, 0);
  935. // throw ex;
  936. }
  937. }
  938. //선택셀이 바뀔때마다 해당중계기 설정내용 및 데이터 표시
  939. private void dataGridView1_SelectionChanged(object sender, EventArgs e)
  940. {
  941. try
  942. {
  943. if (dataGridView1.SelectedCells.Count > 0)
  944. {
  945. DataGridViewCell cell = this.dataGridView1.SelectedCells[0];
  946. int no = (cell.RowIndex * 10) + cell.ColumnIndex + 1;
  947. if (no > 127)
  948. {
  949. lblRepeaterID.Text = "";
  950. DeviceStatus(null, null);
  951. return;
  952. }
  953. else
  954. {
  955. lblRepeaterID.Text = String.Format("{0:000}", no);
  956. if (REP[no - 1] != null)
  957. {
  958. DeviceStatus(REP[no - 1], REPDATA[no - 1]);
  959. }
  960. else
  961. {
  962. DeviceStatus(null, null);
  963. }
  964. }
  965. }
  966. // cyim 2014.4.3 : 화면 전환시에 중계기가 없는 경우에도 회로차단 버튼이 활성화된다
  967. else
  968. DeviceStatus(null, null);
  969. }
  970. catch (Exception ex)
  971. {
  972. Util.UErrorMessage(ex, 0, 0);
  973. }
  974. }
  975. //선택셀이 바뀔때마다 해당중계기 설정내용 및 데이터 표시
  976. private void dataGridView2_SelectionChanged(object sender, EventArgs e)
  977. {
  978. // cyim 2014.4.3 : 회로차단 및 쓰기 방지
  979. bool InDBCircuit = false; // 데이타베이스에 회로정보가 있는지 여부
  980. txtDeviceTypeName.Text = "";
  981. txtPositionName.Text = "";
  982. txtDeviceMemo.Text = "";
  983. // 수정(lch_13.08.28)
  984. // UI를 리셋
  985. chkDeviceCutFlag.Text = "회로차단";
  986. chkDeviceCutFlag.Checked = false;
  987. if (dataGridView1.SelectedCells.Count > 0 && dataGridView2.SelectedCells.Count > 0)
  988. {
  989. try
  990. {
  991. int CommID = 1;
  992. int BoardID = Util.StrToInt(txtBoardID.Text, 0);
  993. int LoopNo = Util.StrToInt(txtLoopNo.Text, 0);
  994. DataGridViewCell repCell = this.dataGridView1.SelectedCells[0];
  995. int RepeaterID = (repCell.RowIndex * 10) + repCell.ColumnIndex + 1;
  996. DataGridViewCell devCell = this.dataGridView2.SelectedCells[0];
  997. string InOut_Type = "I";
  998. if (devCell.RowIndex > 0) InOut_Type = "O";
  999. int deviceId = devCell.ColumnIndex + 1;
  1000. //회로설정값
  1001. DacUIProcess dacUIProcess = new DacUIProcess(mdi.myReceiverID); // cyim 2015.7.30 데이타베이스 접속 루틴 변경
  1002. DataTable dt2 = dacUIProcess.Device_Select(mdi.myReceiverID, CommID, BoardID, LoopNo, RepeaterID, deviceId, InOut_Type);
  1003. foreach (DataRow dr2 in dt2.Rows)
  1004. {
  1005. // cyim 2014.4.3 : 회로차단 및 쓰기 방지
  1006. InDBCircuit = true;
  1007. txtDeviceTypeName.Text = Util.NullToStr(dr2["DEVICE_TYPE_NAME"]);
  1008. txtPositionName.Text = Util.NullToStr(dr2["POSITION_NAME"]);
  1009. txtDeviceMemo.Text = Util.NullToStr(dr2["DEVICE_NAME"]);
  1010. String CutFlag = Util.NullToStr(dr2["CUT_FLAG"]);
  1011. // 수정(lch_13.08.28) - 차단이 되어있는거는 "차단해제" 버튼으로 올라오게 하기 위해서
  1012. if (CutFlag.Equals("Y"))
  1013. {
  1014. chkDeviceCutFlag.Checked = true;
  1015. chkDeviceCutFlag.Text = "차단해제";
  1016. }
  1017. else
  1018. {
  1019. chkDeviceCutFlag.Checked = false;
  1020. }
  1021. }
  1022. // cyim 2015.2.17 계통차단시에는 사용불가
  1023. //int BoardID = Util.StrToInt(txtBoardID.Text, 0);
  1024. //int LoopNo = Util.StrToInt(txtLoopNo.Text, 0);
  1025. bool LoopCutFlag = false;
  1026. savBoardID = BoardID;
  1027. savLoop = LoopNo;
  1028. ReceiverTypeInfo Receiverinfo = mdi.ui.MyReceiverTypeInfo; //수신기설정
  1029. BoardTypeInfo brdinfo = Receiverinfo.Get_RepeaterType(savBoardID); //통신보드savBoardID의 loop0의 설정값
  1030. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  1031. if (savLoop == 0)
  1032. {
  1033. LoopCutFlag = brdinfo.Loop0CutFlag;
  1034. //REP = brdinfo.Loop0_RepeaterType; //통신보드 + Loop0 + 127개 중계기 설정값
  1035. //REPDATA = brdinfo.Loop0_RepeaterUnit_Data; //127개 중계기 데이터
  1036. }
  1037. else if (savLoop == 1)
  1038. {
  1039. LoopCutFlag = brdinfo.Loop1CutFlag;
  1040. }
  1041. else if (savLoop == 2)
  1042. {
  1043. LoopCutFlag = brdinfo.Loop2CutFlag;
  1044. }
  1045. else if (savLoop == 3)
  1046. {
  1047. LoopCutFlag = brdinfo.Loop3CutFlag;
  1048. }
  1049. // cyim 2014.4.3 : 회로차단 및 쓰기 방지
  1050. if (InDBCircuit == false)
  1051. {
  1052. // 데이타가 없다면 사용불가
  1053. btnInWrite.Enabled = false;
  1054. btnOutWrite.Enabled = false;
  1055. chkDeviceCutFlag.Enabled = false;
  1056. }
  1057. else
  1058. {
  1059. btnInWrite.Enabled = true;
  1060. //btnOutWrite.Enabled = true; // cyim 2015.2.24 쓰기버튼 사용금지
  1061. //chkDeviceCutFlag.Enabled = true; // 상위에서 처리함
  1062. // cyim 2015.2.17 계통차단시에는 사용불가
  1063. if (LoopCutFlag == true)
  1064. {
  1065. chkRepeaterCut.Enabled = false;
  1066. btnInWrite.Enabled = false;
  1067. btnOutWrite.Enabled = false;
  1068. chkDeviceCutFlag.Enabled = false;
  1069. }
  1070. }
  1071. }
  1072. catch (Exception ex)
  1073. {
  1074. Util.UErrorMessage(ex, 0, 0);
  1075. }
  1076. }
  1077. }
  1078. //dataGridView2에 중계기 회로정보 표시
  1079. private void DeviceStatus(RepeaterDeviceTypeInfo dt, RepeaterPointUnit unit)
  1080. {
  1081. try
  1082. {
  1083. //dataGridView2
  1084. //this.dataGridView2.Columns.Clear();
  1085. this.dataGridView2.Rows.Clear();
  1086. if (dt != null)
  1087. {
  1088. chkRepeaterCut.Enabled = true;
  1089. if (dt.UseFlag && dt.CutFlag)
  1090. {
  1091. chkRepeaterCut.Checked = true;
  1092. btnInWrite.Enabled = false;
  1093. btnOutWrite.Enabled = false;
  1094. chkDeviceCutFlag.Enabled = false;
  1095. }
  1096. else
  1097. {
  1098. chkRepeaterCut.Checked = false;
  1099. btnInWrite.Enabled = true;
  1100. //btnOutWrite.Enabled = true; // cyim 2015.2.24 쓰기버튼 사용금지
  1101. chkDeviceCutFlag.Enabled = true;
  1102. }
  1103. //
  1104. // cyim 2014.4.3 : 계통차단시에도 버튼비활성화
  1105. //
  1106. int BoardID = Util.StrToInt(txtBoardID.Text, 0);
  1107. int LoopNo = Util.StrToInt(txtLoopNo.Text, 0);
  1108. bool LoopCutFlag = false;
  1109. savBoardID = BoardID;
  1110. savLoop = LoopNo;
  1111. ReceiverTypeInfo Receiverinfo = mdi.ui.MyReceiverTypeInfo; //수신기설정
  1112. BoardTypeInfo brdinfo = Receiverinfo.Get_RepeaterType(savBoardID); //통신보드savBoardID의 loop0의 설정값
  1113. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  1114. if (savLoop == 0)
  1115. {
  1116. LoopCutFlag = brdinfo.Loop0CutFlag;
  1117. //REP = brdinfo.Loop0_RepeaterType; //통신보드 + Loop0 + 127개 중계기 설정값
  1118. //REPDATA = brdinfo.Loop0_RepeaterUnit_Data; //127개 중계기 데이터
  1119. }
  1120. else if (savLoop == 1)
  1121. {
  1122. LoopCutFlag = brdinfo.Loop1CutFlag;
  1123. }
  1124. else if (savLoop == 2)
  1125. {
  1126. LoopCutFlag = brdinfo.Loop2CutFlag;
  1127. }
  1128. else if (savLoop == 3)
  1129. {
  1130. LoopCutFlag = brdinfo.Loop3CutFlag;
  1131. }
  1132. if (LoopCutFlag == true)
  1133. {
  1134. chkRepeaterCut.Enabled = false;
  1135. btnInWrite.Enabled = false;
  1136. btnOutWrite.Enabled = false;
  1137. chkDeviceCutFlag.Enabled = false;
  1138. }
  1139. DataGridViewCellStyle sty = new DataGridViewCellStyle();
  1140. sty.Alignment = DataGridViewContentAlignment.MiddleCenter;
  1141. sty.BackColor = System.Drawing.Color.White;
  1142. DataGridViewCellStyle styGray = new DataGridViewCellStyle();
  1143. styGray.Alignment = DataGridViewContentAlignment.MiddleCenter;
  1144. styGray.BackColor = System.Drawing.Color.Gray;
  1145. styGray.SelectionBackColor = System.Drawing.Color.Gray;
  1146. if (dt.RepeaterType.Equals("A"))
  1147. {
  1148. for (int col = 0; col < 2; col++)
  1149. {
  1150. //dataGridView2.Columns.Add(new DataGridViewTextBoxColumn());
  1151. dataGridView2.Columns[col].ReadOnly = true;
  1152. dataGridView2.Columns[col].Resizable = DataGridViewTriState.False;
  1153. dataGridView2.Columns[col].Width = 90;
  1154. dataGridView2.Columns[col].DefaultCellStyle = sty;
  1155. }
  1156. //dt.InType3 = "";
  1157. //dt.InType4 = "";
  1158. //dt.OutType3 = "";
  1159. //dt.OutType4 = "";
  1160. // cyim 2015.6.8 아날로그 감지기 연동 추가 : 아래 소스는 필요없음
  1161. //dataGridView2.Columns[2].ReadOnly = true;
  1162. //dataGridView2.Columns[2].Resizable = DataGridViewTriState.False;
  1163. //dataGridView2.Columns[2].Width = 90;
  1164. //dataGridView2.Columns[2].DefaultCellStyle = styGray;
  1165. //dataGridView2.Columns[3].ReadOnly = true;
  1166. //dataGridView2.Columns[3].Resizable = DataGridViewTriState.False;
  1167. //dataGridView2.Columns[3].Width = 90;
  1168. //dataGridView2.Columns[3].DefaultCellStyle = styGray;
  1169. }
  1170. else if (dt.RepeaterType.Equals("B"))
  1171. {
  1172. for (int col = 0; col < 4; col++)
  1173. {
  1174. //dataGridView2.Columns.Add(new DataGridViewTextBoxColumn());
  1175. dataGridView2.Columns[col].ReadOnly = true;
  1176. dataGridView2.Columns[col].Resizable = DataGridViewTriState.False;
  1177. dataGridView2.Columns[col].Width = 90;
  1178. dataGridView2.Columns[col].DefaultCellStyle = sty;
  1179. }
  1180. }
  1181. // cyim 2015.6.8 아날로그 감지기 연동 추가
  1182. else if (dt.RepeaterType.Equals("C") || dt.RepeaterType.Equals("D"))
  1183. {
  1184. for (int col = 0; col < 1; col++)
  1185. {
  1186. dataGridView2.Columns[col].ReadOnly = true;
  1187. dataGridView2.Columns[col].Resizable = DataGridViewTriState.False;
  1188. dataGridView2.Columns[col].Width = 90;
  1189. dataGridView2.Columns[col].DefaultCellStyle = sty;
  1190. }
  1191. }
  1192. //회로입력,출력값 표시
  1193. if (unit != null)
  1194. {
  1195. DataGridViewRowCollection rows2 = this.dataGridView2.Rows;
  1196. if (dt != null)
  1197. {
  1198. if (dt.RepeaterType.Equals("A"))
  1199. {
  1200. // 수정(lch_13.08.28) - 디바이스 정보 출력 에러 해결
  1201. // 입력 디바이스
  1202. String[] inData = new String[2];
  1203. for (int i = 0; i < 2; i++)
  1204. {
  1205. if (dt.inDeviceTypeInfos[i] == null)
  1206. {
  1207. inData[i] = "-";
  1208. }
  1209. else
  1210. {
  1211. if (i == 0) inData[i] = DeviceStatusText.InputText(unit.Repeater_Input1, dt.inDeviceTypeInfos[i].CutFlag);
  1212. else inData[i] = DeviceStatusText.InputText(unit.Repeater_Input2, dt.inDeviceTypeInfos[i].CutFlag);
  1213. }
  1214. }
  1215. // 출력 디바이스
  1216. String[] outData = new String[2];
  1217. for (int i = 0; i < 2; i++)
  1218. {
  1219. if (dt.outDeviceTypeInfos[i] == null)
  1220. {
  1221. outData[i] = "-";
  1222. }
  1223. else
  1224. {
  1225. if (i == 0) outData[i] = DeviceStatusText.OutputText(unit.Repeater_Output1, dt.outDeviceTypeInfos[i].CutFlag);
  1226. else outData[i] = DeviceStatusText.OutputText(unit.Repeater_Output2, dt.outDeviceTypeInfos[i].CutFlag);
  1227. }
  1228. }
  1229. //기존꺼
  1230. //String[] inData = { DeviceStatusText.InputText(unit.Repeater_Input1,dt.inDeviceTypeInfos[0].CutFlag)
  1231. // , DeviceStatusText.InputText(unit.Repeater_Input2,dt.inDeviceTypeInfos[1].CutFlag), "", "" };
  1232. //String[] outData = { DeviceStatusText.OutputText(unit.Repeater_Output1,dt.outDeviceTypeInfos[0].CutFlag)
  1233. // , DeviceStatusText.OutputText(unit.Repeater_Output2,dt.outDeviceTypeInfos[1].CutFlag), "", "" };
  1234. rows2.Add(inData);
  1235. rows2.Add(outData);
  1236. }
  1237. else if (dt.RepeaterType.Equals("B"))
  1238. {
  1239. // 수정(lch_13.08.28) - 디바이스 정보 출력 에러 해결
  1240. // 입력 디바이스
  1241. String[] inData = new String[4];
  1242. for (int i = 0; i < 4; i++)
  1243. {
  1244. if (dt.inDeviceTypeInfos[i] == null)
  1245. {
  1246. inData[i] = "-";
  1247. }
  1248. else
  1249. {
  1250. if (i == 0) inData[i] = DeviceStatusText.InputText(unit.Repeater_Input1, dt.inDeviceTypeInfos[i].CutFlag);
  1251. else if (i == 1) inData[i] = DeviceStatusText.InputText(unit.Repeater_Input2, dt.inDeviceTypeInfos[i].CutFlag);
  1252. else if (i == 2) inData[i] = DeviceStatusText.InputText(unit.Repeater_Input3, dt.inDeviceTypeInfos[i].CutFlag);
  1253. else if (i == 3) inData[i] = DeviceStatusText.InputText(unit.Repeater_Input4, dt.inDeviceTypeInfos[i].CutFlag);
  1254. }
  1255. }
  1256. // 출력 디바이스
  1257. String[] outData = new String[4];
  1258. for (int i = 0; i < 4; i++)
  1259. {
  1260. if (dt.outDeviceTypeInfos[i] == null)
  1261. {
  1262. outData[i] = "-";
  1263. }
  1264. else
  1265. {
  1266. if (i == 0) outData[i] = DeviceStatusText.OutputText(unit.Repeater_Output1, dt.outDeviceTypeInfos[i].CutFlag);
  1267. else if (i == 1) outData[i] = DeviceStatusText.OutputText(unit.Repeater_Output2, dt.outDeviceTypeInfos[i].CutFlag);
  1268. else if (i == 2) outData[i] = DeviceStatusText.OutputText(unit.Repeater_Output3, dt.outDeviceTypeInfos[i].CutFlag);
  1269. else if (i == 3) outData[i] = DeviceStatusText.OutputText(unit.Repeater_Output4, dt.outDeviceTypeInfos[i].CutFlag);
  1270. }
  1271. }
  1272. //String[] inData = { DeviceStatusText.InputText(unit.Repeater_Input1,dtCutFlag(dt.inDeviceTypeInfos[0]))
  1273. // , DeviceStatusText.InputText(unit.Repeater_Input2,dtCutFlag(dt.inDeviceTypeInfos[1]))
  1274. // , DeviceStatusText.InputText(unit.Repeater_Input3,dtCutFlag(dt.inDeviceTypeInfos[2]))
  1275. // , DeviceStatusText.InputText(unit.Repeater_Input4,dtCutFlag(dt.inDeviceTypeInfos[3])) };
  1276. //String[] outData = { DeviceStatusText.OutputText(unit.Repeater_Output1,dtCutFlag(dt.outDeviceTypeInfos[0]))
  1277. // , DeviceStatusText.OutputText(unit.Repeater_Output2,dtCutFlag(dt.outDeviceTypeInfos[1]))
  1278. // , DeviceStatusText.OutputText(unit.Repeater_Output3,dtCutFlag(dt.outDeviceTypeInfos[2]))
  1279. // , DeviceStatusText.OutputText(unit.Repeater_Output4,dtCutFlag(dt.outDeviceTypeInfos[3])) };
  1280. rows2.Add(inData);
  1281. rows2.Add(outData);
  1282. }
  1283. // cyim 2015.6.8 아날로그 감지기 연동 추가
  1284. else if (dt.RepeaterType.Equals("C") || dt.RepeaterType.Equals("D"))
  1285. {
  1286. // 입력 디바이스
  1287. String[] inData = new String[1];
  1288. for (int i = 0; i < 1; i++)
  1289. {
  1290. if (dt.inDeviceTypeInfos[i] == null)
  1291. {
  1292. inData[i] = "-";
  1293. }
  1294. else
  1295. {
  1296. if (i == 0) inData[i] = DeviceStatusText.InputText(unit.Repeater_Input1, dt.inDeviceTypeInfos[i].CutFlag);
  1297. else inData[i] = DeviceStatusText.InputText(unit.Repeater_Input2, dt.inDeviceTypeInfos[i].CutFlag);
  1298. }
  1299. }
  1300. // 출력 디바이스
  1301. String[] outData = new String[1];
  1302. for (int i = 0; i < 1; i++)
  1303. {
  1304. if (dt.outDeviceTypeInfos[i] == null)
  1305. {
  1306. outData[i] = "-";
  1307. }
  1308. else
  1309. {
  1310. if (i == 0) outData[i] = DeviceStatusText.OutputText(unit.Repeater_Output1, dt.outDeviceTypeInfos[i].CutFlag);
  1311. else outData[i] = DeviceStatusText.OutputText(unit.Repeater_Output2, dt.outDeviceTypeInfos[i].CutFlag);
  1312. }
  1313. }
  1314. rows2.Add(inData);
  1315. rows2.Add(outData);
  1316. }
  1317. }
  1318. }
  1319. else
  1320. {
  1321. DataGridViewRowCollection rows2 = this.dataGridView2.Rows;
  1322. if (dt != null)
  1323. {
  1324. // cyim 2013.9.26 중계기차단 보완 : 초기화값을 숫자에서 - 로 변경
  1325. //case InputDeviceStatus.Init: toText = " - "; break;
  1326. //case InputDeviceStatus.Use: toText = "감지"; break;
  1327. //case InputDeviceStatus.Normal: toText = "정상"; break;
  1328. //case InputDeviceStatus.Blocking: toText = "단선"; break;
  1329. if (dt.RepeaterType.Equals("A"))
  1330. {
  1331. // cyim 2014.4.3 : 초기값 수정 1,2,3,4 -> "-"
  1332. //String[] inData = { "1", "2", "", "" };
  1333. //String[] outData = { "1", "2", "", "" };
  1334. String[] inData = { "-", "-", "", "" };
  1335. String[] outData = { "-", "-", "", "" };
  1336. rows2.Add(inData);
  1337. rows2.Add(outData);
  1338. }
  1339. else if (dt.RepeaterType.Equals("B"))
  1340. {
  1341. //String[] inData = { "", "2", "3", "4" };
  1342. //String[] outData = { "1", "2", "3", "4" };
  1343. String[] inData = { "-", "-", "-", "-" };
  1344. String[] outData = { "-", "-", "-", "-" };
  1345. rows2.Add(inData);
  1346. rows2.Add(outData);
  1347. }
  1348. // cyim 2015.6.8 아날로그 감지기 연동 추가
  1349. else if (dt.RepeaterType.Equals("C") || dt.RepeaterType.Equals("D"))
  1350. {
  1351. String[] inData = { "-", "", "", "" };
  1352. String[] outData = { "-", "", "", "" };
  1353. rows2.Add(inData);
  1354. rows2.Add(outData);
  1355. }
  1356. }
  1357. }
  1358. }
  1359. else
  1360. {
  1361. chkRepeaterCut.Enabled = false;
  1362. btnInWrite.Enabled = false;
  1363. btnOutWrite.Enabled = false;
  1364. chkDeviceCutFlag.Enabled = false;
  1365. }
  1366. }
  1367. catch (Exception ex)
  1368. {
  1369. Util.UErrorMessage(ex, 0, 0);
  1370. }
  1371. }
  1372. private Boolean dtCutFlag(DeviceTypeInfo dtInfo)
  1373. {
  1374. bool cutFlag = false;
  1375. if (dtInfo != null) cutFlag = dtInfo.CutFlag;
  1376. return cutFlag;
  1377. }
  1378. private void btnOK_Click(object sender, EventArgs e)
  1379. {
  1380. // cyim 2013.8.5 제어화면 버튼 포커스 조절
  1381. this.panel_Menu.Focus();
  1382. try
  1383. {
  1384. int BoardID = Util.StrToInt(txtBoardID.Text, 0);
  1385. int Loop = Util.StrToInt(txtLoopNo.Text, -1);
  1386. // cyim 2013.8.2 화면 전환시에 라벨 사라지는 문제 : label1 -> label_Comment
  1387. if (BoardID == 0)
  1388. {
  1389. this.label_Comment.Text = string.Format("통신보드ID를 입력하여 주십시요.");
  1390. this.label_Comment.Visible = true;
  1391. //MessageBox.Show("통신보드ID를 입력하여 주십시요.", Application.ProductName);
  1392. txtBoardID.Focus();
  1393. return;
  1394. }
  1395. else if (Loop != 0 && Loop != 1 && Loop != 2 && Loop != 3)
  1396. {
  1397. this.label_Comment.Text = string.Format("Loop No를 올바르게 입력하여 주십시요");
  1398. this.label_Comment.Visible = true;
  1399. //MessageBox.Show("Loop No를 올바르게 입력하여 주십시요.", Application.ProductName);
  1400. txtLoopNo.Focus();
  1401. return;
  1402. }
  1403. else
  1404. {
  1405. this.label_Comment.Visible = false;
  1406. }
  1407. Repeater_getData();
  1408. // 수정(lch_13.08.28)
  1409. //중계기 전체 읽기 명령
  1410. dCommandResponse d = new dCommandResponse(RepeaterInfoAll);
  1411. //명령생성 및 실행
  1412. CmdInfo cmd = new CmdInfo(prt_cmd_define.read_repeater_all, mdi.myReceiverID, 1, Loop, BoardID, d);
  1413. this.mdi.ui.runCommand(cmd);
  1414. }
  1415. catch (Exception ex)
  1416. {
  1417. Util.UErrorMessage(ex, 0, 0);
  1418. }
  1419. }
  1420. private void btnRepeaterAllInfo_Click(object sender, EventArgs e)
  1421. {
  1422. // cyim 2013.8.5 제어화면 버튼 포커스 조절
  1423. this.panel_Menu.Focus();
  1424. try
  1425. {
  1426. for (var i = 0; i < mdi.ui.MyReceiverTypeInfo.MyBoardType.Length; i++)
  1427. {
  1428. if (mdi.ui.MyReceiverTypeInfo.MyBoardType[i] != null)
  1429. {
  1430. if (mdi.ui.MyReceiverTypeInfo.MyBoardType[i].Loop0CutFlag == false)
  1431. {
  1432. if (mdi.ui.MyReceiverTypeInfo.MyBoardType[i].Loop0UseFlag)
  1433. {
  1434. txtBoardID.Text = String.Format("{0:00}", i + 1);
  1435. txtLoopNo.Text = String.Format("{0}", 0);
  1436. break;
  1437. }
  1438. }
  1439. else if (mdi.ui.MyReceiverTypeInfo.MyBoardType[i].Loop1CutFlag == false)
  1440. {
  1441. if (mdi.ui.MyReceiverTypeInfo.MyBoardType[i].Loop1UseFlag)
  1442. {
  1443. txtBoardID.Text = String.Format("{0:00}", i + 1);
  1444. txtLoopNo.Text = String.Format("{0}", 1);
  1445. break;
  1446. }
  1447. }
  1448. else if (mdi.ui.MyReceiverTypeInfo.MyBoardType[i].Loop2CutFlag == false)
  1449. {
  1450. if (mdi.ui.MyReceiverTypeInfo.MyBoardType[i].Loop2UseFlag)
  1451. {
  1452. txtBoardID.Text = String.Format("{0:00}", i + 1);
  1453. txtLoopNo.Text = String.Format("{0}", 2);
  1454. break;
  1455. }
  1456. }
  1457. else if (mdi.ui.MyReceiverTypeInfo.MyBoardType[i].Loop3CutFlag == false)
  1458. {
  1459. if (mdi.ui.MyReceiverTypeInfo.MyBoardType[i].Loop3UseFlag)
  1460. {
  1461. txtBoardID.Text = String.Format("{0:00}", i + 1);
  1462. txtLoopNo.Text = String.Format("{0}", 3);
  1463. break;
  1464. }
  1465. }
  1466. }
  1467. }
  1468. int BoardID = Util.StrToInt(txtBoardID.Text, 0);
  1469. int Loop = Util.StrToInt(txtLoopNo.Text, -1);
  1470. // cyim 2013.8.2 화면 전환시에 라벨 사라지는 문제 : label1 -> label_Comment
  1471. if (BoardID == 0)
  1472. {
  1473. this.label_Comment.Text = string.Format("통신보드ID를 입력하여 주십시요.");
  1474. this.label_Comment.Visible = true;
  1475. txtBoardID.Focus();
  1476. return;
  1477. }
  1478. // cyim 2016.10.31 : 대용량 수신기용 UI 변경
  1479. else if (Loop < 0 || Loop > 3)
  1480. {
  1481. this.label_Comment.Text = string.Format("Loop No를 올바르게 입력하여 주십시요");
  1482. this.label_Comment.Visible = true;
  1483. txtLoopNo.Focus();
  1484. return;
  1485. }
  1486. else
  1487. {
  1488. this.label_Comment.Visible = false;
  1489. }
  1490. //버튼 비활성 설정
  1491. button_end(false);
  1492. LFC.Log("타입: 수신기 조작 로그, 메세지: 차단-읽기명령 클릭");
  1493. //중계기 전체 읽기 명령
  1494. dCommandResponse d = new dCommandResponse(RepeaterInfoAll);
  1495. //명령생성 및 실행
  1496. CmdInfo cmd = new CmdInfo(prt_cmd_define.read_repeater_all, mdi.myReceiverID, 1, Loop, BoardID, d);
  1497. this.mdi.ui.runCommand(cmd);
  1498. }
  1499. catch (Exception ex)
  1500. {
  1501. Util.UErrorMessage(ex, 0, 0);
  1502. }
  1503. }
  1504. //*********************************************************************//
  1505. // 중계기 전체읽기 응답데이터 이벤트 //
  1506. //*********************************************************************//
  1507. public void RepeaterInfoAll(CmdInfo cmd)
  1508. {
  1509. //에러응답처리
  1510. if (!Util.ComInfoErrProcess(cmd, mdi.ui.Connected, "RCVData_ReadRepeaterPointAll")) // cyim 2015.7.23 NACK 처리 부분 오류
  1511. {
  1512. button_end(true);
  1513. return;
  1514. }
  1515. try
  1516. {
  1517. RCVData_ReadRepeaterPointAll ResponseData = (RCVData_ReadRepeaterPointAll)cmd.ResponseData;
  1518. RepeaterData[] data = ResponseData.Data;
  1519. if (cmd.Command == prt_cmd_define.read_repeater_all || cmd.ResCommand == prt_res_define.read_repeater_all)
  1520. {
  1521. if (savBoardID == cmd.boardNo && savLoop == cmd.loopNo)
  1522. {
  1523. for (int repeaterNo = 0; repeaterNo < data.Length; repeaterNo++)
  1524. {
  1525. REPDATA[repeaterNo] = new RepeaterPointUnit(repeaterNo + 1, data[repeaterNo]);
  1526. }
  1527. Repeater_getData();
  1528. }
  1529. }
  1530. }
  1531. catch (Exception ex)
  1532. {
  1533. Util.UErrorMessage(ex, 0, 0);
  1534. //MessageBox.Show(ex.Message, Application.ProductName);
  1535. //MessageBox.Show(string.Format("[{0}]{1}", ex.StackTrace, ex.Message), Application.ProductName);
  1536. }
  1537. finally
  1538. {
  1539. //버튼 비활성 해제
  1540. button_end(true);
  1541. }
  1542. }
  1543. //화면 마우스 커서 및 버튼 다시 클릭 못하도록 설정 및 해제
  1544. private void button_end(Boolean val)
  1545. {
  1546. if (val)
  1547. {
  1548. this.btnRepeaterAllInfo.Enabled = true;
  1549. this.Cursor = Cursors.Default;
  1550. }
  1551. else
  1552. {
  1553. this.btnRepeaterAllInfo.Enabled = false;
  1554. this.Cursor = Cursors.WaitCursor;
  1555. }
  1556. }
  1557. private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
  1558. {
  1559. if (tabControl_Main.SelectedIndex == 1)
  1560. {
  1561. // cyim 2015.2.17 화면 전환시 잘못된 정보가 올라옴 (단, 아래 주석 처리함, 어차피 btnRepeaterAllInfo_Click 에서 처리하도록 되어있음)
  1562. //Repeater_getData();
  1563. //중계기 회로 데이터 읽기 명령
  1564. btnRepeaterAllInfo_Click(btnRepeaterAllInfo, System.EventArgs.Empty);
  1565. btnOK.PerformClick();
  1566. }
  1567. else
  1568. {
  1569. // cyim 2015.2.17 화면 전환시 잘못된 정보가 올라옴
  1570. Board_getData();
  1571. this.tRepeaterReadThreadStatus = 0;
  1572. }
  1573. }
  1574. void RepeaterInfoRead()
  1575. {
  1576. try
  1577. {
  1578. while (tRepeaterReadThreadStatus > 0)
  1579. {
  1580. if (this.mdi.ui.Connected)
  1581. {
  1582. try
  1583. {
  1584. int BoardID = Util.StrToInt(txtBoardID.Text, 0);
  1585. int Loop = Util.StrToInt(txtLoopNo.Text, -1);
  1586. if (BoardID == 0)
  1587. {
  1588. tRepeaterReadThreadStatus = 0;
  1589. }
  1590. if (Loop != 0 && Loop != 1)
  1591. {
  1592. tRepeaterReadThreadStatus = 0;
  1593. }
  1594. tRepeaterReadThreadStatus++;
  1595. //중계기 전체 읽기 명령
  1596. dCommandResponse d = new dCommandResponse(RepeaterInfoAll);
  1597. //명령생성 및 실행
  1598. CmdInfo cmd = new CmdInfo(prt_cmd_define.read_repeater_all, mdi.myReceiverID, 1, Loop, BoardID, d);
  1599. this.mdi.ui.runCommand(cmd);
  1600. if (tRepeaterReadThreadStatus > 4) tRepeaterReadThreadStatus = 0;
  1601. }
  1602. catch (Exception ex)
  1603. {
  1604. Util.UErrorMessage(ex, 0, 0);
  1605. tRepeaterReadThreadStatus = 0;
  1606. }
  1607. Thread.Sleep(1000);
  1608. }
  1609. else
  1610. {
  1611. tRepeaterReadThreadStatus = 0;
  1612. }
  1613. }
  1614. }
  1615. catch (Exception ex)
  1616. {
  1617. Util.UErrorMessage(ex, 0, 0);
  1618. tRepeaterReadThreadStatus = 0;
  1619. }
  1620. }
  1621. private void chkRepeaterCut_Click(object sender, EventArgs e)
  1622. {
  1623. if (dataGridView1.SelectedCells.Count > 0)
  1624. {
  1625. try
  1626. {
  1627. bool chkCutFlag = chkRepeaterCut.Checked ? false : true;
  1628. int cutActionCnt = 0;
  1629. if (MessageBox.Show(string.Format("중계기 차단{0} 명령을 수행하시겠습니까?", chkCutFlag ? "설정" : "해제")
  1630. , Application.ProductName, MessageBoxButtons.YesNo) == DialogResult.Yes)
  1631. {
  1632. this.Cursor = Cursors.WaitCursor;
  1633. DacRepeaterConfig dacRepeaterConfig = new DacRepeaterConfig(mdi.myReceiverID); // cyim 2015.7.30 데이타베이스 접속 루틴 변경
  1634. //int CommID = 1;
  1635. int BoardID = Util.StrToInt(txtBoardID.Text, 0);
  1636. int LoopNo = Util.StrToInt(txtLoopNo.Text, 0);
  1637. //DataGridViewCell repCell = this.dataGridView1.SelectedCells[0];
  1638. //int RepeaterID = (repCell.RowIndex * 10) + repCell.ColumnIndex + 1;
  1639. //REP[RepeaterID - 1].CutFlag = true;
  1640. foreach (DataGridViewCell repCell in this.dataGridView1.SelectedCells)
  1641. {
  1642. int RepeaterID = (repCell.RowIndex * 10) + repCell.ColumnIndex + 1;
  1643. if (REP[RepeaterID - 1] != null)
  1644. {
  1645. if (REP[RepeaterID - 1].CutFlag != chkCutFlag)
  1646. {
  1647. //이미 변경이 이루어 진거라면 다시 원상태로 회복.
  1648. if (REP[RepeaterID - 1].CutFlagChange)
  1649. {
  1650. REP[RepeaterID - 1].CutFlagChangeReset();
  1651. }
  1652. else
  1653. {
  1654. REP[RepeaterID - 1].CutFlagChange = chkCutFlag;
  1655. }
  1656. dacRepeaterConfig.Repeater_Cut_Update(mdi.myReceiverID, BoardID, LoopNo, RepeaterID, chkCutFlag ? "Y" : "N");
  1657. cutActionCnt++;
  1658. }
  1659. }
  1660. }
  1661. if (cutActionCnt < 1)
  1662. {
  1663. this.Cursor = Cursors.Default;
  1664. MessageBox.Show("중계기설정을 확인 하십시요.. 차단설정을 할 수 없습니다.", Application.ProductName);
  1665. return;
  1666. }
  1667. if (chkCutFlag)
  1668. {
  1669. LFC.Log("타입: 수신기 조작 로그, 메세지: 차단-중계기차단 설정");
  1670. }
  1671. else
  1672. {
  1673. LFC.Log("타입: 수신기 조작 로그, 메세지: 차단-중계기차단 해제");
  1674. }
  1675. /******************************************/
  1676. /* 중계기 차단 명령 Progress 표시 */
  1677. /******************************************/
  1678. frmProgress frm = new frmProgress(mdi); // cyim 2016.12.07 : 수신기 모델별 내부 로직 변경
  1679. CmdInfo cmd = new CmdInfo(prt_cmd_define.read_command_status, mdi.myReceiverID, 1, LoopNo, BoardID, null);
  1680. cmd.CommandType = "DC";
  1681. cmd.ApplyRange = "R"; //차단레벨(회로타입차단용) A-All,C-Comm,B-Board,L-Loop,R-중계기,D-회로,I-입력회로,O-출력회로
  1682. cmd.CommandData = REP;
  1683. frm.Commandinfo = cmd;
  1684. frm.ui = this.mdi.ui;
  1685. frm.ShowDialog();
  1686. ///******************************************/
  1687. // cyim 2013.8.5 화면갱신전 대기화면 팝업창 출력
  1688. mdi.Popup.CommonPopupShow(this); // cyim 2015.8.4 수신반을 위한 static 클래스 정리
  1689. // cyim 2013.9.23 화면갱신코드 추가
  1690. this.Update();
  1691. this.mdi.ui.ReceiverDBRead(); //수신기설정및차단카운트 다시 계산
  1692. this.Cursor = Cursors.Default;
  1693. //체크상태를 변경해준다..
  1694. chkRepeaterCut.Checked = chkCutFlag;
  1695. // cyim 2013.8.5 화면갱신전 대기화면 팝업창 출력 + 중복루틴 제거
  1696. mdi.Popup.CommonPopupClose(this); // cyim 2015.8.4 수신반을 위한 static 클래스 정리
  1697. //this.mdi.ui.ReceiverDBRead(); //수신기설정및차단카운트 다시 계산
  1698. // cyim 2013.9.23 화면갱신코드 추가
  1699. this.Update();
  1700. //중계기 회로 데이터 읽기 명령
  1701. btnRepeaterAllInfo_Click(btnRepeaterAllInfo, System.EventArgs.Empty);
  1702. // cyim 2013.9.26 중계기차단 보완
  1703. // UI 갱신
  1704. Repeater_getData();
  1705. }
  1706. }
  1707. catch (Exception)
  1708. {
  1709. // Util.UErrorMessage(ex, 0, 0);
  1710. this.Cursor = Cursors.Default;
  1711. MessageBox.Show("중계기선택을 확인 하십시요.. 차단설정을 할 수 없습니다.", Application.ProductName);
  1712. return;
  1713. }
  1714. }
  1715. }
  1716. //회로차단명령
  1717. private void chkDeviceCutFlag_Click(object sender, EventArgs e)
  1718. {
  1719. // cyim 2014.4.3 : 화면 전환시에 중계기가 없는 경우에도 회로차단 버튼이 활성화된다 : 조건 추가
  1720. // 수정(lch_13.08.28) - 중계기 2*2의 회색 배경으로 된 34번 디바이스를 클릭하였을 경우는 회로 차단을 하지 못함
  1721. if (dataGridView2.SelectedCells.Count == 0 || this.dataGridView2.SelectedCells[0].Value == null)
  1722. {
  1723. return;
  1724. }
  1725. if (dataGridView2.SelectedCells.Count > 0 && !lblRepeaterID.Text.Equals(""))
  1726. {
  1727. try
  1728. {
  1729. bool chkCutFlag = chkDeviceCutFlag.Checked ? false : true;
  1730. DataGridViewCell upCell = this.dataGridView1.SelectedCells[0];
  1731. DataGridViewCell repCell = this.dataGridView2.SelectedCells[0];
  1732. String InOutType = repCell.RowIndex == 0 ? "I" : "O";
  1733. int DeviceId = repCell.ColumnIndex + 1;
  1734. if (MessageBox.Show(string.Format("{0}회로[{1}] 차단{2} 명령을 수행하시겠습니까?"
  1735. , InOutType == "I" ? "입력" : "출력", DeviceId, chkCutFlag ? "설정" : "해제")
  1736. , Application.ProductName, MessageBoxButtons.YesNo) == DialogResult.Yes)
  1737. {
  1738. this.Cursor = Cursors.WaitCursor;
  1739. DacDeviceConfig dacDeviceConfig = new DacDeviceConfig(mdi.myReceiverID);// cyim 2015.7.30 데이타베이스 접속 루틴 변경
  1740. //int CommID = 1;
  1741. int BoardID = Util.StrToInt(txtBoardID.Text, 0);
  1742. int LoopNo = Util.StrToInt(txtLoopNo.Text, 0);
  1743. int RepeaterId = (upCell.RowIndex * 10) + upCell.ColumnIndex + 1;
  1744. //int RepeaterId = Util.StrToInt(lblRepeaterID.Text, 0);
  1745. if (chkCutFlag)
  1746. {
  1747. LFC.Log("타입: 수신기 조작 로그, 메세지: 차단-회로차단 설정");
  1748. }
  1749. else
  1750. {
  1751. LFC.Log("타입: 수신기 조작 로그, 메세지: 차단-회로차단 해제");
  1752. }
  1753. dacDeviceConfig.Device_Cut_Update(mdi.myReceiverID, BoardID, LoopNo, RepeaterId, DeviceId, InOutType, chkCutFlag ? "Y" : "N");
  1754. /******************************************/
  1755. /* 회로 차단 명령 Progress 표시 */
  1756. /******************************************/
  1757. frmProgress frm = new frmProgress(mdi);// cyim 2016.12.07 : 수신기 모델별 내부 로직 변경
  1758. CmdInfo cmd = new CmdInfo(prt_cmd_define.read_command_status, mdi.myReceiverID, 1, LoopNo, BoardID, null);
  1759. cmd.CommandType = "DC";
  1760. cmd.ApplyRange = InOutType; //차단레벨(회로타입차단용) A-All,C-Comm,B-Board,L-Loop,R-중계기,D-회로,I-입력회로,O-출력회로
  1761. cmd.repeaterNo = RepeaterId;
  1762. cmd.DeviceId = DeviceId;
  1763. cmd.Status = chkCutFlag ? 0 : 1;//k.s.d 20120102, 1 : 0; -> 0 : 1; with jys(ub).
  1764. cmd.CommandData = "CUTCOMMAND";
  1765. frm.Commandinfo = cmd;
  1766. cmd.Devicetype = InOutType; //k.s.d 20101022, cut setting bug fix with jys(ub).
  1767. frm.ui = this.mdi.ui;
  1768. frm.ShowDialog();
  1769. ///******************************************/
  1770. // cyim 2013.8.5 화면갱신전 대기화면 팝업창 출력
  1771. mdi.Popup.CommonPopupShow(this); // cyim 2015.8.4 수신반을 위한 static 클래스 정리
  1772. this.mdi.ui.ReceiverDBRead(); //수신기설정및차단카운트 다시 계산
  1773. this.Cursor = Cursors.Default;
  1774. //체크상태를 변경해준다..
  1775. chkDeviceCutFlag.Checked = chkCutFlag;
  1776. // cyim 2013.8.5 화면갱신전 대기화면 팝업창 출력 + 중복루틴 제거
  1777. mdi.Popup.CommonPopupClose(this); // cyim 2015.8.4 수신반을 위한 static 클래스 정리
  1778. //this.mdi.ui.ReceiverDBRead(); //수신기설정및차단카운트 다시 계산
  1779. //중계기 회로 데이터 읽기 명령
  1780. btnRepeaterAllInfo_Click(btnRepeaterAllInfo, System.EventArgs.Empty);
  1781. // cyim 2013.9.26 중계기차단 보완
  1782. // UI 갱신
  1783. Repeater_getData();
  1784. }
  1785. }
  1786. catch (Exception ex)
  1787. {
  1788. Util.UErrorMessage(ex, 0, 0);
  1789. //MessageBox.Show(ex.Message, Application.ProductName);
  1790. //MessageBox.Show(string.Format("[{0}]{1}", ex.StackTrace, ex.Message), Application.ProductName);
  1791. }
  1792. }
  1793. }
  1794. private void btnInWrite_Click(object sender, EventArgs e)
  1795. {
  1796. if (dataGridView1.SelectedCells.Count > 0)
  1797. {
  1798. try
  1799. {
  1800. DataGridViewCell cell = this.dataGridView1.SelectedCells[0];
  1801. if (MessageBox.Show("TEST용 회로만 입력쓰기가 가능합니다..그래도 입력쓰기를 하시겠습니까?"
  1802. , Application.ProductName, MessageBoxButtons.YesNo) == DialogResult.Yes)
  1803. {
  1804. int RepeaterID = (cell.RowIndex * 10) + cell.ColumnIndex + 1;
  1805. if (REPDATA == null || REPDATA[RepeaterID - 1] == null)
  1806. {
  1807. MessageBox.Show("회로설정 및 데이터를 읽을수 없습니다..통신상태를 확인하십시요..", Application.ProductName);
  1808. return;
  1809. }
  1810. InputIDVo vo = new InputIDVo();
  1811. vo.ReceiverID = int.Parse(txtThisReceiverID.Text);
  1812. vo.CommID = 1;
  1813. vo.BoardID = Util.StrToInt(txtBoardID.Text, 0);
  1814. vo.LoopNo = Util.StrToInt(txtLoopNo.Text, 0);
  1815. vo.RepeaterID = RepeaterID;
  1816. vo.RepeaterType = REP[RepeaterID - 1].RepeaterType;
  1817. vo.InoutType = "I"; //입력타입
  1818. InputDeviceStatus[] devData = new InputDeviceStatus[4]{REPDATA[RepeaterID - 1].Repeater_Input1
  1819. ,REPDATA[RepeaterID - 1].Repeater_Input2
  1820. ,REPDATA[RepeaterID - 1].Repeater_Input3
  1821. ,REPDATA[RepeaterID - 1].Repeater_Input4};
  1822. vo.InputUnitData = devData;
  1823. // cyim 2015.2.23 회로차단시에는 사용불가
  1824. // 중계기 인덱스
  1825. int no = (cell.RowIndex * 10) + cell.ColumnIndex + 1;
  1826. IWin32Window window = this;
  1827. frmModalUnitDataSelect frm = new frmModalUnitDataSelect(REP[no - 1]);
  1828. frm.InputVo = vo;
  1829. frm.ShowDialog(window);
  1830. vo = frm.InputVo;
  1831. //입력한 코드가 있다면
  1832. if (vo.InputOK)
  1833. {
  1834. InputDeviceStatus[] inData = vo.InputUnitData;
  1835. RepeaterData inputdata = new RepeaterData((byte)RepeaterID);
  1836. inputdata.Set_Input_Data((int)inData[3], (int)inData[2], (int)inData[1], (int)inData[0]);
  1837. //완료이벤트
  1838. dCommandResponse d = new dCommandResponse(RepeaterInputWriteComplete);
  1839. //명령생성 및 실행
  1840. CmdInfo cmd = new CmdInfo(prt_cmd_define.write_repeater_input_unit, mdi.myReceiverID, 1, vo.LoopNo, vo.BoardID, vo.RepeaterID, d);
  1841. cmd.CommandData = inputdata;
  1842. mdi.ui.runCommand(cmd);
  1843. }
  1844. }
  1845. }
  1846. catch (Exception ex)
  1847. {
  1848. Util.UErrorMessage(ex, 0, 0);
  1849. }
  1850. }
  1851. }
  1852. //중계기 입력쓰기 완료
  1853. public void RepeaterInputWriteComplete(CmdInfo cmd)
  1854. {
  1855. //에러응답처리
  1856. if (!Util.ComInfoErrProcess(cmd, mdi.ui.Connected, "RCVData_WriteRepeaterInputUNIT")) // cyim 2015.7.23 NACK 처리 부분 오류
  1857. {
  1858. button_end(true);
  1859. return;
  1860. }
  1861. try
  1862. {
  1863. int BoardID = Util.StrToInt(txtBoardID.Text, 0);
  1864. int Loop = Util.StrToInt(txtLoopNo.Text, -1);
  1865. if (BoardID == cmd.boardNo && cmd.loopNo == Loop)
  1866. {
  1867. int RepeaterID = cmd.repeaterNo;
  1868. RCVData_WriteRepeaterInputUNIT ResponseData = (RCVData_WriteRepeaterInputUNIT)cmd.ResponseData;
  1869. RepeaterPointUnit newdata = new RepeaterPointUnit(BoardID, ResponseData.Data);
  1870. //데이터저장
  1871. ReceiverTypeInfo Receiverinfo = mdi.ui.MyReceiverTypeInfo; //수신기설정
  1872. BoardTypeInfo brdinfo = Receiverinfo.Get_RepeaterType(BoardID); //통신보드savBoardID의 loop0의 설정값
  1873. RepeaterPointUnit[] repdata;
  1874. if (savLoop == 0)
  1875. {
  1876. repdata = brdinfo.Loop0_RepeaterUnit_Data; //127개 중계기 데이터
  1877. }
  1878. else
  1879. {
  1880. repdata = brdinfo.Loop1_RepeaterUnit_Data; //127개 중계기 데이터
  1881. }
  1882. repdata[RepeaterID - 1] = newdata;
  1883. //셀에 표시
  1884. DeviceStatus(REP[RepeaterID - 1], REPDATA[RepeaterID - 1]); //회로내용표시
  1885. }
  1886. }
  1887. catch (Exception ex)
  1888. {
  1889. Util.UErrorMessage(ex, 0, 0);
  1890. }
  1891. finally
  1892. {
  1893. //버튼 비활성 해제
  1894. button_end(true);
  1895. }
  1896. }
  1897. //중계기 출력쓰기 완료
  1898. public void RepeaterOutputWriteComplete(CmdInfo cmd)
  1899. {
  1900. //에러응답처리
  1901. if (!Util.ComInfoErrProcess(cmd, mdi.ui.Connected, "RCVData_WriteRepeaterOutputUNIT")) // cyim 2015.7.23 NACK 처리 부분 오류
  1902. {
  1903. button_end(true);
  1904. return;
  1905. }
  1906. try
  1907. {
  1908. int BoardID = Util.StrToInt(txtBoardID.Text, 0);
  1909. int Loop = Util.StrToInt(txtLoopNo.Text, -1);
  1910. if (BoardID == cmd.boardNo && cmd.loopNo == Loop)
  1911. {
  1912. int RepeaterID = cmd.repeaterNo;
  1913. RCVData_WriteRepeaterOutputUNIT ResponseData = (RCVData_WriteRepeaterOutputUNIT)cmd.ResponseData;
  1914. RepeaterPointUnit newdata = new RepeaterPointUnit(BoardID, ResponseData.Data);
  1915. //데이터저장
  1916. ReceiverTypeInfo Receiverinfo = mdi.ui.MyReceiverTypeInfo; //수신기설정
  1917. BoardTypeInfo brdinfo = Receiverinfo.Get_RepeaterType(BoardID); //통신보드savBoardID의 loop0의 설정값
  1918. RepeaterPointUnit[] repdata;
  1919. if (savLoop == 0)
  1920. {
  1921. repdata = brdinfo.Loop0_RepeaterUnit_Data; //127개 중계기 데이터
  1922. }
  1923. else
  1924. {
  1925. repdata = brdinfo.Loop1_RepeaterUnit_Data; //127개 중계기 데이터
  1926. }
  1927. repdata[RepeaterID - 1] = newdata;
  1928. //셀에 표시
  1929. DeviceStatus(REP[RepeaterID - 1], REPDATA[RepeaterID - 1]); //회로내용표시
  1930. if (this.tRepeaterReadThreadStatus == 1)
  1931. {
  1932. this.tRepeaterReadThread = new Thread(this.RepeaterInfoRead);
  1933. this.tRepeaterReadThreadStatus = 1;
  1934. this.tRepeaterReadThread.Start();
  1935. }
  1936. }
  1937. }
  1938. catch (Exception ex)
  1939. {
  1940. Util.UErrorMessage(ex, 0, 0);
  1941. //MessageBox.Show(string.Format("[{0}]\r\n{1}", ex.Message, ex.Source), Application.ProductName);
  1942. }
  1943. finally
  1944. {
  1945. //버튼 비활성 해제
  1946. button_end(true);
  1947. }
  1948. }
  1949. private void btnOutWrite_Click(object sender, EventArgs e)
  1950. {
  1951. if (dataGridView1.SelectedCells.Count > 0)
  1952. {
  1953. try
  1954. {
  1955. DataGridViewCell cell = this.dataGridView1.SelectedCells[0];
  1956. if (MessageBox.Show("실제로 화재 및 설비 연동감지가 될수 있습니다. 그래도 출력쓰기를 하시겠습니까?"
  1957. , Application.ProductName, MessageBoxButtons.YesNo) == DialogResult.Yes)
  1958. {
  1959. int RepeaterID = (cell.RowIndex * 10) + cell.ColumnIndex + 1;
  1960. if (REPDATA == null || REPDATA[RepeaterID - 1] == null)
  1961. {
  1962. MessageBox.Show("회로설정 및 데이터를 읽을수 없습니다..통신상태를 확인하십시요..", Application.ProductName);
  1963. return;
  1964. }
  1965. InputIDVo vo = new InputIDVo();
  1966. vo.ReceiverID = int.Parse(txtThisReceiverID.Text);
  1967. vo.CommID = 1;
  1968. vo.BoardID = Util.StrToInt(txtBoardID.Text, 0);
  1969. vo.LoopNo = Util.StrToInt(txtLoopNo.Text, 0);
  1970. vo.RepeaterID = RepeaterID;
  1971. vo.RepeaterType = REP[RepeaterID - 1].RepeaterType;
  1972. vo.InoutType = "O"; //출력타입
  1973. OutputDeviceStatus[] devData = new OutputDeviceStatus[4]{REPDATA[RepeaterID - 1].Repeater_Output1
  1974. ,REPDATA[RepeaterID - 1].Repeater_Output2
  1975. ,REPDATA[RepeaterID - 1].Repeater_Output3
  1976. ,REPDATA[RepeaterID - 1].Repeater_Output4};
  1977. vo.OutputUnitData = devData;
  1978. // cyim 2015.2.23 회로차단시에는 사용불가
  1979. // 중계기 인덱스
  1980. int no = (cell.RowIndex * 10) + cell.ColumnIndex + 1;
  1981. IWin32Window window = this;
  1982. frmModalUnitDataSelect frm = new frmModalUnitDataSelect(REP[no - 1]);
  1983. frm.InputVo = vo;
  1984. frm.ShowDialog(window);
  1985. vo = frm.InputVo;
  1986. //입력한 코드가 있다면
  1987. if (vo.InputOK)
  1988. {
  1989. OutputDeviceStatus[] outData = vo.OutputUnitData;
  1990. RepeaterData outputdata = new RepeaterData((byte)RepeaterID);
  1991. outputdata.Set_Output_Data(outData[3] == OutputDeviceStatus.Blocking ? true : false
  1992. , outData[2] == OutputDeviceStatus.Blocking ? true : false
  1993. , outData[1] == OutputDeviceStatus.Blocking ? true : false
  1994. , outData[0] == OutputDeviceStatus.Blocking ? true : false
  1995. , outData[3] == OutputDeviceStatus.Write ? true : false
  1996. , outData[2] == OutputDeviceStatus.Write ? true : false
  1997. , outData[1] == OutputDeviceStatus.Write ? true : false
  1998. , outData[0] == OutputDeviceStatus.Write ? true : false
  1999. );
  2000. //완료이벤트
  2001. dCommandResponse d = new dCommandResponse(RepeaterOutputWriteComplete);
  2002. //명령생성 및 실행
  2003. CmdInfo cmd = new CmdInfo(prt_cmd_define.write_repeater_output_unit, mdi.myReceiverID, 1, vo.LoopNo, vo.BoardID, RepeaterID, d);
  2004. cmd.CommandData = outputdata;
  2005. mdi.ui.runCommand(cmd);
  2006. //연동으로 인해 출력값이 변경될 수 있으므로 계속 읽는다..
  2007. //this.tRepeaterReadThread = new Thread(this.RepeaterInfoRead);
  2008. this.tRepeaterReadThreadStatus = 1;
  2009. //this.tRepeaterReadThread.Start();
  2010. }
  2011. }
  2012. }
  2013. catch (Exception ex)
  2014. {
  2015. Util.UErrorMessage(ex, 0, 0);
  2016. }
  2017. }
  2018. }
  2019. //
  2020. // cyim 2013.7.12 디자인개선작업 : 제어 - 중계단
  2021. //
  2022. private void button_LoopCut_Click(object sender, EventArgs e)
  2023. {
  2024. LFC.Log("타입: 수신기 조작 로그, 메세지: 차단-계통차단 클릭");
  2025. button_Menu_Color_Init();
  2026. this.tabControl_Main.SelectTab(0);
  2027. this.button_LoopCut.BackgroundImage = (Image)Properties.Resources.탭메뉴버튼_주황_100_30;
  2028. this.panel_Menu.Focus();
  2029. }
  2030. private void button_Menu_RepeaterCut_Click(object sender, EventArgs e)
  2031. {
  2032. LFC.Log("타입: 수신기 조작 로그, 메세지: 차단-중계기차단 클릭");
  2033. button_Menu_Color_Init();
  2034. this.tabControl_Main.SelectTab(1);
  2035. this.button_Menu_RepeaterCut.BackgroundImage = (Image)Properties.Resources.탭메뉴버튼_주황_100_30;
  2036. this.panel_Menu.Focus();
  2037. }
  2038. private void button_Menu_Color_Init()
  2039. {
  2040. this.button_LoopCut.BackgroundImage = (Image)Properties.Resources.탭메뉴버튼_회색_100_30;
  2041. this.button_Menu_RepeaterCut.BackgroundImage = (Image)Properties.Resources.탭메뉴버튼_회색_100_30;
  2042. }
  2043. }
  2044. }