Для чтения ячеки памяти устройства использую TPLCTagNumber.
Чтение одной ячсейки проходит без проблем.
Но хотелось бы за один пакет читать не одну ячейку памяти, а сразу область памяти.
Как это сделать?
Какие поля TPLCTagNumber нужно для этого использовать?
Спасибо.
scadapascal modbus: как читать не ячейку, а область памяти?
Модератор: Модераторы
-
balbes_spb
- незнакомец
- Сообщения: 5
- Зарегистрирован: 26.09.2018 15:32:31
- Откуда: Санкт-Петербург
вместо PLCTagNumber использовать PLCBlock, у которого в свою очередь имеется свойство size (отвечающее за количество ожидаемых байт)
в этой теме еще глянь, может что пригодится: http://freepascal.ru/forum/viewtopic.php?f=6&t=8029
в этой теме еще глянь, может что пригодится: http://freepascal.ru/forum/viewtopic.php?f=6&t=8029
-
balbes_spb
- незнакомец
- Сообщения: 5
- Зарегистрирован: 26.09.2018 15:32:31
- Откуда: Санкт-Петербург
serg_iv писал(а):вместо PLCTagNumber использовать PLCBlock, у которого в свою очередь имеется свойство size (отвечающее за количество ожидаемых байт)
в этой теме еще глянь, может что пригодится: http://freepascal.ru/forum/viewtopic.php?f=6&t=8029
Спасибо, работает.
Инициализация чтения:
Код: Выделить всё
self.PLCBlock1.MemReadFunction:=3; // номер функции modbus rtu
self.PLCBlock1.PLCStation:=1; // номер узла modbus rtu
self.PLCBlock1.MemAddress:=0; // начальный адрес памяти узла modbus
self.PLCBlock1.Size:=100; // количество, я думаю именно 16 битных регистров памяти узла сети Modbus, а не байт
self.PLCBlock1.AutoRead:=true; // авточтение
чтение данных:
Код: Выделить всё
length(self.PLCBlock1.ValuesRaw); // количество регистров чтения
self.PLCBlock1.ValuesRaw[i]; // чтение данных
P.S. Я думаю статью надо дополнить этой инфой или добавить в FAQ по pascalscada ссылку на данную тему. Т.к. чтение областей памяти в Modbus очень важно. Это в CAN пакеты мелкие...
