using WCS.Core;
using WCS.Entity.Protocol.Protocol.SRM;
using WCS.Entity.Protocol.Protocol.Station;
using WCS.WorkEngineering.Extensions;
namespace WCS.WorkEngineering.Systems
{
///
/// 设备信息写入接口
///
//[BelongTo(typeof(MainWorld))]
public class DeviceWriteSystem : ServiceSystem
{
///
/// 所有的站台
///
private Dictionary Convs;
private Dictionary Srms;
///
/// 构造函数
///
public DeviceWriteSystem()
{
Convs = Device.All.Where(v => v.HasProtocol()).Select(v => new Station(v, this.World)).ToDictionary(v => v.Entity.Code, v => v);
Srms = Device.All.Where(v => v.HasProtocol()).Select(v => new SRM(v, this.World)).ToDictionary(v => v.Entity.Code, v => v);
}
protected override void Do(DeviceWriteInfo info)
{
Type? type = null;
object? obj = null;
switch (info.DeviceType)
{
case DeviceTypeEnum.SRM:
var srm = Srms[info.Code];
type = typeof(ISRM520).Assembly.GetTypes().Where(v => v.Name == info.Protocol).First();
obj = srm.Entity.Protocol(type, this.World);
break;
case DeviceTypeEnum.DEV:
var conv = Convs[info.Code];
type = typeof(IStation523).Assembly.GetTypes().Where(v => v.Name == info.Protocol).First();
obj = conv.Entity.Protocol(type, this.World);
break;
case DeviceTypeEnum.BCR:
break;
case DeviceTypeEnum.RGV:
break;
}
var p = type.GetProperty(info.Property);
if (p.PropertyType.IsEnum)
{
var value = Enum.Parse(p.PropertyType, info.Value);
p.SetValue(obj, value);
}
else
{
var value = Convert.ChangeType(info.Value, p.PropertyType);
p.SetValue(obj, value);
}
}
}
///
/// 设备写入信息
///
public class DeviceWriteInfo
{
///
/// 设备类型
///
public DeviceTypeEnum DeviceType { get; set; }
///
/// 设备号
///
public string Code { get; set; }
///
/// 协议
///
public string Protocol { get; set; }
///
/// 字段明
///
public string Property { get; set; }
///
/// 值
///
public string Value { get; set; }
}
///
/// 设备类型接口
///
public enum DeviceTypeEnum
{
///
/// 堆垛机
///
SRM = 1,
///
/// 输送线
///
DEV = 2,
///
/// 扫码器
///
BCR = 3,
///
/// RGV小车
///
RGV = 4,
}
}