Элемент массива и его номер должны быть в одном теге иначе фокусов с синхронизацией не избежать. Ведь OPC может опрашивать теги в любом порядке, может группой, а может по одному, потом СКАДА с этого OPC данные тоже может получать по разному, может сама читать, а может по подписке получать при обновлении и тут порядок не гарантируется. А когда тег один то и проблем нет Хотя тут чувствуется желание извратится и сэкономить на лицензиях ).

В общем я бы использовал такой подход:
берем тег c размером 2,4 или 8 байт (желательно целочисленного типа, а то кто его знает что там с ним могут OPC сервер со скадой сделать).
затем в части битов храним номер элемента
1 бит используем как признак запроса
а остальные биты используем для данных.
например: есть массив из 127 элементов типа Byte и его нужно передавать.
Тогда объявляем один тег типа word. Первые 7 бит в нем номер элемента в массиве, 8 бит - признак запроса от скады, а оставшиеся 8 бит данные.
Тогда опрос со стороны скады будет выглядеть так - она в этот тег записывает номер нужного ей элемента и в восьмом бите выставляет 1 - признак запроса со стороны скады, а оставшиеся биты обнуляет.
И далее скада ждет когда в этом теге появится этот же номер элемента со сброшенным признаком опроса (т.е. в 8 бите будет 0). Ну и далее уже обрабатывает полученные данные. Тут только надо предусмотреть, что в этом теге может оказаться другой номер, например 0 т.к. контроллер мог перезапуститься или еще чего.

Контроллер же тоже анализирует регистр соответствующий этому тегу и ждет когда в нем появится признак опроса от скады и затем размещает в него нужные данные с их номером и сброшенным признаком опроса. Тут еще нужно предусмотреть что могут запрашивать данные которых нет (например у контроллера массив 64 байта а запрашивают 68 байт и т.п.).
Так же если массив не однобайтного типа а двух и более (например, word, float), то при передаче нужно как то вводить дополнительную защиту от модификации передаваемых данных или использовать теги с большим размером. Иначе может быть следующее, например, передаем по байтам 2 байтный тип типа word. Передали первый байт, собрались передавать второй и в этот момент этот элемент массива меняется. И скада, получив второй байт, получит какую то фигню в место нормального значения.

А вообще это геморой вот так передавать данные.