В третьей версии OPC сервера мы добавили функцию импорта тегов. В данной статье мы рассмотрим подробнее способы ее использования.
Импортирование тегов предназначено для быстрого создания конфигураций OPC сервера на основе CSV файлов. CSV файл – это простой, текстовый формат предназначенный для представления табличных файлов. Для формирования колонок используется специальный разделитель. Изначально в качестве разделителя использовалась запятая (аббревиатура CSV означает Comma-Separated Values — значения, разделённые запятыми), однако в настоящий момент чаще всего в качестве разделителя используют символ «;» - «точка с запятой». С CSV файлом может работать любой табличный редактор – Excel или Open Office Calc.
Чтобы произвести импорт CSV файла в OPC сервер необходимо чтобы файл был определенной структуры. По умолчанию требуется файл следующего формата:
Name;Address;DataType;Access;ByteOrder;Region;Comment
Статус;2;int16;ReadOnly;10325476;INPUT_REGISTERS;Статус измерения
значение;3;Float;ReadOnly;32105476;INPUT_REGISTERS;Измеренное значение
Статус;7;int16;ReadOnly;10325476;INPUT_REGISTERS;Статус измерения
значение;8;Float;ReadOnly;32105476;INPUT_REGISTERS;Измеренное значение
В табличном представлении данные записи будут выглядеть так:

Каким образом можно получить CSV файл? Для конфигурируемых приборов (измерителей, регуляторов, модулей ввода-вывода) производитель предоставляет таблицу Modbus адресов в том или ином виде. Это может быть готовый Excel файл, однако чаще всего регистры описываются в документации представленной в pdf формате, но даже в этом случае извлечь данные не составит труда.
Сначала PDF файл нужно преобразовать в Word-формат – это можно сделать при помощи различных утилит (в том числе online-конвертеров) или воспользоваться Microsoft Word 2013 – он способен открывать и редактировать PDF формат. Открыв PDF в Word необходимо скопировать таблицу Modbus адресов в буфер, а затем вставить в Excel – теперь в вашем распоряжении весь функционал табличного редактора.





Таким образом можно быстро формировать объемные конфигурации.
Шаблоны импортаКак быть если существует готовый CSV файл, но его формат не совсем соответствует требуемому формату для импорта? В этом случае на помощь придут шаблоны импорта.
Ранее мы использовали шаблон по умолчанию – у него все свойства тега получаются из полей CSV файла и никак дополнительно не обрабатываются. Есть возможность сделать собственный шаблон – который будет иметь нужные названия и количество полей, а также может обработать исходные данные по заданному алгоритму.
В качестве примера рассмотрим следующий CSV файл:

- Столбец с адресом регистра называется NumReg
- Адреса регистров представлены в шестнадцатеричном формате.
- Столбец DataType двухбайтовые числа обозначает как Word, который сервером не воспринимается (в сервере типу Word соответствует тип uint16).
- Тип доступа имеет обозначения R/O, R/W вместо необходимых ReadOnly и ReadWrite.
- Столбцы ByteOrder и Region отсутствуют. Чередование байт определяется типом данных, а Region – всегда Holing Registers.





function ConvertContent(Content) return false,Content end |
function ConvertContent(Content) local value=tonumber(Content,16); if value~=nil then return false,tostring(value); end; return true,Content; end |
Можно в этом же окне проверить работу скрипта. Для этого в панели есть специальная кнопка – Проверить работу скрипта.



function ConvertContent(Content) if Content=="Float" then return false,"float"; end; if Content=="Word" then return false,"uint16"; end; return true,Content; end |

function ConvertContent(Content) if Content=="Word" then return false,"10325476"; end; if Content=="Float" then return false,"32104567"; end; return true,Content ; end |

function ConvertContent(Content) if Content=="R/O" then return false,"ReadOnly"; end; if Content=="R/W" then return false,"ReadWrite"; end; if Content=="W/O" then return false,"WriteOnly"; end; return true,Content; end |



Таким образом, используя шаблоны импорта можно адаптировать мастер импорта под нужный тип CSV файлов.