添加 MX-PD-盘古 项目文件
将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
This commit is contained in:
@@ -0,0 +1,184 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace MainShell.Hardware
|
||||
{
|
||||
public enum IoPointType
|
||||
{
|
||||
Input = 0,
|
||||
Output = 1
|
||||
}
|
||||
|
||||
public enum IoCardType
|
||||
{
|
||||
Td = 0,
|
||||
Acs = 1
|
||||
}
|
||||
|
||||
public class DeviceIoPointDefinition
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string PointKey { get; set; }
|
||||
public string Module { get; set; }
|
||||
public string Name { get; set; }
|
||||
public IoPointType Type { get; set; }
|
||||
public IoCardType Card { get; set; }
|
||||
public int StationNo { get; set; }
|
||||
public int Index { get; set; }
|
||||
public int SubIndex { get; set; }
|
||||
public string LineNo { get; set; }
|
||||
public bool Enabled { get; set; } = true;
|
||||
public bool DefaultValue { get; set; }
|
||||
public bool IsInverse { get; set; }
|
||||
public string Description { get; set; }
|
||||
|
||||
public static string BuildPointKey(IoPointType type, IoCardType card, int stationNo, string lineNo)
|
||||
{
|
||||
return BuildPointKey(type, card, stationNo, 0, 0, lineNo);
|
||||
}
|
||||
|
||||
public static string BuildPointKey(IoPointType type, IoCardType card, int stationNo, int index, int subIndex, string lineNo)
|
||||
{
|
||||
return string.Format(
|
||||
"{0}:{1}:{2}:{3}:{4}:{5}",
|
||||
type,
|
||||
card,
|
||||
stationNo,
|
||||
index,
|
||||
subIndex,
|
||||
(lineNo ?? string.Empty).Trim().ToUpperInvariant());
|
||||
}
|
||||
}
|
||||
|
||||
public class DeviceIoOutputWriteRequest
|
||||
{
|
||||
public string PointReference { get; set; }
|
||||
public bool OutputOn { get; set; }
|
||||
}
|
||||
|
||||
public abstract class DeviceIoPointState
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string PointKey { get; set; }
|
||||
public string Module { get; set; }
|
||||
public string Name { get; set; }
|
||||
public IoCardType Card { get; set; }
|
||||
public int StationNo { get; set; }
|
||||
public string LineNo { get; set; }
|
||||
public bool Value { get; set; }
|
||||
public bool IsInverse { get; set; }
|
||||
public abstract IoPointType PointType { get; }
|
||||
public abstract DeviceIoPointState Clone();
|
||||
}
|
||||
|
||||
public class DeviceInputPointState : DeviceIoPointState
|
||||
{
|
||||
public override IoPointType PointType => IoPointType.Input;
|
||||
|
||||
public override DeviceIoPointState Clone()
|
||||
{
|
||||
return new DeviceInputPointState
|
||||
{
|
||||
Id = Id,
|
||||
PointKey = PointKey,
|
||||
Module = Module,
|
||||
Name = Name,
|
||||
Card = Card,
|
||||
StationNo = StationNo,
|
||||
LineNo = LineNo,
|
||||
Value = Value,
|
||||
IsInverse = IsInverse
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public class DeviceOutputPointState : DeviceIoPointState
|
||||
{
|
||||
private Func<bool, bool> _writeAction;
|
||||
|
||||
public bool CommandValue { get; set; }
|
||||
public bool CanWrite => _writeAction != null;
|
||||
|
||||
public override IoPointType PointType => IoPointType.Output;
|
||||
|
||||
public void BindWriteAction(Func<bool, bool> writeAction)
|
||||
{
|
||||
_writeAction = writeAction;
|
||||
}
|
||||
|
||||
public bool TrySetOutput(bool outputOn)
|
||||
{
|
||||
if (_writeAction == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var result = _writeAction(outputOn);
|
||||
if (result)
|
||||
{
|
||||
CommandValue = outputOn;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public bool TryTurnOn()
|
||||
{
|
||||
return TrySetOutput(true);
|
||||
}
|
||||
|
||||
public bool TryTurnOff()
|
||||
{
|
||||
return TrySetOutput(false);
|
||||
}
|
||||
|
||||
public override DeviceIoPointState Clone()
|
||||
{
|
||||
var clone = new DeviceOutputPointState
|
||||
{
|
||||
Id = Id,
|
||||
PointKey = PointKey,
|
||||
Module = Module,
|
||||
Name = Name,
|
||||
Card = Card,
|
||||
StationNo = StationNo,
|
||||
LineNo = LineNo,
|
||||
Value = Value,
|
||||
CommandValue = CommandValue,
|
||||
IsInverse = IsInverse
|
||||
};
|
||||
|
||||
clone.BindWriteAction(_writeAction);
|
||||
return clone;
|
||||
}
|
||||
}
|
||||
|
||||
public class IoModuleSnapshot
|
||||
{
|
||||
public string Module { get; set; }
|
||||
public IReadOnlyList<DeviceIoPointState> Points { get; set; } = new List<DeviceIoPointState>();
|
||||
}
|
||||
|
||||
public class DeviceIoSnapshot
|
||||
{
|
||||
public bool IsValid { get; set; }
|
||||
public DateTime Timestamp { get; set; } = DateTime.Now;
|
||||
public IReadOnlyDictionary<string, DeviceIoPointState> AllPoints { get; set; } = new Dictionary<string, DeviceIoPointState>();
|
||||
|
||||
public IReadOnlyList<IoModuleSnapshot> Modules
|
||||
{
|
||||
get
|
||||
{
|
||||
return AllPoints.Values
|
||||
.GroupBy(x => string.IsNullOrWhiteSpace(x.Module) ? "Default" : x.Module)
|
||||
.Select(g => new IoModuleSnapshot
|
||||
{
|
||||
Module = g.Key,
|
||||
Points = g.Select(x => x.Clone()).ToList()
|
||||
})
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user