Использование функционального блока MB_SERVER

<< Click to Display Table of Contents >>

Navigation:  Modbus Universal MasterOPC Server > Руководства по подключению различных контроллеров > Подключение Siemens S7-1200 > Создание проекта в STEP 7 >

Использование функционального блока MB_SERVER

Для чтения и записи данных из контроллера по протоколу Modbus TCP необходимо использовать функциональный блок MB_SERVER. Функциональный блок MB_SERVER расположен в библиотеке инструкций INSTRUCTIONS-Communication - Communication processor - Modbus TCP - MB_SERVER окна Task card. Для того чтобы получить справочную информацию по блоку необходимо выделить блок и нажать кнопку F1.

Щелкните дважды левой кнопкой мыши по блоку, чтобы создать экземпляр функционального блока, откроется окно свойств Call options. В поле Name введите имя экземпляра блока, в поле Number задайте его номер, либо установите галочку Automatic для автоматической нумерации. Нажмите OK.

Siemens_S7_1200_img18

Siemens_S7_1200_img19

Экземпляр блока появился в рабочей области программы.

Siemens_S7_1200_img20

Функциональный блок MB_SERVER содержит 4 входа, 5 выходов, 1 вход-выход.

Имя

Тип

Назначение

Входы:

EN

BOOL

Функциональный блок исполняется если на данном входе присутствует сигнал "True" ("Истина").

DISCONNECT

BOOL

Управление инициализацией соединения

CONNECT_ID

WORD

Уникальный идентификатор соединения

IP_PORT

WORD

Номер порта

Входы-выходы:

MB_HOLD_REG

POINTER

Указатель на область памяти для чтения и записи по протоколу Modbus

Выходы:

NDR

BOOL

0 – нет новых данных, 1 – новые данные были записаны через Modbus

DR

BOOL

0 – нет прочитанных данных, 1 – данные были прочитаны через Modbus

ERROR

BOOL

1 – ошибка вызова блока MB_SERVER

STATUS

WORD

Код ошибки

ENO

BOOL

Если у блока имеется сигнала на входе EN и блок выполняет свою функцию без ошибок, то выход ENO передает сигнал (ENO = 1) следующему элементу. Если в исполнении блоковой команды обнаружена ошибка, то поток сигнала прерывается (ENO = 0) у блоковой команды, которая вызвала ошибку.

В данном примере в качестве области памяти для хранения переменных о состоянии экземпляра блока MB_SERVER и буфера данных для чтения и записи по протоколу Modbus используется глобальный блок данных DATA BLOCK.

Для создания глобального блока данных перейдите в раздел Program blocks контроллера в окне дерева проекта Project tree и щелкните дважды левой кнопкой мыши по пункту Add new block.

Siemens_S7_1200_img14

В появившемся окне Add new block выберите вкладку Data Block, в поле Name введите имя блока, в поле Number присвойте блоку данных его номер, присвоить номер блоку данных можно автоматически установив галочку Automatic, либо задать номер вручную, установив галочку Manual, в поле Block access выберите – Standard - compatible with S7-300/400 и нажмите OK. Обратиться к любому блоку данных в STEP7 можно по его символьному или абсолютному адресу: символьный адрес – символьное значение в поле Name ( в данном случае – MB_TCP_DATA), абсолютный адрес – порядковый номер в поле Number (в данном случае DB2).

Siemens_S7_1200_img22

Откроется рабочая область блока данных DB. Рабочая область состоит из меню блока управления элементами блока  - редактирование строк, режимы мониторинга переменных. Область данных блока состоит из нескольких столбцов:

Name – имя переменной;

Data type – тип данных;

Offset – относительный адрес памяти в формате Byte.Bits;

Start value – начальное значение переменной;

Retain – сохранение в энергонезависимой памяти;

Visible in HMI – видимость переменных в HMI;

Comment – поле для ввода комментариев.

Siemens_S7_1200_img23

Структура блока будет состоять из двух элементов типа struct:

status – для хранения данных о состоянии экземпляра блока MB_SERVER;

data – буфер памяти для чтения и записи по протоколу Modbus.

Список переменных представлен в таблице:

Имя

Тип

Назначение

status:

ndr

BOOL

0 – нет новых данных, 1 – новые данные были записаны через Modbus

dr

BOOL

0 – нет прочитанных данных, 1 – данные были прочитаны через Modbus

error

BOOL

1 – ошибка вызова блока MB_SERVER

status

WORD

Код ошибки

data:

40001

WORD

Область памяти с доступом по адресу Modbus 40001

40002

WORD

Область памяти с доступом по адресу Modbus 40002

40003

WORD

Область памяти с доступом по адресу Modbus 40002

40004

WORD

Область памяти с доступом по адресу Modbus 40002

Введите данные в полях элемента data в столбце Start value введите произвольные значения (необходимы для тестирования связи контроллера с OPC-сервером).

Siemens_S7_1200_img24

Поле Offset содержит нулевые значения адресов памяти. Чтобы STEP7 присвоил переменным свои адреса необходимо блок скомпилировать.

Для компилирования блока перейдите в раздел Program Blocks в окне дерева проекта Project tree, вызовите контекстное меню блока MB_TCP_DATA правой кнопкой мыши, выберите пункт Compile-Software.

Siemens_S7_1200_img25

Заново откройте блок данных MB_TCP_DATA, щелкнув по нему два раза левой кнопкой мыши в разделе Program Blocks дерева проекта Project tree. В поле Offset появились относительные адреса памяти.

Siemens_S7_1200_img26

Блок данных создан. Перейдите в рабочую область организационного блока OB1 (двойное нажатие левой кнопкой мыши на блоке OB1 в разделе Program blocks) и введите переменные для блока MB_SERVER_DB. Параметр MB_HOLD_REG  является указателем на область памяти, используемой для чтения и записи по протоколу Modbus, формат записи: "P#bit address" "data type" "length", где:

bit addressабсолютный адрес на первый бит области памяти для записываемых или считываемых данных по протоколу Modbus;

data type - тип данных регистра Modbus (WORD,INT,UINT);

length – указывает на количество считываемых или записываемых регистров Modbus.

Адреса Modbus начинаются с 40001, указывая на двухбайтное значение области памяти контроллера. Таким образом, указатель памяти на элемент data блока данных DB2 (символьное имя – MB_TCP_DATA) длинной 4 слова (8 байт), который начинается с 4 байта (первые 4 байта в MB_TCP_DATA занимает элемент status), необходимо записать в виде: P#DB2 DBx4.0  WORD 4.

Примечание. Для чтения и записи переменных типа Bool, можно использовать упаковку битов в регистр Word. Для этого в блоке MB_TCP_DATA в структуре data нужно добавить элемент (в нашем случае он будет иметь адрес 40005) с типом данных Array [0..15] of Bool. Таким образом создается массив из двоичных величин c адресом MB_TCP_DATA.data.40005[0]...40005[15]. Извлечь отдельные биты можно средствами самого OPC сервера или же непосредственно в SCADA-системе.

 

Siemens_S7_1200_img27

Siemens_S7_1200_img28

 

Примечание. В STEP7 данные можно вводить в виде абсолютной и символьной адресации. Ввод символьной адресации поддерживает интеллектуальный ввод (Рисунок 3-28), при вводе абсолютного адреса программа может автоматически присваивать символьное имя вводимому адресу (по умолчанию символьные адреса помещаются в таблицу тэгов PLC tags-Default tag table).

Siemens_S7_1200_img29