Files
huabe-sitondao/SLC1-N/yiqiParam.cs
2025-11-14 16:12:32 +08:00

295 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SLC1_N
{
public class yiqiParam // 仪器参数类
{
public bool opmode { get; set; } // 开口/容积
// 时间
public int fulltime { get; set; } // 充气时间
public int balantime { get; set; } // 平衡时间
public int testtime1 { get; set; } // 检测时间
public int exhausttime { get; set; } // 排气时间
// 延时
public int relievedelay { get; set; } // 解除2延时
public int delaytime1 { get; set; } // 延时1
public int delaytime2 { get; set; } // 延时2
public float evolume { get; set; } // 等效容积
// 压力
public float fptoplimit { get; set; } // 充气上限
public float fplowlimit { get; set; } // 充气下限
public float balanpremax { get; set; } // 平衡上限
public float balanpremin { get; set; } // 平衡下限
// 泄漏量
public float leaktoplimit { get; set; } // 泄漏量上限
public float leaklowlimit { get; set; } // 泄漏量下限
// 单位
public int punit { get; set; } // 压力单位
public int lunit { get; set; } // 泄漏量单位
// 获取需要上传的数据帧
public int[] GetArray()
{
// 拆分 float 值为两个16位整数
int[] FPtoplimitBytes = Fun_SplitBytes(fptoplimit);
int[] FPlowlimitBytes = Fun_SplitBytes(fplowlimit);
int[] BalanPreMaxBytes = Fun_SplitBytes(balanpremax);
int[] BalanPreMinBytes = Fun_SplitBytes(balanpremin);
int[] LeaktoplimitBytes = Fun_SplitBytes(leaktoplimit);
int[] LeaklowlimitBytes = Fun_SplitBytes(leaklowlimit);
int[] EvolumeBytes = Fun_SplitBytes(evolume);
return new int[]
{
fulltime * 10, // 充气时间
balantime * 10, // 平衡时间
testtime1 * 10, // 检测时间
exhausttime * 10, // 排气时间
relievedelay, // 解除2延时
delaytime1, // 延时1
delaytime2, // 延时2
FPtoplimitBytes[0], FPtoplimitBytes[1], // 充气上限
FPlowlimitBytes[0], FPlowlimitBytes[1], // 充气下限
BalanPreMaxBytes[0], BalanPreMaxBytes[1], // 平衡上限
BalanPreMinBytes[0], BalanPreMinBytes[1], // 平衡下限
LeaktoplimitBytes[0], LeaktoplimitBytes[1],// 泄漏量上限
LeaklowlimitBytes[0], LeaklowlimitBytes[1],// 泄漏量下限
EvolumeBytes[0], EvolumeBytes[1], // 等效容积
punit, // 压力单位
lunit, // 泄漏量单位
};
}
// 将 float 拆分为两个(低字在前,高字在后)
public int[] Fun_SplitBytes(float value)
{
byte[] bytes = BitConverter.GetBytes(value);
ushort lowWord = BitConverter.ToUInt16(bytes, 0); // 低位地址1015
ushort highWord = BitConverter.ToUInt16(bytes, 2); // 高位地址1016
return new int[] { lowWord, highWord }; // 返回 [low, high]
}
// 复制
public yiqiParam Copy()
{
return new yiqiParam
{
fulltime = this.fulltime,
balantime = this.balantime,
testtime1 = this.testtime1,
exhausttime = this.exhausttime,
relievedelay = this.relievedelay,
delaytime1 = this.delaytime1,
delaytime2 = this.delaytime2,
evolume = this.evolume,
fptoplimit = this.fptoplimit,
fplowlimit = this.fplowlimit,
balanpremax = this.balanpremax,
balanpremin = this.balanpremin,
leaktoplimit = this.leaktoplimit,
leaklowlimit = this.leaklowlimit,
punit = this.punit,
lunit = this.lunit
};
}
}
// 测试记录
/// <summary>
/// 添加一次测试记录到链表导出的时候再集成链表为string
/// </summary>
public class TestRecord
{
private int ch;
public string Code { get; set; } // 条码
// 仪器参数配置
public yiqiParam yiqiP_Param { get; set; } // 正压参数
public yiqiParam yiqiN_Param { get; set; } // 负压参数
// 测试状态
public bool IsPTested { get; set; } // 正压是否已测试
public bool IsNTested { get; set; } // 负压是否已测试
// 测试结果
public bool Result { get; set; } // 测试结果
// 正压
public string PTestPressure { get; set; } // 正压测试压力
public string PLeak { get; set; } // 正压泄漏量
// 负压
public string NTestPressure { get; set; } // 负压测试压力
public string NLeak { get; set; } // 负压泄漏量
List<string> testRecord_list = new List<string>();
public TestRecord(int ch)
{
this.ch = ch;
}
// 添加一次记录
public void AddRecord()
{
testRecord_list.Add(GetRecord());
}
// 获取记录数据
private string GetRecord()
{
string currentTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
string resultText = Result ? "OK" : "NG";
List<string> records = new List<string>();
// 正压记录
if (IsPTested && yiqiP_Param != null)
{
string pressureUnit = GetPUnit(yiqiP_Param.punit);
string leakageUnit = GetLUnitText(yiqiP_Param.lunit);
string positiveRecord = $"CH{ch}[正压] 时间 {currentTime} 条形码{Code} 结果{resultText} " +
$"充气时间{yiqiP_Param.fulltime}s " +
$"平衡时间{yiqiP_Param.balantime}s " +
$"测试时间{yiqiP_Param.testtime1}s " +
$"排气时间{yiqiP_Param.exhausttime}s " +
$"测试压力{PTestPressure}{pressureUnit} " +
$"泄漏量{PLeak}{leakageUnit}";
records.Add(positiveRecord);
}
// 负压记录
if (IsNTested && yiqiN_Param != null)
{
string pressureUnit = GetPUnit(yiqiN_Param.punit);
string leakageUnit = GetLUnitText(yiqiN_Param.lunit);
string negativeRecord = $"CH{ch}[负压] 时间 {currentTime} 条形码{Code} 结果{resultText} " +
$"充气时间{yiqiN_Param.fulltime}s " +
$"平衡时间{yiqiN_Param.balantime}s " +
$"测试时间{yiqiN_Param.testtime1}s " +
$"排气时间{yiqiN_Param.exhausttime}s " +
$"测试压力{NTestPressure}{pressureUnit} " +
$"泄漏量{NLeak}{leakageUnit}";
records.Add(negativeRecord);
}
return string.Join(Environment.NewLine, records);
}
// 获取记录集合
public string GetRecordList()
{
return string.Join(Environment.NewLine, testRecord_list) + "\n";
}
// 获取正压记录
public string GetPRecord()
{
if (!IsPTested || yiqiP_Param == null)
return null;
string currentTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
string resultText = Result ? "OK" : "NG";
string pressureUnit = GetPUnit(yiqiP_Param.punit);
string leakageUnit = GetLUnitText(yiqiP_Param.lunit);
return $"CH4 时间 {currentTime} 条形码{Code} 结果{resultText} " +
$"正压充气时间{yiqiP_Param.fulltime}s " +
$"正压平衡时间{yiqiP_Param.balantime}s " +
$"正压测试时间{yiqiP_Param.testtime1}s " +
$"正压排气时间{yiqiP_Param.exhausttime}s " +
$"正压测试压力{PTestPressure:0.00}{pressureUnit} " +
$"正压泄漏量{PLeak:0.00}{leakageUnit}";
}
// 获取负压记录
public string GetNRecord()
{
if (!IsNTested || yiqiN_Param == null)
return null;
string currentTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
string resultText = Result ? "OK" : "NG";
string pressureUnit = GetPUnit(yiqiN_Param.punit);
string leakageUnit = GetLUnitText(yiqiN_Param.lunit);
return $"CH4 时间 {currentTime} 条形码{Code} 结果{resultText} " +
$"负压充气时间{yiqiN_Param.fulltime}s " +
$"负压平衡时间{yiqiN_Param.balantime}s " +
$"负压测试时间{yiqiN_Param.testtime1}s " +
$"负压排气时间{yiqiN_Param.exhausttime}s " +
$"负压测试压力{NTestPressure:0.00}{pressureUnit} " +
$"负压泄漏量{NLeak:0.00}{leakageUnit}";
}
// 重置
public void Reset()
{
Code = string.Empty;
IsPTested = false;
IsNTested = false;
Result = false;
PTestPressure = string.Empty;
PLeak = string.Empty;
NTestPressure = string.Empty;
NLeak = string.Empty;
testRecord_list.Clear();
}
// 获取压力单位文本
private string GetPUnit(int unit)
{
string PUnit = "Pa"; // 默认值
switch (unit)
{
case 0: PUnit = "Pa"; break;
case 1: PUnit = "KPa"; break;
case 2: PUnit = "MPa"; break;
case 3: PUnit = "bar"; break;
case 4: PUnit = "Psi"; break;
case 5: PUnit = "kg/cm^2"; break;
case 6: PUnit = "atm"; break;
case 7: PUnit = "mmHg"; break;
}
return PUnit;
}
// 获取泄漏量单位文本
private string GetLUnitText(int unit)
{
string LUnit = "Pa"; // 默认值
switch (unit)
{
case 0: LUnit = "Pa"; break;
case 1: LUnit = "KPa"; break;
case 2: LUnit = "mbar"; break;
case 3: LUnit = "atm"; break;
case 4: LUnit = "sccm"; break;
case 5: LUnit = "ccm3/s"; break;
case 6: LUnit = "Pa/s"; break;
}
return LUnit;
}
}
}