А у изготовителя платы нет списка программ, с которыми она может работать? Или там говорят "ПОДДЕРЖИВАЕТСЯ ВСЁ"? Можно понадеяться на то, что windows увидит эту плату и запустить любой доступный виндовый opc-сервер. Иначе придется маяться с линуксовыми поделками.
А начать советую с "debian modbus uart-485".
Коллекция типов arrType сформирована заранее, можно набирать в цикле обхода данных.
Имена типов в этой коллекции ещё и дописывать надо с каким-то правилом на "Section" в начале, тут предварительная обработка нужна.
В целом, задачу на распределение данных по какому-то полю здесь многократно решали. И нынче модно делать через reduce().
Так уж получилось, что эта структура данных в моём варианте с map() требует применения функций с внешними данными помимо аргументов. Здесь получаются две переменных с массивами category и attr в одной области видимости, а потом attr становится внешней для обработчика внутри map() массива category.
Вместо заморочек с map() лучше сделать через простой цикл с индексами. Ведь видно, что даже в map() индекс понадобился. Без индексов можно через reduce() сделать, но там будет много почти бесполезной борьбы с изначальной структурой данных.
Готовый пример лень готовить.