| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Prism.Mvvm;
- using SqlSugar;
- using TouchSocket.Core;
- namespace TeamAAS_VP.Models
- {
- public class LockResult : BindableBase
- {
- private int __Number;
- /// <summary>
- /// 序号(界面显示用)
- /// </summary>
- public int Number
- {
- get { return __Number; }
- set { SetProperty(ref __Number, value); }
- }
- private DateTime __Timestamp;
- /// <summary>
- /// 时间戳
- /// </summary>
- public DateTime Timestamp
- {
- get { return __Timestamp; }
- set { SetProperty(ref __Timestamp, value); }
- }
- private float __LockTurns;
- /// <summary>
- /// 锁付圈数
- /// </summary>
- public float LockTurns
- {
- get { return __LockTurns; }
- set { SetProperty(ref __LockTurns, value); }
- }
- private float __LockTorque;
- /// <summary>
- /// 锁付扭矩
- /// </summary>
- public float LockTorque
- {
- get { return __LockTorque; }
- set { SetProperty(ref __LockTorque, value); }
- }
- private float __LockDuration;
- /// <summary>
- /// 锁付用时
- /// </summary>
- public float LockDuration
- {
- get { return __LockDuration; }
- set { SetProperty(ref __LockDuration, value); }
- }
- private bool __LockPassed;
- /// <summary>
- /// 锁付结果(是否通过)
- /// </summary>
- public bool LockPassed
- {
- get { return __LockPassed; }
- set { SetProperty(ref __LockPassed, value); }
- }
-
- private int __ScrewdriverProgramNumber;
- /// <summary>
- /// 电批程序号
- /// </summary>
- public int ScrewdriverProgramNumber
- {
- get { return __ScrewdriverProgramNumber; }
- set { SetProperty(ref __ScrewdriverProgramNumber, value); }
- }
- /// <summary>
- /// 锁付曲线图片保存路径(为空则不导出)
- /// </summary>
- [SugarColumn(IsIgnore = true)]
- public string LockCurveImagePath { get; set; }
- /// <summary>
- /// 锁付曲线 CSV 保存路径(数据库关联字段)
- /// </summary>
- [SugarColumn(IsIgnore = true)]
- public string CurveCsvPath { get; set; }
- /// <summary>
- /// 是否为界面展示用演示数据(不入库、不导出)
- /// </summary>
- [SugarColumn(IsIgnore = true)]
- public bool IsDemoData { get; set; }
- /// <summary>
- /// 锁付曲线数据列表
- /// </summary>
- [SugarColumn(IsIgnore = true)]
- public List<WaveData> WaveDatas { get; set; } = new List<WaveData>();
- public LockResult()
- {
- // 默认构造函数
- Timestamp = DateTime.Now;
- }
- public LockResult(float lockTurns, float lockTorque, bool lockPassed)
- {
- Timestamp = DateTime.Now;
- LockTurns = lockTurns;
- LockTorque = lockTorque;
- LockPassed = lockPassed;
- }
- public LockResult Clone()
- {
- return new LockResult
- {
- Number = this.Number,
- Timestamp = this.Timestamp,
- LockTurns = this.LockTurns,
- LockTorque = this.LockTorque,
- LockDuration = this.LockDuration,
- LockPassed = this.LockPassed,
- ScrewdriverProgramNumber = this.ScrewdriverProgramNumber,
- LockCurveImagePath = this.LockCurveImagePath,
- CurveCsvPath = this.CurveCsvPath,
- IsDemoData = this.IsDemoData,
- WaveDatas = new List<WaveData>(this.WaveDatas),
- };
- }
- /// <summary>
- /// 将当前的锁付结果结果及波形数据存储至.csv文件中
- /// </summary>
- /// <param name="filePath"></param>
- public void SaveToCsv(string filePath)
- {
- string EscapeCsv(object value)
- {
- if ( value == null ) return "\"\"";
- string s;
- if ( value is DateTime dt )
- {
- s = dt.ToString("o"); // ISO 8601
- }
- else
- {
- s = Convert.ToString(value, System.Globalization.CultureInfo.InvariantCulture);
- }
- s = s.Replace("\"", "\"\""); // escape quotes
- return $"\"{s}\"";
- }
- using ( var writer = new System.IO.StreamWriter(filePath, false, System.Text.Encoding.UTF8) )
- {
- // 写入锁付结果信息表头(已新增字段)
- writer.WriteLine("Number,Timestamp,LockTurns,LockTorque,LockDuration,LockPassed,ScrewdriverProgramNumber");
- writer.WriteLine(string.Join(",",
- EscapeCsv(Number),
- EscapeCsv(Timestamp),
- EscapeCsv(LockTurns),
- EscapeCsv(LockTorque),
- EscapeCsv(LockDuration),
- EscapeCsv(LockPassed),
- EscapeCsv(ScrewdriverProgramNumber)
- ));
- // 写入波形数据
- writer.WriteLine();
- writer.WriteLine("WaveDataIndex,Time,LockAngle,Torque,Turns,Speed,Slopes");
- for ( int i = 0; i < WaveDatas.Count; i++ )
- {
- var waveData = WaveDatas[i];
- writer.WriteLine(string.Join(",",
- EscapeCsv(i),
- EscapeCsv(waveData.Time),
- EscapeCsv(waveData.LockAngle),
- EscapeCsv(waveData.Torque),
- EscapeCsv(waveData.Turns),
- EscapeCsv(waveData.Speed),
- EscapeCsv(waveData.Slopes)
- ));
- }
- }
- }
- /// <summary>
- /// 异步保存到csv
- /// </summary>
- /// <param name="filePath"></param>
- /// <returns></returns>
- public async System.Threading.Tasks.Task SaveToCsvAsync(string filePath)
- {
- await System.Threading.Tasks.Task.Run(() =>
- {
- try
- {
- SaveToCsv(filePath);
- }
- catch ( Exception ex )
- {
- LogHelper.WriteLogError("保存锁付数据至CSV时出错!", ex);
- }
- });
- }
- }
- /// <summary>
- /// 曲线数据结构,包含速度、扭矩、角度、圈数、斜率与时间。
- /// </summary>
- public struct WaveData
- {
- /// <summary>
- /// 速度
- /// </summary>
- public double Speed { get; set; }
- /// <summary>
- /// 扭矩
- /// </summary>
- public double Torque { get; set; }
- /// <summary>
- /// 角度
- /// </summary>
- public double LockAngle { get; set; }
- /// <summary>
- /// 圈数
- /// </summary>
- public double Turns { get; set; }
- /// <summary>
- /// 斜率
- /// </summary>
- public double Slopes { get; set; }
- /// <summary>
- /// 时间(秒)
- /// </summary>
- public double Time { get; set; }
- }
- }
|