Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.
Модератор: Модераторы
balbes_spb » 27.09.2018 14:47:15
Для чтения ячеки памяти устройства использую TPLCTagNumber.
Чтение одной ячсейки проходит без проблем.
Но хотелось бы за один пакет читать не одну ячейку памяти, а сразу область памяти.
Как это сделать?
Какие поля TPLCTagNumber нужно для этого использовать?
Спасибо.
-
balbes_spb
- незнакомец
-
- Сообщения: 5
- Зарегистрирован: 26.09.2018 16:32:31
- Откуда: Санкт-Петербург
serg_iv » 29.09.2018 13:00:55
вместо PLCTagNumber использовать PLCBlock, у которого в свою очередь имеется свойство size (отвечающее за количество ожидаемых байт)
в этой теме еще глянь, может что пригодится:
http://freepascal.ru/forum/viewtopic.php?f=6&t=8029
-
serg_iv
- постоялец
-
- Сообщения: 276
- Зарегистрирован: 15.10.2005 18:45:46
- Откуда: Миасс
-
balbes_spb » 30.09.2018 22:32:32
Спасибо, работает.
Инициализация чтения:
- Код: Выделить всё
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 пакеты мелкие...
-
balbes_spb
- незнакомец
-
- Сообщения: 5
- Зарегистрирован: 26.09.2018 16:32:31
- Откуда: Санкт-Петербург
Вернуться в Сторонние средства
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0