using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using FEIApiControl;
using OTSCLRINTERFACE;
namespace OTSPartA_STDEditor
{
class EDSController
{
private COTSControlFunExport eds;
static EDSController edsctrl = null;
public static APIClass ApiClass = null;
private static bool isFEI = false;
private EDSController()
{
if (isFEI)
{
ApiClass = new APIClass();
Connect();
}
else
{
eds = OTSCLRINTERFACE.COTSControlFunExport.GetControllerInstance();
}
}
public static EDSController GetEDSController()
{
if (GetXMLInformations("EDSName") == "FEI")
{
isFEI = true;
}
if (edsctrl == null)
{
edsctrl = new EDSController();
}
return edsctrl;
}
public bool Connect()
{
if (isFEI)
{
string FEIIP =GetXMLInformations("FEIIP");
string FEIPORT = GetXMLInformations("FEIPORT");
if (FEIIP == "" || FEIPORT == "")
{
MessageBox.Show("FEI电镜端口配置为空!");
return false;
}
if (ApiClass.isConnect())
{
return true;
}
return ApiClass.Connect(FEIIP, FEIPORT);
}
else
{
if (!eds.Init())
{
return false;
}
if (eds.IsConnected())
{
return true;
}
return eds.ConncetSem();
}
}
///
/// 获取XML节点参数
///
/// 节点参数名称
/// 节点参数
public static string GetXMLInformations(string Name)
{
try
{
string xmlFilePath = "Config/ProData/HardwareConfig.xml";
string value = string.Empty;
XmlDocument doc = new XmlDocument();
doc.Load(xmlFilePath); //加载Xml文件
XmlElement root = doc.DocumentElement; //获取根节点
XmlNodeList mainNodes = root.GetElementsByTagName("Member"); //获取子节点集合
foreach (XmlNode node in mainNodes)
{
//获取Name属性值
string name = ((XmlElement)node).GetAttribute("RegName");
if (name.Equals(Name))
{
value = ((XmlElement)node).GetAttribute("Value");
break;
}
}
return value;
}
catch (Exception)
{
return "";
}
}
public bool Init()
{
if (isFEI)
{
return ApiClass.isConnect();
}
else
{
bool m_init = eds.EDSInit();
return m_init;
}
}
public bool CollectSpectrum(uint a_nXRayAQTime, ref uint[] a_XrayData)
{
if (isFEI)
{
Dictionary eleItems = new Dictionary();
return ApiClass.AcquireSpectrum(false, ref eleItems, ref a_XrayData);
}
else
{
if (!eds.IsConnected())
{
return false;
}
return eds.CollectSpectrum(a_nXRayAQTime, ref a_XrayData);
}
}
public bool DisConnect()
{
if (isFEI)
{
return ApiClass.DisConnect();
}
else
{
if (eds.IsConnected())
{
return eds.DisconnectSem();
}
return true;
}
}
}
}