LockResult.cs 10 KB

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