Импортирование тегов в Modbus Universal MasterOPC сервере.

Импортирование тегов в Modbus Universal MasterOPC сервере.

Импорт тегов
В третьей версии 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 – теперь в вашем распоряжении весь функционал табличного редактора.
Используя штатный функционал Excel можно добавить новые столбцы и отредактировать имеющиеся. Например, в текущем файле адреса представлены в шестнадцатеричном виде, а при импорте в сервер адреса должны быть в десятичном. Преобразовать из одного формата в другой можно использую стандартную Excel команду – ДЕС().
Используя средства Excel можно заполнить остальные поля таблицы.
После того как CSV файл будет приведен к нужному формату, можно приступать к импорту CSV файла в OPC сервер. Для большей наглядности процедуры импорта мы подготовили видеопример.
Таким образом можно быстро формировать объемные конфигурации.
Шаблоны импортаКак быть если существует готовый CSV файл, но его формат не совсем соответствует требуемому формату для импорта? В этом случае на помощь придут шаблоны импорта.
Ранее мы использовали шаблон по умолчанию – у него все свойства тега получаются из полей CSV файла и никак дополнительно не обрабатываются. Есть возможность сделать собственный шаблон – который будет иметь нужные названия и количество полей, а также может обработать исходные данные по заданному алгоритму.
В качестве примера рассмотрим следующий CSV файл:
У данного CSV файла есть несколько отличий от шаблона:

  1. Столбец с адресом регистра называется NumReg
  2. Адреса регистров представлены в шестнадцатеричном формате.
  3. Столбец DataType двухбайтовые числа обозначает как Word, который сервером не воспринимается (в сервере типу Word соответствует тип uint16).
  4. Тип доступа имеет обозначения R/O, R/W вместо необходимых ReadOnly и ReadWrite.
  5. Столбцы ByteOrder и Region отсутствуют. Чередование байт определяется типом данных, а Region – всегда Holing Registers.
Рассмотрим, как сделать шаблон импорта для подобного файла. Запустим импорт файла, и нажмем на кнопку для создания нового шаблона.
Появилось окно настройки шаблона – можно дать ему комментарий.
Адаптируем наш шаблон под CSV файл. Начнем с Региона. У нас регион всегда Holding_Registers, поэтому можно просто задать его в виде константы – отключить настройку «Использовать поле CSV файла» и указать регион.
Адаптируем адреса регистра – включим получение адреса из поля CSV файла и изменим название столбца на NumReg. У нас поля представлены в шестнадцатеричном формате, для перевода в необходимый десятичный формат воспользуемся скриптом – включим настройку «Использовать скрипт для преобразования» и нажмем на кнопку «Редактирование скрипта преобразования».
Открылось стандартное окно редактора скрипта. В левой части окна находится непосредственное поля для ввода кода скрипта. В правой части окна находится два дерева: верхнее дерево содержит константы с корректным именем возвращаемого свойства (в данном случае это числа от 0 до 65535), нижнее дерево содержит функции языка Lua.
Исходный код функции имеет следующий вид:
function ConvertContent(Content)
      return false,Content
end
Content – это исходное значение, считанное из CSV файла, именно его нам и нужно обработать. После обработки, нужно выполнить команду return и вернуть два значения – флаг ошибки (false если ошибки нет) и обработанное значение. Для перевода числа воспользуемся стандартной Lua функцией tonumber. Первым аргументом в функцию необходимо передать преобразуемую строку, вторым – основание системы счисления (в нашем случае – 16). В итоге код будет выглядеть следующим образом:
function ConvertContent(Content)
local value=tonumber(Content,16);
if value~=nil then
       return false,tostring(value);
end;
return true,Content;
end 
Если значение будет преобразовано корректно, то будет возвращено отсутствие ошибки и преобразованное в десятичный формат значение, при этом значение нужно преобразовать в строку – функцией tostring. Если число преобразовать не удалось - функция tonumber вернула nil, то возвращается флаг ошибки и исходное значение.
Можно в этом же окне проверить работу скрипта. Для этого в панели есть специальная кнопка – Проверить работу скрипта.
Нажмем на нее, и откроем файл, который мы хотим импортировать. Если ошибок не возникнет, то появится окно с сообщением.
Если же ошибки будут обнаружены, то появится окно со списком некорректных ячеек.
Теперь разберемся с типом данных. Тип данных мы будем получать из поля CSV файла - DataType, но нужно преобразовать тип к нужному виду. Для этого напишем следующий код:
function ConvertContent(Content)
 if Content=="Float" then
       return false,"float";
 end;
 if Content=="Word" then
      return false,"uint16";
 end;
 return true,Content;
 end
Поочередно проверяем содержимое поля Content, и возвращаем нужный тип. Если доходим до конца и ни один из типов не совпал, то возвращаем ошибку. В нашем случае преобразование достаточно простое – всего 2 типа, но, разумеется их может быть и больше.
Теперь рассмотрим получение чередования байт. Мы будем определять чередование байт, по типу данных. Согласно стандарту Modbus переменные занимаемые 1 регистр (то есть тип Word) имеют чередование байт «Старшим байтом вперед» (10325476), а занимаемые 2 регистра (то есть float) имеют чередование байт «Старшим словом вперед» (01234567). Настроим данное свойство на получение значения поля DataType и включим скрипт. Код скрипта будет иметь следующий вид:
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 файла. Импортирование прошло успешно – никаких ошибок не выдалось.
Можно выбрать необходимые поля для импорта, и перейти на шаг для создания иерархии, либо если достаточно «плоской» конфигурации – нажать кнопку «Готово».
Теги добавятся в устройство.
Таким образом, используя шаблоны импорта можно адаптировать мастер импорта под нужный тип CSV файлов.