#include "stdafx.h" #include #include "All.h" #include "AEPX_DPC.h" #include "AEPX_Dose.h" float g_MA_List[] = {1,2.5,4,6,10,15,20,25,30,45,60,70,80,100,125,140,160,200,250}; float g_MAS_List[] = { 1, 2.5, 4, 6, 10, 15, 20, 25, 30, 45, 60, 70, 80, 100, 125, 140, 160, 200, 250 }; float g_MS_List[] = { 1, 4, 6, 10, 15, 20, 25, 30, 45, 60, 70, 80, 100, 125, 140, 160, 200, 250,400,500,600,800,1000,1200 }; CAEPX_Dose::CAEPX_Dose() { } CAEPX_Dose::~CAEPX_Dose() { } int CAEPX_Dose::SetAPR(APRStruct APRParam) { m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_WS].fSetValue = 1.0; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FO].fSetValue = (float)APRParam.m_FOCUS; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_ET].fSetValue = (float)APRParam.m_TECHMODE; /*m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FO].fSetValue = (float)APRParam.m_AECFIELD; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FO].fSetValue = (float)APRParam.m_AECFILM;*/ m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_AECDENSITY].fSetValue = (float)APRParam.m_AECDENSITY; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_KV].fSetValue = (float)APRParam.m_KV; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_MA].fSetValue = (float)APRParam.m_MA; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_MS].fSetValue = (float)APRParam.m_MS; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_MAS].fSetValue = (float)APRParam.m_MAS; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_RADFPS].fSetValue = 1.0; if (APRParam.m_FOCUS) { m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FO].fSetValue = 'L'; } else { m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FO].fSetValue = 'S'; } SetAPRLocal(); Sleep(500); m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FLSTOP].fSetValue = 1; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FLKV].fSetValue = 50.0; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FLMA].fSetValue = 4.0; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FLMS].fSetValue = 15; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FLMSMAX].fSetValue = 30; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FLFPS].fSetValue = 10 ; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FLDOSE].fSetValue = 5000; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FO].fSetValue = 'S'; m_pAEPX_DPC->CMDSet("FPP"); Sleep(500); m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FLKV].fSetValue = 50.0; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FLMA].fSetValue = 4.0; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_FO].fSetValue = 'S'; //m_pAEPX_DPC->CMDSet("FPM"); return 0; } bool CAEPX_Dose::DPCPoint(CAEPX_DPC* pAEPX_DPC) { m_pAEPX_DPC = pAEPX_DPC; return true; } int CAEPX_Dose::GetValue(float &status, int PARAM_IN_TYPE ParamType) { return 1; } int CAEPX_Dose::SetValue(float status, int PARAM_IN_TYPE ParamType) { switch (ParamType) { case Gen_Param_KV: case Gen_Param_MA: case Gen_Param_MS: case Gen_Param_MAS: case Gen_Param_FOCUS: case Gen_Param_WORKSTATION: case Gen_Param_TECHMODE: case Gen_Param_AECDENSITY: case Gen_Param_AECFIELD: { CMapAEPXResp::iterator itor = m_pAEPX_DPC->m_pMapResp->begin(); while (itor != m_pAEPX_DPC->m_pMapResp->end()) { if (itor->second == ParamType) { m_pAEPX_DPC->m_SMZ_Element[itor->first].fSetValue = status; break; } itor++; } SetAPRLocal(); } break; case Gen_RESET: m_pAEPX_DPC->CMDSet("ERQ"); break; default: break; } return 1; } //Actions int CAEPX_Dose::IncParam(int nAdjustStep, int PARAM_IN_TYPE ParamType) { switch (ParamType) { case Gen_Param_KV: m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_KV].fSetValue += nAdjustStep; break; case Gen_Param_MA: { int npos = findPositon(g_MA_List, sizeof(g_MA_List) / sizeof(float), m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_KV].fSetValue); npos += nAdjustStep; if (npos > sizeof(g_MA_List) / sizeof(float)) npos = sizeof(g_MA_List) / sizeof(float); m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_MA].fSetValue = g_MA_List[npos]; } break; case Gen_Param_MS: { int npos = findPositon(g_MS_List, sizeof(g_MS_List) / sizeof(float), m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_KV].fSetValue); npos += nAdjustStep; if (npos > sizeof(g_MS_List) / sizeof(float)) npos = sizeof(g_MS_List) / sizeof(float); m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_MA].fSetValue = g_MS_List[npos]; } break; case Gen_Param_MAS: { int npos = findPositon(g_MAS_List, sizeof(g_MAS_List) / sizeof(float), m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_KV].fSetValue); npos += nAdjustStep; if (npos > sizeof(g_MAS_List) / sizeof(float)) npos = sizeof(g_MAS_List) / sizeof(float); m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_MA].fSetValue = g_MAS_List[npos]; } break; case Gen_Param_AECDENSITY: m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_KV].fSetValue += nAdjustStep; break; default: return 1; } SetAPRLocal(); return 1; } int CAEPX_Dose::DecParam(int nAdjustStep, int PARAM_IN_TYPE ParamType) { switch (ParamType) { case Gen_Param_KV: m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_KV].fSetValue -= nAdjustStep; break; case Gen_Param_MA: { int npos = findPositon(g_MA_List, sizeof(g_MA_List) / sizeof(float), m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_KV].fSetValue); npos -= nAdjustStep; if (npos < 0) npos = 0; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_MA].fSetValue = g_MA_List[npos]; } break; case Gen_Param_MS: { int npos = findPositon(g_MS_List, sizeof(g_MS_List) / sizeof(float), m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_KV].fSetValue); npos -= nAdjustStep; if (npos < 0) npos = 0; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_MA].fSetValue = g_MS_List[npos]; } break; case Gen_Param_MAS: { int npos = findPositon(g_MAS_List, sizeof(g_MAS_List) / sizeof(float), m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_KV].fSetValue); npos -= nAdjustStep; if (npos < 0) npos = 0; m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_MA].fSetValue = g_MAS_List[npos]; } break; case Gen_Param_AECDENSITY: m_pAEPX_DPC->m_SMZ_Element[CMD_ELEMENT_KV].fSetValue += nAdjustStep; break; default: return 1; } SetAPRLocal(); return 1; } int CAEPX_Dose::IncParamL(int nAdjustStep, int PARAM_IN_TYPE ParamType) { //make warning&errors return GenUnitLogic::IncParamL(1, ParamType); } bool CAEPX_Dose::Support_IncParam(int PARAM_IN_TYPE ParamType) { bool bSupportResult = false; switch (ParamType) { case Gen_Param_KV: case Gen_Param_MA: case Gen_Param_MS: case Gen_Param_MAS: case Gen_Param_AECDENSITY: { bSupportResult = true; break; } default: break; } return bSupportResult; } bool CAEPX_Dose::Support_DecParam(int PARAM_IN_TYPE ParamType) { bool bSupportResult = false; switch (ParamType) { case Gen_Param_KV: case Gen_Param_MA: case Gen_Param_MS: case Gen_Param_MAS: case Gen_Param_AECDENSITY: { bSupportResult = true; break; } default: break; } return bSupportResult; } bool CAEPX_Dose::Support_IncParamL(int PARAM_IN_TYPE ParamType) { bool bSupportResult = false; switch (ParamType) { case Gen_Param_KV: case Gen_Param_MA: case Gen_Param_MS: case Gen_Param_MAS: { bSupportResult = true; break; } default: break; } return bSupportResult; } bool CAEPX_Dose::Support_DecParamL(int PARAM_IN_TYPE ParamType) { bool bSupportResult = false; switch (ParamType) { case Gen_Param_KV: case Gen_Param_MA: case Gen_Param_MS: case Gen_Param_MAS: { bSupportResult = true; break; } default: break; } return bSupportResult; } bool CAEPX_Dose::Support_SetValue(int PARAM_IN_TYPE ParamType) { bool bSupportResult = false; switch (ParamType) { case Gen_Param_KV: case Gen_Param_MA: case Gen_Param_MS: case Gen_Param_MAS: case Gen_Param_FOCUS: case Gen_Param_WORKSTATION: case Gen_Param_TECHMODE: case Gen_Param_AECDENSITY: case Gen_Param_AECFIELD: case Gen_Param_APR: { bSupportResult = true; break; } default: break; } return bSupportResult; } bool CAEPX_Dose::Support_GetValue(int PARAM_IN_TYPE ParamType) { bool bSupportResult = false; switch (ParamType) { case Gen_Param_KV: case Gen_Param_MA: case Gen_Param_MS: case Gen_Param_MAS: case Gen_Param_FOCUS: case Gen_Param_WORKSTATION: case Gen_Param_TECHMODE: case Gen_Param_AECDENSITY: case Gen_Param_AECFIELD: case Gen_Param_POSTMS: case Gen_Param_POSTMAS: { bSupportResult = true; break; } default: break; } return bSupportResult; } int CAEPX_Dose::DecParamL(int nAdjustStep, int PARAM_IN_TYPE ParamType) { //make warning&errors return GenUnitLogic::DecParamL(1, ParamType); } int CAEPX_Dose::SetAPRLocal() { if (m_pAEPX_DPC->m_SMZ_Element[Gen_Param_TECHMODE].fSetValue == TECHMODE_NOAEC_3P) { m_pAEPX_DPC->CMDSet("ES3"); } else if (m_pAEPX_DPC->m_SMZ_Element[Gen_Param_TECHMODE].fSetValue == TECHMODE_NOAEC_2P) { m_pAEPX_DPC->CMDSet("ED2"); } else { m_pAEPX_DPC->CMDSet("ED1"); } return 0; } int CAEPX_Dose::findPositon(float *pList, int nListSize, double& value) { if (pList==NULL||nListSize == 0) return -1; if (value <= pList[0]) { value = pList[0]; return 0; } if (value >= pList[nListSize-1]) { value = pList[nListSize - 1]; return nListSize - 1; } for (int i = 0; i < nListSize-1; i++) { if (value >= pList[i] && value <= pList[i + 1]) { int npos = 0; if (abs(value - pList[i]) >= abs(value - pList[i + 1])) { value = pList[i + 1]; npos = i + 1; } else { value = pList[i]; npos = i; } return npos; } } return -1; }