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

Работа со встроенным протоколом Modbus Slave

 
В контроллере реализован протокол Modbus Slave. Реальное адресное Modbus пространство содержит 65535 регистров произвольного доступа. Также реализованы три виртуальных адресных Modbus пространства, каждое из которых содержит отдельные 65535 регистров произвольного доступа. Содержимое виртуальных адресных пространств в обязательном порядке очищается при перезагрузке контроллера. Содержимое реального адресного пространства по умолчанию сохраняется при перезагрузке контроллера, либо может освобождаться если активирован параметр Очистка Modbus при старте.
Для взаимодействия с адресным пространством ПЛК используется функциональный блок MDB. Функциональный блок MDB содержит методы для чтения и записи параметров из реального и виртуальных адресных пространств Modbus ПЛК.
 
Пример объявления экземпляра ФБ MDB:
 
slv:abakplcutils.MDB;
 
1) Методы чтения из адресного пространства:
Возвращаемый тип данных
Имя метода
Описание входного параметра
REAL
GetReal(reg:WORD);
reg – номер регистра
WORD
GetWord(reg:WORD);
reg – номер регистра
DWORD
GetDWord(reg:WORD);
reg – номер регистра
STRING
GetString(reg:WORD);
reg – номер регистра
LREAL
GetLReal(reg:WORD);
reg – номер регистра
ULINT
GetWordRegs
(
      reg:WORD,
      pBuf :pointer to word, cnt:WORD
);
 
reg – номер первого регистра.
pBuf – указатель на ячейку массива WORD, с которой начнется запись считанных данных в виде последовательных регистров WORD.
cnt – количество запрашиваемых регистров
GetWordRegs() – метод группового чтения регистров из адресного пространства. Метод возвращает прочитанные регистры по указателю на буфер пользователя. За один вызов метода можно считать до 10000 регистров. В методе реализована проверка выхода за размеры адресного пространства с учетом запрошенного количества регистров начиная с номера первого запрашиваемого регистра.
Преимущества данного метода заключается в том, что:
  • Групповое чтение снижает нагрузку на ПЛК по сравнению с одиночными обращения к адресному пространству.
  • Объявление массива, указатель на который подается на вход метода, в формате arrRegs_MN[M..N], где M – адрес первого запрашиваемого регистра, N – номер регистра от первого запрашиваемого со смещением на количество запрашиваемых регистров. В таком случае в ППО пользователя можно работать с массивом, обращаясь к ячейкам массива согласно номеру регистра в авдресном пространстве.
  • Все данные пользователя централизованно хранятся в ППО пользователя, а не распределены по разным его компонентам.
     
    Внимание! Работа с указателями: при использовании проверить размер буфера, куда скопируются прочитанные данные – размер буфера ДОЛЖЕН быть не менее чем количество запрашиваемый регистров!
    Внимание! Групповое чтение большого количества регистров может помешать работе сервисов ПЛК. Это зависит от приоритета задачи, в которой вызывается данный метод, от интервала вызова этой задачи и других задач с более высоким приоритетом. Необходимо проверить поведение ПЛК. При нарушении функционала или повышении нагрузки на ПЛК рекомендуем разбить один запрос с большим количеством регистров на несколько с меньшим количеством регистров. При этом можно использовать один пользовательский буфер, обращаясь к нужным данным через указание на соответствующую ячейку массива.
 
2) Методы записи в адресное пространство:
Возвращаемый тип данных
Имя метода
Описание входного параметра
REAL
SetReal(reg:WORD, val:REAL);
reg – номер регистра,
val – значение для записи
WORD
SetWord(reg:WORD, val:WORD);
reg – номер регистра,
val – значение для записи
DWORD
SetDWord(reg:WORD, val:DWORD);
reg – номер регистра,
val – значение для записи
STRING
SetString(reg:WORD, val:STRING);
reg – номер регистра,
val – значение для записи
LREAL
SetLReal(reg:WORD, val:LREAL);
reg – номер регистра,
val – значение для записи
ULINT
SetUlint(reg:WORD, val:ULINT);
reg – номер регистра,
val – значение для записи
 
