АБАК ПЛК
Руководство по настройке и программированию
×

Настройка протокола Profibus DP Master

 
Начало работы
Для работы с сервисом необходимо скачать с официального сайта сборку версии не ниже 5.6.0 по ссылке incomsystem.ru.
Лицензирование происходит путем подключения Profibus модуля к ПЛК. Без подключённого модуля Profibus ПЛК имеет ограниченный функционал, доступно только создание конфигураций. После установки сборки, на ПЛК появляется доступ к веб-серверу, который доступен как через Ethernet интерфейс, так и через USB.
Для подключения к конфигуратору, необходимо в браузере указать IP адрес интерфейса или адрес USB (192.168.7.2), а также номер порта 3413, например: 192.168.7.2:3413.
После перехода по ссылке, будет доступна страница «Логина и пароля». При текущей конфигурации:
Login/Логин: admin
Password/Пароль: xpwconfig
Необходимо ввести логин и пароль и войти в систему.
На данной странице также есть возможность настроить язык и внешний вид.
 
Страница «Логин и пароль»
 
Настройка системы: мультиязычность
Настройка системы: внешний вид
 
При входе открывается страница Ведущих (или Мастеров).
На данной странице будет происходить управление Ведущими устройствами.
Настройки, которые задаются конфигуратору на данном этапе, применяются только после перезагрузки сервиса. Исключением является включение/отключение мастера/ведомого устройства.
Общий вид системы: шапка конфигуратора статична и показывает имя окна, язык интерфейса, цвет темы, состояние работы системы и текущего пользователя. В рабочем режиме Profibus указывается нагрузка сервиса на центральный процессор под состоянием системы. Все окна конфигуратора позволяют расширять или уменьшать текст параметров и таблиц для визуально удобного управления. Кнопки расположены в правом углу таблиц.
Так же теперь доступно управление работой системы:
 
Старт работы
 
При запуске системы, с кнопки управления сервиса, можно запустить функции:
Reload – перезагрузка.  Основной процесс будет перезапущен, только для Ведомых, в которых были произведены настройки
Restart – остановка процесса, перезапуск всей работы системы, процесс начнется заново.
Stop – остановка процесса.
Сервис поддерживает настройку до 4-х ведущих, по количеству портов модуля. Порты между собой не связаны, допустимо создавать несколько Profibus сетей на один модуль, что позволяет использовать одинаковые адреса сети Profibus. Конфигуратор позволяет импортировать общую конфигурацию, конфигурацию мастеров и конфигурацию ведомого, для создания резервных копий или установки ее на соседние системы.
При внесение любых изменений в конфигурацию, необходима перезагрузка сервиса. Статус работы всех компонентов сервиса показан индикатором состояния:
– правильная работа, – проблемы в работе Ведомых (количество Ведомых с нарушенной работы/общее количество Ведомых).
При нажатии на значок – открывается меню, в котором есть быстрый переход на страницу Ведущие и выход из системы.
 
Выход из системы
Создание Ведущего устройства
Создание Ведущих производится через кнопку «Добавить ведущих».
Окно добавления ведущего делится на три блока. Первый блок «Общие настройки». Необходимо указать наименование мастера, Profibus адрес и указать порт файла соединения.
Допускается наименование любого формата, предпочтительно на английском языке. Адрес является номером ведущего устройства в сети Profibus, по правилам стандарта он должен быть меньше адреса ведомого устройства, рекомендовано использовать адрес 2 для ведущего устройства сети. Поле файл соединения представляет из себя настройку выбора порта (Порт 1 – Порт 4), по которому будет осуществляться обмен данными.
 
Окно «Добавить ведущего»
 
Настройки соединения используются для задания параметров связи ведущего устройства и соответственно самой сети. Главным параметром является Baud Rate, он отражает скорость работы сети. Сеть может работать от 9,6 кбит/с до 12 Мбит/c при использовании стандартов сети Profibus. В базовом режиме работы, дополнительные настройки указывать не нужно. В случае особенности сети, появления потерь пакетов и нестабильности соединения необходимо редактировать настройки вручную. Если поля дополнительных настроек пустые – необходимо использовать автонастройку. В случае задания собственного значения, оно будет использоваться для этих полей.
Параметры дополнительных настроек делятся на два типа: рабочие и начальные. Начальные настройки используются для установления связи, параметрирования и конфигурирования устройства. Рабочие настройки используются для дальнейшего обмена данными. Под каждым полем присутствует надпись «Рассчитанное значение». Это поле показывает значение, используемое в текущей конфигурации.
В список расширенных настроек входит:
1.     tBit – Скорость передачи одного бита, мкс;
2.     tSyn – Время синхронизации, tbit;
3.     minTsdr – Минимальное время для начала передачи данных, tbit;
4.     maxTsdr – Максимальное время для начала передачи данных, tbit;
5.     tTd – Техническая задержка ведомого перед началом передачи данных, мкс;
6.     tMtd – Техническая задержка ведущего перед началом передачи данных, мкс;
7.     tQui – Время простоя, tbit;
8.     tSet – Время настройки, tbit;
9.     tSm – Запас времени, tbit;
10.     tSl – Время ответа, tbit;
11.     Коэффициент отклонения – изменение всех настроек пропорционально;
12.     Частота проверки – количество запросов к буферу ответов;
13.     Тип соединения – место трансляции запросов мастера;
Уровень логов – объём информации, который записывается в контроллер.
 
Расширенные настройки ведущего
Важно! Если в окне мониторинга наблюдается потеря пакетов, это может означать, что устройство перегружено или его производительности недостаточно для обработки запросов в заданном интервале. Для решения проблемы вручную увеличьте значение параметра maxTsdr. Другие настройки изменять не требуется.
 
После сохранения Ведущего, можно вернуться на страницу «Ведущие». Здесь можно отследить состояние Ведущего, перейти в настройки, узнать статус устройства. По умолчанию после сохранения Ведущего, состояние устройства будет неактивно, для возможности завершения настроек мастера. При изменении настроек ведущих и ведомых устройств необходимо перезагружать сервис. После перезагрузки новые настройки применятся автоматически. В конфигурации подобраны оптимальные настройки обмена и нагрузки на ПЛК. В случае если нужно увеличить скорость отклика необходимо изменять настройки: tSyn, tBit, частота проверки. Ориентиром выступает рассчитанное значение. При увеличении скорости отклика их необходимо уменьшать, при уменьшении нагрузки на ПЛК увеличивать.
Также в сервисе присутствуют функциональные кнопки для быстрого перехода:
1) – окно настроек ведущего устройства;
2) – структура ведущего устройства;
3) – удаление;
4) – окно «модули»;
5) – окно «параметры»;
6) – окно «конфигурация»;
7) – окно «мониторинг».
Создание Ведомого устройства
После создания Ведущего устройства необходимо создать Ведомое устройство (или слейв).
Все ведомые устройства имеют одинаковую структуру и состоят из 5-х элементов:
1) Настройки – Окно создания ведомого устройства с указанием имени, watchdog, и GSD-карты устройства;
2) Конфигурация – Окно создания файлов памяти для приема/отправки/статуса работы, а также для добавления стандартного сообщения;
3) Параметры – Окно добавления свойств устройства для его параметрирования в процессе работы;
4) Модули – Окно добавления модулей для Profibus устройств, которые имеют модульную структуру в GSD-файле;
Мониторинг – Окно для отслеживания работы ведомого устройства.
 
