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

Работа с модулями ПЛК по SDO

 
Запись и чтение параметров модулей ввода/вывода можно осуществлять при помощи SDO-сообщений.
SDO – это протокол, обеспечивающий ведущему устройству в сети CAN возможность считывать или изменять данные в объектных словарях (OD) подключенных к шине устройств (в данном случае – модулей ввода/вывода).
 
Схема работы SDO
 
Важно! Большое количество команд в одном цикле приводит к увеличению трафика на CAN-шине, что создает высокую нагрузку на контроллер.
 
Функциональный блок SDO_WRITE позволяет изменять параметры модулей ввода/вывода через пользовательское приложение, разработанное в IDE. Данный ФБ используется для записи конкретного значения параметра в объектный словарь модулей ПЛК. ФБ находится в библиотеке AbakPLCUtils.
 
ФБ SDO_WRITE
 
Входные параметры:
NodeID – Адрес CAN устройства;
Index – Индекс параметра в словаре CAN;
SubIndex – Подиндекс параметра;
aData – Адрес буфера с данными;
aLen – Размер буфера в байтах;
TimeOut – Таймаут ожидания ответа;
Repeats – Количество повторов при закрытом семафоре.
Выходные параметры:
Confirm  – Признак завершения записи (0 - запись не запущена или не завершена, 1 - Успешное завершение);
Kz –  Код завершения  (0 - успешно; 1 - неуспешное создание семафора; 2 - не освобожден семафор; 3 - превышен таймаут);
Рассмотрим пример кода, позволяющего настроить типы каналов модуля K2.AI.00.08.00 (AI Type Channel).
Пример использования данных ФБ:
 
PROGRAM PLC_PRG
VAR
            sdowrite:AbakPLCUtils.SDOWrite;
            b: UINT:= 255;
            xxExecute:BYTE:=0;
END_VAR
{PLC_PRG}
IF
xxExecute=0 AND sdowrite.Confirm THEN
            xxExecute:=1;
END_IF
 
sdowrite.NodeID:=3;
sdowrite.Index:=16#2021;
sdowrite.aLen:=1;
sdowrite.TimeOut:=T#500MS;
sdowrite.aData:=ADR(b);
sdowrite(xExecute:=xxExecute);
 
ФБ SDO_READ используется для считывания данных из объектного словаря модулей ПЛК (стандартизированное описание устройства).
 
ФБ SDO_READ
Входные параметры:
NodeID – Адрес CAN устройства;
Index – Индекс параметра в словаре CAN;
SubIndex – Подиндекс параметра;
aData – Адрес буфера с данными;
aLen – Размер буфера в байтах;
TimeOut – Таймаут ожидания ответа;
Repeats – Количество повторов при закрытом семафоре.
Выходные параметры:
Confirm  – Признак завершения чтения (0 - чтение не запущено или не завершено, 1 - Успешное завершение);
Kz –  Код завершения  (0 - успешно; 1 - неуспешное создание семафора; 2 - не освобожден семафор; 3 - превышен таймаут);
aOutLen –  Количество полученных байтов в ответе.
Пример использования ФБ SDO_READ в программе:
 
VAR
sdoread:AbakPLCUtils.SDORead;
b: UINT;
xxExecute:BYTE:=0;END_VAR
{PLC_PRG}
IF
xxExecute=0 AND sdoread.Confirm THEN
            xxExecute:=1;
END_IF
sdoread.NodeID:=3;
sdoread.Index:=16#2021;
sdoread.aLen:=1;
sdoread.TimeOut:=T#500MS;
sdoread.aData:=ADR(b);
sdoread(xExecute:=xxExecute);
Результат работы программы:
 
Результат работы программы
 
NETWORK – номер сети CAN, предназначенный для работы функционального блока;
ENABLE – включает функциональный блок по переднему фронту. Прерывает операцию по заднему фронту;
TIMEOUT – таймаут в мс (0 означает отсутствие тайм-аута);
CONFIRM – true (функциональный блок завершен без ошибок);
ERROR – код ошибки: см. CANOPEN_KERNEL_ERROR для получения дополнительной информации;
DEVICE – NodeID целевого устройства; 0 означает локальное устройство (= CANopenManager);
CHANNEL – канал SDO:
  • 0 – используйте любой свободный канал;
  • 1..n – конкретный канал;
INDEX – индекс объекта;
SUBINDEX – подиндекс объекта;
MODE – указывает используемый режим SDO;
DATA – указатель на память, в которую должны быть записаны данные;
DATALENGTH – VAR_IN – размер памяти, на который указывает Data.
VAR_OUT – объем данных, записанных в Data
Онлайн помощь создана в Dr.Explain