Код: Выделить всё
// 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();
- открывает два TCP-соединения (1: порт 61741 с портом 4880, 2: порт 61742 с 4880)
Код: Выделить всё
GlobalResourceManager.Open - устанавливает поддерживающий трафик только для первого TCP-соединения, а не для второго. Второй, похоже, используется для обработки событий.
Код: Выделить всё
((INativeVisaSession)vi).SetAttributeBoolean(NativeVisaAttribute.TcpKeepAlive, true)
После этого запрос IDN с использованием SRQ завершается с ошибкой. Запрос IDN все еще работает.
У меня есть следующие вопросы:
- Есть ли способ установить сохранение активности для обоих сеансов TCP?
- Или есть способ получить базовые соединения Socket?
- Интервал поддержания активности по умолчанию составляет 2 часа. Можно ли это изменить? Это было бы возможно, если бы я мог получить доступ к соединению Socket, см. Непостоянная частота поддержания активности TCP.
В этом примере я использую протокол HiSLIP, но у меня аналогичное поведение при использовании протокола VXI-11.
Я также тестировал это с Rohde & Schwarz VISA 5.12.8 (поведение аналогичное).
Подробнее здесь: https://stackoverflow.com/questions/797 ... or-all-con
Мобильная версия