Структура Ведомого устройства
 
Для перехода к конфигурированию ведомых устройств, необходимо нажать на кнопку «Настройки» и выбрать «Ведомые». Или можно в окне «Ведущие» перейти по кнопке быстрого перехода «Структуре ведущего устройства».
 
Создание Ведомого
Далее необходимо перейти в окно «Добавить Ведомого». Необходимо указать наименование (наименование необходимо создавать на английском языке, так как имя формирует доступ из Abak.IDE к сервису Profibus), адрес и выбрать GSD-файл. Для поля «Адрес» необходимо указать уникальный адрес в сети Profibus, который выставляется на устройствах либо джамперами, либо программным способом. Добавление GSD-файла подразумевает, что предварительно, с сайта производителя ведомого устройства, был скачен архив с GSD-файлами. Необходимо проверять не только серийный номер ведомого устройства, но и версию прошивки при поиске GSD-файлов. В модульных ведомых устройствах может не хватать информации о том или ином модуле, в этом случае необходимо найти устройство, которое поддерживает модуль, скопировать параметрирование модуля из его GSD и перенести вручную в GSD-файл. Файл добавляется с помощью поля «GSD File» и загружается на ПЛК. При создании ведомого устройства, есть возможность добавить аддоны (дополнения). Аддоны нужны, когда в GSD-файле нет полей конфигурирования DPV1. Желательно всегда использовать аддон DPV1, даже если в GSD-файле ведомого устройства они есть.
Расширенные настройки включают в себя настройки максимального времени ожидания сообщения, максимальное количество ошибок, после которого устройство перейдет обратно в состояние инициализации, а также максимальное количество интеграций обмена, после которых устройство перейдет в состояние диагностики. Данные настройки рекомендуется оставлять по умолчанию. Также в дополнительных настройках присутствует автоматическое создание источников сообщений, которое отвечает за передачу сообщений в среду Abak.IDE.
После настройки Ведомого необходимо сохранить изменения и вернуться в окно «Ведомые», дополнительная настройка Ведомого будет доступны только после сохранение.
 
Окно «Добавить ведомого»
Ведомый так же будет неактивен по умолчанию и до завершения настроек рекомендуется не запускать процесс. В строке каждого ведомого можно отслеживать состояние и редактировать.
Также в сервисе присутствуют функциональные кнопки для быстрого перехода:
1) – окно настроек ведомого устройства;
2) – окно «модули»;
3) – окно «параметры»;
4) – окно «конфигурация»;
5) – окно «мониторинг»;
6) – экспорт;
7) – удаление.
После создания Ведомого устройства, его необходимо запараметрировать для корректной инициализации устройства. Параметрируется ведомое устройство с помощью двух окон.
Окно «Модули» – Если ведомое устройство подразумевает модульную систему работу, то в GSD-файле присутствует конфигурация модулей.
Поле «Двигать» необходимо для выставления правильно порядка модулей в соответствии с физическим расположением. Поле «Идентификатор» является именем модуля, параметры которого в дальнейшем будут использовать. Идентификатор должен быть указан на английском языке. Поле «Модуль» представляет собой список модулей, которые были импортированы из GSD файла и готовы к использованию. Поле «Активен» отвечает за включение или отключение модуля из опроса. Модуль можно удалить. При добавлении или изменении параметров необходимо сохранять и перезагружать сервис.
 
Окно «Модули»
Необходимо указать модуль и системный модуль, выбрать параметр и значение, но только доступное с данным параметром (указаны под строкой ввода значения). После выбора всех параметров, необходимо сохранить изменения.
Окно «Параметры» – Необходимо для задания параметров самого устройства и его конфигурации(модулей).
Для указаний параметров модулей, в поле «Модуль» указывается идентификатор модуля, созданного в первом пункте. В случае если устройство не является модульным, тогда вкладку «Модуль» необходимо оставить пустой. При конфигурации параметров, можно создавать их в произвольном порядке, так как в GSD-файле они имеют определенный адрес. Поле «Параметр» позволяет добавлять параметры из GSD-файла, как модулей, так и самого устройства. Поле «Значение используется для изменения значения по умолчанию, указанного в GSD. В случае если не будет указаны параметры, конфигурирование будет происходить по настройкам, указанных производителем ведомого устройства. Параметр «Системный» нужен для предустановки базовых типов, при настройки не используется. Поле «Двигать» позволяет сгруппировать параметры в логическом виде. При добавлении или изменении параметров необходимо сохранять и перезагружать сервис.
 
Окно «Параметры»
 
После настройки параметров, можно переходить к запуску Profibus. Сервис поддерживает три типа запуска: запуск сервиса, запуск ведущего, запуск ведомого. Для работы необходимо перевести все положения запуска в состояние «включен». Для отслеживания работы сервиса используется вкладка «мониторинг», которая позволяет посмотреть состояние устройства, количество плохих пакетов данных, посмотреть ответ от ведомого устройства, отправить запрос ведомому устройству, а также посмотреть ошибки диагностики.
Состояние связи описывает текущий режим работы ведущего устройства.
Существует четыре состояния: Инициализация (Init), параметрирование (Parameterization), конфигурирование (Configuration) и обмен данных (Data exchange). Ведущее и ведомое устройство общается по средством передачи байтов. Чтобы расшифровать ответ необходимо обратиться к документации производителя ведомого устройства. Как правило для каждого устройства расписано, сколько байт оно может принимать и отдавать, а также их функциональное значение. В случае модульной структуры устройства, необходимо искать эту информацию в документации на модуль. Запрос и ответ можно показывать в двух видах: hex и bit. Для отправки сообщения необходимо нажать на кнопку «Отправить» и сообщение будет транслироваться постоянно для ведомого устройства. Для того, чтобы вернуть стандартное сообщение из GSD, необходимо нажать на кнопку «Очистить память». Формирование ошибок диагностики имеет типовой вид. Столбец «Тип» указывает на стандартный тип параметр из GSD. Столбец «Модуль» указывает ошибку либо модуля, либо базового устройства. Столбцы «Канал», «Ед. изм.», «Номер» показывает номер канала, единицы измерения и номер канала если в контексте данной ошибки – это уместно. Столбец «Сообщение» описывает тип проблемы.
 
Окно «Мониторинг»
 
