Реализация ISaGRAF
Доступ к прикладным переменным
Коммуникационное соединение ISaGRAF распознает пять функциональных кодов Modbus:
1 | читать N бит | ||
3 | читать N слов | ||
5 | писать 1 бит | ||
6 | писать 1 слово | ||
16 | писать N слов |
Доступ к переменным приложения ISaGRAF может осуществляться через их “сетевой адрес ”, если конечно они были определены в библиотеке инструментальных средств.
Эти переменные могут быть:
- Булевыми или Аналоговыми переменными
- Входными, выходными или терминальными переменными
- Локальными или глобальными переменными.
Для записи Булевой переменной могут использоваться функции 5, 6 или 16. Значение TRUE для записи является любым ненулевым значением.
Для чтения Булевой переменной могут использоваться функции 1 или 3. Функция 1 возвращает значение в битовое поле, а функция 3 - в байтовое (значение TRUE соответствует значению 0xFFFF).
Для записи Аналоговой переменной могут использованы функции 6 и 16. Значение является 16-ти битовым целым в диапазоне от -32768 до +32768 (целевые переменные ISaGRAF являются 32-х битовыми).
Для чтения Аналоговой переменной может использоваться функция 3. .
Переменные типа Real не доступны по запросам Modbus.
Предупреждение:
Реализация ISaFRAF не управляет такими кодами ошибки как ‘неизвестный адрес modbus’.
Обозначения:
slv | номер подчиненного | ||
nbw | число слов | ||
nbb | число байт | ||
nbi | число бит | ||
addH | Сетевой адрес (старший байт) | ||
addL | сетевой адрес (младший байт) | ||
vH | значение (старший байт) | ||
vL | значение (младший байт) | ||
V | байтовое значение | ||
bfd | битовое поле (nbb байт) | ||
crcH | контрольная сумма (старший байт) | ||
crcL | контрольная сумма (младший байт) |
Функция 1: читать n бит
Читает nbi бит (булевских значений), начиная с сетевого адреса addH/addL
Запрос | slv | 01 | addH | addL | 00 | nbi | crcH | crcL |
Ответ |
slv |
01 |
nbb |
bfd |
... |
crcH |
crcL |
где bfd является битовым полем длиной nbb байт следующего формата
Бит 1 соответствует значению переменной с сетевым адресом addH/addL.
Бит nbi соответствует значению переменной с сетевым адресом addH/addL+nbi-1.
X означает, что значение не используется
Функция 3: читать n слов
Читает nbw слов, начиная с сетевого адреса addH/addL
Запрос |
slv |
03 |
addH |
addL |
00 |
nbw |
crcH |
crcL |
Ответ |
slv |
03 |
nbb |
vH |
vL |
... |
crcH |
crcL |
Функция 5: записать 1 бит
Записать бит (булевскую переменную) по сетевому адресу addH/addL
Запрос |
slv |
05 |
addH |
addL |
vH |
00 |
crcH |
crcL |
Ответ |
slv |
05 |
addH |
addL |
vH |
00 |
crcH |
crcL |
Записать слово по сетевому адресу addH/addL
Запрос |
slv |
06 |
addH |
addL |
vH |
vL |
crcH |
crcL |
Ответ |
slv |
06 |
addH |
addL |
vH |
vL |
crcH |
crcL |
Записать nbw слов, начиная с сетевого адреса addH/addL (nbb=2nbw)
Запрос |
slv |
10 |
addH |
addL |
00 |
nbw |
nbb |
vH |
vL |
... |
crcH |
crcL |
Ответ |
slv |
10 |
addH |
addL |
00 |
nbw |
crcH |
crcL |
- Функция 1: прочитать 15 бит, начиная с сетевого адреса 0x1020 на подчиненном 1
Запрос |
01 |
01 |
10 |
20 |
00 |
0F |
79 |
04 |
Ответ |
01 |
01 |
02 |
00 |
12 |
39 |
F1 |
В этом примере переменные 0x1029 и 0x102C имеют значение TRUE, остальные - FALSE.
- Функция 16: записывает 2 слова по адресу 0x2100 на slave 1, записанные значения равняются: 0x1234 и 0x5678.
Запрос |
01 |
10 |
21 |
00 |
00 |
02 |
04 |
12 |
34 |
56 |
78 |
1C |
CA |
Ответ |
01 |
10 |
21 |
00 |
00 |
02 |
4B |
F4 |
По сравнению с современными индустриальными шинами протокол Modbus обеспечивает очень скромные возможности, если только набор функций не расширен поставщиком.
В нашей ситуации при запуске ISaGRAF имеется два ограничения на протокол Modbus
- Доступны только переменные ISaGRAF
- Невозможна быстрая передача больших объемов данных
Имеются причины, по которым ISaGRAF поддерживает набор ‘Modbus-подобных’ запросов для переноса файлов или протокол ‘управления удаленными файлами’:
- Дистанционная загрузка ASCII и бинарных файлов
- Подгрузка ASCII и бинарных файлов
- Динамический обмен данными через виртуальный или физический разделяемый файл
Таким образом, при наличии коммуникационной связи с ISaGRAF любое приложение, независимое от ISaGRAF, может легко связываться с удаленной целевой задачей.
Протокол базируется на следующих понятиях:
- Файл со стороны целевой задачи ISaGRAF называется удаленным файлом
- Файл на мастер-компьютере называется локальным файлом
- Каждый байт в файле имеет 32-битовый базовый адрес
и 16-битовый адрес байта
Имеются запросы выбора имени удаленного файла, выбора базового адреса, считать или записать данные в удаленный файл, используя 16-битовый адрес байта.
Функция 17: записать байты
nbb соответствует числу байт во всех парах vH,vL
Запрос |
slv |
11 |
addH |
addL |
00 |
nbb |
nbb |
vH |
vL |
... |
crcH |
crcL |
Ответ |
slv |
11 |
addH |
addL |
00 |
nbb |
crcH |
crcL |
- 0xF000: Инициализировать имя удаленного файла
nbb соответствует числу символов в имени файла, располагающегося в полях vH, vL и т.д. (в этом случае понятия ‘старший’ и ‘младший’ лишены смысла), включая символ \0 окончания строки. Если файл не существует, то он создается с атрибутами writable+readable+executable.
- 0xF002: Изменить базовый адрес на указанное значение
nbb должно равняться 4. Первая пара vH,vL есть значение старшего слова значения адреса. Возможно любое 32-битное значение. Все последующие запросы чтения и записи будут использовать этот базовый адрес. Если запроса изменения базового адреса не делалось, по умолчанию будет использоваться нулевое значение.
- 0xF004: Уничтожить файл
nbb должно равняться 0. Файл будет уничтожен если он существует и если это возможно.
- Больше 0xF004:
Зарезервировано
- Меньше 0xF000: Записать байты
Адрес байта, по которому нужно произвести запись указывается в addH/addL. Он должен быть меньше 0xF000. Записываются значения nbb байт, указываемые в полях vH,vL и т.д., в заданном порядке (слева - направо) в удаленный файл, имя которого ранее было выбрано. Запись производится по адресу, который получается сложением ранее установленного базового адреса с указываемым адресом байта. Если результирующий адрес выходит за границу файла, размер файла увеличивается. Невозможно уменьшить размер файла.
Функция 18: читать данные
Запрос |
slv |
12 |
addH |
addL |
00 |
nbb |
crcH |
crcL |
Ответ |
slv |
12 |
nbb |
V |
V |
... |
crcH |
crcL |
Пример:
Выбрать имя удаленного файла: target.fil.
Запрос |
01 |
11 |
F0 |
00 |
00 |
0B |
0B |
74 |
... |
00 |
25 |
9F |
Ответ |
01 |
11 |
F0 |
00 |
00 |
0B |
8F |
0E |
Запрос |
01 |
11 |
F0 |
02 |
00 |
04 |
04 |
00 |
01 |
00 |
00 |
76 |
11 |
Ответ |
01 |
11 |
F0 |
02 |
00 |
04 |
6E |
CA |
Запрос |
01 |
11 |
07 |
D0 |
00 |
04 |
04 |
01 |
02 |
03 |
04 |
28 |
6F |
Ответ |
01 |
11 |
07 |
D0 |
00 |
04 |
FC |
87 |
Запрос |
01 |
12 |
07 |
D0 |
00 |
04 |
B8 |
87 |
Ответ |
01 |
12 |
04 |
01 |
02 |
03 |
04 |
58 |
7D |