using Prism.Mvvm; namespace SKMC.Api.Motion.Model { /// /// IO模型 /// public class MotionIO : BindableBase { public int VALUE_COUNTER_MAX { get; set; } = 9999; private string _type; public string Type { get { return _type; } set { _type = value; RaisePropertyChanged(); } } private string _code; public string Code { get { return _code; } set { _code = value; RaisePropertyChanged(); } } private string catalog; /// /// 所在(模块)分类 /// public string Catalog { get { return catalog; } set { catalog = value; RaisePropertyChanged(); } } private byte _value = 255; /// /// 当前数值 /// public byte Value { get { return _value; } set { // value changed if (_value != value) { _valueConunter = 0; _valueLast = _value; } _value = value; if (_valueConunter < VALUE_COUNTER_MAX) _valueConunter++; RaisePropertyChanged(); } } private byte _valueLast = 255; /// /// 前一个数值 /// public byte ValueLast { get => _valueLast; set => _valueLast = value; } private int _valueConunter; /// /// 数值计数 /// public int ValueCounter { get { return _valueConunter; } set { _valueConunter = value; } } public string ValueTxt { get => "■"; } private bool _testMode; /// /// 测试模式下不获取数据 /// public bool TestMode { get { return _testMode; } set { _testMode = value; } } private string _name; public string Name { get { return _name; } set { _name = value; RaisePropertyChanged(); } } private short _devNo; /// /// IO模组设备序号 /// public short DevNo { get { return _devNo; } set { _devNo = value; } } private short _siteNO; /// /// 在设备上的点位顺序, 从0开始 /// public short SiteNo { get { return _siteNO; } set { _siteNO = value; } } private short _siteNoMutex; /// /// 点位互斥设置 /// public short SiteNoMutex { get { return _siteNoMutex; } set { _siteNoMutex = value; } } private short _grpNo = 0; /// /// 逻辑组序号 /// public short GrpNo { get { return _grpNo; } set { _grpNo = value; } } private short _bitNo; /// /// BitNo是IO在逻辑组的序号 /// public short BitNo { get { return _bitNo; } set { _bitNo = value; } } private short _dioNo; /// /// DioNo是IO在全局的序号, 可通过GrpNo、BitNo组合计算 /// public short DioNo { get { return _dioNo; } set { _dioNo = value; } } public string SerialName { get => $"[{Code}]: {Name}"; } /// /// 一组8位数据的映射方法 /// /// public MotionIO Set8Bit() { _grpNo = _siteNO >= 8 ? (short)(_devNo * 2 + 1) : (short)(_devNo * 2); _bitNo = _siteNO >= 8 ? (short)(_siteNO - 8) : _siteNO; _dioNo = (short)(_grpNo * 8 + _bitNo); return this; } /// /// 一组16位数据的映射方法 /// /// public MotionIO Set16Bit() { _grpNo = _devNo; _bitNo = _siteNO; _dioNo = (short)(_grpNo * 16 + _bitNo); return this; } public void Reset() { _value = 0; _valueLast = 0; _valueConunter = 0; } private short _invert = 0; /// /// 是否取反 /// public short Invert { get { return _invert; } set { _invert = value; RaisePropertyChanged(); } } private short _trigger; // 是否为触发器 (用于流程触发) public short Trigger { get { return _trigger; } set { _trigger = value; } } private string _desc; public string Desc { get { return _desc; } set { _desc = value; RaisePropertyChanged(); } } } }