При неактивном статусе устройства информация будет недоступна. Необходимо включить Ведомые и затем Ведущие, в окне быстрого доступа каждого. Затем запустить Reload.
Настройка обмена в среде Abak.IDE
После настройки и мониторинга ведомого устройства необходимо приступить к настройке обмена в среде Abak.IDE. Необходимо учитывать, используется ли резервирование. При использовании резервирования запись в блоки Profibus должна происходить с помощью глобальных переменных. Для исключения перебоев в управлении при переключении роли ПЛК с активного/пассивного, рекомендуется установить значение для записи не менее 300 мс. В данном случае глобальные переменные успешно синхронизируются. В случае, когда установлено значение меньше 300, возможен пропуск итерации одного цикла управления.
В случае необходимости смены ролей ПЛК, например, при неисправности модулей K3.IM.12.04.00, следует инициировать данный алгоритм, используя теги состояния в конфигураторе модуля Profibus и сервиса, а также с помощью готового блока в библиотеке AbakPLCProfibus в среде разработки. В случае использования одиночного управления можно использовать любой цикл задачи.
Чтобы настроить обмен необходимо перейти на вкладку «Конфигурация». Вкладка состоит их 2 объектов:
  • Сообщения по умолчанию – это сообщение, которое будет записывать при запуске ведущего устройства. Данная конфигурация указывается, когда необходимо задать пользовательские настройки отличные от указанных в GSD. Сообщения можно создавать как для самих устройств, так и для модулей (в случае модульного ведомого).
     
    Окно «Конфигурация». Сообщения по умолчанию
  • Взаимодействие между процессами – это источники данных, которыми обмениваются между собой сервис Profibus и Abak.IDE. Для каждого ведомого устройства создаются свои источники сообщений и делятся на три типа: входящее сообщение, исходящее сообщение и статус работы. Все три источника подключаются в среду разработки Abak.IDE и позволяются управлять процессами сервиса. Буфер ошибок формирует длину максимальную длину ошибок, которые отражаются в Abak.IDE. Настройки данного окна изменять не рекомендуется.
 
Окно «Конфигурация». Взаимодействие между процессами
 
Использование полученных данных в Abak.IDE
Способ получения данных в Abak.IDE зависит от версии используемого сборочного программного обеспечения:
Способ 1. Для сборочного ПО версий 5.6.x и 5.7.x необходимо использовать библиотеку AbakPLCProfibus. Она обеспечивает классический метод получения данных путем написания соответствующих функций.
Способ 2. Для сборочного ПО версии 5.8.x и выше следует использовать библиотеку libProfibusShm, которая входит в состав target 1.0.6.0 и выше. Эта библиотека является встроенным компонентом среды исполнения и предоставляет более простой механизм управления данными.
Способ 1
За работу источников информации в среде разработки Abak.IDE отвечает библиотека AbakPLCProfibus. Для работы этих блоков необходимо объявить параметры запуска блоков. Для объявления параметров используется структура ProfibusParams. Структура состоит из следующих параметров:
  • Параметр «Name_SHM» – отвечает за имя Profibus устройства. Имя должно быть точно таким же, как было создано в конфигураторе.
  • Параметр «Write_data_size» – позволяет задать режим работы с данными. В случае, если ведомое устройство только принимает данные, ставится режим «Write», если только чтение – «Read». При одновременном чтении и записи – «ReadWrite».
  • Параметр «Write_data_mode» – позволяет управлять размером, записываемым данных ведомому устройству. Для указания корректного размера необходимо обраться к документации ведомого устройства.
  • Параметр «Timeout_error» – позволяет задавать время, в течении которого будет формироваться ошибка, если значения с ведомого устройства не приходят.
  • Параметр «Max_fault» – данный параметр задает максимальное количество ошибок, который может приходить от сервиса, значение должно совпадать с числом буфера ошибок в окне «Конфигурация».
  • Параметр «Write_every_cycle» – параметр дает возможность включить или отключить запись в циклическом режиме
  • Параметр «Status_read_period» – параметр позволяет задать время опроса источника статуса.
После объявления структуры параметров, необходимо прописать данную структуру в функциональный блок Profibus, путем вызова fb_DP. Для примера, который показывает объявление структуры и инициализации блока указан следующий код:
simocode.params_profibus.mode               := abakplcprofibus.enMode.Read;
simocode.params_profibus.name_SHM           := 'simocode';
simocode.params_profibus.write_data_size    :=50;
simocode.params_profibus.timeout_for_error  := T#3S;
simocode.params_profibus.max_faults         := 10;
simocode.params_profibus.write_every_cycle  := FALSE;
simocode.params_profibus.status_read_period := 500;
simocode.fb_DP (params_struct := simocode.params_profibus);
Как только структура была вызвана, необходимо вызвать блоки работы с источниками информации. Библиотека включает в себя работу с источниками информации и обработкой байтовых сообщений. Для управления источниками предусмотрено 3 алгоблока:
1)     Блок «ReadInputData» - отвечает за чтение данных из источника информации. Для корректной работы блока необходимо передавать в него параметры из списка:
A.     Параметр «p_arr_rdData» - является указателем на байтовый массив входных данных, куда необходимо записать данные, полученные от источника информации;
B.     Параметр «enSwap» - нужен для разворота байтов в байтовом массиве. Нужен для корректного преобразования байтов в аналоговый параметр;
C.     Параметр «reset_profibus» - команда сброса. Необходим для возобновления обмена, если произойдет сбой работы блока в следствии ошибки;
D.     Параметр «timeout_error_rd» - Ошибка времени опроса, возникающая в случае, если ожидание данных превысило параметр «timeout_for_error»;
E.     Параметр «cnt_rd» - показывает счетчик телеграм, который при штатной работе должен всегда обновляться;
F.     Параметр «data_bytes» - определяет размер принимаемых байтов. Размер должен составлять не более 244 байт
Пример кода, который показывает, как вызывать и объявлять параметры метод отвечающий за чтение данных указан ниже:
simocode.res_rd             := simocode.fb_DP.ReadInputData
(
     p_arr_rdData           := ADR(simocode.rd_arr),
     enSwap                 := swap,
     reset_profibus         := simocode.reset_profibus,
     timeout_error_rd       => simocode.err_rd,
     cnt_rd                 => simocode.rd_cnt,
     data_bytes             => simocode.read_data,
);
2)     Блок «ReadStatusData» - отвечает за чтение статуса из источника информации. Для правильной работы блока необходимо передавать в него параметры из списка:
A.     Параметр «p_arr_stData» - является указателем на байтовый массив диагностических данных, куда необходимо записать данные, полученные от источника информации;
B.     Параметр «p_arr_stFaults» - является указателем на байтовый массив аварийных сообщений, куда необходимо записать данные, полученные от источника информации;
C.     Параметр «reset_profibus» - команда сброса. Необходим для возобновления обмена, если произойдет сбой работы блока в следствии ошибки;
D.     Параметр «outDiag» - преобразованные диагностические данные в виде структуры.
E.     Параметр «timeout_error_st» - ошибка времени опроса, возникающая в случае, если ожидание данных превысило параметр «timeout_for_error»;
F.     Параметр «cnt_st» - показывает счетчик телеграм, который при штатной работе должен всегда обновляться;
G.     Параметр «status_bytes» - определяет размер принимаемых байтов статуса. Размер должен составлять не более 244 байт.
Пример кода, который показывает, как вызывать и объявлять параметры метод отвечающий за чтение статусов указан ниже:
simocode.res_st               := simocode.fb_DP.ReadStatusData
(
     p_arr_stData             := ADR(simocode.st_arr),
     p_arr_stFaults           := ADR(simocode.fault_arr),
     reset_profibus           := simocode.reset_profibus,
     timeout_error_st         => simocode.err_st,
     cnt_st                   => simocode.st_cnt,
     outDiag                  => simocode.outDiag,
     status_bytes             => simocode.rd_status
);
3)     Блок «WriteOutputData» - отвечает за запись данных в источник информации. Для правильной работы блока необходимо передавать в него параметры из списка:
A.     Параметр «p_arr_wrData» - является указателем на байтовый массив выходных данных, откуда необходимо считать данные и записать в источник информации;
B.     Параметр «enSwap» - нужен для разворота байтов в байтовом массиве. Нужен для корректного преобразования байтов в аналоговый параметр;
C.     Параметр «reset_profibus» - команда сброса. Необходим для возобновления обмена, если произойдет сбой работы блока в следствии ошибки;
D.     Параметр «timeout_error_wr» - Ошибка времени опроса, возникающая в случае, если ожидание данных превысило параметр «timeout_for_error»;
E.     Параметр «cnt_wr» - показывает счетчик телеграм, который при штатной работе должен всегда обновляться;
F.     Параметр «data_bytes» - определяет размер отправляемых байтов. Размер должен составлять не более 244 байт
Пример кода, который показывает, как вызывать и объявлять параметры метод отвечающий за запись данных указан ниже:
et200_1.res_wr := et200_1.fb_DP.WriteOutputData
(
     p_arr_wrData          := ADR(et200_1.wr_arr),
     enSwap                := swap,
     reset_profibus        := et200_1.reset_profibus,
     timeout_error_wr      => et200_1.err_wr,
     cnt_wr                => et200_1.wr_cnt,
     data_bytes            => et200_1.write_data
);
Стандартный код в Abak.IDE для работы с Profibus:
PROGRAM ProfibusPRG
VAR
     first_loop     : BOOL := TRUE;
     et200          : AbakPLCProfibus.pb_struct;
