123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354 |
- using Aitex.Common.Util;
- using Aitex.Core.RT.ConfigCenter;
- using Aitex.Core.RT.DataCenter;
- using Aitex.Core.RT.Log;
- using Aitex.Core.RT.SCCore;
- using Aitex.Core.Util;
- using MECF.Framework.Common.CommonData.PowerSupplier;
- using MECF.Framework.Common.Device.LinMot;
- using MECF.Framework.Common.Layout;
- using MECF.Framework.Common.TwinCat;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace MECF.Framework.Common.Device.PowerSupplier
- {
- public class PowerSupplierDeviceConfigManager : Singleton<PowerSupplierDeviceConfigManager>
- {
- #region 常量
- #endregion
- #region 内部变量
- /// <summary>
- /// PowerSupplier对象字典(key-名称,value-PowerSupplier对象)
- /// </summary>
- private Dictionary<string, PowerSupplierDevice> _namePowerSupplierDic = new Dictionary<string, PowerSupplierDevice>();
- /// <summary>
- /// Modbus通信对象字典(key-名称,value
- /// </summary>
- private Dictionary<string, PowerSupplierModbusDevice> _nameModbusDeviceDic = new Dictionary<string, PowerSupplierModbusDevice>();
- /// <summary>
- /// 模块变量注册事件字典
- /// </summary>
- private Dictionary<string, BeckhoffDelegate.OnUpdateModuleVariableValue> _moduleVariableActionDic = new Dictionary<string, BeckhoffDelegate.OnUpdateModuleVariableValue>();
- /// <summary>
- /// 地址模块字典(key-母级模块,value-supplier device模块名称
- /// </summary>
- private Dictionary<string, string> _powerSupplierDeviceAddressModuleDic = new Dictionary<string, string>();
- #endregion
- /// <summary>
- /// 初始化
- /// </summary>
- public void Initialize()
- {
- bool isSimulate = SC.GetValue<bool>("System.IsSimulatorMode");
- string xmlPath = "";
- try
- {
- if (isSimulate)
- {
- xmlPath = PathManager.GetCfgDir() + "Devices\\PowerSupplierCfg-Simulator.xml";
- }
- else
- {
- xmlPath = PathManager.GetCfgDir() + "Devices\\PowerSupplierCfg.xml";
- }
- PowerSupplierDeviceConfigCfg cfg = CustomXmlSerializer.Deserialize<PowerSupplierDeviceConfigCfg>(new FileInfo(xmlPath));
- if (cfg != null)
- {
- foreach (PowerSupplierDeviceConfig config in cfg.PowerSupplierDeviceConfigs)
- {
- PowerSupplierModbusDevice modbusDevice = new PowerSupplierModbusDevice(config.Name, config.IpAddress, config.Port);
- modbusDevice.ReceiveTimeout = config.RecvTimeout;
- modbusDevice.SendTimeout = config.SendTimeout;
- InitialDeviceConfig(config, modbusDevice);
- }
- }
- }
- catch
- {
- LOG.WriteLog(eEvent.ERR_POWERSUPPLIER, "PowerSupplier", "Load power supplier xml failed");
- }
- }
- /// <summary>
- /// 启动设备
- /// </summary>
- /// <param name="name"></param>
- public void StartConnectDevice(string name)
- {
- if(_nameModbusDeviceDic.ContainsKey(name))
- {
- _nameModbusDeviceDic[name].Start();
- }
- }
- /// <summary>
- /// 中止
- /// </summary>
- /// <param name="name"></param>
- public void Stop(string name)
- {
- if (_nameModbusDeviceDic.ContainsKey(name))
- {
- _nameModbusDeviceDic[name].Stop();
- }
- }
- /// <summary>
- /// 电源控制模式
- /// </summary>
- /// <param name="name"></param>
- public bool SetChannelPowerControl(string name,byte channel,byte remoteControl)
- {
- if (_nameModbusDeviceDic.ContainsKey(name))
- {
- return _nameModbusDeviceDic[name].SetChannelPowerControl(channel,remoteControl);
- }
- return false;
- }
- /// <summary>
- /// 初始化设备
- /// </summary>
- /// <param name="config"></param>
- private void InitialDeviceConfig(PowerSupplierDeviceConfig config,PowerSupplierModbusDevice modbusDevice)
- {
- foreach (PowerSupplierDevice item in config.Devices)
- {
- _nameModbusDeviceDic[item.Name] = modbusDevice;
- _namePowerSupplierDic[item.Name] = item;
- _powerSupplierDeviceAddressModuleDic[$"{config.Name}.{item.Address}"] = item.Name;
- }
- }
- /// <summary>
- /// 获取PowerSupplier对象
- /// </summary>
- /// <param name="name"></param>
- /// <returns></returns>
- public PowerSupplierDevice GetPowerSupplierDeviceByName(string name)
- {
- return _namePowerSupplierDic.ContainsKey(name) ? _namePowerSupplierDic[name] : null;
- }
- /// <summary>
- /// 获取当前电压电流
- /// </summary>
- /// <param name="name"></param>
- /// <param name="channel"></param>
- /// <returns></returns>
- public void GetChannelCurrentAndVoltage(string name,byte channel)
- {
- if (_nameModbusDeviceDic.ContainsKey(name))
- {
- _nameModbusDeviceDic[name].GetChannelVoltageAndCurrent(channel);
- }
- }
- /// <summary>
- /// 获取通道输出开关控制
- /// </summary>
- /// <param name="name"></param>
- /// <param name="channel"></param>
- /// <returns></returns>
- public void GetChannelOutputSwitch(string name,byte channel)
- {
- if (_nameModbusDeviceDic.ContainsKey(name))
- {
- _nameModbusDeviceDic[name].GetChannelOutput(channel);
- }
- }
- /// <summary>
- /// 获取通道电流设置数值
- /// </summary>
- /// <param name="name"></param>
- /// <param name="channel"></param>
- /// <returns></returns>
- public void GetChannelCurrentSetting(string name, byte channel)
- {
- if (_nameModbusDeviceDic.ContainsKey(name))
- {
- _nameModbusDeviceDic[name].GetChannelCurrentSetting(channel);
- }
- }
- /// <summary>
- /// 设置通道输出开关控制
- /// </summary>
- /// <param name="name"></param>
- /// <param name="channel"></param>
- /// <param name="enabled"></param>
- public bool SetChannelOutputSwitchControl(string name, byte channel, bool enabled)
- {
- if (_nameModbusDeviceDic.ContainsKey(name))
- {
- return _nameModbusDeviceDic[name].SetChannelOutputSwitchControl(channel, enabled);
- }
- return false;
- }
- /// <summary>
- /// 设置通道输出开关控制
- /// </summary>
- /// <param name="name"></param>
- /// <param name="channel"></param>
- public void GetChannelPowerControl(string name, byte channel)
- {
- if (_nameModbusDeviceDic.ContainsKey(name))
- {
- _nameModbusDeviceDic[name].GetChannelPowerControl(channel);
- }
- }
- /// <summary>
- /// 设置通道输出开关控制
- /// </summary>
- /// <param name="name"></param>
- /// <param name="channel"></param>
- /// <param name="enabled"></param>
- public bool SetChannelCurrent(string name, byte channel, ushort current)
- {
- if (_nameModbusDeviceDic.ContainsKey(name))
- {
- return _nameModbusDeviceDic[name].SetCurrentValue(channel, current);
- }
- return false;
- }
- /// <summary>
- /// 启动步阶
- /// </summary>
- /// <param name="name"></param>
- /// <param name="channel"></param>
- /// <param name="stepPeriodDatas"></param>
- public bool SetStepPeriod(string name,byte channel,List<PowerSupplierStepPeriodData> stepPeriodDatas,int scale)
- {
- if (_nameModbusDeviceDic.ContainsKey(name))
- {
- return _nameModbusDeviceDic[name].SetStepPeriod(channel, stepPeriodDatas,scale);
- }
- return false;
- }
- /// <summary>
- /// 启动步阶
- /// </summary>
- /// <param name="name"></param>
- /// <param name="channel"></param>
- /// <param name="startStep"></param>
- /// <param name="endStep"></param>
- /// <param name="cycle"></param>
- public bool StartStepPeriod(string name,byte channel,ushort startStep,ushort endStep,ushort cycle)
- {
- if (_nameModbusDeviceDic.ContainsKey(name))
- {
- return _nameModbusDeviceDic[name].StartStepPeriod(channel,startStep,endStep, cycle);
- }
- return false;
- }
- /// <summary>
- /// 设置电源运行模式
- /// </summary>
- /// <param name="name"></param>
- /// <param name="channel"></param>
- /// <param name="model"></param>
- public bool SetPowerRunmodelControl(string name,byte channel,byte model)
- {
- if(_nameModbusDeviceDic.ContainsKey(name))
- {
- return _nameModbusDeviceDic[name].SetChannelPowerRunmodelControl(channel, model);
- }
- return false;
- }
- /// <summary>
- /// 设置电源运行模式
- /// </summary>
- /// <param name="name"></param>
- /// <param name="channel"></param>
- /// <param name="model"></param>
- public void GetPowerRunmodelControl(string name, byte channel)
- {
- if (_nameModbusDeviceDic.ContainsKey(name))
- {
- _nameModbusDeviceDic[name].GetChannelPowerRunModel(channel);
- }
- }
- /// <summary>
- /// 获取通道电源状态
- /// </summary>
- /// <param name="name"></param>
- /// <param name="channel"></param>
- /// <returns></returns>
- public bool SetChannelPowerStatus(string name, byte channel,byte powerstatus)
- {
- if (_nameModbusDeviceDic.ContainsKey(name))
- {
- return _nameModbusDeviceDic[name].SetChannelPowerStatus(channel,powerstatus);
- }
- return false;
- }
- /// <summary>
- /// 获取通道电源状态
- /// </summary>
- /// <param name="name"></param>
- /// <param name="channel"></param>
- /// <returns></returns>
- public void GetChannelPowerStatus(string name, byte channel)
- {
- if (_nameModbusDeviceDic.ContainsKey(name))
- {
- _nameModbusDeviceDic[name].GetChannelPowerStatus(channel);
- }
- }
- /// <summary>
- /// 注册变量数值发生变化回调
- /// </summary>
- /// <param name="moduleName"></param>
- /// <param name="variable"></param>
- /// <param name="onUpdateModuleVariableValue"></param>
- public void SubscribeModuleVariable(string moduleName, string variable, BeckhoffDelegate.OnUpdateModuleVariableValue onUpdateModuleVariableValue)
- {
- _moduleVariableActionDic[$"{moduleName}.{variable}"] = onUpdateModuleVariableValue;
- }
- /// <summary>
- /// 更新模块变量数值
- /// </summary>
- /// <param name="module"></param>
- /// <param name="channel"></param>
- /// <param name="variable"></param>
- /// <param name="value"></param>
- public void UpdateModuleVariable(string module,byte channel,string variable,object value)
- {
- string itemModulaName = GetModuleNameByAddress(module, channel);
- if(!string.IsNullOrEmpty(itemModulaName))
- {
- string key = $"{itemModulaName}.{variable}";
- if(_moduleVariableActionDic.ContainsKey(key))
- {
- _moduleVariableActionDic[key].Invoke(variable, value);
- }
- }
- }
- /// <summary>
- /// 获取模块连接状态
- /// </summary>
- /// <param name="module"></param>
- /// <returns></returns>
- public bool GetModuleConnected(string module)
- {
- return _nameModbusDeviceDic.ContainsKey(module) ? _nameModbusDeviceDic[module].Connected : false;
- }
- /// <summary>
- /// 根据地址获取模块名称
- /// </summary>
- /// <param name="name"></param>
- /// <param name="id"></param>
- /// <returns></returns>
- public string GetModuleNameByAddress(string name, byte id)
- {
- if (_powerSupplierDeviceAddressModuleDic.ContainsKey($"{name}.{id}"))
- {
- return _powerSupplierDeviceAddressModuleDic[$"{name}.{id}"];
- }
- return "";
- }
- }
- }
|