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(); }
}
}
}