END_VAR
IF first_loop THEN
first_loop                                :=FALSE;
et200.params_profibus.mode                :=abakplcprofibus.enMode. ReadWrite;    
et200.params_profibus.name_SHM            := 'et200'
et200.params_profibus.write_data_size     := 4;
et200.params_profibus.timeout_for_error   := T#3S;    
et200.params_profibus.max_faults          := 10;
et200.params_profibus.write_every_cycle   := FALSE;
et200.params_profibus.status_read_period  := 500;
et200.fb_DP (params_struct                := et200_1.params_profibus);
END_IF
 
et200.res_rd := et200.fb_DP.ReadInputData
(
p_arr_rdData             := ADR(et200.rd_arr),
enSwap                   := swap,
reset_profibus           := et200.reset_profibus,
timeout_error_rd         => et200.err_rd,
cnt_rd                   => et200.rd_cnt,
data_bytes               => et200.read_data
);         
et200.res_st := et200.fb_DP.ReadStatusData
(
p_arr_stData             := ADR(et200.st_arr),
p_arr_stFaults           := ADR(et200.fault_arr),
reset_profibus           := et200.reset_profibus,
timeout_error_st         => et200.err_st,
cnt_st                   => et200.st_cnt,
outDiag                  => et200.outDiag,
status_bytes             => et200.rd_status
);
et200.res_wr := et200.fb_DP.WriteOutputData
(
p_arr_wrData             := ADR(et200.wr_arr),
enSwap                   := swap,
reset_profibus           := et200.reset_profibus,
timeout_error_wr         => et200.err_wr,
cnt_wr                   => et200.wr_cnt,
data_bytes               => et200.write_data
);
END_IF
После настройки методов связи, библиотека сформирует переменные, с которыми можно работать в среде Abak.IDE. Диагностические переменные имеют различные статусы при работе Profibus сервиса. Для этого созданы две структуры, которые отвечают за общее состояние и за формирование ошибок. Сформированная, при работе блока, структура «ProfibusFaultMsg» будет иметь следующие поля для диагностирования работы сервиса:
1.     Параметр «error_type» отражает тип ошибки и имеет несколько состояний:
A.     0 – ошибки нет
B.     1 – общая ошибка (device based);
C.     2 – общая ошибка в hard модуле (из xml);
D.     3 – ошибка в input hard модуля;
E.     4 – ошибка в output hard модуля;
F.     5 – ошибка в input/output hard модуля;
G.     6 – общая ошибка в logic модуле;
H.     7 – ошибка в input logic модуля;
I.     8 – ошибка в output logic модуля;
J.     9 – ошибка в input/output logic модуля.
2.     Параметр «moduleNum» является указателем на ошибочный модуль, если ведомое устройство имеет модульную структуру, либо на базовый модуль. Значение 0 говорит о неизвестном состоянии модуля, значения от 1 до 255 указывают на номер модуля из конфигурации, если тип ошибки модульный.
3.     Параметр «ChanelMultiplyer» является типом данных канала модуля и делится на несколько типов:
A.     0 – Канал неизвестен;
B.     1 – битовый тип данных(bit);
C.     2 – двойной битовый тип данных(2bit);
D.     4 - четырёхбитовый тип данных(4bit);
E.     8 – байтовый тип данных(byte);
F.     16- тип данных word;
G.     32 – тип данных dword.
4.     Параметр «numInOut» является номером входа или выхода, где произошла ошибка и рассчитывается по следующей формуле: (numInOut – 1) * ChanelMultiplyer. Расчёт по этой формуле позволит точно узнать номер бита, где произошла ошибка.
Для отслеживания за общим режимом работы необходимо использовать структуру «ProfibusMsg», которая следит за общим процессов обмена информацией с ведомым устройством. В структуру «ProfibusDiag» входят следующие параметры:
1.     Параметр «count». Является счетчиком сердцебиения и указывает на то, что идет обмен информацией. В случае если счетчик остановится, это говорит о потере связи с сервисом. Диапазон формирования значений от 0 до 255.
2.     Параметр «SlaveStat». Сообщает о стадии состояния обмена ведущего и ведомого устройства.
Состояния бывают:
A.     0 – Инициализация связи
B.     1 – Диагностирование подключения
C.     2 – Параметрирование ведомого устройства
D.     3 – Конфигурирование ведомого устройства
E.     4 – Обмен данными с ведомым устройством
3.     Параметр «NumCommunicate». Данный параметр говорит о количестве сообщений, которые содержали в себе правильные данные за последние 100 сообщений. Значение в диапазоне от 98 до 99 считается нормой, так как в обмене 100 сообщений присутствуют одно или два сообщения диагностики и не относятся к получению данных. В случае, если значение 80 и менее наблюдаются проблемы связи с устройством.
4.     Параметр «NumFault». Количество битых пакетов за последние 100 сообщений.
Описанные выше блоки и структуры позволяют выстроить правильный обмен информацией с ведомым устройством, а также диагностировать состояние обмена между устройствами. Для более подробной информации по работе блока можно обраться к документации, которая содержится в AbakPLCUtils. Также при установки данной библиотеки будет доступен типовой проект, в котором будет доступен типовой лист подключения ведомых устройств.
Для удобства работы с байтовыми массивами были добавлены функции преобразования байтовых данных в физические единицы и обратно. Для этого реализованы две функции, которые являются противоположность друг друга и называются «scaling_from_electr» и «scaling_to_electr».
Функции позволяют произвести конвертацию электрического, температурного и ТСП значения в байтовый массив и обратно. Для работы с этим блоком созданы два параметра:
A.     Параметр «p_input_value» – указатель на входную переменную, которая будет конвертирована в байтовый массив или обратно
B.     Параметр «type_of_scale» - вход выбора типа значения. Варианты выбора параметров:
  • Значение «curr_4_20Ma» преобразует напряжение 4..20мА в массив байтов;
  • Значение «full_5v» преобразует напряжение -5В..+5В в массив байтов;
  • Значение «full_10v» преобразует напряжение -10В..+10В в массив байтов;
  • Значение «part_0_10v» преобразует напряжение 0В..+10В в массив байтов;
  • Значение «temp_PT100» преобразует значение PT100 в массив байтов;
  • Значение «temp_J» преобразует значение в градуировке J в массив байтов;
  • Значение «temp_E» преобразует значение в градуировке E в массив байтов;
  • Значение «temp_K» преобразует значение в градуировке K в массив байтов;
  • Значение «temp_L» преобразует значение в градуировке L в массив байтов.
 
