VMS0500MF.cpp 101 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "AppGlobalF.h"
  4. #include "ITSSkinF.h"
  5. #include "ITSUtilF.h"
  6. #include "FrmVmsOprMainF.h"
  7. #include "ITSLangTransF.h"
  8. #pragma hdrstop
  9. #include "VMS0500MF.h"
  10. //---------------------------------------------------------------------------
  11. #pragma package(smart_init)
  12. #pragma link "cxContainer"
  13. #pragma link "cxControls"
  14. #pragma link "cxEdit"
  15. #pragma link "cxGraphics"
  16. #pragma link "cxGroupBox"
  17. #pragma link "cxLabel"
  18. #pragma link "cxLookAndFeelPainters"
  19. #pragma link "cxLookAndFeels"
  20. #pragma link "cxPC"
  21. #pragma link "cxPCdxBarPopupMenu"
  22. #pragma link "cxSplitter"
  23. #pragma link "dxSkinBlack"
  24. #pragma link "dxSkinBlue"
  25. #pragma link "dxSkinCaramel"
  26. #pragma link "dxSkinCoffee"
  27. #pragma link "dxSkinDarkRoom"
  28. #pragma link "dxSkinDarkSide"
  29. #pragma link "dxSkinFoggy"
  30. #pragma link "dxSkinGlassOceans"
  31. #pragma link "dxSkiniMaginary"
  32. #pragma link "dxSkinLilian"
  33. #pragma link "dxSkinLiquidSky"
  34. #pragma link "dxSkinLondonLiquidSky"
  35. #pragma link "dxSkinMcSkin"
  36. #pragma link "dxSkinMoneyTwins"
  37. #pragma link "dxSkinOffice2007Black"
  38. #pragma link "dxSkinOffice2007Blue"
  39. #pragma link "dxSkinOffice2007Green"
  40. #pragma link "dxSkinOffice2007Pink"
  41. #pragma link "dxSkinOffice2007Silver"
  42. #pragma link "dxSkinOffice2010Black"
  43. #pragma link "dxSkinOffice2010Blue"
  44. #pragma link "dxSkinOffice2010Silver"
  45. #pragma link "dxSkinsCore"
  46. #pragma link "dxSkinscxPCPainter"
  47. #pragma link "dxSkinSeven"
  48. #pragma link "dxSkinSharp"
  49. #pragma link "dxSkinSilver"
  50. #pragma link "dxSkinStardust"
  51. #pragma link "cxClasses"
  52. #pragma link "cxCustomData"
  53. #pragma link "cxData"
  54. #pragma link "cxDataStorage"
  55. #pragma link "cxFilter"
  56. #pragma link "cxGrid"
  57. #pragma link "cxGridCustomTableView"
  58. #pragma link "cxGridCustomView"
  59. #pragma link "cxGridLevel"
  60. #pragma link "cxGridTableView"
  61. #pragma link "cxStyles"
  62. #pragma link "cxTextEdit"
  63. #pragma link "cxGridCardView"
  64. #pragma link "cxGridCustomLayoutView"
  65. #pragma link "cxCheckBox"
  66. #pragma link "cxDropDownEdit"
  67. #pragma link "cxImage"
  68. #pragma link "cxButtons"
  69. #pragma link "cxCalc"
  70. #pragma link "cxGridBandedTableView"
  71. #pragma link "FRAME_VmsStateF"
  72. #pragma link "FRAME_VmsStateF"
  73. #pragma link "FRAME_VmsMsgListF"
  74. #pragma link "ImageBtn"
  75. #pragma link "cxMaskEdit"
  76. #pragma link "cxRadioGroup"
  77. #pragma link "cxSpinEdit"
  78. #pragma link "cxTimeEdit"
  79. #pragma link "IdBaseComponent"
  80. #pragma link "IdComponent"
  81. #pragma link "IdIcmpClient"
  82. #pragma link "IdRawBase"
  83. #pragma link "IdRawClient"
  84. #pragma link "FFBaseComponent"
  85. #pragma link "FFBasePlay"
  86. #pragma link "FFPlay"
  87. #pragma link "IdHTTP"
  88. #pragma link "IdTCPClient"
  89. #pragma link "IdTCPConnection"
  90. #pragma link "AcesTechXPlayer2Lib_OCX"
  91. #pragma resource "*.dfm"
  92. TVMS0500M *VMS0500M = NULL;
  93. #define LICENSE_KEY "FSXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX"
  94. #define FFPLAYER 0
  95. #define ACES 1
  96. //---------------------------------------------------------------------------
  97. __fastcall TVMS0500M::TVMS0500M(TComponent* Owner)
  98. : TForm(Owner)
  99. {
  100. //::CoInitialize(NULL);
  101. // control width 900
  102. LangTrans->Translate(this, ITSDb_GetConnection());
  103. ITSSkin_Load(this);
  104. LoadLocalSkin();
  105. if (FormStyle != fsMDIChild) CMM_LoadForm(g_sFormsDir, this);
  106. FPalyerForm = NULL;
  107. FSelVmsObj = NULL;
  108. FRAMEVmsStateList1->PnlTop->Visible = false;
  109. FRAMEVmsStateList1->PnlBottom->Visible = false;
  110. FRAMEVmsStateList1->TvList->OptionsView->Footer = false;
  111. FRAMEVmsStateList1->Col04->Visible = false;
  112. FRAMEVmsStateList1->Col05->Visible = false;
  113. FRAMEVmsStateList1->Col06->Visible = true;
  114. FRAMEVmsStateList1->ColumnSel->Visible = true;
  115. cxTabSheet5->TabVisible = false;
  116. cxTabSheet5->Visible = false;
  117. cxTabSheet1->TabVisible = false;
  118. cxTabSheet1->Visible = false;
  119. cxTabSheet6->TabVisible = false;
  120. cxTabSheet6->Visible = false;
  121. PgControl->ActivePageIndex = 0;
  122. FVmsIds = new TStringList();
  123. FTitle = Caption;//"VMS 제어";
  124. FCtrlTab = NULL;
  125. PgCam->Properties->HideTabs = true;
  126. PnlCamera->ParentColor = false;
  127. FStrmPlay = false;
  128. reMsg->Lines->Clear();
  129. FStrmHandle = 0;
  130. #if FFPLAYER
  131. AcesTechXPlayer21->Visible = false;
  132. String sAVILibDir = g_sAppDir + "LibAV";
  133. FFPlayer1->SetLicenseKey(LICENSE_KEY);
  134. FFPlayer1->DisableFPUExceptions();
  135. if (!FFPlayer1->LoadAVLib(sAVILibDir))
  136. {
  137. reMsg->Lines->Add("영상표출 라이브러리 초기화 실패.");
  138. #if 0
  139. if (g_AppCfg.sLang != "kr") Application->MessageBox(L"Stream display library load failed.", L"Stream display fail", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  140. else Application->MessageBox(L"영상표출 라이브러리를 로드하지 못하였습니다.", L"영상표출 오류", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  141. #endif
  142. }
  143. #endif
  144. #if ACES
  145. ChkFullScreen->Visible = false;
  146. #endif
  147. reMsg->Lines->Clear();
  148. }
  149. //---------------------------------------------------------------------------
  150. void __fastcall TVMS0500M::CommClose()
  151. {
  152. try
  153. {
  154. WebCamStop();
  155. SAFE_DELETE(FVmsIds);
  156. if (FormStyle != fsMDIChild) CMM_SaveForm(g_sFormsDir, this);
  157. FStrmPlay = false;
  158. //::CoUninitialize();
  159. }
  160. catch(...)
  161. {
  162. }
  163. }
  164. //---------------------------------------------------------------------------
  165. void __fastcall TVMS0500M::FormShow(TObject *Sender)
  166. {
  167. Refresh();
  168. FRAMEVmsStateList1->UpdateList();
  169. //FRAMEVmsStateList1->TvList->ApplyBestFit(NULL, true, false);
  170. FRAMEVmsStateList1->CxList->Enabled = false;
  171. UpdatePingList();
  172. TmrShow->Enabled = true;
  173. }
  174. //---------------------------------------------------------------------------
  175. void __fastcall TVMS0500M::FormActivate(TObject *Sender)
  176. {
  177. ActivateForm(true);
  178. }
  179. //---------------------------------------------------------------------------
  180. void __fastcall TVMS0500M::FormDeactivate(TObject *Sender)
  181. {
  182. ActivateForm(false);
  183. }
  184. //---------------------------------------------------------------------------
  185. void __fastcall TVMS0500M::LoadLocalSkin()
  186. {
  187. PnlVmsCam->ParentColor = false;
  188. PnlVmsCam->Color = clBlack;
  189. PnlSamsung->ParentColor = false;
  190. PnlSamsung->Color = clBlack;
  191. Refresh();
  192. }
  193. //---------------------------------------------------------------------------
  194. void __fastcall TVMS0500M::TmrShowTimer(TObject *Sender)
  195. {
  196. TmrShow->Enabled = false;
  197. FRAMEVmsStateList1->CxList->Enabled = true;
  198. }
  199. //---------------------------------------------------------------------------
  200. void __fastcall TVMS0500M::FormClose(TObject *Sender, TCloseAction &Action)
  201. {
  202. try {
  203. CommClose();
  204. VMS0500M = NULL;
  205. Action = caFree;
  206. } catch(...) {}
  207. }
  208. //---------------------------------------------------------------------------
  209. void __fastcall TVMS0500M::OnMainFormMessage(TMessage &Msg)
  210. {
  211. }
  212. //---------------------------------------------------------------------------
  213. void __fastcall TVMS0500M::OnVmsStateRefreshMessage(TMessage &Msg)
  214. {
  215. FRAMEVmsStateList1->RefreshStatus();
  216. RefreshPingList();
  217. }
  218. //---------------------------------------------------------------------------
  219. void __fastcall TVMS0500M::OnVmsFormRefreshMessage(TMessage &Msg)
  220. {
  221. }
  222. //---------------------------------------------------------------------------
  223. void __fastcall TVMS0500M::OnVmsSelectMessage(TMessage &Msg)
  224. {
  225. #if 0
  226. try {
  227. FSelVmsObj = (TVmsCtlr*)Msg.WParam;
  228. FRAMEVmsState1->SelVmsObj = FSelVmsObj;
  229. if (!FSelVmsObj) return;
  230. TVMSWCAM0 *pSelForm = (TVMSWCAM0*)Msg.LParam;
  231. if (pSelForm == FSelForm) return;
  232. if (FSelForm) FSelForm->SelectForm(false);
  233. FSelForm = pSelForm;
  234. if (FSelForm) FSelForm->SelectForm(true);
  235. //VMS정보제공구간 소통정보 업데이트
  236. LoadVmsMsgScenario((FSelVmsObj->VMS_CTLR_NMBR));
  237. } catch(...) {};
  238. #endif
  239. }
  240. //---------------------------------------------------------------------------
  241. void __fastcall TVMS0500M::ActivateForm(bool AActivate)
  242. {
  243. //TODO: 기존에는 아래가 주석으로 막혀 있었음. 왜그러지?
  244. if (AActivate) FRAMEVmsStateList1->RefreshStatus();
  245. }
  246. //---------------------------------------------------------------------------
  247. void __fastcall TVMS0500M::DisplayInfo()
  248. {
  249. FSelVmsObj = NULL;
  250. PnlVms->Caption = " " + lblSelVms->Caption + " -";//" Select VMS: -";
  251. TcxGridBandedTableView *TvList = FRAMEVmsStateList1->TvList;
  252. TcxDataController *pGDC = TvList->DataController;
  253. int nSelIdx = CMM_GetRecordIndex(TvList);
  254. if (nSelIdx < 0) return;
  255. String sVmsNmbr = VarToStr(pGDC->Values[nSelIdx][FRAMEVmsStateList1->Col01->Index]);
  256. int nMemPtr = (int)pGDC->Values[nSelIdx][FRAMEVmsStateList1->Col99->Index];
  257. FSelVmsObj = (TVmsCtlr*)nMemPtr;
  258. if (!FSelVmsObj) return;
  259. PnlVms->Caption = " " + lblSelVms->Caption + " [" + FSelVmsObj->VMS_CTLR_ID + "] " + FSelVmsObj->VMS_NM;
  260. try
  261. {
  262. if (FSelVmsObj->PANL_ON_TIME.Length() == 4) // 전팡관ON시각
  263. {
  264. String sPowerOnTime = FSelVmsObj->PANL_ON_TIME;
  265. sPowerOnTime.Insert(":", 3);
  266. cxTimeOn->EditValue = sPowerOnTime;
  267. cxDispStrTm->EditValue = sPowerOnTime;
  268. cxDisplayTimeOn->EditValue = sPowerOnTime;
  269. }
  270. if (FSelVmsObj->PANL_OFF_TIME.Length() == 4) // 전광판OFF시각
  271. {
  272. String sPowerOffTime = FSelVmsObj->PANL_OFF_TIME;
  273. sPowerOffTime.Insert(":", 3);
  274. cxTimeOff->EditValue = sPowerOffTime;
  275. cxDispEndTm->EditValue = sPowerOffTime;
  276. cxDisplayTimeOff->EditValue = sPowerOffTime;
  277. }
  278. Se01->Value = FSelVmsObj->STATE.ScheduledMessageOperatingTime;/* 필수 계획된 메시지의 동작시간(초) */
  279. Se02->Value = FSelVmsObj->STATE.ModuleOperatingTemperature; /* 필수 모듈 전원이 꺼지는 온도값(℃) */
  280. Se03->Value = FSelVmsObj->STATE.FanOperatingTemperature; /* 필수 Fan 동작 기준 온도값(℃) */
  281. Se04->Value = FSelVmsObj->STATE.HeaterOperatingTemperature; /* 필수 Heater 동작 기준 온도값(℃) */
  282. Se05->Value = FSelVmsObj->STATE.ModuleBasicFailureRate; /* 선택 모듈 장애율 (한 개의 모듈을 장애로 처리하기 위한 픽셀의 백분율값) */
  283. Se06->Value = 3;
  284. Se07->Value = 30;
  285. SeCommErrTime->Value = 60; //FSelVmsObj->VMS_CMNC_ERR_BASS_VAL; //통신장애 기본값(Default=60초)
  286. SeSlotCommErr->Value = 0; //FSelVmsObj->CMNCFAIL_SLOT_NMBR = (int)pReq->SlotCommErr; // NUMBER(4) Y 0 통신장애 SLOT 번호
  287. SeSlotPowerErr->Value = 0; //FSelVmsObj->PWER_FAIL_SLOT_NMBR = (int)pReq->SlotPowerErr; // NUMBER(4) Y 0 전원 장애 SLOT 번호
  288. #if 0
  289. SeLumNight->Value = FSelVmsObj->VMS_NGHT_BRGH_STEP;
  290. SeLumDay->Value = FSelVmsObj->VMS_WEEK_BRGH_STEP;
  291. SeModRate->Value = FSelVmsObj->VMS_MODL_ERR_RATE;
  292. SeModCycle->Value = FSelVmsObj->VMS_MODL_CHK_CYCL;
  293. SeMsgTime->Value = FSelVmsObj->DEF_PHSE_CHNG_CYCL;
  294. SeFormCycleTime->Value = FSelVmsObj->VMS_PHSE_CHNG_CYCL;
  295. #else
  296. SeCurrBrgh->Value = FSelVmsObj->BRGH_CURR_STEP;
  297. SeWeekBrgh->Value = FSelVmsObj->BRGH_WEEK_STEP;
  298. SeNghtBrgh->Value = FSelVmsObj->BRGH_NGHT_STEP;
  299. #endif
  300. if (FSelVmsObj->OPER_MODE == "A")
  301. {
  302. RdbAuto->Checked = true;
  303. }
  304. else
  305. if (FSelVmsObj->OPER_MODE == "F")
  306. {
  307. RdbFix->Checked = true;
  308. }
  309. else
  310. if (FSelVmsObj->OPER_MODE == "B")
  311. {
  312. RdbBase->Checked = true;
  313. }
  314. }
  315. catch(Exception &e)
  316. {
  317. }
  318. try
  319. {
  320. reMsg->Lines->Clear();
  321. WebCamPlay((FSelVmsObj->VMS_CTLR_NMBR));
  322. }
  323. catch(Exception &e)
  324. {
  325. }
  326. BtnWebCamUrl->Enabled = true;
  327. }
  328. //---------------------------------------------------------------------------
  329. void __fastcall TVMS0500M::BtnAllSelectClick(TObject *Sender)
  330. {
  331. TcxButton *pBtn = (TcxButton*)Sender;
  332. if (PgControl->Properties->ActivePage != TabPing)
  333. CMM_CheckAllListItem(FRAMEVmsStateList1->TvList, FRAMEVmsStateList1->ColumnSel->Index, pBtn->Tag);
  334. else
  335. CMM_CheckAllListItem(TvPing, ColumnSel->Index, pBtn->Tag);
  336. }
  337. //---------------------------------------------------------------------------
  338. void __fastcall TVMS0500M::ClearCheckList()
  339. {
  340. TcxGridBandedTableView *TvList = FRAMEVmsStateList1->TvList;
  341. TcxDataController *pGDC = TvList->DataController;
  342. try
  343. {
  344. TvList->BeginUpdate();
  345. pGDC->BeginUpdate();
  346. int nRows = pGDC->RecordCount;
  347. for (int ii = 0; ii < nRows; ii++)
  348. {
  349. pGDC->Values[ii][FRAMEVmsStateList1->ColumnSel->Index] = false;
  350. }
  351. }
  352. __finally
  353. {
  354. pGDC->EndUpdate();
  355. TvList->EndUpdate();
  356. }
  357. }
  358. //---------------------------------------------------------------------------
  359. void __fastcall TVMS0500M::FRAMEVmsStateList1TvListCellDblClick(TcxCustomGridTableView *Sender,
  360. TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton,
  361. TShiftState AShift, bool &AHandled)
  362. {
  363. if (!ACellViewInfo) return;
  364. ClearCheckList();
  365. TcxGridBandedTableView *TvList = FRAMEVmsStateList1->TvList;
  366. TcxDataController *pGDC = TvList->DataController;
  367. int nSelIdx = CMM_GetRecordIndex(TvList);
  368. if (nSelIdx < 0) return;
  369. pGDC->Values[nSelIdx][FRAMEVmsStateList1->ColumnSel->Index] = true;
  370. DisplayInfo();
  371. }
  372. //---------------------------------------------------------------------------
  373. void __fastcall TVMS0500M::Se01PropertiesChange(TObject *Sender)
  374. {
  375. #if 1
  376. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  377. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  378. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  379. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  380. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  381. #endif
  382. }
  383. //---------------------------------------------------------------------------
  384. int __fastcall TVMS0500M::GetSelListItems(bool ACommCheck/*=true*/)
  385. {
  386. TcxGridBandedTableView *TvList = FRAMEVmsStateList1->TvList;
  387. TcxDataController *pGDC = TvList->DataController;
  388. FVmsIds->Clear();
  389. try
  390. {
  391. bool bSelected;
  392. int nRows = TvList->ViewData->RecordCount;
  393. TvList->BeginUpdate();
  394. for (int ii = 0; ii < nRows; ii++)
  395. {
  396. TcxCustomGridRow* ARow = TvList->ViewData->Rows[ii];
  397. int nMemPtr = (int)ARow->Values[FRAMEVmsStateList1->Col99->Index];
  398. TVmsCtlr *pVms = (TVmsCtlr*)nMemPtr;
  399. if (!pVms) continue;
  400. bSelected = (bool)ARow->Values[FRAMEVmsStateList1->ColumnSel->Index];
  401. if (bSelected)
  402. {
  403. String sVmsNmbr = ARow->Values[FRAMEVmsStateList1->Col01->Index]; //VMS번호
  404. if (ACommCheck)
  405. {
  406. if (pVms->STATE.Comm == vms_comm_normal)
  407. {
  408. FVmsIds->Add(sVmsNmbr);
  409. }
  410. }
  411. else
  412. {
  413. FVmsIds->Add(sVmsNmbr);
  414. }
  415. }
  416. }
  417. }
  418. __finally
  419. {
  420. TvList->EndUpdate();
  421. }
  422. return FVmsIds->Count;
  423. }
  424. //---------------------------------------------------------------------------
  425. void __fastcall TVMS0500M::BtnControlClick(TObject *Sender)
  426. {
  427. //전광판제어
  428. String sTitle = cxLabel1->Caption;//"전광판/제어기 제어";
  429. String sMsg = "";
  430. int nOkCnt = 0;
  431. int nSelCnt = GetSelListItems(true);
  432. if (0 == nSelCnt)
  433. {
  434. sMsg = cxLabel2->Caption + "\r\n" + cxLabel9->Caption;//"VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.\r\n현재 통신이 비정상인 VMS는 선택하실 수 없습니다.";
  435. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  436. FRAMEVmsStateList1->CxList->SetFocus();
  437. return;
  438. }
  439. int nCmdIdx;
  440. if (RdbOn->Checked)
  441. {
  442. nCmdIdx = vms_req_board_power_on;
  443. sMsg = cxLabel3->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VMS에 VMS 전광판 전원 ON 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  444. }
  445. else
  446. if (RdbOff->Checked)
  447. {
  448. nCmdIdx = vms_req_board_power_off;
  449. sMsg = cxLabel4->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VMS에 VMS 전광판 전원 OFF 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  450. }
  451. else
  452. if (RdbReset->Checked)
  453. {
  454. nCmdIdx = 2;
  455. sMsg = cxLabel5->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VMS에 VMS 제어기 리셋 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  456. }
  457. else
  458. if (RdbLuminance->Checked)
  459. {
  460. nCmdIdx = 3;
  461. sMsg = cxLabel6->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VMS에 VMS 휘도값 제어 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  462. }
  463. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  464. String sCmdUser = g_pLOGIN->sUserId;
  465. String sCmdTime = Now().FormatString("yyyymmddhhnnss");
  466. int result;
  467. for (int ii = 0; ii < nSelCnt; ii++)
  468. {
  469. String sVmsNmbr = FVmsIds->Strings[ii];
  470. if (nCmdIdx == vms_req_board_power_on || nCmdIdx == vms_req_board_power_off)
  471. {
  472. // 전광판 On(=0)/Off(=1)
  473. INT_VMS_POWER_CTL_REQ VmsPowerCtl;
  474. BYTE MsgSeq;
  475. memset(&VmsPowerCtl, 0x00, sizeof(VmsPowerCtl));
  476. MsgSeq = (BYTE)0x10; // 제어명령 일련번호-결과값을 받아서 처리할때 필요함
  477. memcpy(VmsPowerCtl.CmdTime, AnsiString(sCmdTime).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  478. memcpy(VmsPowerCtl.OperId, AnsiString(sCmdUser).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  479. VmsPowerCtl.VMS_CTLR_NMBR = sVmsNmbr.ToIntDef(0);
  480. VmsPowerCtl.Command = (BYTE)nCmdIdx; /* 제어 구분, 1:켜짐 2:꺼짐 */
  481. String sOprCode = (nCmdIdx == vms_req_board_power_on) ? "V01" : "V02";
  482. String sCmdValue = (nCmdIdx == vms_req_board_power_on) ? "On" : "Off";
  483. result = CComm_VmsPowerControlReq(&VmsPowerCtl, MsgSeq);
  484. if (VERR_NONE == result)
  485. {
  486. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, sOprCode, sCmdValue, "1", sCmdUser);
  487. nOkCnt++;
  488. }
  489. else
  490. {
  491. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, sOprCode, sCmdValue, "0", sCmdUser);
  492. }
  493. }
  494. else
  495. if (nCmdIdx == 2)
  496. {
  497. // 제어기 리셋
  498. INT_VMS_RESET_REQ VmsReset;
  499. BYTE MsgSeq;
  500. memset(&VmsReset, 0x00, sizeof(VmsReset));
  501. MsgSeq = (BYTE)0x20;
  502. memcpy(VmsReset.CmdTime, AnsiString(sCmdTime).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  503. memcpy(VmsReset.OperId, AnsiString(sCmdUser).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  504. VmsReset.VMS_CTLR_NMBR = sVmsNmbr.ToIntDef(0);
  505. result = CComm_VmsResetReq(&VmsReset, MsgSeq);
  506. if (VERR_NONE == result)
  507. {
  508. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V03", "Reset", "1", sCmdUser);
  509. nOkCnt++;
  510. }
  511. else
  512. {
  513. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V03", "Reset", "0", sCmdUser);
  514. }
  515. }
  516. else
  517. if (nCmdIdx == 3)
  518. {
  519. // 휘도제어
  520. INT_VMS_LUMINANCE_REQ VmsLuminance;
  521. BYTE MsgSeq;
  522. String sCmdValue = SeLuminance->Value;
  523. memset(&VmsLuminance, 0x00, sizeof(VmsLuminance));
  524. MsgSeq = (BYTE)0x30;
  525. memcpy(VmsLuminance.CmdTime, AnsiString(sCmdTime).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  526. memcpy(VmsLuminance.OperId, AnsiString(sCmdUser).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  527. VmsLuminance.VMS_CTLR_NMBR = sVmsNmbr.ToIntDef(0);
  528. switch(CbBrghMode->ItemIndex)
  529. {
  530. case 0: VmsLuminance.BrghMode = 0x00; break;
  531. case 1: VmsLuminance.BrghMode = 0x01; break;
  532. case 2: VmsLuminance.BrghMode = 0x02; break;
  533. case 3: VmsLuminance.BrghMode = 0x09; break;
  534. }
  535. VmsLuminance.BrghCurrStep = (BYTE)SeCurrBrgh->Value;
  536. VmsLuminance.BrghWeekStep = (BYTE)SeWeekBrgh->Value;
  537. VmsLuminance.BrghNghtStep = (BYTE)SeNghtBrgh->Value;
  538. result = CComm_VmsLuminanceReq(&VmsLuminance, MsgSeq);
  539. if (VERR_NONE == result)
  540. {
  541. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V07", sCmdValue, "1", sCmdUser);
  542. nOkCnt++;
  543. }
  544. else
  545. {
  546. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V07", sCmdValue, "0", sCmdUser);
  547. }
  548. }
  549. Sleep(100);
  550. Application->ProcessMessages();
  551. }
  552. //sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS로 전광판/제어기 제어 명령을 요청하였습니다.";
  553. sMsg = String(nSelCnt) + " " + cxLabel7->Caption + " " + String(nOkCnt) + " " + cxLabel8->Caption;
  554. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  555. }
  556. //---------------------------------------------------------------------------
  557. void __fastcall TVMS0500M::BtnConfigClick(TObject *Sender)
  558. {
  559. //제어기함체환경설정
  560. int nVal03 = Se03->Value;
  561. int nVal04 = Se04->Value;
  562. int nStrTmHour = cxDispStrTm->Time.FormatString("HH").ToIntDef(0);
  563. int nStrTmMin = cxDispStrTm->Time.FormatString("NN").ToIntDef(0);
  564. int nEndTmHour = cxDispEndTm->Time.FormatString("HH").ToIntDef(0);
  565. int nEndTmMin = cxDispEndTm->Time.FormatString("NN").ToIntDef(0);
  566. String sTitle = cxLabel10->Caption;//"VMS 함체환경 설정";
  567. String sMsg = "";
  568. int nOkCnt = 0;
  569. int nSelCnt = GetSelListItems(false);
  570. if (0 == nSelCnt)
  571. {
  572. sMsg = cxLabel2->Caption;//"VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.\r\n현재 통신이 비정상인 VMS는 선택하실 수 없습니다.";
  573. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  574. FRAMEVmsStateList1->CxList->SetFocus();
  575. return;
  576. }
  577. if ((nStrTmHour*60 + nStrTmMin) > (nEndTmHour*60 + nEndTmMin))
  578. {
  579. sMsg = "전광판 가동종료시각이 전광판 가동시작시각보다 클 수 없습니다.\r\n전광판 가동시각을 확인하세요.";
  580. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  581. return;
  582. }
  583. int nCmdIdx = 0;
  584. sMsg = cxLabel11->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VMS에 함체환경 설정 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  585. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  586. String sCmdUser = g_pLOGIN->sUserId;
  587. String sCmdTime = Now().FormatString("yyyymmddhhnnss");
  588. String sCmdValue;
  589. sCmdValue.printf(L"%d.%d,%02d%02d,%02d%02d",
  590. nVal03,
  591. nVal04,
  592. nStrTmHour,
  593. nStrTmMin,
  594. nEndTmHour,
  595. nEndTmMin);
  596. int result;
  597. for (int ii = 0; ii < nSelCnt; ii++)
  598. {
  599. String sVmsNmbr = FVmsIds->Strings[ii];
  600. INT_VMS_PARA_SET_REQ VmsPara;
  601. BYTE MsgSeq;
  602. memset(&VmsPara, 0x00, sizeof(VmsPara));
  603. MsgSeq = (BYTE)0x40;
  604. memcpy(VmsPara.CmdTime, AnsiString(sCmdTime).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  605. memcpy(VmsPara.OperId, AnsiString(sCmdUser).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  606. VmsPara.VMS_CTLR_NMBR = sVmsNmbr.ToIntDef(0);
  607. VmsPara.FanRunTmpr = (BYTE)nVal03;
  608. VmsPara.HetrRunTmpr = (BYTE)nVal04;
  609. sprintf(VmsPara.DispStrTm, "%02d%02d", nStrTmHour, nStrTmMin);
  610. sprintf(VmsPara.DispEndTm, "%02d%02d", nEndTmHour, nEndTmMin);
  611. result = CComm_VmsParaSetReq(&VmsPara, MsgSeq);
  612. if (VERR_NONE == result)
  613. {
  614. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V04", sCmdValue, "1", sCmdUser);
  615. nOkCnt++;
  616. if (UpdateVmsParam(sVmsNmbr, (void*)&VmsPara))
  617. {
  618. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sVmsNmbr);
  619. if (pObj)
  620. {
  621. pObj->PANL_ON_TIME.printf(L"%02d%02d", nStrTmHour, nStrTmMin); // N VARCHAR2(4) Y '0400' 전광판 ON TIME
  622. pObj->PANL_OFF_TIME.printf(L"%02d%02d", nEndTmHour, nEndTmMin); // N VARCHAR2(4) Y '0200' 전광판 OFF TIME
  623. #if 0
  624. pObj->VMS_PHSE_CHNG_CYCL = VmsPara.SchMsgTime; /* 필수 계획된 메시지의 동작시간(초) */
  625. pObj->VMS_CMNC_ERR_BASS_VAL = VmsPara.ModuleTemp; /* 필수 모듈 전원이 꺼지는 온도값(℃) */
  626. pObj->FAN_MTNS_TMPR = VmsPara.FanTemp; /* 필수 Fan 동작 기준 온도값(℃) */
  627. pObj->HETR_MTNS_TMPR = VmsPara.HeaterTemp; /* 필수 Heater 동작 기준 온도값(℃) */
  628. pObj->VMS_MODL_ERR_RATE = VmsPara.ModuleFail; /* 선택 모듈 장애율 (한 개의 모듈을 장애로 처리하기 위한 픽셀의 백분율값) */
  629. pObj->STATE.ScheduledMessageOperatingTime = pObj->VMS_PHSE_CHNG_CYCL; /* 필수 계획된 메시지의 동작시간(초) */
  630. pObj->STATE.ModuleOperatingTemperature = pObj->VMS_CMNC_ERR_BASS_VAL; /* 필수 모듈 전원이 꺼지는 온도값(℃) */
  631. pObj->STATE.FanOperatingTemperature = pObj->FAN_MTNS_TMPR; /* 필수 Fan 동작 기준 온도값(℃) */
  632. pObj->STATE.HeaterOperatingTemperature = pObj->HETR_MTNS_TMPR; /* 필수 Heater 동작 기준 온도값(℃) */
  633. pObj->STATE.ModuleBasicFailureRate = pObj->VMS_MODL_ERR_RATE; /* 선택 모듈 장애율 (한 개의 모듈을 장애로 처리하기 위한 픽셀의 백분율값) */
  634. #endif
  635. }
  636. }
  637. }
  638. else
  639. {
  640. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V04", sCmdValue, "0", sCmdUser);
  641. }
  642. Sleep(100);
  643. Application->ProcessMessages();
  644. }
  645. //sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS 함체환경 설정 명령을 요청하였습니다.";
  646. sMsg = String(nSelCnt) + " " + cxLabel7->Caption + " " + String(nOkCnt) + " " + cxLabel12->Caption;
  647. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  648. #if 0
  649. //제어기함체환경설정
  650. int nVal01 = Se01->Value;
  651. int nVal02 = Se02->Value;
  652. int nVal03 = Se03->Value;
  653. int nVal04 = Se04->Value;
  654. int nVal05 = Se05->Value;
  655. int nVal06 = Se06->Value;
  656. int nVal07 = Se07->Value;
  657. String sTitle = cxLabel10->Caption;//"VMS 함체환경 설정";
  658. String sMsg = "";
  659. int nOkCnt = 0;
  660. int nSelCnt = GetSelListItems(false);
  661. if (0 == nSelCnt)
  662. {
  663. sMsg = cxLabel2->Caption;//"VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.\r\n현재 통신이 비정상인 VMS는 선택하실 수 없습니다.";
  664. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  665. FRAMEVmsStateList1->CxList->SetFocus();
  666. return;
  667. }
  668. int nCmdIdx = 0;
  669. sMsg = cxLabel11->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VMS에 함체환경 설정 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  670. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  671. String sCmdUser = g_pLOGIN->sUserId;
  672. String sCmdTime = Now().FormatString("yyyymmddhhnnss");
  673. String sCmdValue;
  674. sCmdValue.printf(L"%d.%d,%d,%d,%d,%d,%d",
  675. nVal01,
  676. nVal02,
  677. nVal03,
  678. nVal04,
  679. nVal05,
  680. nVal06,
  681. nVal07);
  682. int result;
  683. for (int ii = 0; ii < nSelCnt; ii++)
  684. {
  685. String sVmsNmbr = FVmsIds->Strings[ii];
  686. INT_VMS_PARA_SET_REQ VmsPara;
  687. BYTE MsgSeq;
  688. memset(&VmsPara, 0x00, sizeof(VmsPara));
  689. MsgSeq = (BYTE)0x40;
  690. memcpy(VmsPara.CmdTime, AnsiString(sCmdTime).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  691. memcpy(VmsPara.VmsId, AnsiString(sVmsNmbr).c_str(), INT_VMS_MAX_ID); /* VMS 제어기 번호 */
  692. memcpy(VmsPara.OperId, AnsiString(sCmdUser).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  693. VmsPara.SchMsgTime = (DWORD)nVal01; /* 계획된 메시지 동작시간 */
  694. VmsPara.ModuleTemp = (BYTE)nVal02; /* 모듈전원 OFF 온도 */
  695. VmsPara.FanTemp = (BYTE)nVal03; /* Fan동작 기준온도 */
  696. VmsPara.HeaterTemp = (BYTE)nVal04; /* Heater동작 기준온도 */
  697. VmsPara.ModuleFail = (BYTE)nVal05; /* 모듈장애 판단율 */
  698. VmsPara.RetryCount = (BYTE)nVal06; /* 재시도 횟수 */
  699. VmsPara.TimeOut = (DWORD)nVal07; /* 최대응답대기시간 */
  700. result = CComm_VmsParaSetReq(&VmsPara, MsgSeq);
  701. if (VERR_NONE == result)
  702. {
  703. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V04", sCmdValue, "1", sCmdUser);
  704. nOkCnt++;
  705. //통신전송후 바이트오더링이 바뀐다
  706. VmsPara.SchMsgTime = (DWORD)nVal01; /* 계획된 메시지 동작시간 */
  707. VmsPara.TimeOut = (DWORD)nVal07; /* 최대응답대기시간 */
  708. if (UpdateVmsParam(sVmsNmbr, (void*)&VmsPara))
  709. {
  710. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sVmsNmbr);
  711. if (pObj)
  712. {
  713. #if 0
  714. pObj->VMS_PHSE_CHNG_CYCL = VmsPara.SchMsgTime; /* 필수 계획된 메시지의 동작시간(초) */
  715. pObj->VMS_CMNC_ERR_BASS_VAL = VmsPara.ModuleTemp; /* 필수 모듈 전원이 꺼지는 온도값(℃) */
  716. pObj->FAN_MTNS_TMPR = VmsPara.FanTemp; /* 필수 Fan 동작 기준 온도값(℃) */
  717. pObj->HETR_MTNS_TMPR = VmsPara.HeaterTemp; /* 필수 Heater 동작 기준 온도값(℃) */
  718. pObj->VMS_MODL_ERR_RATE = VmsPara.ModuleFail; /* 선택 모듈 장애율 (한 개의 모듈을 장애로 처리하기 위한 픽셀의 백분율값) */
  719. pObj->STATE.ScheduledMessageOperatingTime = pObj->VMS_PHSE_CHNG_CYCL; /* 필수 계획된 메시지의 동작시간(초) */
  720. pObj->STATE.ModuleOperatingTemperature = pObj->VMS_CMNC_ERR_BASS_VAL; /* 필수 모듈 전원이 꺼지는 온도값(℃) */
  721. pObj->STATE.FanOperatingTemperature = pObj->FAN_MTNS_TMPR; /* 필수 Fan 동작 기준 온도값(℃) */
  722. pObj->STATE.HeaterOperatingTemperature = pObj->HETR_MTNS_TMPR; /* 필수 Heater 동작 기준 온도값(℃) */
  723. pObj->STATE.ModuleBasicFailureRate = pObj->VMS_MODL_ERR_RATE; /* 선택 모듈 장애율 (한 개의 모듈을 장애로 처리하기 위한 픽셀의 백분율값) */
  724. #endif
  725. }
  726. }
  727. }
  728. else
  729. {
  730. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V04", sCmdValue, "0", sCmdUser);
  731. }
  732. Sleep(100);
  733. Application->ProcessMessages();
  734. }
  735. //sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS 함체환경 설정 명령을 요청하였습니다.";
  736. sMsg = String(nSelCnt) + " " + cxLabel7->Caption + " " + String(nOkCnt) + " " + cxLabel12->Caption;
  737. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  738. #endif
  739. }
  740. //---------------------------------------------------------------------------
  741. bool __fastcall TVMS0500M::UpdateVmsParam(String AVmsNmbr, void *pData)
  742. {
  743. String sQry;
  744. TADOQuery *pADO = NULL;
  745. int nCnt = 0;
  746. INT_VMS_PARA_SET_REQ *pReq = (INT_VMS_PARA_SET_REQ*)pData;
  747. #if 0
  748. sQry = "UPDATE TB_VMS_CTLR \r\n"
  749. " SET FAN_RUN_TMPR = :p02, \r\n"
  750. " HETR_RUN_TMPR = :p03, \r\n"
  751. " PANL_ON_TIME = :p04, \r\n"
  752. " PANL_OFF_TIME = :p05 \r\n"
  753. " WHERE VMS_CTLR_NMBR = :p01 \r\n";
  754. #else
  755. sQry = "UPDATE TB_VMS_CTLR \r\n"
  756. " SET PANL_ON_TIME = :p04, \r\n"
  757. " PANL_OFF_TIME = :p05 \r\n"
  758. " WHERE VMS_CTLR_NMBR = :p01 \r\n";
  759. #endif
  760. try
  761. {
  762. try
  763. {
  764. String sFanRunTmpr;
  765. String sHetrRunTmpr;
  766. String sDispStrTm;
  767. String sDispEndTm;
  768. char szTemp[20];
  769. sFanRunTmpr.printf(L"%d", pReq->FanRunTmpr);
  770. sHetrRunTmpr.printf(L"%d", pReq->HetrRunTmpr);
  771. memset(szTemp, 0x00, sizeof(szTemp));
  772. sprintf(szTemp, "%4.4s", (char*)pReq->DispStrTm);
  773. sDispStrTm = String(szTemp);
  774. memset(szTemp, 0x00, sizeof(szTemp));
  775. sprintf(szTemp, "%4.4s", (char*)pReq->DispEndTm);
  776. sDispEndTm = String(szTemp);
  777. pADO = new TADOQuery(NULL);
  778. pADO->Close();
  779. pADO->Connection = ITSDb_GetConnection();
  780. pADO->SQL->Clear();
  781. pADO->SQL->Text = sQry;
  782. pADO->Parameters->ParamByName("p01")->Value = AVmsNmbr;
  783. #if 0
  784. pADO->Parameters->ParamByName("p02")->Value = sFanRunTmpr;
  785. pADO->Parameters->ParamByName("p03")->Value = sHetrRunTmpr;
  786. #endif
  787. pADO->Parameters->ParamByName("p04")->Value = sDispStrTm;
  788. pADO->Parameters->ParamByName("p05")->Value = sDispEndTm;
  789. nCnt = pADO->ExecSQL();
  790. }
  791. catch(EDatabaseError &E)
  792. {
  793. DBERRORMSG("TVMS0500M::UpdateVmsParam", String(E.ClassName()), E.Message, sQry);
  794. throw Exception(String(E.ClassName()) + E.Message);
  795. }
  796. catch(Exception &e)
  797. {
  798. DBERRORMSG("TVMS0500M::UpdateVmsParam", String(e.ClassName()), e.Message, sQry);
  799. throw Exception(String(e.ClassName()) + e.Message);
  800. }
  801. }
  802. __finally
  803. {
  804. if (pADO)
  805. {
  806. pADO->Close();
  807. delete pADO;
  808. }
  809. }
  810. return nCnt > 0 ? true : false;
  811. }
  812. //---------------------------------------------------------------------------
  813. void __fastcall TVMS0500M::BtnOnOffSetClick(TObject *Sender)
  814. {
  815. //전광판ON/OFF시각설정
  816. String sTitle = cxLabel13->Caption;//"전광판 ON/OFF 시각 설정";
  817. String sMsg = "";
  818. int nOkCnt = 0;
  819. int nSelCnt = GetSelListItems(false);
  820. if (0 == nSelCnt)
  821. {
  822. sMsg = cxLabel14->Caption;//"VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.";
  823. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  824. FRAMEVmsStateList1->CxList->SetFocus();
  825. return;
  826. }
  827. int nCmdIdx = 0;
  828. sMsg = cxLabel15->Caption;//"선택하신 VMS의 전광판 ON/OFF 시각을 설정 하시겠습니까?";
  829. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  830. String sQry;
  831. TADOQuery *pADO = NULL;
  832. sQry = "UPDATE TB_VMS_CTLR \r\n"
  833. " SET PANL_ON_TIME = :p02, \r\n"
  834. " PANL_OFF_TIME = :p03 \r\n"
  835. " WHERE VMS_CTLR_NMBR = :p01 \r\n";
  836. String PANL_ON_TIME = cxTimeOn->Time.FormatString("HHNN");
  837. String PANL_OFF_TIME = cxTimeOff->Time.FormatString("HHNN");
  838. String LAST_CRPR_NMBR = g_pLOGIN->sUserId;
  839. String LAST_CRCT_DT = Now().FormatString("yyyymmddhhnnss");
  840. try
  841. {
  842. try
  843. {
  844. pADO = new TADOQuery(NULL);
  845. pADO->Close();
  846. pADO->Connection = ITSDb_GetConnection();
  847. pADO->SQL->Clear();
  848. pADO->SQL->Text = sQry;
  849. for (int ii = 0; ii < nSelCnt; ii++)
  850. {
  851. String sVmsNmbr = FVmsIds->Strings[ii];
  852. pADO->Parameters->ParamByName("p01")->Value = sVmsNmbr;
  853. pADO->Parameters->ParamByName("p02")->Value = PANL_ON_TIME;
  854. pADO->Parameters->ParamByName("p03")->Value = PANL_OFF_TIME;
  855. pADO->ExecSQL();
  856. nOkCnt++;
  857. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sVmsNmbr);
  858. if (pObj)
  859. {
  860. pObj->PANL_ON_TIME = PANL_ON_TIME;
  861. pObj->PANL_OFF_TIME = PANL_OFF_TIME;
  862. }
  863. }
  864. }
  865. catch(EDatabaseError &E)
  866. {
  867. DBERRORMSG("TVMS0500M::BtnOnOffSetClick", String(E.ClassName()), E.Message, sQry);
  868. throw Exception(String(E.ClassName()) + E.Message);
  869. }
  870. catch(Exception &e)
  871. {
  872. DBERRORMSG("TVMS0500M::BtnOnOffSetClick", String(e.ClassName()), e.Message, sQry);
  873. throw Exception(String(e.ClassName()) + e.Message);
  874. }
  875. }
  876. __finally
  877. {
  878. if (pADO)
  879. {
  880. pADO->Close();
  881. delete pADO;
  882. }
  883. }
  884. //sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS로 전광판 ON/OFF 시각 설정을 요청하였습니다.";
  885. sMsg = String(nSelCnt) + " " + cxLabel7->Caption + " " + String(nOkCnt) + " " + cxLabel16->Caption;
  886. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  887. for (int ii = 0; ii < nSelCnt; ii++)
  888. {
  889. String sVmsNmbr = FVmsIds->Strings[ii];
  890. VmsCtlrManager->InsVmsControlHs(LAST_CRCT_DT, sVmsNmbr, "V05", PANL_ON_TIME+" "+PANL_OFF_TIME, "1", LAST_CRPR_NMBR);
  891. }
  892. //FRAMEVmsStateList1->RefreshStatus();
  893. FrmVmsOprMain->RefreshVmsMessage(WM_VMS_STATE_REFRESH);
  894. }
  895. //---------------------------------------------------------------------------
  896. void __fastcall TVMS0500M::BtnModeControlClick(TObject *Sender)
  897. {
  898. //VMS 운영모드 변경
  899. String sTitle = cxLabel17->Caption;//"VMS 운영모드 변경";
  900. String sMsg = "";
  901. int nOkCnt = 0;
  902. int nSelCnt = GetSelListItems(false);
  903. if (0 == nSelCnt)
  904. {
  905. sMsg = cxLabel14->Caption;//"VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.";
  906. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  907. FRAMEVmsStateList1->CxList->SetFocus();
  908. return;
  909. }
  910. int nCmdIdx = 0;
  911. sMsg = cxLabel18->Caption;//"선택하신 VMS의 운영모드를 변경 하시겠습니까?";
  912. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  913. String OPER_MODE;
  914. if (RdbAuto->Checked)
  915. {
  916. OPER_MODE = "A";
  917. }
  918. else
  919. if (RdbFix->Checked)
  920. {
  921. OPER_MODE = "F";
  922. }
  923. else
  924. if (RdbBase->Checked)
  925. {
  926. OPER_MODE = "B";
  927. }
  928. String sQry;
  929. TADOQuery *pADO = NULL;
  930. sQry = "UPDATE TB_VMS_CTLR \r\n"
  931. " SET OPER_MODE = :p01 \r\n"
  932. " WHERE VMS_CTLR_NMBR = :p05 \r\n";
  933. String LAST_CRPR_NMBR = g_pLOGIN->sUserId;
  934. String LAST_CRCT_DT = Now().FormatString("yyyymmddhhnnss");
  935. try
  936. {
  937. try
  938. {
  939. pADO = new TADOQuery(NULL);
  940. pADO->Close();
  941. pADO->Connection = ITSDb_GetConnection();
  942. pADO->SQL->Clear();
  943. pADO->SQL->Text = sQry;
  944. INT_VMS_MODE_REQ VmsMode;
  945. BYTE MsgSeq;
  946. memset(&VmsMode, 0x00, sizeof(VmsMode));
  947. MsgSeq = (BYTE)0x50;
  948. memcpy(VmsMode.CmdTime, AnsiString(LAST_CRCT_DT).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  949. memcpy(VmsMode.OperId, AnsiString(LAST_CRPR_NMBR).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  950. for (int ii = 0; ii < nSelCnt; ii++)
  951. {
  952. String sVmsNmbr = FVmsIds->Strings[ii];
  953. pADO->Parameters->ParamByName("p01")->Value = OPER_MODE;
  954. pADO->Parameters->ParamByName("p05")->Value = sVmsNmbr;
  955. pADO->ExecSQL();
  956. nOkCnt++;
  957. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sVmsNmbr);
  958. if (pObj)
  959. {
  960. pObj->OPER_MODE = OPER_MODE;
  961. if (pObj->OPER_MODE == "A") pObj->STATE.OprMode = 'A';
  962. else if (pObj->OPER_MODE == "B") pObj->STATE.OprMode = 'B';
  963. else pObj->STATE.OprMode = 'F';
  964. }
  965. else continue;
  966. VmsMode.Unit[VmsMode.Count].VMS_CTLR_NMBR = sVmsNmbr.ToIntDef(0); /* VMS 제어기 번호 */
  967. if (OPER_MODE == "A") VmsMode.Unit[VmsMode.Count].Mode = 'A';
  968. else if (OPER_MODE == "B") VmsMode.Unit[VmsMode.Count].Mode = 'B';
  969. else VmsMode.Unit[VmsMode.Count].Mode = 'F';
  970. VmsMode.Count++;
  971. if (VmsMode.Count >= INT_VMS_MAX_MODE)
  972. {
  973. CComm_VmsModeReq(&VmsMode, MsgSeq);
  974. }
  975. }
  976. if (VmsMode.Count > 0)
  977. {
  978. CComm_VmsModeReq(&VmsMode, MsgSeq);
  979. }
  980. }
  981. catch(EDatabaseError &E)
  982. {
  983. DBERRORMSG("TVMS0500M::BtnModeControlClick", String(E.ClassName()), E.Message, sQry);
  984. throw Exception(String(E.ClassName()) + E.Message);
  985. }
  986. catch(Exception &e)
  987. {
  988. DBERRORMSG("TVMS0500M::BtnModeControlClick", String(e.ClassName()), e.Message, sQry);
  989. throw Exception(String(e.ClassName()) + e.Message);
  990. }
  991. }
  992. __finally
  993. {
  994. if (pADO)
  995. {
  996. pADO->Close();
  997. delete pADO;
  998. }
  999. }
  1000. //sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS 운영모드를 변경하였습니다.";
  1001. sMsg = String(nSelCnt) + " " + cxLabel7->Caption + " " + String(nOkCnt) + " " + cxLabel19->Caption;//;
  1002. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  1003. for (int ii = 0; ii < nSelCnt; ii++)
  1004. {
  1005. String sVmsNmbr = FVmsIds->Strings[ii];
  1006. VmsCtlrManager->InsVmsControlHs(LAST_CRCT_DT, sVmsNmbr, "V06", OPER_MODE, "1", LAST_CRPR_NMBR);
  1007. }
  1008. //FRAMEVmsStateList1->RefreshStatus();
  1009. FrmVmsOprMain->RefreshVmsMessage(WM_VMS_STATE_REFRESH);
  1010. }
  1011. //---------------------------------------------------------------------------
  1012. void __fastcall TVMS0500M::BtnWebCamUrlClick(TObject *Sender)
  1013. {
  1014. if (FSelVmsObj)
  1015. {
  1016. if (FSelVmsObj->WEB_CMRA_IP.Trim() != "")
  1017. {
  1018. String sUrl = "http://" + FSelVmsObj->WEB_CMRA_IP.Trim();
  1019. //if (FSelVmsObj->WEB_CMRA_PORT != "")
  1020. //{
  1021. // sUrl = sUrl + ":" + FSelVmsObj->WEB_CMRA_PORT;
  1022. //}
  1023. ShellExecute(NULL, NULL, sUrl.c_str(), NULL, NULL, 0);
  1024. }
  1025. }
  1026. }
  1027. //---------------------------------------------------------------------------
  1028. void __fastcall TVMS0500M::BtnDefaultMsgClick(TObject *Sender)
  1029. {
  1030. TcxButton *pBtn = (TcxButton*)Sender;
  1031. String sTitle = pBtn->Caption.Trim();
  1032. String sMsg = "";
  1033. String sCmd = "";
  1034. String sCmdValue;
  1035. BYTE ucCommand;
  1036. int nOkCnt = 0;
  1037. int nSelCnt = GetSelListItems(true);
  1038. if (0 == nSelCnt)
  1039. {
  1040. sMsg = cxLabel2->Caption + "\r\n" + cxLabel9->Caption;//"VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.\r\n현재 통신이 비정상인 VMS는 선택하실 수 없습니다.";
  1041. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1042. FRAMEVmsStateList1->CxList->SetFocus();
  1043. return;
  1044. }
  1045. if (pBtn->Tag == 0)
  1046. {
  1047. // Default Msg Display
  1048. sMsg = cxLabel20->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VMS에 기본메시지 표출 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  1049. sCmd = "V11";
  1050. sCmdValue = "D";
  1051. ucCommand = 0x55;
  1052. }
  1053. else
  1054. {
  1055. // Blank Display
  1056. sMsg = cxLabel21->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VMS에 Blank 표출 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  1057. sCmd = "V12";
  1058. sCmdValue = "B";
  1059. ucCommand = 0x54;
  1060. }
  1061. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  1062. String sCmdUser = g_pLOGIN->sUserId;
  1063. String sCmdTime = Now().FormatString("yyyymmddhhnnss");
  1064. int result;
  1065. for (int ii = 0; ii < nSelCnt; ii++)
  1066. {
  1067. String sVmsNmbr = FVmsIds->Strings[ii];
  1068. INT_VMS_DIRECT_CTL_REQ directCmd;
  1069. BYTE MsgSeq;
  1070. memset(&directCmd, 0x00, sizeof(directCmd));
  1071. MsgSeq = (BYTE)0x60;
  1072. memcpy(directCmd.CmdTime, AnsiString(sCmdTime).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  1073. memcpy(directCmd.VmsId, AnsiString(sVmsNmbr).c_str(), INT_VMS_MAX_ID); /* VMS 제어기 번호 */
  1074. memcpy(directCmd.OperId, AnsiString(sCmdUser).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  1075. directCmd.Command = ucCommand;
  1076. result = CComm_VmsDirectCmdReq(&directCmd, MsgSeq);
  1077. if (VERR_NONE == result)
  1078. {
  1079. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, sCmd, sCmdValue, "1", sCmdUser);
  1080. nOkCnt++;
  1081. }
  1082. else
  1083. {
  1084. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, sCmd, sCmdValue, "0", sCmdUser);
  1085. }
  1086. Sleep(100);
  1087. Application->ProcessMessages();
  1088. }
  1089. //sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS에 명령을 요청하였습니다.";
  1090. sMsg = String(nSelCnt) + " " + cxLabel7->Caption + " " + String(nOkCnt) + " " + cxLabel22->Caption;
  1091. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  1092. }
  1093. //---------------------------------------------------------------------------
  1094. void __fastcall TVMS0500M::BtnParamSettingClick(TObject *Sender)
  1095. {
  1096. #if 0
  1097. //제어기함체환경설정
  1098. int nCommErrTime = SeCommErrTime->Value;// = 60; //통신장애 기본값(Default=60초)
  1099. int nSlotCommErr = SeSlotCommErr->Value;// = 0; //FSelVmsObj->CMNCFAIL_SLOT_NMBR = (int)pReq->SlotCommErr; // NUMBER(4) Y 0 통신장애 SLOT 번호
  1100. int nSlotPowerErr = SeSlotPowerErr->Value;// = 0; //FSelVmsObj->PWER_FAIL_SLOT_NMBR = (int)pReq->SlotPowerErr; // NUMBER(4) Y 0 전원 장애 SLOT 번호
  1101. int nLumNight = SeLumNight->Value;// = FSelVmsObj->VMS_NGHT_BRGH_STEP;
  1102. int nLumDay = SeLumDay->Value;// = FSelVmsObj->VMS_WEEK_BRGH_STEP;
  1103. int nModErrRate = SeModRate->Value;// = FSelVmsObj->VMS_MODL_ERR_RATE;
  1104. int nModChkCycle = SeModCycle->Value;// = FSelVmsObj->VMS_MODL_CHK_CYCL;
  1105. int nPhaseCycle = SeMsgTime->Value;// = FSelVmsObj->DEF_PHSE_CHNG_CYCL;
  1106. String sTitle = cxLabel23->Caption;//"VMS 함체환경 설정";
  1107. String sMsg = "";
  1108. int nOkCnt = 0;
  1109. int nSelCnt = GetSelListItems(true);
  1110. if (0 == nSelCnt)
  1111. {
  1112. sMsg = cxLabel2->Caption + "\r\n" + cxLabel9->Caption;//"VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.\r\n현재 통신이 비정상인 VMS는 선택하실 수 없습니다.";
  1113. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1114. FRAMEVmsStateList1->CxList->SetFocus();
  1115. return;
  1116. }
  1117. int nCmdIdx = 0;
  1118. sMsg = cxLabel24->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VMS에 함체환경 설정 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  1119. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  1120. String sCmdUser = g_pLOGIN->sUserId;
  1121. String sCmdTime = Now().FormatString("yyyymmddhhnnss");
  1122. String sCmdValue;
  1123. sCmdValue.printf(L"%d.%d,%d,%d,%d,%d,%d",
  1124. nLumNight,
  1125. nLumDay,
  1126. nModErrRate,
  1127. nModChkCycle,
  1128. nPhaseCycle,
  1129. nCommErrTime,
  1130. nSlotCommErr);
  1131. int result;
  1132. for (int ii = 0; ii < nSelCnt; ii++)
  1133. {
  1134. String sVmsNmbr = FVmsIds->Strings[ii];
  1135. INT_VMS_PARA_SET_REQ2 VmsPara;
  1136. BYTE MsgSeq;
  1137. memset(&VmsPara, 0x00, sizeof(VmsPara));
  1138. MsgSeq = (BYTE)0x40;
  1139. memcpy(VmsPara.CmdTime, AnsiString(sCmdTime).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  1140. memcpy(VmsPara.VmsId, AnsiString(sVmsNmbr).c_str(), INT_VMS_MAX_ID); /* VMS 제어기 번호 */
  1141. memcpy(VmsPara.OperId, AnsiString(sCmdUser).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  1142. VmsPara.DefCommErr = (BYTE)nCommErrTime; // 통신장애 기본값, 제어기가 Host로부터 Poll 또는 명령을 받지 않고 경과할 수 있는 최대시간 (default ; 60초)
  1143. VmsPara.SlotCommErr = (short)nSlotCommErr; // 통신장애 slot번호, 통신 fail 시 표시할 메시지 번호(default 0번)
  1144. VmsPara.SlotPowerErr = (short)nSlotPowerErr; // 전원장애 slot번호, 전원장애 시 표시할 메시지 번호(default 0번)
  1145. VmsPara.NightLuminance = (BYTE)nLumNight; // 야간 휘도 값, 0x30 ~ 0x3F
  1146. VmsPara.DayLuminance = (BYTE)nLumDay; // 주간 휘도 값, 0x40 ~ 0x4F
  1147. VmsPara.PhaseCycleTime = (BYTE)nPhaseCycle; // phase시간주기, 장애시 phase주기 (default : 3초, 범위 : 0 ~ 10초)
  1148. VmsPara.ModuleFailRate = (BYTE)nModErrRate; // 모듈장애율, 한개의 module을 장애로 처리하기 위한 장애 pixel백분율 (default 10%)
  1149. VmsPara.ModuleCheckTime = (BYTE)nModChkCycle; // 모듈감시 주기, 0 ~ 255 (단위:초)
  1150. VmsPara.BoardOnHour = (BYTE)cxDisplayTimeOn->Time.FormatString("HH").ToIntDef(0); // 전광판 On time(시), 0시 ~ 23시
  1151. VmsPara.BoardOnMin = (BYTE)cxDisplayTimeOn->Time.FormatString("NN").ToIntDef(0); // 전광판 On time(분), 0시 ~ 23시
  1152. VmsPara.BoardOffHour = (BYTE)cxDisplayTimeOff->Time.FormatString("HH").ToIntDef(0); // 전광판 Off time(시), 0시 ~ 23시
  1153. VmsPara.BoardOffMin = (BYTE)cxDisplayTimeOff->Time.FormatString("NN").ToIntDef(0); // 전광판 Off time(분), 0시 ~ 23시
  1154. result = CComm_VmsParaSetReq2(&VmsPara, MsgSeq);
  1155. if (VERR_NONE == result)
  1156. {
  1157. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V04", sCmdValue, "1", sCmdUser);
  1158. nOkCnt++;
  1159. //통신전송후 바이트오더링이 바뀐다
  1160. VmsPara.SlotCommErr = (short)nSlotCommErr;
  1161. VmsPara.SlotPowerErr = (short)nSlotPowerErr;
  1162. if (UpdateVmsParam2(sVmsNmbr, (void*)&VmsPara))
  1163. {
  1164. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sVmsNmbr);
  1165. if (pObj)
  1166. {
  1167. #if 0
  1168. pObj->VMS_CMNC_ERR_BASS_VAL = (int)VmsPara.DefCommErr;
  1169. pObj->CMNCFAIL_SLOT_NMBR = (int)VmsPara.SlotCommErr; // NUMBER(4) Y 0 통신장애 SLOT 번호
  1170. pObj->PWER_FAIL_SLOT_NMBR = (int)VmsPara.SlotPowerErr; // NUMBER(4) Y 0 전원 장애 SLOT 번호
  1171. pObj->VMS_NGHT_BRGH_STEP = (int)VmsPara.NightLuminance;
  1172. pObj->VMS_WEEK_BRGH_STEP = (int)VmsPara.DayLuminance;
  1173. pObj->DEF_PHSE_CHNG_CYCL = (int)VmsPara.PhaseCycleTime;
  1174. pObj->VMS_MODL_ERR_RATE = (int)VmsPara.ModuleFailRate;
  1175. pObj->VMS_MODL_CHK_CYCL = (int)VmsPara.ModuleCheckTime;
  1176. pObj->PANL_ON_TIME.printf(L"%02d%02d", (int)VmsPara.BoardOnHour, (int)VmsPara.BoardOnMin);
  1177. pObj->PANL_OFF_TIME.printf(L"%02d%02d", (int)VmsPara.BoardOffHour, (int)VmsPara.BoardOffMin);
  1178. pObj->DEF_PHSE_CHNG_CYCL = nPhaseCycle;
  1179. pObj->STATE.ScheduledMessageOperatingTime = pObj->DEF_PHSE_CHNG_CYCL; /* 필수 계획된 메시지의 동작시간(초) */
  1180. //pObj->STATE.ModuleOperatingTemperature = pObj->VMS_CMNC_ERR_BASS_VAL; /* 필수 모듈 전원이 꺼지는 온도값(℃) */
  1181. pObj->STATE.ModuleBasicFailureRate = pObj->VMS_MODL_ERR_RATE; /* 선택 모듈 장애율 (한 개의 모듈을 장애로 처리하기 위한 픽셀의 백분율값) */
  1182. #endif
  1183. }
  1184. }
  1185. }
  1186. else
  1187. {
  1188. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V04", sCmdValue, "0", sCmdUser);
  1189. }
  1190. Sleep(100);
  1191. Application->ProcessMessages();
  1192. }
  1193. //sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS 함체환경 설정 명령을 요청하였습니다.";
  1194. sMsg = String(nSelCnt) + " " + cxLabel7->Caption + " " + String(nOkCnt) + " " + cxLabel25->Caption;
  1195. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  1196. #if 0
  1197. //제어기함체환경설정
  1198. int nCommErrTime = SeCommErrTime->Value;// = 60; //통신장애 기본값(Default=60초)
  1199. int nSlotCommErr = SeSlotCommErr->Value;// = 0; //FSelVmsObj->CMNCFAIL_SLOT_NMBR = (int)pReq->SlotCommErr; // NUMBER(4) Y 0 통신장애 SLOT 번호
  1200. int nSlotPowerErr = SeSlotPowerErr->Value;// = 0; //FSelVmsObj->PWER_FAIL_SLOT_NMBR = (int)pReq->SlotPowerErr; // NUMBER(4) Y 0 전원 장애 SLOT 번호
  1201. int nLumNight = SeLumNight->Value;// = FSelVmsObj->VMS_NGHT_BRGH_STEP;
  1202. int nLumDay = SeLumDay->Value;// = FSelVmsObj->VMS_WEEK_BRGH_STEP;
  1203. int nModErrRate = SeModRate->Value;// = FSelVmsObj->VMS_MODL_ERR_RATE;
  1204. int nModChkCycle = SeModCycle->Value;// = FSelVmsObj->VMS_MODL_CHK_CYCL;
  1205. int nPhaseCycle = SeMsgTime->Value;// = FSelVmsObj->DEF_PHSE_CHNG_CYCL;
  1206. String sTitle = cxLabel23->Caption;//"VMS 함체환경 설정";
  1207. String sMsg = "";
  1208. int nOkCnt = 0;
  1209. int nSelCnt = GetSelListItems(true);
  1210. if (0 == nSelCnt)
  1211. {
  1212. sMsg = cxLabel2->Caption + "\r\n" + cxLabel9->Caption;//"VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.\r\n현재 통신이 비정상인 VMS는 선택하실 수 없습니다.";
  1213. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1214. FRAMEVmsStateList1->CxList->SetFocus();
  1215. return;
  1216. }
  1217. int nCmdIdx = 0;
  1218. sMsg = cxLabel24->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VMS에 함체환경 설정 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  1219. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  1220. String sCmdUser = g_pLOGIN->sUserId;
  1221. String sCmdTime = Now().FormatString("yyyymmddhhnnss");
  1222. String sCmdValue;
  1223. sCmdValue.printf(L"%d.%d,%d,%d,%d,%d,%d",
  1224. nLumNight,
  1225. nLumDay,
  1226. nModErrRate,
  1227. nModChkCycle,
  1228. nPhaseCycle,
  1229. nCommErrTime,
  1230. nSlotCommErr);
  1231. int result;
  1232. for (int ii = 0; ii < nSelCnt; ii++)
  1233. {
  1234. String sVmsNmbr = FVmsIds->Strings[ii];
  1235. INT_VMS_PARA_SET_REQ2 VmsPara;
  1236. BYTE MsgSeq;
  1237. memset(&VmsPara, 0x00, sizeof(VmsPara));
  1238. MsgSeq = (BYTE)0x40;
  1239. memcpy(VmsPara.CmdTime, AnsiString(sCmdTime).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  1240. memcpy(VmsPara.VmsId, AnsiString(sVmsNmbr).c_str(), INT_VMS_MAX_ID); /* VMS 제어기 번호 */
  1241. memcpy(VmsPara.OperId, AnsiString(sCmdUser).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  1242. VmsPara.DefCommErr = (BYTE)nCommErrTime; // 통신장애 기본값, 제어기가 Host로부터 Poll 또는 명령을 받지 않고 경과할 수 있는 최대시간 (default ; 60초)
  1243. VmsPara.SlotCommErr = (short)nSlotCommErr; // 통신장애 slot번호, 통신 fail 시 표시할 메시지 번호(default 0번)
  1244. VmsPara.SlotPowerErr = (short)nSlotPowerErr; // 전원장애 slot번호, 전원장애 시 표시할 메시지 번호(default 0번)
  1245. VmsPara.NightLuminance = (BYTE)nLumNight; // 야간 휘도 값, 0x30 ~ 0x3F
  1246. VmsPara.DayLuminance = (BYTE)nLumDay; // 주간 휘도 값, 0x40 ~ 0x4F
  1247. VmsPara.PhaseCycleTime = (BYTE)nPhaseCycle; // phase시간주기, 장애시 phase주기 (default : 3초, 범위 : 0 ~ 10초)
  1248. VmsPara.ModuleFailRate = (BYTE)nModErrRate; // 모듈장애율, 한개의 module을 장애로 처리하기 위한 장애 pixel백분율 (default 10%)
  1249. VmsPara.ModuleCheckTime = (BYTE)nModChkCycle; // 모듈감시 주기, 0 ~ 255 (단위:초)
  1250. VmsPara.BoardOnHour = (BYTE)cxDisplayTimeOn->Time.FormatString("HH").ToIntDef(0); // 전광판 On time(시), 0시 ~ 23시
  1251. VmsPara.BoardOnMin = (BYTE)cxDisplayTimeOn->Time.FormatString("NN").ToIntDef(0); // 전광판 On time(분), 0시 ~ 23시
  1252. VmsPara.BoardOffHour = (BYTE)cxDisplayTimeOff->Time.FormatString("HH").ToIntDef(0); // 전광판 Off time(시), 0시 ~ 23시
  1253. VmsPara.BoardOffMin = (BYTE)cxDisplayTimeOff->Time.FormatString("NN").ToIntDef(0); // 전광판 Off time(분), 0시 ~ 23시
  1254. result = CComm_VmsParaSetReq2(&VmsPara, MsgSeq);
  1255. if (VERR_NONE == result)
  1256. {
  1257. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V04", sCmdValue, "1", sCmdUser);
  1258. nOkCnt++;
  1259. //통신전송후 바이트오더링이 바뀐다
  1260. VmsPara.SlotCommErr = (short)nSlotCommErr;
  1261. VmsPara.SlotPowerErr = (short)nSlotPowerErr;
  1262. if (UpdateVmsParam2(sVmsNmbr, (void*)&VmsPara))
  1263. {
  1264. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sVmsNmbr);
  1265. if (pObj)
  1266. {
  1267. #if 0
  1268. pObj->VMS_CMNC_ERR_BASS_VAL = (int)VmsPara.DefCommErr;
  1269. pObj->CMNCFAIL_SLOT_NMBR = (int)VmsPara.SlotCommErr; // NUMBER(4) Y 0 통신장애 SLOT 번호
  1270. pObj->PWER_FAIL_SLOT_NMBR = (int)VmsPara.SlotPowerErr; // NUMBER(4) Y 0 전원 장애 SLOT 번호
  1271. pObj->VMS_NGHT_BRGH_STEP = (int)VmsPara.NightLuminance;
  1272. pObj->VMS_WEEK_BRGH_STEP = (int)VmsPara.DayLuminance;
  1273. pObj->DEF_PHSE_CHNG_CYCL = (int)VmsPara.PhaseCycleTime;
  1274. pObj->VMS_MODL_ERR_RATE = (int)VmsPara.ModuleFailRate;
  1275. pObj->VMS_MODL_CHK_CYCL = (int)VmsPara.ModuleCheckTime;
  1276. pObj->PANL_ON_TIME.printf(L"%02d%02d", (int)VmsPara.BoardOnHour, (int)VmsPara.BoardOnMin);
  1277. pObj->PANL_OFF_TIME.printf(L"%02d%02d", (int)VmsPara.BoardOffHour, (int)VmsPara.BoardOffMin);
  1278. pObj->DEF_PHSE_CHNG_CYCL = nPhaseCycle;
  1279. pObj->STATE.ScheduledMessageOperatingTime = pObj->DEF_PHSE_CHNG_CYCL; /* 필수 계획된 메시지의 동작시간(초) */
  1280. //pObj->STATE.ModuleOperatingTemperature = pObj->VMS_CMNC_ERR_BASS_VAL; /* 필수 모듈 전원이 꺼지는 온도값(℃) */
  1281. pObj->STATE.ModuleBasicFailureRate = pObj->VMS_MODL_ERR_RATE; /* 선택 모듈 장애율 (한 개의 모듈을 장애로 처리하기 위한 픽셀의 백분율값) */
  1282. #endif
  1283. }
  1284. }
  1285. }
  1286. else
  1287. {
  1288. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V04", sCmdValue, "0", sCmdUser);
  1289. }
  1290. Sleep(100);
  1291. Application->ProcessMessages();
  1292. }
  1293. //sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS 함체환경 설정 명령을 요청하였습니다.";
  1294. sMsg = String(nSelCnt) + " " + cxLabel7->Caption + " " + String(nOkCnt) + " " + cxLabel25->Caption;
  1295. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  1296. #endif
  1297. #endif
  1298. }
  1299. //---------------------------------------------------------------------------
  1300. bool __fastcall TVMS0500M::UpdateVmsParam2(String AVmsNmbr, void *pData)
  1301. {
  1302. String sQry;
  1303. TADOQuery *pADO = NULL;
  1304. int nCnt = 0;
  1305. INT_VMS_PARA_SET_REQ2 *pReq = (INT_VMS_PARA_SET_REQ2*)pData;
  1306. sQry = "UPDATE TB_VMS_CTLR \r\n"
  1307. " SET VMS_CMNC_ERR_BASS_VAL = :p02, \r\n"
  1308. " CMNCFAIL_SLOT_NMBR = :p03, \r\n"
  1309. " PWER_FAIL_SLOT_NMBR = :p04, \r\n"
  1310. " VMS_NGHT_BRGH_STEP = :p05, \r\n"
  1311. " VMS_WEEK_BRGH_STEP = :p06, \r\n"
  1312. " VMS_MODL_ERR_RATE = :p07, \r\n"
  1313. " VMS_MODL_CHK_CYCL = :p08, \r\n"
  1314. " DEF_PHSE_CHNG_CYCL = :p09, \r\n"
  1315. " PANL_ON_TIME = :p10, \r\n"
  1316. " PANL_OFF_TIME = :p11 \r\n"
  1317. " WHERE VMS_CTLR_NMBR = :p01 \r\n";
  1318. try
  1319. {
  1320. try
  1321. {
  1322. pADO = new TADOQuery(NULL);
  1323. pADO->Close();
  1324. pADO->Connection = ITSDb_GetConnection();
  1325. pADO->SQL->Clear();
  1326. pADO->SQL->Text = sQry;
  1327. String sOn, sOff;
  1328. sOn.printf(L"%02d%02d", (int)pReq->BoardOnHour, (int)pReq->BoardOnMin);
  1329. sOff.printf(L"%02d%02d", (int)pReq->BoardOffHour, (int)pReq->BoardOffMin);
  1330. pADO->Parameters->ParamByName("p01")->Value = AVmsNmbr;
  1331. pADO->Parameters->ParamByName("p02")->Value = (int)pReq->DefCommErr;
  1332. pADO->Parameters->ParamByName("p03")->Value = (int)pReq->SlotCommErr;
  1333. pADO->Parameters->ParamByName("p04")->Value = (int)pReq->SlotPowerErr;
  1334. pADO->Parameters->ParamByName("p05")->Value = (int)pReq->NightLuminance;
  1335. pADO->Parameters->ParamByName("p06")->Value = (int)pReq->DayLuminance;
  1336. pADO->Parameters->ParamByName("p07")->Value = (int)pReq->ModuleFailRate;
  1337. pADO->Parameters->ParamByName("p08")->Value = (int)pReq->ModuleCheckTime;
  1338. pADO->Parameters->ParamByName("p09")->Value = (int)pReq->PhaseCycleTime;
  1339. pADO->Parameters->ParamByName("p10")->Value = sOn;
  1340. pADO->Parameters->ParamByName("p11")->Value = sOff;
  1341. nCnt = pADO->ExecSQL();
  1342. }
  1343. catch(EDatabaseError &E)
  1344. {
  1345. DBERRORMSG("VMS Parameter Save", String(E.ClassName()), E.Message, sQry);
  1346. throw Exception(String(E.ClassName()) + E.Message);
  1347. }
  1348. catch(Exception &e)
  1349. {
  1350. DBERRORMSG("VMS Parameter Save", String(e.ClassName()), e.Message, sQry);
  1351. throw Exception(String(e.ClassName()) + e.Message);
  1352. }
  1353. }
  1354. __finally
  1355. {
  1356. if (pADO)
  1357. {
  1358. pADO->Close();
  1359. delete pADO;
  1360. }
  1361. }
  1362. return nCnt > 0 ? true : false;
  1363. }
  1364. //---------------------------------------------------------------------------
  1365. void __fastcall TVMS0500M::BtnDefMsgDownloadClick(TObject *Sender)
  1366. {
  1367. //
  1368. }
  1369. //---------------------------------------------------------------------------
  1370. void __fastcall TVMS0500M::BtnDisplayTimeSetClick(TObject *Sender)
  1371. {
  1372. //폼 표출주기 설정
  1373. String sTitle = cxLabel26->Caption;//"폼 표출주기 설정";
  1374. String sMsg = "";
  1375. int nOkCnt = 0;
  1376. int nSelCnt = GetSelListItems(false);
  1377. if (0 == nSelCnt)
  1378. {
  1379. sMsg = cxLabel14->Caption;//"VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.";
  1380. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1381. FRAMEVmsStateList1->CxList->SetFocus();
  1382. return;
  1383. }
  1384. int nCmdIdx = 0;
  1385. sMsg = cxLabel27->Caption;//"선택하신 VMS의 폼 표출 주기를 설정 하시겠습니까?";
  1386. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  1387. String sQry;
  1388. TADOQuery *pADO = NULL;
  1389. sQry = "UPDATE TB_VMS_CTLR \r\n"
  1390. " SET VMS_PHSE_CHNG_CYCL = :p02 \r\n"
  1391. " WHERE VMS_CTLR_NMBR = :p01 \r\n";
  1392. String LAST_CRPR_NMBR = g_pLOGIN->sUserId;
  1393. String LAST_CRCT_DT = Now().FormatString("yyyymmddhhnnss");
  1394. int VMS_PHSE_CHNG_CYCL = SeFormCycleTime->Value;
  1395. try
  1396. {
  1397. try
  1398. {
  1399. pADO = new TADOQuery(NULL);
  1400. pADO->Close();
  1401. pADO->Connection = ITSDb_GetConnection();
  1402. pADO->SQL->Clear();
  1403. pADO->SQL->Text = sQry;
  1404. for (int ii = 0; ii < nSelCnt; ii++)
  1405. {
  1406. String sVmsNmbr = FVmsIds->Strings[ii];
  1407. pADO->Parameters->ParamByName("p01")->Value = sVmsNmbr;
  1408. pADO->Parameters->ParamByName("p02")->Value = VMS_PHSE_CHNG_CYCL;
  1409. pADO->ExecSQL();
  1410. nOkCnt++;
  1411. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sVmsNmbr);
  1412. if (pObj)
  1413. {
  1414. //pObj->VMS_PHSE_CHNG_CYCL = VMS_PHSE_CHNG_CYCL;
  1415. }
  1416. }
  1417. }
  1418. catch(EDatabaseError &E)
  1419. {
  1420. DBERRORMSG("VMS Config Save", String(E.ClassName()), E.Message, sQry);
  1421. throw Exception(String(E.ClassName()) + E.Message);
  1422. }
  1423. catch(Exception &e)
  1424. {
  1425. DBERRORMSG("VMS Config Save", String(e.ClassName()), e.Message, sQry);
  1426. throw Exception(String(e.ClassName()) + e.Message);
  1427. }
  1428. }
  1429. __finally
  1430. {
  1431. if (pADO)
  1432. {
  1433. pADO->Close();
  1434. delete pADO;
  1435. }
  1436. }
  1437. //sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS의 폼 표출주기를 설정하였습니다.";
  1438. sMsg = String(nSelCnt) + " " + cxLabel7->Caption + " " + String(nOkCnt) + " " + cxLabel28->Caption;
  1439. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  1440. for (int ii = 0; ii < nSelCnt; ii++)
  1441. {
  1442. String sVmsNmbr = FVmsIds->Strings[ii];
  1443. VmsCtlrManager->InsVmsControlHs(LAST_CRCT_DT, sVmsNmbr, "V09", String(VMS_PHSE_CHNG_CYCL), "1", LAST_CRPR_NMBR);
  1444. }
  1445. //FRAMEVmsStateList1->RefreshStatus();
  1446. FrmVmsOprMain->RefreshVmsMessage(WM_VMS_STATE_REFRESH);
  1447. }
  1448. //---------------------------------------------------------------------------
  1449. void __fastcall TVMS0500M::BtnMsgImmediateDownloadClick(TObject *Sender)
  1450. {
  1451. //폼 표출주기 설정
  1452. String sTitle = cxLabel30->Caption;//"폼 즉시 다운로드";
  1453. String sMsg = "";
  1454. sMsg = cxLabel31->Caption;//"폼 메시지를 지금 즉시 제어기로 다운로드 하시겠습니까?";
  1455. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  1456. String sCmdUser = g_pLOGIN->sUserId;
  1457. String sCmdTime = Now().FormatString("yyyymmddhhnnss");
  1458. #if 0
  1459. INT_VMS_STATE_REQ Req;
  1460. memset((char*)&Req, 0x00, sizeof(Req));
  1461. Req.Count = 0;
  1462. Req.Type = vms_req_state_all;
  1463. CComm_VmsStateReq(&Req);
  1464. #endif
  1465. BYTE MsgSeq;
  1466. INT_VMS_COMMON_REQ directCmd;
  1467. memset(&directCmd, 0x00, sizeof(directCmd));
  1468. MsgSeq = (BYTE)0x80;
  1469. memcpy(directCmd.CmdTime, AnsiString(sCmdTime).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  1470. memcpy(directCmd.VmsId, AnsiString("10001").c_str(), INT_VMS_MAX_ID); /* VMS 제어기 번호 */
  1471. memcpy(directCmd.OperId, AnsiString(sCmdUser).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  1472. directCmd.Command = 0x01;
  1473. int result = CComm_VmsCommonReq(&directCmd, MsgSeq);
  1474. if (VERR_NONE == result)
  1475. {
  1476. //VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V10", "Download", "1", sCmdUser);
  1477. }
  1478. else
  1479. {
  1480. //VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V10", "Download", "0", sCmdUser);
  1481. }
  1482. Sleep(100);
  1483. Application->ProcessMessages();
  1484. sMsg = cxLabel32->Caption;//"VMS 폼 메시지 즉시 전송을 요청하였습니다.";
  1485. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  1486. FOR_STL(TVmsCtlr*, pObj, VmsCtlrManager->FLists)
  1487. {
  1488. String sVmsNmbr = (pObj->VMS_CTLR_NMBR);
  1489. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V10", "Immediately Download", "1", sCmdUser);
  1490. }
  1491. BtnMsgImmediateDownload->Enabled = false;
  1492. TmrCommand->Enabled = true;
  1493. }
  1494. //---------------------------------------------------------------------------
  1495. void __fastcall TVMS0500M::TmrCommandTimer(TObject *Sender)
  1496. {
  1497. TmrCommand->Enabled = false;
  1498. BtnImdFromDnld->Enabled = true;
  1499. }
  1500. //---------------------------------------------------------------------------
  1501. void __fastcall TVMS0500M::PgControlPageChanging(TObject *Sender, TcxTabSheet *NewPage,
  1502. bool &AllowChange)
  1503. {
  1504. if (NewPage == TabPing)
  1505. {
  1506. BtnAllSelect->Visible = false;
  1507. BtnAllClear->Visible = false;
  1508. BtnReverse->Visible = false;
  1509. }
  1510. else
  1511. {
  1512. if (BtnAllSelect->Visible == false) BtnAllSelect->Visible = true;;
  1513. if (BtnAllClear->Visible == false) BtnAllClear->Visible = true;;
  1514. if (BtnReverse->Visible == false) BtnReverse->Visible = true;;
  1515. }
  1516. }
  1517. //---------------------------------------------------------------------------
  1518. void __fastcall TVMS0500M::UpdatePingList()
  1519. {
  1520. CMM_ClearGridTableView(TvPing);
  1521. int ii, jj;
  1522. int nCols = 0;
  1523. TcxDataController *pGDC = TvPing->DataController;
  1524. TvPing->BeginUpdate();
  1525. pGDC->BeginUpdate();
  1526. VmsCtlrManager->FLists.Lock();
  1527. try
  1528. {
  1529. int nRow;
  1530. FOR_STL(TVmsCtlr*, pObj, VmsCtlrManager->FLists)
  1531. {
  1532. if (pObj->DEL_YN == "Y") continue;
  1533. nRow = pGDC->AppendRecord();
  1534. if (pObj->STATE.Comm == vms_comm_normal) pGDC->Values[nRow][ColumnSel->Index] = false;
  1535. else pGDC->Values[nRow][ColumnSel->Index] = true;
  1536. pGDC->Values[nRow][Col01->Index] = (pObj->VMS_CTLR_NMBR);
  1537. pGDC->Values[nRow][Col02->Index] = pObj->VMS_CTLR_ID;
  1538. pGDC->Values[nRow][Col03->Index] = pObj->VMS_NM;
  1539. pGDC->Values[nRow][Col04->Index] = VmsComm(pObj); //통신상태
  1540. pGDC->Values[nRow][Col05->Index] = pObj->VMS_CTLR_IP;
  1541. pGDC->Values[nRow][Col06->Index] = "-";
  1542. pGDC->Values[nRow][Col07->Index] = "-";
  1543. pGDC->Values[nRow][Col08->Index] = "-";
  1544. pGDC->Values[nRow][Col09->Index] = pObj->WEB_CMRA_IP;
  1545. pGDC->Values[nRow][Col10->Index] = "-";
  1546. pGDC->Values[nRow][Col11->Index] = "-";
  1547. pGDC->Values[nRow][Col12->Index] = "-";
  1548. pGDC->Values[nRow][Col99->Index] = (int)pObj;
  1549. }
  1550. }
  1551. __finally
  1552. {
  1553. VmsCtlrManager->FLists.UnLock();
  1554. pGDC->EndUpdate();
  1555. TvPing->EndUpdate();
  1556. }
  1557. }
  1558. //---------------------------------------------------------------------------
  1559. void __fastcall TVMS0500M::RefreshPingList(bool AInit/*=false*/)
  1560. {
  1561. TcxDataController *pGDC = TvPing->DataController;
  1562. try
  1563. {
  1564. TvPing->BeginUpdate();
  1565. pGDC->BeginUpdate();
  1566. int nRows = pGDC->RecordCount;
  1567. for(int nRow = 0; nRow < nRows; nRow++)
  1568. {
  1569. int nMemPtr = TvPing->DataController->Values[nRow][Col99->Index];
  1570. TVmsCtlr *pObj = (TVmsCtlr*)nMemPtr;
  1571. if (!pObj) continue;
  1572. if (AInit == false && PgControl->Properties->ActivePage != TabPing)
  1573. {
  1574. if (pObj->STATE.Comm == vms_comm_normal) pGDC->Values[nRow][ColumnSel->Index] = false;
  1575. else pGDC->Values[nRow][ColumnSel->Index] = true;
  1576. }
  1577. if (AInit)
  1578. {
  1579. pGDC->Values[nRow][Col06->Index] = "-";
  1580. pGDC->Values[nRow][Col07->Index] = "-";
  1581. pGDC->Values[nRow][Col08->Index] = "-";
  1582. pGDC->Values[nRow][Col10->Index] = "-";
  1583. pGDC->Values[nRow][Col11->Index] = "-";
  1584. pGDC->Values[nRow][Col12->Index] = "-";
  1585. }
  1586. pGDC->Values[nRow][Col04->Index] = VmsComm(pObj); //통신상태
  1587. }
  1588. }
  1589. __finally
  1590. {
  1591. pGDC->EndUpdate();
  1592. TvPing->EndUpdate();
  1593. }
  1594. }
  1595. //---------------------------------------------------------------------------
  1596. void __fastcall TVMS0500M::PingNetwork(String AIp, int APort)
  1597. {
  1598. try
  1599. {
  1600. IdIcmpClient1->Host = AIp;
  1601. IdIcmpClient1->Port = EdPingPort->Value/*512*/;
  1602. IdIcmpClient1->ReceiveTimeout = EdPingTimeout->Value;
  1603. IdIcmpClient1->Ping(IdIcmpClient1->Host, IdIcmpClient1->Port);
  1604. }
  1605. catch (Exception &e)
  1606. {
  1607. Application->ShowException(&e);
  1608. }
  1609. catch(...)
  1610. {
  1611. ShowMessage("Ping error[Unknown]");
  1612. }
  1613. }
  1614. //---------------------------------------------------------------------------
  1615. void __fastcall TVMS0500M::BtnNwkPingClick(TObject *Sender)
  1616. {
  1617. TWaitCursor waitCrs;
  1618. TcxDataController *pGDC = TvPing->DataController;
  1619. int nRows = pGDC->RecordCount;
  1620. String sMsg;
  1621. int nSelCnt = CMM_GetCheckCount(TvPing, ColumnSel->Index);
  1622. if (0 == nSelCnt)
  1623. {
  1624. sMsg = cxLabel14->Caption;//"VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.";
  1625. Application->MessageBox(sMsg.c_str(), L"VMS Network Ping Test", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1626. CxPing->SetFocus();
  1627. return;
  1628. }
  1629. RefreshPingList(true);
  1630. PnlPing->Enabled = false;
  1631. String sSvrIp;
  1632. int nSvrPort;
  1633. bool bPing;
  1634. for (int ii = 0; ii < nRows; ii++)
  1635. {
  1636. bPing = pGDC->Values[ii][ColumnSel->Index];
  1637. if (!bPing) continue;
  1638. //pGDC->Values[ii][ColPingMon->Index] = Now().FormatString("yyyy-mm-dd hh:mm:ss");
  1639. FPingType = 1;
  1640. sSvrIp = pGDC->Values[ii][Col05->Index];
  1641. if (sSvrIp == NULL || sSvrIp.IsEmpty())
  1642. {
  1643. continue;
  1644. }
  1645. pGDC->Values[ii][Col06->Index] = "?";
  1646. pGDC->Values[ii][Col07->Index] = "?";
  1647. pGDC->Values[ii][Col08->Index] = "?";
  1648. nSvrPort = 0;
  1649. FPingTimeout = false;
  1650. PingNetwork(sSvrIp.Trim(), nSvrPort);
  1651. if (FPingTimeout)
  1652. {
  1653. pGDC->Values[ii][Col08->Index] = "Time out";
  1654. }
  1655. Application->ProcessMessages();
  1656. FPingType = 2;
  1657. sSvrIp = pGDC->Values[ii][Col09->Index];
  1658. if (sSvrIp == NULL || sSvrIp.IsEmpty())
  1659. {
  1660. continue;
  1661. }
  1662. pGDC->Values[ii][Col10->Index] = "?";
  1663. pGDC->Values[ii][Col11->Index] = "?";
  1664. pGDC->Values[ii][Col12->Index] = "?";
  1665. nSvrPort = 0;
  1666. FPingTimeout = false;
  1667. PingNetwork(sSvrIp.Trim(), nSvrPort);
  1668. if (FPingTimeout)
  1669. {
  1670. pGDC->Values[ii][Col12->Index] = "Time out";
  1671. }
  1672. Application->ProcessMessages();
  1673. }
  1674. PnlPing->Enabled = true;
  1675. }
  1676. //---------------------------------------------------------------------------
  1677. void __fastcall TVMS0500M::BtnNwkPingClearClick(TObject *Sender)
  1678. {
  1679. RefreshPingList(true);
  1680. }
  1681. //---------------------------------------------------------------------------
  1682. void __fastcall TVMS0500M::Col04CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas,
  1683. TcxGridTableDataCellViewInfo *AViewInfo, bool &ADone)
  1684. {
  1685. try
  1686. {
  1687. TColor tColor;
  1688. String sStatus = AViewInfo->GridRecord->DisplayTexts[AViewInfo->Item->Index];
  1689. tColor = ACanvas->Brush->Color;
  1690. #if 0
  1691. if (sStatus.Pos("-")) tColor = clGray;
  1692. else if (sStatus.Pos("장애")) tColor = clRed;
  1693. else if (sStatus.Pos("켜짐")) tColor = clYellow;
  1694. else if (sStatus.Pos("열림")) tColor = clRed;
  1695. else if (sStatus.Pos("동작")) tColor = clYellow;
  1696. else if (sStatus.Pos("가동")) tColor = clYellow;
  1697. else tColor = clLime;
  1698. #else
  1699. if (sStatus.Pos("-")) tColor = clGray;
  1700. else if (sStatus.Pos(FrmLang->lblState1->Caption.Trim())) tColor = clRed;
  1701. else if (sStatus.Pos(FrmLang->lblPOWER0->Caption.Trim())) tColor = clYellow;
  1702. else if (sStatus.Pos(FrmLang->lblCDS1->Caption.Trim())) tColor = clRed;
  1703. else if (sStatus.Pos(FrmLang->lblFAN0->Caption.Trim())) tColor = clYellow;
  1704. //else if (sStatus.Pos(frmLang->lblHEAT0->Caption.Trim())) tColor = clYellow;
  1705. else tColor = clLime;
  1706. #endif
  1707. ACanvas->SetBrushColor(tColor);
  1708. ACanvas->Font->Color = clBlack;
  1709. /*if (AViewInfo->GridRecord->Selected)
  1710. {
  1711. ACanvas->Font->Color = clBlack;
  1712. }*/
  1713. }
  1714. catch(Exception &e)
  1715. {
  1716. }
  1717. }
  1718. //---------------------------------------------------------------------------
  1719. void __fastcall TVMS0500M::IdIcmpClient1Reply(TComponent *ASender, const TReplyStatus *AReplyStatus)
  1720. {
  1721. try
  1722. {
  1723. String sRcvIp = AReplyStatus->FromIpAddress;
  1724. int nRcvPort= IdIcmpClient1->Port;
  1725. if (rsTimeOut == AReplyStatus->ReplyStatusType || sRcvIp == "0.0.0.0")
  1726. {
  1727. FPingTimeout = true;
  1728. return;
  1729. }
  1730. TcxDataController *pGDC = TvPing->DataController;
  1731. int nRows = pGDC->RecordCount;
  1732. String sSvrIp;
  1733. for (int ii = 0; ii < nRows; ii++)
  1734. {
  1735. if (FPingType == 1)
  1736. sSvrIp = pGDC->Values[ii][Col05->Index];
  1737. else
  1738. sSvrIp = pGDC->Values[ii][Col09->Index];
  1739. int nSvrPort = 0;
  1740. if (sSvrIp.Trim() == sRcvIp && nRcvPort == nSvrPort)
  1741. {
  1742. if (FPingType == 1)
  1743. {
  1744. if (AReplyStatus->MsRoundTripTime > 100)
  1745. {
  1746. pGDC->Values[ii][Col08->Index] = "Delayed";
  1747. }
  1748. else
  1749. {
  1750. pGDC->Values[ii][Col08->Index] = "Normal";
  1751. }
  1752. pGDC->Values[ii][Col06->Index] = String(AReplyStatus->MsRoundTripTime) + " ";
  1753. pGDC->Values[ii][Col07->Index] = String(AReplyStatus->TimeToLive) + " ";
  1754. }
  1755. else
  1756. {
  1757. if (AReplyStatus->MsRoundTripTime > 100)
  1758. {
  1759. pGDC->Values[ii][Col12->Index] = "Delayed";
  1760. }
  1761. else
  1762. {
  1763. pGDC->Values[ii][Col12->Index] = "Normal";
  1764. }
  1765. pGDC->Values[ii][Col10->Index] = String(AReplyStatus->MsRoundTripTime) + " ";
  1766. pGDC->Values[ii][Col11->Index] = String(AReplyStatus->TimeToLive) + " ";
  1767. }
  1768. break;
  1769. }
  1770. }
  1771. }
  1772. catch(Exception &e)
  1773. {
  1774. }
  1775. }
  1776. //---------------------------------------------------------------------------
  1777. void __fastcall TVMS0500M::Col08CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas,
  1778. TcxGridTableDataCellViewInfo *AViewInfo, bool &ADone)
  1779. {
  1780. try
  1781. {
  1782. int iIndex = AViewInfo->Item->Index;
  1783. ACanvas->Canvas->Brush->Style = bsSolid;
  1784. String val = AViewInfo->GridRecord->DisplayTexts[iIndex];
  1785. ACanvas->Canvas->Font->Color = clBlack;
  1786. if (val == "Normal") ACanvas->Canvas->Brush->Color = clLime;
  1787. else if (val == "Delayed") ACanvas->Canvas->Brush->Color = clRed;
  1788. else if (val == "Time out") ACanvas->Canvas->Brush->Color = clRed;
  1789. else ACanvas->Canvas->Brush->Color = clSilver;
  1790. } catch(...) {}
  1791. }
  1792. //---------------------------------------------------------------------------
  1793. void __fastcall TVMS0500M::TvPingCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  1794. TMouseButton AButton, TShiftState AShift,
  1795. bool &AHandled)
  1796. {
  1797. if (!ACellViewInfo) return;
  1798. TcxGridDataController *pGDC = TvPing->DataController;
  1799. int nRow = pGDC->FocusedRecordIndex;
  1800. if( nRow <= -1 )
  1801. return;
  1802. if (ACellViewInfo->Item->Index == Col05->Index ||
  1803. ACellViewInfo->Item->Index == Col09->Index)
  1804. {
  1805. String sSvrIp = pGDC->Values[nRow][ACellViewInfo->Item->Index];
  1806. ITSUtil_NetworkPing(sSvrIp);
  1807. }
  1808. }
  1809. //---------------------------------------------------------------------------
  1810. void __fastcall TVMS0500M::ErrorMsg(String AErrMsg)
  1811. {
  1812. LblErrMsg->Caption = AErrMsg;
  1813. LblErrMsg->BringToFront();
  1814. LblErrMsg->Transparent = true;
  1815. LblErrMsg->Style->Font->Color = clWhite;
  1816. LblErrMsg->Style->TextColor = clWhite;
  1817. LblErrMsg->Visible = true;
  1818. LblErrMsg->Refresh();
  1819. LblErrMsg->BringToFront();
  1820. }
  1821. //---------------------------------------------------------------------------
  1822. void __fastcall TVMS0500M::WebCamPlay(String AVmsNo)
  1823. {
  1824. if (LblErrMsg->Visible) LblErrMsg->Visible = false;
  1825. reMsg->Lines->Clear();
  1826. reMsg->Lines->Add("Connect...");
  1827. WebCamStop();
  1828. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(AVmsNo);
  1829. if (!pObj) return;
  1830. PnlSamsung->Caption = "Connecting...";
  1831. PnlSamsung->Refresh();
  1832. try
  1833. {
  1834. FStrmAddr = pObj->FULL_STRM_SESN_NM.Trim();
  1835. if (FStrmAddr == "")
  1836. {
  1837. FStrmAddr = pObj->STRM_SESN_NM.Trim();
  1838. }
  1839. if (FStrmAddr != "" && pObj->WEB_CMRA_IP != "")
  1840. {
  1841. #if FFPLAYER
  1842. FFPlayer1->AspectRatio = ChkFullScreen->Checked ? -1 : 0;
  1843. FFPlayer1->TryOpen(FStrmAddr, PnlSamsung->Handle);
  1844. #endif
  1845. #if ACES
  1846. AcesTechXPlayer21->URL = FStrmAddr;
  1847. FStrmHandle = AcesTechXPlayer21->ConnectAsync();
  1848. if (FStrmHandle > 0)
  1849. {
  1850. }
  1851. #endif
  1852. FStrmUser = pObj->WEB_CMRA_ID;
  1853. FStrmPswd = pObj->WEB_CMRA_PWD;
  1854. FStrmHttp = "http://" + pObj->WEB_CMRA_IP;
  1855. //if (pObj->WEB_CMRA_PORT.ToIntDef(0) != 0)
  1856. //{
  1857. // FStrmHttp = FStrmHttp + ":" + pObj->WEB_CMRA_PORT;
  1858. //}
  1859. FStrmPlay = true;
  1860. }
  1861. else
  1862. {
  1863. FStrmHttp = "";
  1864. }
  1865. }
  1866. catch(Exception &e)
  1867. {
  1868. }
  1869. }
  1870. //---------------------------------------------------------------------------
  1871. void __fastcall TVMS0500M::WebCamStop()
  1872. {
  1873. if (!FStrmPlay) return;
  1874. try
  1875. {
  1876. #if FFPLAYER
  1877. if (FFPlayer1->ScreenHandle != NULL)
  1878. {
  1879. FFPlayer1->Stop(true);
  1880. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  1881. UpdateWindow(FFPlayer1->ScreenHandle);
  1882. //FFPlayer1->ScreenHandle = NULL;
  1883. }
  1884. #endif
  1885. #if ACES
  1886. if (FStrmHandle > 0)
  1887. {
  1888. AcesTechXPlayer21->Close();
  1889. }
  1890. #endif
  1891. }
  1892. catch(Exception &e)
  1893. {
  1894. }
  1895. PnlSamsung->Caption = "Disconnected";
  1896. PnlSamsung->Refresh();
  1897. FStrmPlay = false;
  1898. }
  1899. //---------------------------------------------------------------------------
  1900. void __fastcall TVMS0500M::BtnImdFromDnldClick(TObject *Sender)
  1901. {
  1902. //폼 즉시 다운로드
  1903. String sTitle = cxLabel30->Caption;//"폼 즉시 다운로드";
  1904. String sMsg = "";
  1905. int nOkCnt = 0;
  1906. int nSelCnt = GetSelListItems(true);
  1907. if (0 == nSelCnt)
  1908. {
  1909. sMsg = cxLabel2->Caption + "\r\n" + cxLabel9->Caption;//"VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.\r\n현재 통신이 비정상인 VMS는 선택하실 수 없습니다.";
  1910. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1911. FRAMEVmsStateList1->CxList->SetFocus();
  1912. return;
  1913. }
  1914. sMsg = cxLabel31->Caption;//"폼 메시지를 지금 즉시 제어기로 다운로드 하시겠습니까?";
  1915. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  1916. String sCmdUser = g_pLOGIN->sUserId;
  1917. String sCmdTime = Now().FormatString("yyyymmddhhnnss");
  1918. BYTE MsgSeq;
  1919. INT_VMS_IMMEDIATE_SCENARIO_DNLD_REQ directCmd;
  1920. memset(&directCmd, 0x00, sizeof(directCmd));
  1921. MsgSeq = (BYTE)0x80;
  1922. memcpy(directCmd.CmdTime, AnsiString(sCmdTime).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  1923. memcpy(directCmd.OperId, AnsiString(sCmdUser).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  1924. for (int ii = 0; ii < nSelCnt; ii++)
  1925. {
  1926. String sVmsNmbr = FVmsIds->Strings[ii];
  1927. directCmd.VMS_CTLR_NMBR[ii] = sVmsNmbr.ToIntDef(0);
  1928. }
  1929. directCmd.Count = (BYTE)nSelCnt;
  1930. int result = CComm_VmsImmediateScenarioDnldReq(&directCmd, MsgSeq);
  1931. if (VERR_NONE == result)
  1932. {
  1933. //VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V10", "Download", "1", sCmdUser);
  1934. }
  1935. else
  1936. {
  1937. //VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V10", "Download", "0", sCmdUser);
  1938. }
  1939. Sleep(100);
  1940. Application->ProcessMessages();
  1941. sMsg = cxLabel32->Caption;//"VMS 폼 메시지 즉시 전송을 요청하였습니다.";
  1942. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  1943. for (int ii = 0; ii < nSelCnt; ii++)
  1944. {
  1945. String sVmsNmbr = FVmsIds->Strings[ii];
  1946. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V10", "Immediately Download", "1", sCmdUser);
  1947. }
  1948. BtnImdFromDnld->Enabled = false;
  1949. TmrCommand->Enabled = true;
  1950. }
  1951. //---------------------------------------------------------------------------
  1952. void __fastcall TVMS0500M::BtnModuleControlClick(TObject *Sender)
  1953. {
  1954. TcxButton *pBtnControl = (TcxButton*)Sender;
  1955. String sTitle = cxLabel1->Caption;//"전광판/제어기 제어";
  1956. String sMsg = "";
  1957. int nOkCnt = 0;
  1958. int nSelCnt = GetSelListItems(true);
  1959. if (0 == nSelCnt)
  1960. {
  1961. sMsg = cxLabel2->Caption + "\r\n" + cxLabel9->Caption;//"VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.\r\n현재 통신이 비정상인 VMS는 선택하실 수 없습니다.";
  1962. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1963. FRAMEVmsStateList1->CxList->SetFocus();
  1964. return;
  1965. }
  1966. int nCmdIdx;
  1967. if (pBtnControl->Tag == 1)
  1968. {
  1969. nCmdIdx = vms_req_board_power_on;
  1970. sMsg = cxLabel3->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VMS에 VMS 전광판 전원 ON 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  1971. }
  1972. else
  1973. {
  1974. nCmdIdx = vms_req_board_power_off;
  1975. sMsg = cxLabel4->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VMS에 VMS 전광판 전원 OFF 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  1976. }
  1977. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  1978. String sCmdUser = g_pLOGIN->sUserId;
  1979. String sCmdTime = Now().FormatString("yyyymmddhhnnss");
  1980. int result;
  1981. for (int ii = 0; ii < nSelCnt; ii++)
  1982. {
  1983. String sVmsNmbr = FVmsIds->Strings[ii];
  1984. if (nCmdIdx == vms_req_board_power_on || nCmdIdx == vms_req_board_power_off)
  1985. {
  1986. // 전광판 On(=0)/Off(=1)
  1987. INT_VMS_POWER_CTL_REQ VmsPowerCtl;
  1988. BYTE MsgSeq;
  1989. memset(&VmsPowerCtl, 0x00, sizeof(VmsPowerCtl));
  1990. MsgSeq = (BYTE)0x10; // 제어명령 일련번호-결과값을 받아서 처리할때 필요함
  1991. memcpy(VmsPowerCtl.CmdTime, AnsiString(sCmdTime).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  1992. memcpy(VmsPowerCtl.OperId, AnsiString(sCmdUser).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  1993. VmsPowerCtl.VMS_CTLR_NMBR = sVmsNmbr.ToIntDef(0);
  1994. VmsPowerCtl.Command = (BYTE)nCmdIdx; /* 제어 구분, 1:켜짐 2:꺼짐 */
  1995. String sOprCode = (nCmdIdx == vms_req_board_power_on) ? "V01" : "V02";
  1996. String sCmdValue = (nCmdIdx == vms_req_board_power_on) ? "On" : "Off";
  1997. result = CComm_VmsPowerControlReq(&VmsPowerCtl, MsgSeq);
  1998. if (VERR_NONE == result)
  1999. {
  2000. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, sOprCode, sCmdValue, "1", sCmdUser);
  2001. nOkCnt++;
  2002. }
  2003. else
  2004. {
  2005. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, sOprCode, sCmdValue, "0", sCmdUser);
  2006. }
  2007. }
  2008. Sleep(100);
  2009. Application->ProcessMessages();
  2010. }
  2011. sMsg = String(nSelCnt) + " " + cxLabel7->Caption + " " + String(nOkCnt) + " " + cxLabel8->Caption;
  2012. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  2013. }
  2014. //---------------------------------------------------------------------------
  2015. void __fastcall TVMS0500M::BtnResetClick(TObject *Sender)
  2016. {
  2017. TcxButton *pBtnControl = (TcxButton*)Sender;
  2018. String sTitle = cxLabel1->Caption;//"전광판/제어기 제어";
  2019. String sMsg = "";
  2020. int nOkCnt = 0;
  2021. int nSelCnt = GetSelListItems(true);
  2022. if (0 == nSelCnt)
  2023. {
  2024. sMsg = cxLabel2->Caption + "\r\n" + cxLabel9->Caption;//"VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.\r\n현재 통신이 비정상인 VMS는 선택하실 수 없습니다.";
  2025. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  2026. FRAMEVmsStateList1->CxList->SetFocus();
  2027. return;
  2028. }
  2029. int nCmdIdx;
  2030. {
  2031. nCmdIdx = 2;
  2032. sMsg = cxLabel5->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VMS에 VMS 제어기 리셋 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  2033. }
  2034. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  2035. String sCmdUser = g_pLOGIN->sUserId;
  2036. String sCmdTime = Now().FormatString("yyyymmddhhnnss");
  2037. int result;
  2038. for (int ii = 0; ii < nSelCnt; ii++)
  2039. {
  2040. String sVmsNmbr = FVmsIds->Strings[ii];
  2041. if (nCmdIdx == 2)
  2042. {
  2043. // 제어기 리셋
  2044. INT_VMS_RESET_REQ VmsReset;
  2045. BYTE MsgSeq;
  2046. memset(&VmsReset, 0x00, sizeof(VmsReset));
  2047. MsgSeq = (BYTE)0x20;
  2048. memcpy(VmsReset.CmdTime, AnsiString(sCmdTime).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  2049. memcpy(VmsReset.OperId, AnsiString(sCmdUser).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  2050. VmsReset.VMS_CTLR_NMBR = sVmsNmbr.ToIntDef(0);
  2051. VmsReset.Mode = (BYTE)pBtnControl->Tag;
  2052. result = CComm_VmsResetReq(&VmsReset, MsgSeq);
  2053. if (VERR_NONE == result)
  2054. {
  2055. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V03", "Reset", "1", sCmdUser);
  2056. nOkCnt++;
  2057. }
  2058. else
  2059. {
  2060. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V03", "Reset", "0", sCmdUser);
  2061. }
  2062. }
  2063. Sleep(100);
  2064. Application->ProcessMessages();
  2065. }
  2066. sMsg = String(nSelCnt) + " " + cxLabel7->Caption + " " + String(nOkCnt) + " " + cxLabel8->Caption;
  2067. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  2068. }
  2069. //---------------------------------------------------------------------------
  2070. void __fastcall TVMS0500M::BtnBrghControlClick(TObject *Sender)
  2071. {
  2072. TcxButton *pBtnControl = (TcxButton*)Sender;
  2073. String sTitle = cxLabel1->Caption;//"전광판/제어기 제어";
  2074. String sMsg = "";
  2075. int nOkCnt = 0;
  2076. int nSelCnt = GetSelListItems(true);
  2077. if (0 == nSelCnt)
  2078. {
  2079. sMsg = cxLabel2->Caption + "\r\n" + cxLabel9->Caption;//"VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.\r\n현재 통신이 비정상인 VMS는 선택하실 수 없습니다.";
  2080. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  2081. FRAMEVmsStateList1->CxList->SetFocus();
  2082. return;
  2083. }
  2084. int nCmdIdx;
  2085. {
  2086. nCmdIdx = 3;
  2087. sMsg = cxLabel6->Caption + "\r\n" + cxLabel9->Caption;//"선택하신 VMS에 VMS 휘도값 제어 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  2088. }
  2089. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  2090. String sCmdUser = g_pLOGIN->sUserId;
  2091. String sCmdTime = Now().FormatString("yyyymmddhhnnss");
  2092. int result;
  2093. for (int ii = 0; ii < nSelCnt; ii++)
  2094. {
  2095. String sVmsNmbr = FVmsIds->Strings[ii];
  2096. if (nCmdIdx == 3)
  2097. {
  2098. // 휘도제어
  2099. INT_VMS_LUMINANCE_REQ VmsLuminance;
  2100. BYTE MsgSeq;
  2101. String sCmdValue = SeLuminance->Value;
  2102. memset(&VmsLuminance, 0x00, sizeof(VmsLuminance));
  2103. MsgSeq = (BYTE)0x30;
  2104. memcpy(VmsLuminance.CmdTime, AnsiString(sCmdTime).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  2105. memcpy(VmsLuminance.OperId, AnsiString(sCmdUser).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  2106. VmsLuminance.VMS_CTLR_NMBR = sVmsNmbr.ToIntDef(0);
  2107. VmsLuminance.BrghMode = (BYTE)pBtnControl->Tag;
  2108. VmsLuminance.BrghCurrStep = (BYTE)SeCurrBrgh->Value;
  2109. VmsLuminance.BrghWeekStep = (BYTE)SeWeekBrgh->Value;
  2110. VmsLuminance.BrghNghtStep = (BYTE)SeNghtBrgh->Value;
  2111. result = CComm_VmsLuminanceReq(&VmsLuminance, MsgSeq);
  2112. if (VERR_NONE == result)
  2113. {
  2114. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V07", sCmdValue, "1", sCmdUser);
  2115. nOkCnt++;
  2116. }
  2117. else
  2118. {
  2119. VmsCtlrManager->InsVmsControlHs(sCmdTime, sVmsNmbr, "V07", sCmdValue, "0", sCmdUser);
  2120. }
  2121. }
  2122. Sleep(100);
  2123. Application->ProcessMessages();
  2124. }
  2125. sMsg = String(nSelCnt) + " " + cxLabel7->Caption + " " + String(nOkCnt) + " " + cxLabel8->Caption;
  2126. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  2127. }
  2128. //---------------------------------------------------------------------------
  2129. void __fastcall TVMS0500M::FFPlayer1State(TObject *Sender, TPlayState APlayState)
  2130. {
  2131. switch(APlayState)
  2132. {
  2133. case Ffbasecomponent::psPlay: reMsg->Lines->Add("Play..."); break;
  2134. case Ffbasecomponent::psResume: reMsg->Lines->Add("Resume."); break;
  2135. case Ffbasecomponent::psPause: reMsg->Lines->Add("Pause.."); break;
  2136. case Ffbasecomponent::psStep: reMsg->Lines->Add("Step..."); break;
  2137. case Ffbasecomponent::psStop:
  2138. if (FFPlayer1->ScreenHandle != NULL)
  2139. {
  2140. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  2141. UpdateWindow(FFPlayer1->ScreenHandle);
  2142. //FFPlayer1->ScreenHandle = NULL;
  2143. }
  2144. reMsg->Lines->Add("Stop...");
  2145. break;
  2146. case Ffbasecomponent::psEnd:
  2147. {
  2148. FFPlayer1->Stop(true);
  2149. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  2150. UpdateWindow(FFPlayer1->ScreenHandle);
  2151. //FFPlayer1->ScreenHandle = NULL;
  2152. }
  2153. reMsg->Lines->Add("End...");
  2154. break;
  2155. }
  2156. }
  2157. //---------------------------------------------------------------------------
  2158. void __fastcall TVMS0500M::FFPlayer1OpenFailed(TObject *Sender)
  2159. {
  2160. //ErrorMsg("웹카메라에 연결할 수 없습니다.");
  2161. //WebCamStop();
  2162. }
  2163. //---------------------------------------------------------------------------
  2164. void __fastcall TVMS0500M::ChkFullScreenClick(TObject *Sender)
  2165. {
  2166. FFPlayer1->AspectRatio = ChkFullScreen->Checked ? -1 : 0;
  2167. }
  2168. //---------------------------------------------------------------------------
  2169. void __fastcall TVMS0500M::IdHTTP1Authorization(TObject *Sender, TIdAuthentication *Authentication, bool &Handled)
  2170. {
  2171. #if 1
  2172. IdHTTP1->Request->Username = FStrmUser;
  2173. IdHTTP1->Request->Password = FStrmPswd;
  2174. #endif
  2175. Authentication->Username = FStrmUser;
  2176. Authentication->Password = FStrmPswd;
  2177. TIdDigestAuthentication *pAuth1 = (TIdDigestAuthentication*)IdHTTP1->Request->Authentication;
  2178. TIdDigestAuthentication *pAuth2 = (TIdDigestAuthentication*)Authentication;
  2179. pAuth1->Uri = IdHTTP1->Request->URL;
  2180. pAuth2->Method = "GET";
  2181. Handled = true;
  2182. }
  2183. //---------------------------------------------------------------------------
  2184. void __fastcall TVMS0500M::BtnWebCamControlMouseDown(TObject *Sender, TMouseButton Button,
  2185. TShiftState Shift, int X, int Y)
  2186. {
  2187. // PANControl
  2188. if (!FStrmPlay) return;
  2189. if (!FSelVmsObj) return;
  2190. if (FSelVmsObj->WEB_CMRA_IP.Trim() == "") return;
  2191. String sPTZSpeed = String(PTZSpeed->Position);
  2192. try
  2193. {
  2194. String sCmdHtml = "";
  2195. TImageBtn *pBtn = (TImageBtn*)Sender;
  2196. if (FSelVmsObj->WEB_CMRA_PROTOCOL == "1")
  2197. {
  2198. switch(pBtn->Tag)
  2199. {
  2200. case 1: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Tilt=5&Duration=1", FStrmHttp.c_str()); break; // Tilt Up
  2201. case 2: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Tilt=-5&Duration=1", FStrmHttp.c_str()); break; // Tilt Down
  2202. case 3: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Pan=5", FStrmHttp.c_str()); break; // Pan left
  2203. case 4: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Pan=-5", FStrmHttp.c_str()); break; // Pan right
  2204. case 9: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Zoom=3", FStrmHttp.c_str()); break; // Zoom In
  2205. case 10: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Zoom=-3", FStrmHttp.c_str()); break; // Zoom Out
  2206. case 12: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Focus=Near", FStrmHttp.c_str()); break; // Focus In
  2207. case 13: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Focus=Far", FStrmHttp.c_str()); break; // Focus Out
  2208. default: return;
  2209. }
  2210. }
  2211. else
  2212. if (FSelVmsObj->WEB_CMRA_PROTOCOL == "2")
  2213. {
  2214. switch(pBtn->Tag)
  2215. {
  2216. case 1: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x107&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Tilt Up
  2217. case 2: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x101&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Tilt Down
  2218. case 3: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x103&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Pan left
  2219. case 4: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x105&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Pan right
  2220. case 9: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x10B&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Zoom In
  2221. case 10: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x10C&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Zoom Out
  2222. case 12: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x10E&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Focus In
  2223. case 13: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x10D&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Focus Out
  2224. default: return;
  2225. }
  2226. }
  2227. if (sCmdHtml == "") return;
  2228. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
  2229. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoInProcessAuth;
  2230. String sResult = IdHTTP1->Get(sCmdHtml);
  2231. reMsg->Lines->Add(sResult);
  2232. IdHTTP1->Disconnect();
  2233. }
  2234. catch(...) {}
  2235. }
  2236. //---------------------------------------------------------------------------
  2237. void __fastcall TVMS0500M::BtnWebCamControlMouseUp(TObject *Sender, TMouseButton Button,
  2238. TShiftState Shift, int X, int Y)
  2239. {
  2240. // PANControl Stop
  2241. if (!FStrmPlay) return;
  2242. if (!FSelVmsObj) return;
  2243. if (FSelVmsObj->WEB_CMRA_IP.Trim() == "") return;
  2244. String sPTZSpeed = String(PTZSpeed->Position);
  2245. try
  2246. {
  2247. String sCmdHtml = "";
  2248. TImageBtn *pBtn = (TImageBtn*)Sender;
  2249. if (FSelVmsObj->WEB_CMRA_PROTOCOL == "1")
  2250. {
  2251. switch(pBtn->Tag)
  2252. {
  2253. case 1: // Tilt Up
  2254. case 2: // Tilt Down
  2255. sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Tilt=0&Duration=1", FStrmHttp.c_str());
  2256. break;
  2257. case 3: // Pan left
  2258. case 4: // Pan right
  2259. sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Pan=0", FStrmHttp.c_str());
  2260. break;
  2261. case 9: // Zoom In
  2262. case 10: // Zoom Out
  2263. sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Zoom=0", FStrmHttp.c_str());
  2264. break;
  2265. case 12: // Focus In
  2266. case 13: // Focus Out
  2267. sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Focus=Stop", FStrmHttp.c_str());
  2268. break;
  2269. default: return;
  2270. }
  2271. }
  2272. else
  2273. if (FSelVmsObj->WEB_CMRA_PROTOCOL == "2")
  2274. {
  2275. switch(pBtn->Tag)
  2276. {
  2277. case 1: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x207&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Tilt Up
  2278. case 2: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x201&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Tilt Down
  2279. case 3: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x203&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Pan left
  2280. case 4: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x205&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Pan right
  2281. case 9: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x20B&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Zoom In
  2282. case 10: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x20C&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Zoom Out
  2283. case 12: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x20E&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Focus In
  2284. case 13: sCmdHtml.printf(L"%s/goform/app/FwPtzCtr?FwModId=0&PortId=0&PtzCode=0x20D&PtzParm=%s&FwCgiVer=0x0001", FStrmHttp.c_str(), sPTZSpeed.c_str()); break; // Focus Out
  2285. default: return;
  2286. }
  2287. }
  2288. if (sCmdHtml == "") return;
  2289. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
  2290. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoInProcessAuth;
  2291. String sResult = IdHTTP1->Get(sCmdHtml);
  2292. reMsg->Lines->Add(sResult);
  2293. IdHTTP1->Disconnect();
  2294. }
  2295. catch(...) {}
  2296. }
  2297. //---------------------------------------------------------------------------