|
@@ -154,6 +154,16 @@ namespace TeamAAS_VP.Models
|
|
|
set { SetProperty(ref __TargetLockSpeed, value); }
|
|
set { SetProperty(ref __TargetLockSpeed, value); }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private bool _ScrewdriverGetDataSucceed;
|
|
|
|
|
+ /// <summary>
|
|
|
|
|
+ /// 电批数据是否获取成功
|
|
|
|
|
+ /// </summary>
|
|
|
|
|
+ public bool ScrewdriverGetDataSucceed
|
|
|
|
|
+ {
|
|
|
|
|
+ get { return _ScrewdriverGetDataSucceed; }
|
|
|
|
|
+ set { SetProperty(ref _ScrewdriverGetDataSucceed, value); }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private float __StartPositionX;
|
|
private float __StartPositionX;
|
|
|
/// <summary>
|
|
/// <summary>
|
|
|
/// 锁付位置坐标 X 起始值
|
|
/// 锁付位置坐标 X 起始值
|
|
@@ -301,6 +311,9 @@ namespace TeamAAS_VP.Models
|
|
|
LockDescentSpeed = this.LockDescentSpeed,
|
|
LockDescentSpeed = this.LockDescentSpeed,
|
|
|
FeederNumber = this.FeederNumber,
|
|
FeederNumber = this.FeederNumber,
|
|
|
NozzleNumber = this.NozzleNumber,
|
|
NozzleNumber = this.NozzleNumber,
|
|
|
|
|
+ OperatorName = this.OperatorName,
|
|
|
|
|
+ ProductImagePath = this.ProductImagePath,
|
|
|
|
|
+ ScrewdriverGetDataSucceed = this.ScrewdriverGetDataSucceed,
|
|
|
WaveDatas = new List<WaveData>(this.WaveDatas)
|
|
WaveDatas = new List<WaveData>(this.WaveDatas)
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
@@ -311,18 +324,70 @@ namespace TeamAAS_VP.Models
|
|
|
/// <param name="filePath"></param>
|
|
/// <param name="filePath"></param>
|
|
|
public void SaveToCsv(string filePath)
|
|
public void SaveToCsv(string filePath)
|
|
|
{
|
|
{
|
|
|
- using (var writer = new System.IO.StreamWriter(filePath))
|
|
|
|
|
|
|
+ string EscapeCsv(object value)
|
|
|
{
|
|
{
|
|
|
- // 写入锁付结果信息
|
|
|
|
|
- writer.WriteLine("Number,ProductNumber,Timestamp,LockTurns,LockTorque,LockDuration,LockPassed,ScrewdriverProgramNumber,Pressure,TargetTorque,TargetTurnsUpperLimit,TargetTurnsLowerLimit,TargetLockSpeed,StartPositionX,StartPositionY,StartPositionZ,EndPositionZ,LockDescentSpeed,FeederNumber,NozzleNumber");
|
|
|
|
|
- writer.WriteLine($"{Number},{ProductNumber},{Timestamp},{LockTurns},{LockTorque},{LockDuration},{LockPassed},{ScrewdriverProgramNumber},{Pressure},{TargetTorque},{TargetTurnsUpperLimit},{TargetTurnsLowerLimit},{TargetLockSpeed},{StartPositionX},{StartPositionY},{StartPositionZ},{EndPositionZ},{LockDescentSpeed},{FeederNumber},{NozzleNumber}");
|
|
|
|
|
|
|
+ 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,ProductNumber,Timestamp,LockTurns,LockTorque,LockDuration,LockPassed,ScrewdriverProgramNumber,Pressure,TargetTorque,TargetTurnsUpperLimit,TargetTurnsLowerLimit,TargetLockSpeed,StartPositionX,StartPositionY,StartPositionZ,EndPositionZ,LockDescentSpeed,FeederNumber,FeederBatchNumber,NozzleNumber,ResultDetails,ScrewdriverGetDataSucceed,OperatorName,ProductImagePath");
|
|
|
|
|
+
|
|
|
|
|
+ // 写入锁付结果数据行(所有字段均做 CSV 转义)
|
|
|
|
|
+ writer.WriteLine(string.Join(",",
|
|
|
|
|
+ EscapeCsv(Number),
|
|
|
|
|
+ EscapeCsv(ProductNumber),
|
|
|
|
|
+ EscapeCsv(Timestamp),
|
|
|
|
|
+ EscapeCsv(LockTurns),
|
|
|
|
|
+ EscapeCsv(LockTorque),
|
|
|
|
|
+ EscapeCsv(LockDuration),
|
|
|
|
|
+ EscapeCsv(LockPassed),
|
|
|
|
|
+ EscapeCsv(ScrewdriverProgramNumber),
|
|
|
|
|
+ EscapeCsv(Pressure),
|
|
|
|
|
+ EscapeCsv(TargetTorque),
|
|
|
|
|
+ EscapeCsv(TargetTurnsUpperLimit),
|
|
|
|
|
+ EscapeCsv(TargetTurnsLowerLimit),
|
|
|
|
|
+ EscapeCsv(TargetLockSpeed),
|
|
|
|
|
+ EscapeCsv(StartPositionX),
|
|
|
|
|
+ EscapeCsv(StartPositionY),
|
|
|
|
|
+ EscapeCsv(StartPositionZ),
|
|
|
|
|
+ EscapeCsv(EndPositionZ),
|
|
|
|
|
+ EscapeCsv(LockDescentSpeed),
|
|
|
|
|
+ EscapeCsv(FeederNumber),
|
|
|
|
|
+ EscapeCsv(FeederBatchNumber),
|
|
|
|
|
+ EscapeCsv(NozzleNumber),
|
|
|
|
|
+ EscapeCsv(ResultDetails),
|
|
|
|
|
+ EscapeCsv(ScrewdriverGetDataSucceed),
|
|
|
|
|
+ EscapeCsv(OperatorName),
|
|
|
|
|
+ EscapeCsv(ProductImagePath)
|
|
|
|
|
+ ));
|
|
|
|
|
+
|
|
|
// 写入波形数据
|
|
// 写入波形数据
|
|
|
writer.WriteLine();
|
|
writer.WriteLine();
|
|
|
writer.WriteLine("WaveDataIndex,LockAngle,Torque,Turns,Speed,Slopes");
|
|
writer.WriteLine("WaveDataIndex,LockAngle,Torque,Turns,Speed,Slopes");
|
|
|
for (int i = 0; i < WaveDatas.Count; i++)
|
|
for (int i = 0; i < WaveDatas.Count; i++)
|
|
|
{
|
|
{
|
|
|
var waveData = WaveDatas[i];
|
|
var waveData = WaveDatas[i];
|
|
|
- writer.WriteLine($"{i},{waveData.LockAngle},{waveData.Torque},{waveData.Turns},{waveData.Speed},{waveData.Slopes}");
|
|
|
|
|
|
|
+ writer.WriteLine(string.Join(",",
|
|
|
|
|
+ EscapeCsv(i),
|
|
|
|
|
+ EscapeCsv(waveData.LockAngle),
|
|
|
|
|
+ EscapeCsv(waveData.Torque),
|
|
|
|
|
+ EscapeCsv(waveData.Turns),
|
|
|
|
|
+ EscapeCsv(waveData.Speed),
|
|
|
|
|
+ EscapeCsv(waveData.Slopes)
|
|
|
|
|
+ ));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|