using Aitex.Common.Util;
using Aitex.Core.Util;
using MECF.Framework.Common.CommonData.PUF;
using MECF.Framework.Common.Device.Galil;
using System.Collections.Generic;
using System.IO;
namespace MECF.Framework.Common.Simulator
{
///
/// 电机运动模拟器
///
public class MotorSimulator : Singleton
{
#region 内部变量
///
/// 定时器
///
private PeriodicJob _periodicJob;
///
/// 电机数据字典(key:Name(module.name),value:Datas)
///
private Dictionary _motorNameDataDic = new Dictionary();
#endregion
#region 属性
#endregion
//delegate
#region Delegate
public delegate void UpdateVariableValueChanged(Dictionary datasDic);
#endregion
#region 事件
///
/// 变量变更事件
///
public event UpdateVariableValueChanged OnUpdateVariableValueChanged;
#endregion
///
/// 初始化
///
public void Initialize()
{
_periodicJob = new PeriodicJob(100, OnTimer, "Motor Simulator Timer", false);//***打开
Init();
}
///
/// 初始化
///
private void Init()
{
////加载对应配置文件 GalilControllerCfg-Simulator.xml,初始化数据字典
string oldXmlPath = PathManager.GetCfgDir();
string newXmlPath = oldXmlPath.Replace("CyberX8_Simulator", "CyberX8_RT") + "Devices\\GalilControllerCfg-Simulator.xml";
GalilControllerCfg cfg = CustomXmlSerializer.Deserialize(new FileInfo(newXmlPath));
foreach (GalilDeviceConfig config in cfg.GalilDeviceConfigs)
{
foreach (GalilAxisConfig item in config.GalilAxises)
{
_motorNameDataDic[$"{config.Module}.{item.Name}"] = new CommandMotionData();
}
}
}
///
/// 定时器执行
///
///
private bool OnTimer()
{
//电机运动物理模型
return true;
}
///
/// 通知Galil模块数据变化
///
///
private void UpdateVariableValue(Dictionary datasDic)
{
if (OnUpdateVariableValueChanged != null)
{
OnUpdateVariableValueChanged(datasDic);
}
}
}
}