Проект мониторинга, 16 датчиков, частота дискретизации 50 Гц, принята база данных оракула с простой структурой: время записи + данные датчика.
Create Table real_data(
record_time timestamp(3),
ac_1 Float,
ac_2 Float,
ac_3 Float,
ac_4 Float,
ac_5 Float,
ac_6 Float,
ac_7 Float,
ac_8 Float,
ac_9 Float,
ac_10 Float,
ac_11 Float,
ac_12 Float,
ac_13 Float,
ac_14 Float,
ac_15 Float,
ac_16 Float
)
Tablespace data_test;
Я использую элемент управления livecharts wpf для чтения базы данных, отображая кривые в реальном времени.
Требования: 20 мс отображение данных, сдвиг кривой влево, отсутствие паузы при отображении.
Теперь два способа чтения базы данных:
Регулярное обновление
Timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(1000) };
Проблема в том, что интервал в 1 секунду, читаются последние 1 секунды данные в базе данных (около 50 данных), кривая имеет паузу (сдвиг влево каждую 1 секунду); передается на обновление 20 мс, считывает последние данные и вставляет после кривой, много раз считывая одни и те же данные, потому что время запроса к базе данных составляет 100 мс или около того (выберите верхнюю часть), что приводит к большому количеству прямых кривых, не соответствует реальная тенденция изменения.
- Использование потока, в частности, потока для чтения базы данных, выберите время начала, иногда бывают паузы, причины анализа: время чтения данных обычно составляет 20 мс, а иногда и 300 мс, поскольку в базу данных часто вставляются и удалить, в то время как память операционной системы также изменяется в режиме реального времени, повлияет на скорость чтения. И чем больше время, тем сильнее кривая задержки.
Является ли высокочастотный дисплей данных, через базу данных, чтобы прочитать путь не представляется возможным? Возможно только через API устройства прямого чтения?
Спасибо!