123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- using WCS.Core;
- using WCS.Entity.Protocol.SRM;
- using WCS.Entity.Protocol.Station;
- using WCS.WorkEngineering.Extensions;
- using WCS.WorkEngineering.Worlds;
- namespace WCS.WorkEngineering.Systems
- {
- /// <summary>
- /// 设备信息写入接口
- /// </summary>
- [BelongTo(typeof(MainWorld))]
- public class DeviceWriteSystem : ServiceSystem<DeviceWriteInfo>
- {
- /// <summary>
- /// 所有的站台
- /// </summary>
- private Dictionary<string, Station> Convs;
- private Dictionary<string, SRM> Srms;
- /// <summary>
- /// 构造函数
- /// </summary>
- public DeviceWriteSystem()
- {
- Convs = Device.All.Where(v => v.Code is "1602" or "1661" or "1666" or "1606").Select(v => new Station(v, this.World)).ToDictionary(v => v.Entity.Code, v => v);
- //Srms = Device.All.Where(v => v.HasProtocol<ISRM520>()).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);
- }
- }
- }
- /// <summary>
- /// 设备写入信息
- /// </summary>
- public class DeviceWriteInfo
- {
- /// <summary>
- /// 设备类型
- /// </summary>
- public DeviceTypeEnum DeviceType { get; set; }
- /// <summary>
- /// 设备号
- /// </summary>
- public string Code { get; set; }
- /// <summary>
- /// 协议
- /// </summary>
- public string Protocol { get; set; }
- /// <summary>
- /// 字段明
- /// </summary>
- public string Property { get; set; }
- /// <summary>
- /// 值
- /// </summary>
- public string Value { get; set; }
- }
- /// <summary>
- /// 设备类型接口
- /// </summary>
- public enum DeviceTypeEnum
- {
- /// <summary>
- /// 堆垛机
- /// </summary>
- SRM = 1,
- /// <summary>
- /// 输送线
- /// </summary>
- DEV = 2,
- /// <summary>
- /// 扫码器
- /// </summary>
- BCR = 3,
- /// <summary>
- /// RGV小车
- /// </summary>
- RGV = 4,
- }
- }
|