示波器修改:visa连接方式+截图保存
This commit is contained in:
@@ -124,6 +124,11 @@ namespace UIShare.GlobalVariable
|
||||
{
|
||||
alive = await ProbeTcpDeviceAsync(tcpDevice);
|
||||
}
|
||||
// VISA 设备同理:IsConnected 仅表示会话对象存在,主动探活以检测死会话
|
||||
else if (alive && device is Visa visaDevice)
|
||||
{
|
||||
alive = await ProbeVisaDeviceAsync(visaDevice);
|
||||
}
|
||||
|
||||
if (alive)
|
||||
{
|
||||
@@ -176,6 +181,26 @@ namespace UIShare.GlobalVariable
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 对 VISA 设备执行轻量级主动探活(SCPI *IDN?)。
|
||||
/// <para>通过 WriteReadAsync 内部获取 _commLock,与监控采样天然串行化;
|
||||
/// 死会话将在 VISA 自身的 IOTimeout 内抛出异常,返回 false 触发重连。</para>
|
||||
/// </summary>
|
||||
/// <returns>true: 探活成功(会话确实存活); false: 探活失败(死会话)</returns>
|
||||
private async Task<bool> ProbeVisaDeviceAsync(Visa visaDevice)
|
||||
{
|
||||
try
|
||||
{
|
||||
using var probeCts = new CancellationTokenSource(TimeSpan.FromSeconds(2));
|
||||
string resp = await visaDevice.WriteReadAsync("*IDN?\n", "\n", probeCts.Token);
|
||||
return !string.IsNullOrWhiteSpace(resp);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重连单个设备。
|
||||
/// <para>
|
||||
|
||||
Reference in New Issue
Block a user