Реализация 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
|
Byte 1 Byte nbb
где 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
|
где nbb соответствует числу байт во всех парах vH,vL.
Функция 5: записать 1 бит
Записать бит (булевскую переменную) по сетевому адресу addH/addL
Запрос
|
slv
|
05
|
addH
|
addL
|
vH
|
00
|
crcH
|
crcL
|
Ответ
|
slv
|
05
|
addH
|
addL
|
vH
|
00
|
crcH
|
crcL
|
Функция 6: записать 1 слово
Записать слово по сетевому адресу addH/addL
Запрос
|
slv
|
06
|
addH
|
addL
|
vH
|
vL
|
crcH
|
crcL
|
Ответ
|
slv
|
06
|
addH
|
addL
|
vH
|
vL
|
crcH
|
crcL
|
Функция 16: записать N слов
Записать 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
|
считанное значение - 0x0012, что в битовом представлении эквивалентно 00000000 000100101.
В этом примере переменные 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
|
Значение этого запроса различается в зависимости от значения адреса addH/addL:
-
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
|
Адрес для чтения указывается в addH/addL. Он должен быть меньше F000. Происходит считывание nbb байт из удаленного файла, чье имя ранее было выбрано, начиная с адреса, получаемого добавлением адреса байта addH/addL к ранее установленному базовому адресу. Значения переносятся в порядке как они лежат в файле (слева - направо).
Пример:
Выбрать имя удаленного файла: target.fil.
Запрос
|
01
|
11
|
F0
|
00
|
00
|
0B
|
0B
|
74
|
...
|
00
|
25
|
9F
|
Ответ
|
01
|
11
|
F0
|
00
|
00
|
0B
|
8F
|
0E
|
Выбрать базовый адрес 0x10000.
Запрос
|
01
|
11
|
F0
|
02
|
00
|
04
|
04
|
00
|
01
|
00
|
00
|
76
|
11
|
<
Ответ
|
01
|
11
|
F0
|
02
|
00
|
04
|
6E
|
CA
|
Записать 4 байта: абсолютный адрес - 0x107D0, значения - 01, 02, 03, 04.
Запрос
|
01
|
11
|
07
|
D0
|
00
|
04
|
04
|
01
|
02
|
03
|
04
|
28
|
6F
|
Ответ
|
01
|
11
|
07
|
D0
|
00
|
04
|
FC
|
87
|
Считать 4 байта: абсолютный адрес - 0x107D0.
Запрос
|
01
|
12
|
07
|
D0
|
00
|
04
|
B8
|
87
|
Ответ
|
01
|
12
|
04
|
01
|
02
|
03
|
04
|
58
|
7D
|