SetWordRegs
(
         reg:WORD,
         pBuf :pointer to word,
cnt:WORD
);
 
 
reg – номер первого регистра.
pBuf – указатель на ячейку массива WORD, с которой начнется запись пользовательских данных из последовательных регистров WORD в адресное пространство.
cnt – количество записываемых регистров
 
SetWordRegs() – метод групповой записи регистров в адресное пространства. Метод записывает данные из буфера пользователя, по указателю на этот буфер. За один вызов метода можно записать до 10000 регистров. В методе реализована проверка выхода за размеры адресного пространства с учетом записываемого количества регистров начиная с номера первого запрашиваемого регистра.
Преимущества данного метода заключается в том, что:
  • Групповая запись снижает нагрузку на ПЛК по сравнению с одиночными обращения к адресному пространству.
  • Объявление массива, указатель на который подается на вход метода, в формате arrRegs_MN[M..N], где M – адрес первого запрашиваемого регистра, N – номер регистра от первого запрашиваемого со смещением на количество запрашиваемых регистров. В таком случае в ППО пользователя можно работать с массивом, обращаясь к ячейкам массива согласно номеру регистра в адресном пространстве.
  • Все данные пользователя централизованно хранятся в ППО пользователя, а не распределены по разным его компонентам.
     
    Внимание! Работа с указателями: при использовании проверить размер буфера, из которого скопируются данные для записи – размер буфера ДОЛЖЕН быть не менее чем количество записываемых регистров!
    Внимание! Групповая запись большого количества регистров может помешать работе сервисов ПЛК. Это зависит от приоритета задачи, в которой вызывается данный метод, от интервала вызова этой задачи и других задач с более высоким приоритетом. Необходимо проверить поведение ПЛК. При нарушении функционала или повышении нагрузки на ПЛК рекомендуем разбить один запрос с большим количеством регистров на несколько с меньшим количеством регистров. При этом можно использовать один пользовательский буфер, обращаясь к нужным данным через указание на соответствующую ячейку массива.
 
Для использования функционального блока MDB в нескольких местах проекта требуется объявить его экземпляр в разделе глобальных переменных и использовать его.
 
В примере объявлен экземпляр gMDB:
 
VAR_GLOBAL
     gMDB: abakplcutils.MDB;             
 
END_VAR
 
А его использование: gMDB.SetReal(4805,rval);
Для взаимодействия с виртуальным пространством используется тот же функциональный блок MDB, только перед вызовом требуется задать значение его входного параметра IsVirtualModbus := TRUE, а в параметр VirtualModbusNum записать номер виртуального пространства.
 
Пример:
 
gMDB.IsVirtualModbus := TRUE;
gMDB.VirtualModbusNum := 2;
gMDB.SetReal(1000,rval); //для записи регистра 2-го виртуального пространства с адресом 1000.
Для реализации протокола ModBus Slave нужно заполнить ModBus карту необходимыми данными.
Настройки Modbus пространства можно посмотреть и изменить в группе настроек «Дополнительные настройки».
 
Группа настроек «Дополнительные настройки»
 
Если связь с устройством осуществляется по протоколу Modbus TCP, необходимо подключить eth кабель к нужному порту и начать опрос.
Основные настройки  Modbus TCP можно посмотреть и изменить в группе настроек «Настройки Modbus TCP».
 
Группа настроек «Настройки Modbus TCP»
 
Если связь с устройством осуществляется по протоколу Modbus RTU, то перед началом опроса необходимо настроить COM-порты. Для этого нужно:
  • Открыть конфигуратор, подключиться к ПЛК.
    2. Выбрать в меню «Контроллер» – «Настройки интерфейсов» – «Настройки СОМ портов»
     
     
    Настройки СОМ портов
    3. Далее появится диалоговое окно. Выбрать необходимый порт.
     
    Выбор порта
     
    4. После выбора необходимого порта появится диалоговое окно, в котором осуществляются настройки СОМ порта. Необходимо ввести нужные параметры. Поставить галочку «Ведомый» и нажать «ОК».
     
Настройки порта
 
Важно! При настройке COM-порта не допускается: оставлять поля пустым, вводить число «0» или использовать уже открытый порт в сетевом экране. В случае некорректного ввода значений появится окно с соответствующим сообщением.
Онлайн помощь создана в Dr.Explain