Пример demo_testsend


Конфигурация demo_testsend служит для тестирования работы и оценки эффективности функций devSend, devMsg, devPost, devSendMsg, devPostMsg, которые используются для посылки сообщений программ DAQ PASCAL друг другу.

В конфигурации присутствуют два DAQ-устройства &TEST_SEND1, &TEST_SEND2 с общим программным кодом demo_testsend.pas. При включении режима тестирования эти устройства начинают передавать друг другу сообщения одним из методов (devSend, devMsg, devPost). Они как бы начинают играть друг с другом в пинг-понг (ping-pong), без конца пересылая друг другу сообщения. С помощью Окна\Консоль Монитора Ресурсов, а также команды @CpuProfiler есть возможность наблюдать частоту опроса потоков, нагрузку процессора, частоту поступления сообщений и т.д.

При этой игре в пинг-понг возникает интересный эффект - резкое увеличение частоты опроса потоков в тестах 1,2,3,4,7,8. Это связано с тем, что при вызове функций devSend, devMsg, devSendMsg происходит синхронизация, т.е. досрочное "пробуждение" потока устройства-приемника, чтобы он мог приступить к обработке данных. Напротив, в тестах 5,6,9,10 при вызове асинхронного сообщения devPost, devPostMsg сообщения просто помещаются в очередь без "пробуждения" устройства-приемника, поэтому увеличения частоты опроса потоков не происходит.

Соответственно, функции devSend, devMsg, devSendMsg используются для того, чтобы уменьшить задержку между посылкой сообщения и его обработкой устройством-примником (ценой возможного увеличения частоты опроса потоков и нагрузки процессора). А функция devPost, devPostMsg используется для уменьшения частоты опроса потоков и нагрузки процессора (ценой возможного увеличения задержки между посылкой сообщения и его обработкой устройством-примником). Выбор функций определяется поставленной задачей.

Для начала тестирования нужно в консоли одного из устройств &TEST_SEND1, &TEST_SEND2 набрать команду

@Test n m     - где n - номер теста, m - число итераций в каждом кванте времени
с положительным целым номером теста n и числа итераций m.

Для завершения тестирования нужно в консоли одного из устройств &TEST_SEND1, &TEST_SEND2 набрать команду
@Test 0
с нулевым номером теста.

   Команды консоли &TEST_SEND1, &TEST_SEND2:
   @Test 0                   прекращение тестирования
   @Test 1 10                выполнять 10 итераций devSend(..) с пустой строкой
   @Test 2 10                выполнять 10 итераций devSend(..) с передачей данных
   @Test 3 10                выполнять 10 итераций devMsg(..)  с пустой строкой
   @Test 4 10                выполнять 10 итераций devMsg(..)  с передачей данных
   @Test 5 10                выполнять 10 итераций devPost(..) с пустой строкой
   @Test 6 10                выполнять 10 итераций devPost(..) с передачей данных
   @Test 7 10                выполнять 10 итераций devSendMsg(..)  с пустой строкой
   @Test 8 10                выполнять 10 итераций devSendMsg(..)  с передачей данных
   @Test 9 10                выполнять 10 итераций devPostMsg(..)  с пустой строкой
   @Test 10 10               выполнять 10 итераций devPostMsg(..)  с передачей данных
   @CpuProfiler start 1 1 7  включение профайлера для наблюдения счетчиков (для оценки эффективности)
   @CpuProfiler stop         отключение профайлера
  
Детали смотрите по тексту программы.