По итогу работы функции, на выход поступит байтовый массив либо физическое значение. Также для предусмотрена структура, которая позволяет отслеживать результат работы. Структура «scale_to_electr» имеет следующие поля:
  • Параметр «input_val» показывает входное значение в формате Real;
  • Параметр «output_val» показывает выходное значение в формате Int;
  • Параметр «val_at_range» показывает флаг нахождения входного сигнала в номинальном диапазоне, в соответствие с выбранным типом сигнала;
Параметр «stWord» показывает состояние значения канала, где 0 бит – значение в номинальном диапазоне, 1 бит – выход за верхнюю границу, 2 бит -выход за верхнюю неконтролируемую границу, 3 бит – выход за нижнюю границу, 4 бит – выход за нижнюю неконтролируемую границу.
Способ 2
Получение данных с помощью библиотеки libProfibusShm предоставляет готовый набор методов для работы с данными устройства. Методы не требуют дополнительного объявления или подключения. Расшифровка сообщений и преобразование их в физические величины (и обратно) выполняется тем же способом, что и при использовании библиотеки AbakPLCProfibus.
Библиотека содержит 5 методов для работы с данными:
  • CreateDevice – отвечает за регистрацию устройства в проекте.
На вход принимается одно значение:
device_name – STRING(255) – имя устройства в веб-конфигураторе Profibus. Имя должно быть указано в нижнем регистре, даже если в веб-интерфейсе оно содержит заглавные буквы (например, для устройства ET200 в проекте необходимо указать 'et200').
Пример вызова:
iecst
ProfibusSHM.CreateDevice('et200');
2. ReadInputData – отвечает за чтение входных данных с зарегистрированного устройства.
Входные параметры:
device_name – STRING(255) – имя устройства в веб-конфигураторе Profibus. Имя должно быть указано в нижнем регистре, даже если в веб-интерфейсе оно содержит заглавные буквы (например, для устройства ET200 в проекте необходимо указать 'et200').
Выходные параметры:
read_data – ARRAY [0..243] OF BYTE – массив прочитанных данных.
bytes_read – INT – количество фактически прочитанных байт.
Пример вызова:
iecst
ProfibusSHM.ReadInputData('et200', read_data => read_et200, bytes_read => len_read_et200);
3. ReadStatusData – отвечает за чтение диагностических данных с зарегистрированного устройства.
Входные параметры:
device_name – STRING(255) – имя устройства в веб-конфигураторе Profibus. Имя должно быть указано в нижнем регистре, даже если в веб-интерфейсе оно содержит заглавные буквы (например, для устройства ET200 в проекте необходимо указать 'et200').
Выходные параметры:
read_data – ProfibusDiag – структура диагностических данных ведомого устройства (состояние, счетчики, ошибки).
Пример вызова:
iecst
ProfibusSHM.ReadStatusData('et200', diagnostic_data => diag_et200);
4. WriteOutputData – отвечает за запись выходных данных. Запись выполняется принудительно при каждом вызове метода.
Входные параметры:
device_name – STRING(255) – имя устройства в веб-конфигураторе Profibus. Имя должно быть указано в нижнем регистре, даже если в веб-интерфейсе оно содержит заглавные буквы (например, для устройства ET200 в проекте необходимо указать 'et200').
write_data – ARRAY [0..243] OF BYTE – данные для записи (исходящий процессный канал).
bytes_count – BYTE – количество байт для записи (максимум 244).
5. WriteOutputDataIfChanged – отвечает за запись выходных данных. Запись выполняется только в случае изменения данных по сравнению с предыдущим вызовом.
Входные параметры:
device_name – STRING(255) – имя устройства в веб-конфигураторе Profibus. Имя должно быть указано в нижнем регистре, даже если в веб-интерфейсе оно содержит заглавные буквы (например, для устройства ET200 в проекте необходимо указать 'et200').
write_data – ARRAY [0..243] OF BYTE – данные для записи (исходящий процессный канал).
bytes_count – BYTE – количество байт для записи (максимум 244).
 
Полный пример работы с устройством ET200:
iecst
ProfibusSHM.CreateDevice('et200');
ProfibusSHM.ReadInputData('et200', read_data => read_et200, bytes_read => len_read_et200);
ProfibusSHM.WriteOutputDataIfChanged('et200', write_et200, 0);
ProfibusSHM.ReadStatusData('et200', diagnostic_data => diag_et200);
Пример настройки PROFIBUS на примере SIMOCODE PRO C
Simocode Pro C является самостоятельным устройством для управления реле перезагрузки, прямым и реверсным стартером, автоматическим выключателем. Он имеет два типа работы:
1)     Конфигурирование и параметрирование с помощью TIA portal. В этом режиме все действия выполняются в TIA portal, а по Profibus можно получить сконфигурированные данные.
2)     Конфигурирование и параметрирование с помощью Profibus. В этом режиме все действия выполняются с конфигуратором Profibus, и он имеет такие же параметры для настройки.
Для начала работы с Simocode Pro C в обоих вариантах необходимо иметь USB кабель (3UF7941-0AA00-0) и среду разработки TIA portal с библиотеки для Simocode. Для начала необходимо создать базовый проект для Simocode и перейти на вкладку параметры.
 
Окно параметров
 
На этом окне представлены два главных параметра (Station address, startup parameter block). Station address – это адрес в сети Profibus. Необходимо назначить свободный адрес, который больше адреса мастера (если у мастера адрес 3, то минимальный 4). Startup parameter block – это блокировка параметрирования с помощью Profibus.
Настройка в режиме заблокированного параметрирования
В случае активации параметра Startup parameter block – вся настройка Simocode Pro C происходит в TIA portal. Для настройки получаемых значений в Profibus сервисе необходимо настроить Outputs -> cyclic send data. Ответ Simocode состоит из 4-х байт: 1-ый и 2-ой байты – это битовые состояния, 3-ий и 4-ый – это значение аналогового параметра. Нужные параметры повязываются на определенные места, после чего в Abak.IDE расшифровываются в таком же порядке.
Настройка выходных значений
Далее необходимо создать в конфигураторе slave устройство и загрузить в него GSE-файл.
 
