LockResult.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. using Prism.Mvvm;
  2. using System;
  3. using System.Collections.Generic;
  4. using static TeamAAS_VP.Core.ScrewDriver.XYD_ScrewDriver;
  5. using SqlSugar;
  6. namespace TeamAAS_VP.Models
  7. {
  8. public class LockResult : BindableBase
  9. {
  10. [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
  11. public int Id { get; set; }
  12. private int __Number;
  13. /// <summary>
  14. /// 螺丝编号
  15. /// </summary>
  16. public int Number
  17. {
  18. get { return __Number; }
  19. set { SetProperty(ref __Number, value); }
  20. }
  21. private string __ProductNumber;
  22. /// <summary>
  23. /// 产品编号
  24. /// </summary>
  25. public string ProductNumber
  26. {
  27. get { return __ProductNumber; }
  28. set { SetProperty(ref __ProductNumber, value); }
  29. }
  30. private DateTime __Timestamp;
  31. /// <summary>
  32. /// 时间戳
  33. /// </summary>
  34. public DateTime Timestamp
  35. {
  36. get { return __Timestamp; }
  37. set { SetProperty(ref __Timestamp, value); }
  38. }
  39. private float __LockTurns;
  40. /// <summary>
  41. /// 锁付圈数
  42. /// </summary>
  43. public float LockTurns
  44. {
  45. get { return __LockTurns; }
  46. set { SetProperty(ref __LockTurns, value); }
  47. }
  48. private float __LockTorque;
  49. /// <summary>
  50. /// 锁付扭矩
  51. /// </summary>
  52. public float LockTorque
  53. {
  54. get { return __LockTorque; }
  55. set { SetProperty(ref __LockTorque, value); }
  56. }
  57. private float __LockDuration;
  58. /// <summary>
  59. /// 锁付用时
  60. /// </summary>
  61. public float LockDuration
  62. {
  63. get { return __LockDuration; }
  64. set { SetProperty(ref __LockDuration, value); }
  65. }
  66. private bool __LockPassed;
  67. /// <summary>
  68. /// 锁付结果(是否通过)
  69. /// </summary>
  70. public bool LockPassed
  71. {
  72. get { return __LockPassed; }
  73. set { SetProperty(ref __LockPassed, value); }
  74. }
  75. //
  76. private string _ResultDetails;
  77. /// <summary>
  78. /// 结果详情
  79. /// </summary>
  80. public string ResultDetails
  81. {
  82. get { return _ResultDetails; }
  83. set { SetProperty(ref _ResultDetails, value); }
  84. }
  85. private int __ScrewdriverProgramNumber;
  86. /// <summary>
  87. /// 电批程序号
  88. /// </summary>
  89. public int ScrewdriverProgramNumber
  90. {
  91. get { return __ScrewdriverProgramNumber; }
  92. set { SetProperty(ref __ScrewdriverProgramNumber, value); }
  93. }
  94. private float __Pressure;
  95. /// <summary>
  96. /// 压力值
  97. /// </summary>
  98. public float Pressure
  99. {
  100. get { return __Pressure; }
  101. set { SetProperty(ref __Pressure, value); }
  102. }
  103. private float __TargetTorque;
  104. /// <summary>
  105. /// 目标扭矩
  106. /// </summary>
  107. public float TargetTorque
  108. {
  109. get { return __TargetTorque; }
  110. set { SetProperty(ref __TargetTorque, value); }
  111. }
  112. private float __TargetTurnsUpperLimit;
  113. /// <summary>
  114. /// 目标圈数上限
  115. /// </summary>
  116. public float TargetTurnsUpperLimit
  117. {
  118. get { return __TargetTurnsUpperLimit; }
  119. set { SetProperty(ref __TargetTurnsUpperLimit, value); }
  120. }
  121. private float __TargetTurnsLowerLimit;
  122. /// <summary>
  123. /// 目标圈数下限
  124. /// </summary>
  125. public float TargetTurnsLowerLimit
  126. {
  127. get { return __TargetTurnsLowerLimit; }
  128. set { SetProperty(ref __TargetTurnsLowerLimit, value); }
  129. }
  130. private float __TargetLockSpeed;
  131. /// <summary>
  132. /// 目标锁付速度
  133. /// </summary>
  134. public float TargetLockSpeed
  135. {
  136. get { return __TargetLockSpeed; }
  137. set { SetProperty(ref __TargetLockSpeed, value); }
  138. }
  139. private float __StartPositionX;
  140. /// <summary>
  141. /// 锁付位置坐标 X 起始值
  142. /// </summary>
  143. public float StartPositionX
  144. {
  145. get { return __StartPositionX; }
  146. set { SetProperty(ref __StartPositionX, value); }
  147. }
  148. private float __StartPositionY;
  149. /// <summary>
  150. /// 锁付位置坐标 Y 起始值
  151. /// </summary>
  152. public float StartPositionY
  153. {
  154. get { return __StartPositionY; }
  155. set { SetProperty(ref __StartPositionY, value); }
  156. }
  157. private float __StartPositionZ;
  158. /// <summary>
  159. /// 锁付位置坐标 Z 起始值
  160. /// </summary>
  161. public float StartPositionZ
  162. {
  163. get { return __StartPositionZ; }
  164. set { SetProperty(ref __StartPositionZ, value); }
  165. }
  166. private float __EndPositionZ;
  167. /// <summary>
  168. /// Z 终点值
  169. /// </summary>
  170. public float EndPositionZ
  171. {
  172. get { return __EndPositionZ; }
  173. set { SetProperty(ref __EndPositionZ, value); }
  174. }
  175. private float __LockDescentSpeed;
  176. /// <summary>
  177. /// 锁付下降速度
  178. /// </summary>
  179. public float LockDescentSpeed
  180. {
  181. get { return __LockDescentSpeed; }
  182. set { SetProperty(ref __LockDescentSpeed, value); }
  183. }
  184. private int __FeederNumber;
  185. /// <summary>
  186. /// 供料器编号
  187. /// </summary>
  188. public int FeederNumber
  189. {
  190. get { return __FeederNumber; }
  191. set { SetProperty(ref __FeederNumber, value); }
  192. }
  193. private float _FeederBatchNumber;
  194. /// <summary>
  195. /// 螺丝批次编号
  196. /// </summary>
  197. public float FeederBatchNumber
  198. {
  199. get { return _FeederBatchNumber; }
  200. set { SetProperty(ref _FeederBatchNumber, value); }
  201. }
  202. private string __NozzleNumber;
  203. /// <summary>
  204. /// 披头编号
  205. /// </summary>
  206. public string NozzleNumber
  207. {
  208. get { return __NozzleNumber; }
  209. set { SetProperty(ref __NozzleNumber, value); }
  210. }
  211. //当前的操作员名称
  212. private string _OperatorName;
  213. public string OperatorName
  214. {
  215. get { return _OperatorName; }
  216. set { SetProperty(ref _OperatorName, value); }
  217. }
  218. private string _ProductImagePath;
  219. /// <summary>
  220. /// 产品图片路径
  221. /// </summary>
  222. public string ProductImagePath
  223. {
  224. get { return _ProductImagePath; }
  225. set { SetProperty(ref _ProductImagePath, value); }
  226. }
  227. /// <summary>
  228. /// 锁付曲线数据列表
  229. /// </summary>
  230. [SugarColumn(IsIgnore = true)]
  231. public List<WaveData> WaveDatas { get; set; } = new List<WaveData>();
  232. public LockResult()
  233. {
  234. // 默认构造函数
  235. Timestamp = DateTime.Now;
  236. }
  237. public LockResult(int number, string productNumber, float lockTurns, float lockTorque, bool lockPassed)
  238. {
  239. Number = number;
  240. ProductNumber = productNumber;
  241. Timestamp = DateTime.Now;
  242. LockTurns = lockTurns;
  243. LockTorque = lockTorque;
  244. LockPassed = lockPassed;
  245. }
  246. public LockResult Clone()
  247. {
  248. return new LockResult
  249. {
  250. Number = this.Number,
  251. ProductNumber = this.ProductNumber,
  252. Timestamp = this.Timestamp,
  253. LockTurns = this.LockTurns,
  254. LockTorque = this.LockTorque,
  255. LockDuration = this.LockDuration,
  256. LockPassed = this.LockPassed,
  257. ScrewdriverProgramNumber = this.ScrewdriverProgramNumber,
  258. Pressure = this.Pressure,
  259. TargetTorque = this.TargetTorque,
  260. TargetTurnsUpperLimit = this.TargetTurnsUpperLimit,
  261. TargetTurnsLowerLimit = this.TargetTurnsLowerLimit,
  262. TargetLockSpeed = this.TargetLockSpeed,
  263. StartPositionX = this.StartPositionX,
  264. StartPositionY = this.StartPositionY,
  265. StartPositionZ = this.StartPositionZ,
  266. EndPositionZ = this.EndPositionZ,
  267. LockDescentSpeed = this.LockDescentSpeed,
  268. FeederNumber = this.FeederNumber,
  269. NozzleNumber = this.NozzleNumber,
  270. WaveDatas = new List<WaveData>(this.WaveDatas)
  271. };
  272. }
  273. /// <summary>
  274. /// 将当前的锁付结果结果及波形数据存储至.csv文件中
  275. /// </summary>
  276. /// <param name="filePath"></param>
  277. public void SaveToCsv(string filePath)
  278. {
  279. using (var writer = new System.IO.StreamWriter(filePath))
  280. {
  281. // 写入锁付结果信息
  282. writer.WriteLine("Number,ProductNumber,Timestamp,LockTurns,LockTorque,LockDuration,LockPassed,ScrewdriverProgramNumber,Pressure,TargetTorque,TargetTurnsUpperLimit,TargetTurnsLowerLimit,TargetLockSpeed,StartPositionX,StartPositionY,StartPositionZ,EndPositionZ,LockDescentSpeed,FeederNumber,NozzleNumber");
  283. writer.WriteLine($"{Number},{ProductNumber},{Timestamp},{LockTurns},{LockTorque},{LockDuration},{LockPassed},{ScrewdriverProgramNumber},{Pressure},{TargetTorque},{TargetTurnsUpperLimit},{TargetTurnsLowerLimit},{TargetLockSpeed},{StartPositionX},{StartPositionY},{StartPositionZ},{EndPositionZ},{LockDescentSpeed},{FeederNumber},{NozzleNumber}");
  284. // 写入波形数据
  285. writer.WriteLine();
  286. writer.WriteLine("WaveDataIndex,LockAngle,Torque,Turns,Speed,Slopes");
  287. for (int i = 0; i < WaveDatas.Count; i++)
  288. {
  289. var waveData = WaveDatas[i];
  290. writer.WriteLine($"{i},{waveData.LockAngle},{waveData.Torque},{waveData.Turns},{waveData.Speed},{waveData.Slopes}");
  291. }
  292. }
  293. }
  294. }
  295. }