int CInstrumentManager::GetFreeSequenceIndex(inst_type_t InstType, int Type, CSeqInstrument *pInst) const { // moved from CFamiTrackerDoc std::vector<bool> Used(CSequenceCollection::MAX_SEQUENCES, false); for (int i = 0; i < MAX_INSTRUMENTS; i++) if (GetInstrumentType(i) == InstType) { // // // auto pInstrument = std::static_pointer_cast<CSeqInstrument>(GetInstrument(i)); if (pInstrument->GetSeqEnable(Type) && (pInst && pInst->GetSequence(Type)->GetItemCount() || pInst != pInstrument.get())) Used[pInstrument->GetSeqIndex(Type)] = true; } for (int i = 0; i < CSequenceCollection::MAX_SEQUENCES; ++i) if (!Used[i]) { const CSequence *pSeq = GetSequence(InstType, Type, i); if (!pSeq || !pSeq->GetItemCount()) return i; } return -1; }
bool CTradeSPI::GetSymbol(IN map<string, CSymbol> &mapSymbol) { map<string, CSymbol> mapSymbolTemp; vector<CThostFtdcInstrumentField> vecInstrumentField; vector<CThostFtdcDepthMarketDataField> vecMarketDataField; if (true == GetInstrument(vecInstrumentField)) { for (vector<CThostFtdcInstrumentField>::iterator itInstrumentField = vecInstrumentField.begin(); vecInstrumentField.end() != itInstrumentField; ++itInstrumentField) { CSymbol Symbol; FillSymbolByInstrument(Symbol, *itInstrumentField); mapSymbolTemp[Symbol.GetSymbol().c_str()] = Symbol; } Sleep(1100); if (true == GetMarketData(vecMarketDataField)) { for (vector<CThostFtdcDepthMarketDataField>::iterator itMarketDataField = vecMarketDataField.begin(); vecMarketDataField.end() != itMarketDataField; ++itMarketDataField) { map<string, CSymbol>::iterator itSymbol = mapSymbolTemp.find(itMarketDataField->InstrumentID); if (mapSymbolTemp.end() != itSymbol) { FillSymbolByMarketData(itSymbol->second, *itMarketDataField); mapSymbol[itSymbol->first] = itSymbol->second; } } return true; } } return false; }
int CBase_AnalysisTemplate::Sample_PrepareAcquire(CBase_AnalysisSample *pcSample) { if(!pcSample) { return IAERROR_PARAMETER_WRONGTYPE; } CBase_AnalysisInstrument *pcInstru=NULL; BOOL bConnected=FALSE; for(int i=0; i<m_cArrayInstrument2Sample.GetCount(); ++i) { if(m_cArrayInstrument2Sample[i].m_pcSample==pcSample) { bConnected = TRUE; pcInstru = m_cArrayInstrument2Sample[i].m_pcInstrument; g_TracePersistentlyWithTime(_T("Sample_Prepare: CBase_AnalysisTemplate::Sample_PrepareAcquire(connected).\r\n")); break; } } if(!bConnected) pcInstru = GetInstrument(); if(pcInstru == NULL) return IAERROR_INSTRUMENT_NOTCONNECT; if(!pcInstru->Instrument_IsReady()) { //ALERT(ICON_CRITICAL, _T("仪器未连接"), _T("样品准备"), NULL); return IAERROR_INSTRUMENT_NOTCONNECT; } bool bNeedDownload = true; if(m_pcWindowTask) { CAnalysisTask* pTask = m_pcWindowTask->GetTask(); if(pTask) { const CAnalysisTaskItem* pItem = pTask->GetItem(pcSample); if(pItem && pItem->m_bUsingCurrentArgs) bNeedDownload = false; } } if(bNeedDownload) { //参数比较 //首先取得当前仪器参数 CString xmlString; if(pcInstru->Base_UploadFromDevice(xmlString) != IAERROR_SUCCESS) return IAERROR_CG_SAMPLE_NOTREADY; CAnalysisData ad; if(ad.LoadFromDocument(xmlString) != IAERROR_SUCCESS) return IAERROR_CG_SAMPLE_NOTREADY; //然后和样品中的参数进行比较 CAnalysisData& adSample = pcSample->m_data; CStringArray notequal; static CString sp(_T("Sample/Parameter/")); if((g_cConfigIni.CurrentSystemName().Compare(PASYSTEM_NAME_GC_PX) == 0) || (g_cConfigIni.CurrentSystemName().Compare(PASYSTEM_NAME_GC1120) == 0)) { static LPCTSTR vs[] = { _T("Instrument/MainFrame/Temp_ColumnBox"), _T("Instrument/MainFrame/Temp_FrontDetector"), _T("Instrument/MainFrame/Temp_RearDectetor"), _T("Instrument/MainFrame/Temp_FrontInjector"), _T("Instrument/MainFrame/Temp_RearInjector") }; for(int i=0; i<sizeof(vs)/sizeof(LPCTSTR); ++i) { if(adSample.CompareValue_Double(sp + vs[i], ad, vs[i]) != CAnalysisData::CR_EQUAL) notequal.Add(vs[i]); } } else if(g_cConfigIni.CurrentSystemName().Compare(PASYSTEM_NAME_GC2400) == 0) { static LPCTSTR vs[] = { _T("Instrument/MainFrame/Temp_ColumnBox"), _T("Instrument/MainFrame/Temp_FrontInjector"), _T("Instrument/MainFrame/Temp_RearDectetor") }; for(int i=0; i<sizeof(vs)/sizeof(LPCTSTR); ++i) { if(adSample.CompareValue_Double(sp + vs[i], ad, vs[i]) != CAnalysisData::CR_EQUAL) notequal.Add(vs[i]); } } else if((g_cConfigIni.CurrentSystemName().Compare(PASYSTEM_NAME_GC1100W) == 0)) { static LPCTSTR vs[] = { _T("Instrument/MainFrame/Temp_ColumnBox"), _T("Instrument/MainFrame/Temp_Detector") }; for(int i=0; i<sizeof(vs)/sizeof(LPCTSTR); ++i) { if(adSample.CompareValue_Double(sp + vs[i], ad, vs[i]) != CAnalysisData::CR_EQUAL) notequal.Add(vs[i]); } } else if((g_cConfigIni.CurrentSystemName().Compare(PASYSTEM_NAME_GC1100P) == 0)) { static LPCTSTR vs[] = { _T("Instrument/MainFrame/Temp_InputDetect"), _T("Instrument/MainFrame/Pressure"), _T("Instrument/MainFrame/Flow_ZQ"), _T("Instrument/MainFrame/Flow_WC") }; for(int i=0; i<sizeof(vs)/sizeof(LPCTSTR); ++i) { if(adSample.CompareValue_Double(sp + vs[i], ad, vs[i]) != CAnalysisData::CR_EQUAL) notequal.Add(vs[i]); } } else if(g_cConfigIni.CurrentSystemName().Compare(PASYSTEM_NAME_LC1620A) == 0) { static LPCTSTR vs[] = { _T("Instrument/Pump/InitFLowAPercent"), _T("Instrument/Pump/InitFLowBPercent"), _T("Instrument/Pump/InitFLow") }; for(int i=0; i<sizeof(vs)/sizeof(LPCTSTR); ++i) { if(adSample.CompareValue_Double(sp + vs[i], ad, vs[i]) != CAnalysisData::CR_EQUAL) notequal.Add(vs[i]); } static LPCTSTR vs2[] = { _T("Instrument/UVDetector/WaveLength") }; for(int i=0; i<sizeof(vs2)/sizeof(LPCTSTR); ++i) { if(adSample.CompareValue_Double(sp + vs2[i], ad, vs2[i]) != CAnalysisData::CR_EQUAL) notequal.Add(vs2[i]); } } else if(g_cConfigIni.CurrentSystemName().Compare(PASYSTEM_NAME_IC1800) == 0) { static LPCTSTR vs[] = { _T("Instrument/Pump/InitFLow") }; for(int i=0; i<sizeof(vs)/sizeof(LPCTSTR); ++i) { if(adSample.CompareValue_Double(sp + vs[i], ad, vs[i]) != CAnalysisData::CR_EQUAL) notequal.Add(vs[i]); } static LPCTSTR vs2[] = { _T("Instrument/Detector/Temp"), _T("Instrument/Detector/YZQDL")/*, _T("Instrument/Detector/Range")//*/ }; for(int i=0; i<sizeof(vs2)/sizeof(LPCTSTR); ++i) { if(adSample.CompareValue_Double(sp + vs2[i], ad, vs2[i]) != CAnalysisData::CR_EQUAL) notequal.Add(vs2[i]); } static LPCTSTR vs3[] = { _T("Instrument/ColumnBox/Temp") }; for(int i=0; i<sizeof(vs3)/sizeof(LPCTSTR); ++i) { if(adSample.CompareValue_Double(sp + vs3[i], ad, vs3[i]) != CAnalysisData::CR_EQUAL) notequal.Add(vs3[i]); } } if(!notequal.IsEmpty()) { CString name, sv, cv, tr; // 弹出不同对话框 CString msg(_T("<table border='1'><tr><td>名称</td><td>样品参值</td><td>当前参值</td></tr>")); for(int i=0; i<=notequal.GetUpperBound(); ++i) { const CString& si = notequal.GetAt(i); adSample.GetProperty(sp + si, XMLPROP_NAME, name); adSample.GetValue_String(sp + si, sv); if((ad.GetValue_String(si, cv) != IAERROR_SUCCESS) || cv.IsEmpty()) cv = _T(" "); if((g_cConfigIni.CurrentSystemName().Compare(PASYSTEM_NAME_IC1800) == 0) && (si == _T("Instrument/Detector/Temp"))) { if(sv == _T("0")) sv = _T("40℃"); else if(sv == _T("1")) sv = _T("50℃"); else if(sv == _T("2")) sv = _T("60℃"); else sv = _T("参数错误"); if(cv == _T("0")) cv = _T("40℃"); else if(cv == _T("1")) cv = _T("50℃"); else if(cv == _T("2")) cv = _T("60℃"); else cv = _T("参数错误"); } tr.Format(_T("<tr><td>%s</td><td>%s</td><td>%s</td></tr>"), name, sv, cv); msg += tr; } msg += _T("</table>"); switch(HTMLMessageBox(NULL, msg, _T("当前设置参数与样品中的仪器参数不一致"), _T("采用样品中的仪器参数;采用当前设置参数;取消"), _T(";"), ICON_QUESTION)) { case 0: // 采用样品中的仪器参数 if(adSample.GetValue_XMLString(XMLPATH_SAMPLE_PARAM_INSTRUMENT, xmlString) != IAERROR_SUCCESS) return IAERROR_CG_SAMPLE_NOTREADY; if(pcInstru->Base_DownloadToDevice(xmlString) != IAERROR_SUCCESS) return IAERROR_CG_SAMPLE_NOTREADY; break; case 1:break; default://取消或X return IAERROR_CG_SAMPLE_NOTREADY; } } } if(!bConnected) { //连接仪器 int nret = Sample_LinkToInstrument(pcSample, pcInstru, pcSample->GetInstrumentChannel()); RETURNifERROR(nret); CString t; t.Format(_T("Sample_Prepare: CBase_AnalysisTemplate::Sample_LinkToInstrument:%d.\r\n"), nret); g_TracePersistentlyWithTime(t); } //设定仪器参数 int nRet = IAERROR_SUCCESS; // CString cStrXMLParam; // // if(IAERROR_SUCCESS!=pcSample->m_data.GetValue_XMLString(_T("Sample\\Parameter\\Instrument"), cStrXMLParam)) // return IAERROR_XML_ITEMNOTFOUND;//没有找到相应的仪器参数 // // nRet = Instrument_SetParam(pcInstru, _T("Instrument"), cStrXMLParam); if(nRet==IAERROR_CG_INSTRUMENT_ERROR) { return IAERROR_CG_INSTRUMENT_ERROR; } else if(nRet==IAERROR_SUCCESS) { return IAERROR_SUCCESS; } else return nRet; return IAERROR_CG_SAMPLE_NOTREADY; }