Настройка ведомого устройства
В режиме Startup parameter block больше не нужно настраивать никакие значения. Можно перейти на вкладку мониторинг и увидеть полученные значения. В поле «Последнее сообщение ведомого» приходят значение настроенных параметров на вкладке «cyclic data send» в TIA portal.
 
Окно мониторинга
Настройка в режиме разблокированного параметрирования
В случае деактивации параметра Startup parameter block настраивать Simocode необходимо через вкладку «Параметры» в Profibus сервисе. Настройки, заданные через TIA portal, при первом подключение изменятся на стандартные (из GSE-файла) либо на заданные самим пользователем.
 
Окно параметров
 
Конфигурирование настроек происходит при первом подключении. Модуль записывает их в постоянную память, поэтому заданные настройки будут работать даже при отключении от устройства. Также можно задать необходимые параметры в GSE-файл, и они автоматически применятся для параметров, которые не вызваны в конфигураторе. Они находятся в ExtUserPrmData и имеют два типа: unsigned8 и bit. Каждый формат имеет свой блок.
 
Блок параметра
 
 Например, строка Unsigned8 5 5-5 имеет формат «(Тип данных) (значение по умолчанию) (диапазон значения)». После конфигурирования можно переходить на вкладку «мониторинг» и смотреть значения.
Пример настройки PROFIBUS на примере SIEMENS ET200 (IM153-2)
Для работы с ET200 необходимо создать ведомое устройство.
 
Окно создания ведомого устройства
 
В него необходимо загрузить подходящую GSE. Бывают случаи, что в GSE-файле нет нужного файла. В этом случае необходимо найти GSE, где есть параметрирование этого модуля. Например, модуль 331-7TF-0AB0 не входит в стандартный файл si04801e.gse, тогда необходимо найти GSE-файл, в который входит данный модуль. Пример блока для GSE-файла показан на рисунке ниже. Этот блок необходимо вставить в нужный GSE-файл, после чего добавить этот файл в ведомое устройство.
 
Блок модуля для GSE файла
После того, как все физические модули были добавлены в GSE-файл, можно приступать к его настройке. Для этого необходимо перейти на вкладку «Модули». В поле «Идентификатор» задать любое имя модуля, а в столбце «Модуль» выбрать необходимый из GSE-файла и сохранить.
 
Вкладка добавления модуля
 
Далее необходимо перейти на вкладку «Параметры». Для любых модулей обязательно добавить параметр «SlotNumber», иначе ET200 не узнает с кого устройства забирать значения, остальные параметры добавляются при необходимости. Порядок вызова модулей влияет на конечное формирование общего ответа. На рисунке ниже показана вкладка с параметрами. Полученное значение можно увидеть на вкладке мониторинг.
 
Окно параметров модуля
Стоит обратить внимание на то, что оборудование SIEMENS в базовом режиме работы имеет запрет управления. Для разблокировки управления необходимо добавить две параметра в настройки ведомого устройства, которые находят в файле dpv1_prm_bytes.gse. Для разблокировки необходимо включить параметры reduced conf = 1 и fail save = 1 как показано на рисунке «Включение параметров разблокирования». Для добавления данных параметров необходимо нажать на поле «Параметр», при этом поле модуль оставить пустым.
 
Включение GSD дополнения
 
Включение параметров разблокирования
 
Функциональный блоки и функции для работы с Profibus шкалирование сигналов, диагностика и взаимодействие с сервисом Profibus
К блокам и функциям шкалирования сигналов относятся:
  • scaling_from_electr – функция шкалирования электрического сигнала/температуры в шкалу оцифрованного значения, возвращает структуру с выходными данными). Возвращает структуру «scale_from_electr».
  • scaling_to_electr – функция шкалирования оцифрованного значения в электрические величины/температуру, возвращает структуру с выходными данными. Возвращает структуру «scale_to_electr».
  • arr_scaling_from_electr – функция шкалирования из значений электрических величин/температур в оцифрованное значение. Выполняет циклическое шкалирование группы сигналов.
  • arr_scaling_to_electr – функция шкалирования оцифрованного значения в электрические величины/температуру. Выполняет циклическое шкалирование группы сигналов.
 
К блокам и функциям диагностики относится:
  • checkIM – функциональный блок проводит диагностику IM-модулей по обоим ПЛК резервируемой сборки.
     
    К блокам и функциям взаимодействия с сервисом относится:
  • Profibus_Utils – блок для чтения/записи данных из/в Profibus сервиса ПЛК.
     
Важно! В тегах ПЛК имеется тег «PROFIBUS_STATE». Данный тег является индикатором запущенного сервиса Profibus если имеет значение «TRUE». При значении данного флага равного «FALSE» - не производить опрос по Profibus.
Получить значение данного тега можно используя метод из библиотеки «AbakPLCUtils». Пример получения флага и записи его в переменную проекта («isActive») ниже:
 
VAR
Shared_tags: AbakPLCUtils. SharedTags;
isActive: BOOL := FALSE;
END_VAR
isActive:= shared_tags.GetBoolByName('PROFIBUS_STATE');
 
Функциональный блок имеет следующие параметры:
Входы:
  • params_struct (ProfibusParams) – структура с настройками Profibus-обмена.
    Структура типа «ProfibusParams» имеет следующие поля:
  • name_SHM – (STRING) – имя Profibus-устройства;
  • write_data_size – (UINT) – размер записываемых данных (не больше 244 байт);
  • mode - (enMode) – режим работы (1 – чтение, 2 – запись, 3 – чтение/запись);
  • timeout_for_error – (TIME) – таймаут для активации тревоги по неисправному обмену (счетчик телеграмм не меняется в течение данного времени);
  • max_faults – (USINT) – максимальное количество ошибок, задается в конфигураторе Profibus;
  • write_every_cycle – (BOOL) – активация «Запись каждый цикл» (TRUE) или «Запись по изменению записываемых данных» (FALSE). По умолчанию - «Запись по изменению записываемых данных»;
  • status_read_period – (ULINT) – период опроса диагностических данных, в миллисекундах. По умолчанию = 500 мс;
  • time_for_reconnect – (ULINT) – период времени для автоматического перезапуска в миллисекундах. По умолчанию установлено значение 10000 мс. Автоматический перезапуск будет выполнен после истечения установленного времени при условии наличия активной ошибки, функционирования сервиса Profibus на ПЛК и успешного создания всех необходимых файлов.
     
Важно! При значении 0 автоматический рестарт отключен.
 
Функциональный блок имеет следующие методы для реализации обмена по Profibus:
  • ReadInputData();
  • ReadStatusData();
  • WriteOutputData().
 
