MotionIO.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. using Prism.Mvvm;
  2. namespace SKMC.Api.Motion.Model
  3. {
  4. /// <summary>
  5. /// IO模型
  6. /// </summary>
  7. public class MotionIO : BindableBase
  8. {
  9. public int VALUE_COUNTER_MAX { get; set; } = 9999;
  10. private string _type;
  11. public string Type
  12. {
  13. get { return _type; }
  14. set { _type = value; RaisePropertyChanged(); }
  15. }
  16. private string _code;
  17. public string Code
  18. {
  19. get { return _code; }
  20. set { _code = value; RaisePropertyChanged(); }
  21. }
  22. private string catalog;
  23. /// <summary>
  24. /// 所在(模块)分类
  25. /// </summary>
  26. public string Catalog
  27. {
  28. get { return catalog; }
  29. set { catalog = value; RaisePropertyChanged(); }
  30. }
  31. private byte _value = 255;
  32. /// <summary>
  33. /// 当前数值
  34. /// </summary>
  35. public byte Value
  36. {
  37. get { return _value; }
  38. set
  39. {
  40. // value changed
  41. if (_value != value)
  42. {
  43. _valueConunter = 0;
  44. _valueLast = _value;
  45. }
  46. _value = value;
  47. if (_valueConunter < VALUE_COUNTER_MAX) _valueConunter++;
  48. RaisePropertyChanged();
  49. }
  50. }
  51. private byte _valueLast = 255;
  52. /// <summary>
  53. /// 前一个数值
  54. /// </summary>
  55. public byte ValueLast
  56. {
  57. get => _valueLast;
  58. set => _valueLast = value;
  59. }
  60. private int _valueConunter;
  61. /// <summary>
  62. /// 数值计数
  63. /// </summary>
  64. public int ValueCounter
  65. {
  66. get { return _valueConunter; }
  67. set { _valueConunter = value; }
  68. }
  69. public string ValueTxt { get => "■"; }
  70. private bool _testMode;
  71. /// <summary>
  72. /// 测试模式下不获取数据
  73. /// </summary>
  74. public bool TestMode
  75. {
  76. get { return _testMode; }
  77. set { _testMode = value; }
  78. }
  79. private string _name;
  80. public string Name
  81. {
  82. get { return _name; }
  83. set { _name = value; RaisePropertyChanged(); }
  84. }
  85. private short _devNo;
  86. /// <summary>
  87. /// IO模组设备序号
  88. /// </summary>
  89. public short DevNo
  90. {
  91. get { return _devNo; }
  92. set { _devNo = value; }
  93. }
  94. private short _siteNO;
  95. /// <summary>
  96. /// 在设备上的点位顺序, 从0开始
  97. /// </summary>
  98. public short SiteNo
  99. {
  100. get { return _siteNO; }
  101. set { _siteNO = value; }
  102. }
  103. private short _siteNoMutex;
  104. /// <summary>
  105. /// 点位互斥设置
  106. /// </summary>
  107. public short SiteNoMutex
  108. {
  109. get { return _siteNoMutex; }
  110. set { _siteNoMutex = value; }
  111. }
  112. private short _grpNo = 0;
  113. /// <summary>
  114. /// 逻辑组序号
  115. /// </summary>
  116. public short GrpNo
  117. {
  118. get { return _grpNo; }
  119. set { _grpNo = value; }
  120. }
  121. private short _bitNo;
  122. /// <summary>
  123. /// BitNo是IO在逻辑组的序号
  124. /// </summary>
  125. public short BitNo
  126. {
  127. get { return _bitNo; }
  128. set { _bitNo = value; }
  129. }
  130. private short _dioNo;
  131. /// <summary>
  132. /// DioNo是IO在全局的序号, 可通过GrpNo、BitNo组合计算
  133. /// </summary>
  134. public short DioNo
  135. {
  136. get { return _dioNo; }
  137. set { _dioNo = value; }
  138. }
  139. public string SerialName { get => $"[{Code}]: {Name}"; }
  140. /// <summary>
  141. /// 一组8位数据的映射方法
  142. /// </summary>
  143. /// <returns></returns>
  144. public MotionIO Set8Bit()
  145. {
  146. _grpNo = _siteNO >= 8 ? (short)(_devNo * 2 + 1) : (short)(_devNo * 2);
  147. _bitNo = _siteNO >= 8 ? (short)(_siteNO - 8) : _siteNO;
  148. _dioNo = (short)(_grpNo * 8 + _bitNo);
  149. return this;
  150. }
  151. /// <summary>
  152. /// 一组16位数据的映射方法
  153. /// </summary>
  154. /// <returns></returns>
  155. public MotionIO Set16Bit()
  156. {
  157. _grpNo = _devNo;
  158. _bitNo = _siteNO;
  159. _dioNo = (short)(_grpNo * 16 + _bitNo);
  160. return this;
  161. }
  162. public void Reset()
  163. {
  164. _value = 0;
  165. _valueLast = 0;
  166. _valueConunter = 0;
  167. }
  168. private short _invert = 0;
  169. /// <summary>
  170. /// 是否取反
  171. /// </summary>
  172. public short Invert
  173. {
  174. get { return _invert; }
  175. set { _invert = value; RaisePropertyChanged(); }
  176. }
  177. private short _trigger;
  178. // 是否为触发器 (用于流程触发)
  179. public short Trigger
  180. {
  181. get { return _trigger; }
  182. set { _trigger = value; }
  183. }
  184. private string _desc;
  185. public string Desc
  186. {
  187. get { return _desc; }
  188. set { _desc = value; RaisePropertyChanged(); }
  189. }
  190. }
  191. }