Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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("&nbsp;");
				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;
}