Задача собрать данные с частотой 100 мс
Как правило для сбора данных с устройств ввода-вывода подходит скорость сбора от 1 сек и более. Сохранение данных на сервер Historian рекомендуется по скорости изменения, см. Swinging door, Rate deadband Но, часто возникает задача скоростного сбора части данных, например, с дискретностью 100 мс.
Ниже описанный алгоритм тестировался в условиях:
- Application Server 2012 R2 (3.6) patch 1
- Historian 11 patch 1
- Обмен между ПЛК Siemens S7-300 и DI object SiDirect 3.0 (обмен по сети Ethernet 100 мбит/сек)
- Переменная хранилась в DB1.DBW2 частота изменения переменной +1 за 10 мс
- Для достижения частоты изменения 10 мс. использовалась OB38 с прерыванием 10мс
Для увеличение скорости сбора данных:
- Настройки объекта из шаблона $S7C_S7 (ПЛК S7 300 | 400):
- Все выбранные для высокоскоростного обмена переменные вынести в отдельный топик с частотой опроса 100 мс и типом ActiveOnDemand
- Остальные переменные для которых не требуется высокая скорость сбора определить в других топиках
- Настройки AppEngine
- Настройки атрибута объекта
- Минимально необходимые настройки выполнены, но кроме выше перечисленного рекомендуется:
- Для сохранения данных по скорости изменения
- Установить галочку Enable Swinging door и указать Rate deadband
- Для сохранения данных по скорости изменения
На практике идеальных 100 мс не добиться, частота немного отличается от 100 мс, примерно в диапазоне 40..120 мс
Вот получившийся пример частоты, см. абсолютное значение в мс:
- 087 мс
- 118 мс delta = 31 мс
- 165 мс delta = 47 мс
- 259 мс delta = 94 мс
- 383 мс delta = 124 мс
- 508 мс delta = 125 мс
- 571 мс delta = 63 мс
- 664 мс delta = 93 мс
- 773 мс delta = 109 мс
- 867 мс delta = 94 мс
- 961 мс delta = 94 мс
Проверять результаты удобно из Historian Client Query обязательно выставив retrieval mode «Full»