среда, 21 мая 2014 г.

Импортирование тегов в 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 сервер. Для большей наглядности процедуры импорта мы подготовили видеопример. Его можно скачать по ссылке, или посмотреть Online:


Таким образом можно быстро формировать объемные конфигурации.

Шаблоны импорта

Как быть если существует готовый 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 файлов.

Комментариев нет:

Отправить комментарий

Поделиться