DSRM020MF.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "VitzroCommF.h"
  7. #pragma hdrstop
  8. #include "DSRM020MF.h"
  9. //---------------------------------------------------------------------------
  10. #pragma package(smart_init)
  11. #pragma link "cxButtons"
  12. #pragma link "cxClasses"
  13. #pragma link "cxContainer"
  14. #pragma link "cxControls"
  15. #pragma link "cxCustomData"
  16. #pragma link "cxData"
  17. #pragma link "cxDataStorage"
  18. #pragma link "cxEdit"
  19. #pragma link "cxFilter"
  20. #pragma link "cxGraphics"
  21. #pragma link "cxGrid"
  22. #pragma link "cxGridCustomTableView"
  23. #pragma link "cxGridCustomView"
  24. #pragma link "cxGridLevel"
  25. #pragma link "cxGridTableView"
  26. #pragma link "cxGroupBox"
  27. #pragma link "cxLabel"
  28. #pragma link "cxLookAndFeelPainters"
  29. #pragma link "cxLookAndFeels"
  30. #pragma link "cxRadioGroup"
  31. #pragma link "cxSplitter"
  32. #pragma link "cxStyles"
  33. #pragma link "dxSkinBlack"
  34. #pragma link "dxSkinBlue"
  35. #pragma link "dxSkinsCore"
  36. #pragma link "dxSkinscxPCPainter"
  37. #pragma resource "*.dfm"
  38. TDSRM020M *DSRM020M = NULL;
  39. //---------------------------------------------------------------------------
  40. __fastcall TDSRM020M::TDSRM020M(TComponent* Owner)
  41. : TForm(Owner)
  42. {
  43. ITSSkin_Load(this);
  44. CMM_LoadForm(g_sFormsDir, this);
  45. FTitle = "DSRC-RSE 제어";
  46. FReqSeq = 0;
  47. TvResult->OptionsView->NoDataToDisplayInfoText = FrmLang->lblNoInfo->Caption;//"<제어전송결과>";
  48. FRAMEDsrcList1->PnlBottom->Visible = false;
  49. }
  50. //---------------------------------------------------------------------------
  51. /*
  52. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  53. * Form과 DataModule class를 delete시킨다.
  54. * arguments
  55. *
  56. * return
  57. * void
  58. */
  59. void __fastcall TDSRM020M::CommClose()
  60. {
  61. try
  62. {
  63. CMM_SaveForm(g_sFormsDir, this);
  64. }
  65. catch(...)
  66. {
  67. }
  68. }
  69. //---------------------------------------------------------------------------
  70. /*
  71. * Form을 보여줄때 호출되는 event 메서드이다.
  72. * arguments
  73. * Sender : event handler 객체
  74. * return
  75. * void
  76. */
  77. void __fastcall TDSRM020M::FormShow(TObject *Sender)
  78. {
  79. Refresh();
  80. FormInit();
  81. TmrShow->Enabled = true;
  82. }
  83. //---------------------------------------------------------------------------
  84. /*
  85. * form 초기화
  86. *
  87. * arguments
  88. *
  89. * return
  90. * void
  91. */
  92. void __fastcall TDSRM020M::FormInit()
  93. {
  94. }
  95. //---------------------------------------------------------------------------
  96. /*
  97. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  98. * arguments
  99. * Sender : event handler 객체
  100. * return
  101. * void
  102. */
  103. void __fastcall TDSRM020M::TmrShowTimer(TObject *Sender)
  104. {
  105. TmrShow->Enabled = false;
  106. RdoController->Checked = true;
  107. FRAMEDsrcList1->UpdateList();
  108. }
  109. //---------------------------------------------------------------------------
  110. /*
  111. * Close 버튼 클릭 이벤트 핸들러
  112. * arguments
  113. * Sender : event handler 객체
  114. * return
  115. * void
  116. */
  117. void __fastcall TDSRM020M::BtnCloseClick(TObject *Sender)
  118. {
  119. Close();
  120. }
  121. //---------------------------------------------------------------------------
  122. void __fastcall TDSRM020M::FormClose(TObject *Sender, TCloseAction &Action)
  123. {
  124. CommClose();
  125. DSRM020M = NULL;
  126. Action = caFree;
  127. }
  128. //---------------------------------------------------------------------------
  129. void __fastcall TDSRM020M::FormCloseQuery(TObject *Sender, bool &CanClose)
  130. {
  131. FRAMEDsrcList1->OnCloseQuery(CanClose);
  132. }
  133. //---------------------------------------------------------------------------
  134. void __fastcall TDSRM020M::BtnControlClick(TObject *Sender)
  135. {
  136. int nSelects = CMM_GetCheckCount(FRAMEDsrcList1->TvList, FRAMEDsrcList1->ColumnSel->Index);
  137. if (0 == nSelects)
  138. {
  139. Application->MessageBox(L"제어 목록을 선택하지 않았습니다.", FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  140. FRAMEDsrcList1->CxList->SetFocus();
  141. return;
  142. }
  143. if (!RdoController->Checked && !RdoAnt1->Checked)
  144. {
  145. Application->MessageBox(L"장치 유형을 선택하지 않았습니다.\r\n장치 유형을 선택하세요.", FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  146. return;
  147. }
  148. if (!RdoReset->Checked && !RdoStop->Checked && !RdoStart->Checked)
  149. {
  150. Application->MessageBox(L"제어 유형을 선택하지 않았습니다.\r\n제어 유형을 선택하세요.", FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  151. return;
  152. }
  153. if (Application->MessageBox(L"제어전송확인\r\n선택한 DSRC-RSE에 대하여 제어명령을 전송하시겠습니까??",
  154. FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  155. int nRow;
  156. int nResult;
  157. EN_INT_RSE_DEVICE_CODE DeviceType;
  158. EN_INT_RSE_CONTROL_CODE ControlType;
  159. DeviceType = INT_RSE_DEVICE_MAIN;
  160. if (RdoAnt1->Checked)
  161. {
  162. DeviceType = INT_RSE_DEVICE_ATN1;
  163. }
  164. ControlType = INT_RSE_CONTROL_RESET;
  165. if (RdoStop->Checked)
  166. {
  167. ControlType = INT_RSE_CONTROL_STOP;
  168. }
  169. else
  170. if (RdoStart->Checked)
  171. {
  172. ControlType = INT_RSE_CONTROL_START;
  173. }
  174. CMM_ClearGridTableView(TvResult);
  175. INT_RSE_CONTROL_REQ RseCtl;
  176. memset(&RseCtl, 0x00, sizeof(RseCtl));
  177. try
  178. {
  179. FRAMEDsrcList1->TvList->BeginUpdate();
  180. int nRowCnt = FRAMEDsrcList1->TvList->ViewData->RecordCount;
  181. for (int ii = 0; ii < nRowCnt; ii++)
  182. {
  183. TcxCustomGridRow* ARow = FRAMEDsrcList1->TvList->ViewData->Rows[ii];
  184. if (((bool)ARow->Values[FRAMEDsrcList1->ColumnSel->Index]))
  185. {
  186. String sId = VarToStr(ARow->Values[FRAMEDsrcList1->Column01->Index]);
  187. nRow = TvResult->DataController->AppendRecord();
  188. AnsiString DesProcessID = "DSRC01";
  189. String sSendDate = Now().FormatString("YYYYMMDD");
  190. String sSendTime = Now().FormatString("HHNNSS");
  191. RseCtl.Head.Seq = FReqSeq++;
  192. RseCtl.Head.RseId = sId.ToIntDef(0);
  193. RseCtl.Data.SendDate = sSendDate.ToIntDef(0);
  194. RseCtl.Data.SendTime = sSendTime.ToIntDef(0);
  195. RseCtl.Data.DeviceType = DeviceType;
  196. RseCtl.Data.ControlType = ControlType;
  197. nResult = VComm_RseCtlReq(&RseCtl);
  198. TvResult->DataController->Values[nRow][ColResult1->Index] = sId;
  199. TvResult->DataController->Values[nRow][ColResult2->Index] = String(RseCtl.Head.Seq);
  200. if (VERR_NONE == nResult)
  201. {
  202. TvResult->DataController->Values[nRow][ColResult3->Index] = "성공";
  203. }
  204. else
  205. {
  206. TvResult->DataController->Values[nRow][ColResult3->Index] = "실패";
  207. }
  208. TvResult->DataController->Values[nRow][ColResult4->Index] = "응답대기";
  209. }
  210. }
  211. }
  212. __finally
  213. {
  214. FRAMEDsrcList1->TvList->EndUpdate();
  215. }
  216. #if 0
  217. INT_RSE_RESPONSE_SUCC, /* 0: 성공 */
  218. INT_RSE_RESPONSE_NACK, /* 1: 거절 */
  219. INT_RSE_RESPONSE_NONE /* 2: 응답없음 */
  220. #endif
  221. Application->MessageBox(L"제어명령을 전송 하였습니다.", FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  222. }
  223. //---------------------------------------------------------------------------
  224. /*
  225. * 메인폼에서 데이터를 수신시 발생하는 이벤트 핸들러
  226. * arguments
  227. *
  228. * return
  229. * void
  230. */
  231. void __fastcall TDSRM020M::OnMainFormMessage(TMessage &Msg)
  232. {
  233. #if 0
  234. IPCUDPMESSAGESTRUCT *pMsg; // 메시지 구조체
  235. IPCUDPDATASTRUCT *pPkt; // 내부 통신 패킷 구조체
  236. UNION_INT_DATA *pData; // 내부 통신 데이터부 구조체
  237. pMsg = (IPCUDPMESSAGESTRUCT *)Msg.LParam;
  238. pPkt = &pMsg->Frame;
  239. pData = &pPkt->Data.unData;
  240. switch (Msg.WParam)
  241. {
  242. case INT_OP_RSE_CONTROL_RES: /* 0xC1, RSE 제어정보 응답 */
  243. {
  244. INT_RSE_CONTROL_RES *pRseCtl;
  245. pRseCtl = (INT_RSE_CONTROL_RES *)pData;
  246. String sResId = String(pRseCtl->Head.RseId);
  247. String sResSeq = String(pRseCtl->Head.Seq);
  248. int nResult = pRseCtl->Data.ResType;
  249. try {
  250. TvResult->BeginUpdate();
  251. int nRowCnt = TvResult->ViewData->RecordCount;
  252. for (int ii = 0; ii < nRowCnt; ii++)
  253. {
  254. TcxCustomGridRow* ARow = FRAMEDsrcList1->TvList->ViewData->Rows[ii];
  255. if (((bool)ARow->Values[FRAMEDsrcList1->ColumnSel->Index]))
  256. {
  257. String sId = VarToStr(ARow->Values[ColResult1->Index]);
  258. String sSeq= VarToStr(ARow->Values[ColResult2->Index]);
  259. if (sResId == sId && sResSeq == sSeq)
  260. {
  261. String sResult = "Unknown";
  262. if (nResult == (int)INT_RSE_RESPONSE_SUCC) sResult = "성공";
  263. else
  264. if (nResult == (int)INT_RSE_RESPONSE_NACK) sResult = "실패";
  265. else
  266. if (nResult == (int)INT_RSE_RESPONSE_NONE) sResult = "응답없음";
  267. ARow->Values[ColResult4->Index] = sResult;
  268. break;
  269. }
  270. }
  271. }
  272. }
  273. __finally
  274. {
  275. TvResult->EndUpdate();
  276. }
  277. #if 0
  278. ProcLog(CENTER_LOG_DATA, "RSE_CONTROL_RES");
  279. ProcLog(CENTER_LOG_DATA, "Seq: %d", pRseCtl->Head.Seq);
  280. ProcLog(CENTER_LOG_DATA, "RseId: %d", pRseCtl->Head.RseId);
  281. ProcLog(CENTER_LOG_DATA, "SendDate: %d", pRseCtl->Data.SendDate);
  282. ProcLog(CENTER_LOG_DATA, "SendTime: %d", pRseCtl->Data.SendTime);
  283. ProcLog(CENTER_LOG_DATA, "ResType: %d", pRseCtl->Data.ResType);
  284. #endif
  285. }
  286. break;
  287. default:
  288. break;
  289. }/* end switch */
  290. #endif
  291. }
  292. //---------------------------------------------------------------------------
  293. void __fastcall TDSRM020M::RdoControllerClick(TObject *Sender)
  294. {
  295. RdoStop->Enabled = false;
  296. RdoStart->Enabled = false;
  297. RdoReset->Enabled = true;
  298. RdoReset->Checked = true;
  299. }
  300. //---------------------------------------------------------------------------
  301. void __fastcall TDSRM020M::RdoAnt1Click(TObject *Sender)
  302. {
  303. RdoReset->Enabled = false;
  304. RdoStop->Enabled = true;
  305. RdoStart->Enabled = true;
  306. RdoStop->Checked = true;
  307. }
  308. //---------------------------------------------------------------------------