Метод «ReadInputData()» возвращает диагностический байт со следующими возможными значениями:
  • 0 – чтение не успешно – неактивна команда чтения;
  • 1 – чтение данных не успешно (размер данных в SharedMemory превышает размер массива для считывания);
  • 2 – чтение успешно;
  • 3 – чтение неуспешно: количество считанных байт меньше, чем размер SharedMemory;
  • 5 – SharedMemory Inputs не создана. Необходимо инициировать перезапуск опроса вручную или дождаться автоматического рестарта, если он уже активирован;
  • 6 – SharedMemory Status не найдена. Требуется перезапуск опроса. Автоматический рестарт не действует, работа опроса не может быть продолжена.
 
Метод «ReadInputData()» имеет следующие параметры:
Вход:
  • p_arr_rdData – (POINTER TO ARRAY [0..243] OF BYTE) –  указатель на массив считываемых данных;
  • enSwap – (swap_mode) –  применяемый тип чередования байт/слов в считанных данных.
    Выход:
  • timeout_error_rd – (BOOL) – ошибка таймаута (счетчик области диагностических данных не меняется);
  • cnt_rd – (USINT) – счетчик телеграмм;
  • data_bytes – (UDINT) – количество записанных байт.
    Вход/выход:
  • reset_profibus (BOOL) – принудительная команда для выполнения сброса и повторной инициализации.
     
Метод «WriteOutputData()» возвращает диагностический байт со следующими возможными значениями:
  • 0 – запись данных не успешна - неактивна команда записи;
  • 1 – запись данных не успешна (размер данных для записи превышает размер SharedMemory);
  • 2 – запись данных успешна;
  • 3 – запись данных неуспешна: количество считанных байт меньше, чем размер SharedMemory;
  • 4 – запись не активизировалась, так как данные для записи не изменились от последней записи;
  • 5 – SharedMemory outputs не создана. Необходимо инициировать перезапуск опроса вручную или дождаться автоматического рестарта, если он уже активирован;
  • 6 – SharedMemory Status не найдена. Требуется перезапуск опроса. Автоматический рестарт не действует, работа опроса не может быть продолжена.
 
Метод «ReadStatusData()» имеет следующие параметры:
Входы:
  • p_arr_stData – (POINTER TO BYTE) – указатель на массив диагностических данных;
  • p_arr_stFaults – (POINTER TO ProfibusFaultMsg) – указатель на массив аварийных сообщений.
Выход:
  • outDiag – (ProfibusDiag) – данные диагностики в структуре;
  • timeout_error_st – (BOOL) – ошибка таймаута (счетчик области диагностических данных не меняется);
  • cnt_st – (USINT) – счетчик телеграмм;
  • status_bytes – (UDINT) – количество считанных байт статуса.
Вход/выход:
  • reset_profibus – (BOOL) – принудительная команда для выполнения сброса и повторной инициализации.
 
Ниже описаны структуры и перечисления, используемые для работы описываемого функционального блока.
Флаги и настройки каждого устройства расположены в обобщенной структуре типа «DPdevice_data», которая имеет следующие поля:
  • params_profibus – (ProfibusParams) – структура с настройками Profibus-обмена;
  • reset_profibus – (BOOL) – флаг для ре-инициализации блока опроса данного устройства;
  • rdEnSwap – (swap_mode) – режим чередования байт/слов результатов чтения;
  • timeout_error_rd – (BOOL) – ошибка по таймауту изменения счетчика опросов статус/диагностики. Ошибка возникает, если превышен допустимый период времени без изменения показаний счетчика;
  • cnt_rd – (BYTE) – счетчик чтения;
  • rdData_bytes – (UDINT) – размер считанных данных в байтах;
  • timeout_error_st – (BOOL) – ошибка по таймауту изменения счетчика опросов статус/диагностики. Ошибка возникает, если превышен допустимый период времени без изменения показаний счетчика;
  • cnt_st – (BYTE) – счетчик чтения статус диагностики;
  • outDiag – (ProfibusDiag) – структура с данными диагностики;
  • status_bytes – (UDINT) – размер считанных данных в байтах;
  • wrEnSwap – (swap_mode) – режим чередования байт/слов записи;
  • timeout_error_wr – (BOOL) – ошибка по таймауту изменения счетчика опросов статус/диагностики. Ошибка возникает, если превышен допустимый период времени без изменения показаний счетчика;
  • cnt_wr – (BYTE) – счетчик записи;
  • wrData_bytes – (UDINT) – размер записанных данных в байтах.
 
Перечисление «enMode» имеет следующие поля:
  • read – режим «только чтение»;
  • write – режим «только запись»;
  • ReadWrite – режим «чтение/запись».
Структура «ProfibusFaultMsg» имеет следующие поля:
  • error_type – (USINT) – тип ошибки
0 – ошибки нет;
1 – общая ошибка (device based);
2 – общая ошибка в hard модуле (из xml);
3 – ошибка в input hard модуля;
4 – ошибка в output hard модуля;
5 – ошибка в input&output hard модуля;
6 – общая ошибка в logic модуле;
7 – ошибка в input logic модуля;
8 – ошибка в output logic модуля;
9 – ошибка в input&output logic модуля;
  • moduleNum – (USINT) – номер модуля
0 – неизвестно;
1..255 – либо номер из xml, либо обязательный логический номер, использовать, если тип ошибки соответствует.
  • channelMultiplyer – (USINT) – множитель номера канала, тип данных канала
0 – неизвестно;
1 – bit, 2 – 2bit, 4 – 4bit, 8 – byte, 16 – word, 32 – 2word.
  • numInOut – (USINT) – номер входа/выхода, где произошла ошибка
0 – неизвестно;
( numInOut – 1 )*channelMultiplyer – номер бита, в котором возникла ошибка.
  • faultCode – (UINT) – номер ошибки.
0 – неизвестно;
1 – номер ошибки (Для вычисления индекса из значения вычитается единица).
Если тип ошибки «Общая», то смотреть «device based» плоский индекс по ошибкам, если по модулю, то «channel based».
Перечисление «swap_mode» позволяет выбрать необходимый тип перестановки байт/слов в считанных данных. Перечисление имеет следующие поля:
  • swap_12 – (0) – чередование без изменения;
  • swap_21 – (1) – чередование со сменой порядка следования байт и без смены порядка следования слов;
  • swap_1234 – (2) – чередование без изменения;
  • swap_2143 – (3) – чередование со сменой порядка следования байт и без смены порядка следования слов;
  • swap_4321 – (4) – чередование со сменой порядка следования байт и со сменой порядка следования слов;
  • swap_3412 – (5) – чередование без смены порядка следования байт и со сменой порядка следования слов.
 
Для перевода оцифрованных значений в единицы электрического унифицированного сигнала или температурной шкалы: в библиотеке AbakPlcProfibus реализованы функции шкалирования «scaling_from_electr»/«scaling_to_electr» для шкалирования одного сигнала/значения и функции «arr_scaling_from_electr»/«arr_scaling_to_electr» для шкалирования нескольких значений с модуля целиком, указывая количество каналов/значений.
 
Функция «scaling_from_electr» реализует шкалирование электрического сигнала/температуры в шкалу оцифрованного значения, возвращая структуру с выходными данными. Функция содержит следующие параметры:
Входы:
  • p_input_value – (POINTER TO REAL) – указатель на входную переменную. Реализована возможность привязать в формате ADR (имя_массива[номер первого байта входного значения REAL]);
  • type_of_scale – (scaling_type) – выбор типа входного сигнала для шкалирования из перечисления.
