Code: Select all
// Connect
var vi = GlobalResourceManager.Open("TCPIP::10.0.0.2::hislip0::INSTR") as IMessageBasedSession;
// Set TCP Keep Alive
if (vi.ResourceName.StartsWith("TCPIP"))
{
((INativeVisaSession)vi).SetAttributeBoolean(NativeVisaAttribute.TcpKeepAlive, true);
}
// IDN query
vi.RawIO.Write("*IDN?");
Console.WriteLine(vi.RawIO.ReadString());
// IDN query using SRQ
vi.EnableEvent(EventType.ServiceRequest);
vi.DiscardEvents(EventType.ServiceRequest);
vi.RawIO.Write("*CLS;*ESE 1;*SRE 32");
vi.RawIO.Write("*IDN?;*OPC");
vi.WaitOnEvent(EventType.ServiceRequest, 1000);
vi.ReadStatusByte();
vi.DisableEvent(EventType.ServiceRequest);
Console.WriteLine(vi.RawIO.ReadString());
// Sleep to monitor keep alive traffic using Wireshark
Thread.Sleep(5 * 60 * 60 * 1000);
// IDN query
vi.RawIO.Write("*IDN?");
Console.WriteLine(vi.RawIO.ReadString());
// IDN query using SRQ
vi.EnableEvent(EventType.ServiceRequest);
vi.DiscardEvents(EventType.ServiceRequest);
vi.RawIO.Write("*CLS;*ESE 1;*SRE 32");
vi.RawIO.Write("*IDN?;*OPC");
vi.WaitOnEvent(EventType.ServiceRequest, 1000);
vi.ReadStatusByte();
vi.DisableEvent(EventType.ServiceRequest);
Console.WriteLine(vi.RawIO.ReadString());
// Disconnect
vi.Dispose();
- öffnet zwei TCP-Verbindungen (1: Port 61741 bis Port 4880, 2: Port 61742 bis 4880)
Code: Select all
GlobalResourceManager.Open - legt den Keep-Alive-Verkehr nur für die erste TCP-Verbindung fest und nicht für die zweite. Der zweite scheint für die Ereignisbehandlung verwendet zu werden.
Code: Select all
((INativeVisaSession)vi).SetAttributeBoolean(NativeVisaAttribute.TcpKeepAlive, true)
Danach schlägt die IDN-Abfrage mit SRQ fehl. Die IDN-Abfrage funktioniert immer noch.
Ich habe die folgenden Fragen:
- Gibt es eine Möglichkeit, das Keep-Alive für beide TCP-Sitzungen festzulegen?
- Oder gibt es eine Möglichkeit, die zugrunde liegenden Socket-Verbindungen abzurufen?
- Das standardmäßige Keep-Alive-Intervall scheint 2 Stunden zu betragen. Kann man das ändern? Dies wäre möglich, wenn ich auf die Socket-Verbindung zugreifen könnte, siehe Inkonsistente TCP-Keep-Alive-Frequenz.
In diesem Beispiel verwende ich das HiSLIP-Protokoll, aber ich habe ein ähnliches Verhalten mit dem VXI-11-Protokoll.
Ich habe es auch getestet mit Rohde & Schwarz VISA 5.12.8 (ähnliches Verhalten).
Mobile version