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); } } } }