Возвращаемое значение:
  • scaling_from_electr – (scale_from_electr) – структура с результатом работы функции.
Структура «scale_from_electr», хранящая результат работы функции «scale_from_electr» имеет следующие поля:
  • input_val – (REAL) – входное значение в формате REAL;
  • output_val – (INT) – выходное значение в формате INT;
  • val_at_range – (BOOL) – флаг нахождения входного сигнала в номинальном диапазоне, в соответствие с выбранным типом сигнала;
  • stWord – (WORD) – слово состояния работы функции:
бит 0 – входное значение в номинальном диапазоне, в соответствие с выбранным типом сигнала;
бит 1 – входное значение в зоне «Переполнение» - значения недействительны;
бит 2 – входное значение в зоне «Верхняя неконтролируемая зона» - значения не обеспечены достаточной точностью;
бит 3 – входное значение в зоне «Выход за нижнюю границу» - значения недействительны;
бит 4 – входное значение в зоне «Нижняя неконтролируемая зона» - значения не обеспечены достаточной точностью.
 
Функция «scaling_to_electr» реализует шкалирование оцифрованного значения в шкалу электрического сигнала/температуры, возвращая структуру с выходными данными. Функция содержит следующие параметры:
Входы:
  • p_input_value – (POINTER TO INT) – указатель на входную переменную. Можно привязать в формате ADR (имя_массива[номер первого байта входного значения INT]);
  • type_of_scale – (scaling_type) – выбор типа входного сигнала для шкалирования из перечисления.
Возвращаемое значение:
  • scaling_to_electr – (scale_to_electr) – структура с результатом работы функции.
Структура «scale_to_electr», хранящая результат работы функции «scale_to_electr» имеет следующие поля:
  • input_val – (INT) – входное значение в формате REAL;
  • output_val – (REAL) – выходное значение в формате INT;
  • val_at_range – (BOOL) – флаг нахождения входного сигнала в номинальном диапазоне, в соответствие с выбранным типом сигнала;
  • stWord – (WORD) – слово состояния работы функции:
бит 0 – входное значение в номинальном диапазоне, в соответствие с выбранным типом сигнала;
бит 1 – входное значение в зоне «Переполнение» - значения недействительны;
бит 2 – входное значение в зоне «Верхняя неконтролируемая зона» - значения не обеспечены достаточной точностью;
бит 3 – входное значение в зоне «Выход за нижнюю границу» - значения недействительны;
бит 4 – входное значение в зоне «Нижняя неконтролируемая зона» - значения не обеспечены достаточной точностью.
 
Функция «arr_scaling_to_electr» реализует шкалирование оцифрованных значений в шкалу электрического сигнала/температуры, возвращая структуру с выходными данными. Функция организована на базе циклического шкалирования нескольких входных значений, присвоенных во входных параметрах функции по указателю на массив данных. Функция содержит следующие параметры:
Входы:
  • pScaled – (POINTER TO scale_to_electr) – указатель на входную переменную типа структуры «scale_to_electr». Необходимо привязать в формате ADR (имя_массива[N]). Это результат работы функции.
  • pVal – (POINTER TO INT) – значение в оцифрованном виде. Необходимо оформить в соответствии с форматом ADR (имя_массива[M]). Указатель на исходные данные.
  • ch_num – (USINT) – количество значений для шкалирования.
     
Важно! Сумма значения данного параметра с первым членом обоих массивов (массив структур шкалированного результата и массив входных значений в оцифрованном виде) не должно превышать максимальный индекс у обоих массивов. Проверка внутри функции на выход за границы массивов не производится по причине работы функции с указателями не на массив, а на члены массива. Необходимо учесть данный момент во избежание исключения (Exception) или перезаписи существующих переменных из-за выхода за пределы объявленных переменных при работе функции.
 
  • type_of_scale – (scaling_type) – выбор типа входного сигнала для шкалирования из перечисления.
Возвращаемое значение:
  • arr_scaling_to_electr – (USINT) – результат работы функции. В случае, если значение равно «1», то функция успешно завершила шкалирование. В других случаях – работа функции не завершена или завершена некорректно.
Структура «scale_to_electr» описана выше: в описании функции «scaling_to_electr».
 
Функция «arr_scaling_from_electr» реализует шкалирование электрического сигнала/температуры в шкалу оцифрованных значений, возвращая структуру с выходными данными. Функция организована на базе циклического шкалирования нескольких входных значений, присвоенных во входных параметрах функции по указателю на массив данных. Функция содержит следующие параметры:
Входы:
  • pScaled – (POINTER TO scale_from_electr) – указатель на входную переменную типа структуры «scale_from_electr». Необходимо привязать в формате ADR (имя_массива[N]). Это результат работы функции.
  • pVal – (POINTER TO REAL) – значение в инженерных единицах. Необходимо привязать в формате ADR (имя_массива[M]). Указатель на исходные данные.
  • ch_num – (USINT) – количество значений для шкалирования.
     
Важно! Сумма значения данного параметра с первым членом обоих массивов (массив структур шкалированного результата и массив входных значений в оцифрованном виде) не должна превышать максимальный индекс у обоих массивов. Проверка внутри функции на выход за границы массивов не производится по причине работы функции с указателями не на массив, а на члены массива. Необходимо учесть данный момент во избежание исключения (Exception) или перезаписи существующих переменных из-за выхода за пределы объявленных переменных при работе функции.
 
  • type_of_scale – (scaling_type) – выбор типа входного сигнала для шкалирования из перечисления.
Возвращаемое значение:
  • arr_scaling_to_electr – (USINT) – результат работы функции. Если значение равно «1», то функция успешно завершила шкалирование. В других случаях – работа функции не завершена или завершена некорректно.
 
Структура «scale_from_electr» описана выше: в описании функции «scaling_from_electr».
 
Также, в библиотеке AbakPlcProfibus имеется функциональный блок «checkIM», необходимый для диагностики IM-модулей по обоим ПЛК резервируемой сборки.
 
Функциональный блок имеет следующие входы:
  • alarm_from_DP – (BOOL) – обобщенный сигнал неисправности, формируемый блоками опроса различных устройств, может быть реализован через логические операции ИЛИ/И или по схеме M из N.
Функциональный блок имеет следующие выходы:
  • requestSwitch – (BOOL) – запрос на переключение ролей, если исправен IM-модуль партнера и активен входной обобщенный сигнал неисправности или неисправен IM-модуль при исправном IM-модуле партнера;
  • stateIM – (BOOL) – статус исправности модуля IM;
  • stateIM_partner – (BOOL) – статус исправности модуля IM партнера;
  • PLC_active – (BOOL) – ПЛК в роли активного в резервируемой сборке;
  • PLC_passive – (BOOL) – ПЛК в роли пассивного в резервируемой сборке;
  • PLC_standalone – (BOOL) – ПЛК в роли автономного в резервируемой сборке
Онлайн помощь создана в Dr.Explain