Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Coolgate
Диалог специалистов АВОК > ОБЩИЙ ФОРУМ > Автоматизация систем
Darkwolf13
У меня возникла проблема: не могу считать данные по modbus. судя по документации надо обращаться к регистрам в районе 3000, а библиотека работы с modbus позволяет только 255...это тупик? (проблема что оборудование уже стоит и должно было работать еще вчера sad.gif)
контроллер мастер, coolgate slave adr 1
Chabol
В соответствии со стандартом MODICON MODBUS имена переменных ввода/вывода состоят из 5-и цифр. Первая цифра - область памяти, к которой принадлежит переменная (определяет используемую функцию). Остальные четыре – область переменной в памяти.

Существует четыре области памяти:

Область памяти Адрес элемента Доступ
Дискретные выходы 00001...09999 чтение - функция 1, запись - функция 15
Дискретные входы 10001...19999 чтение - функция 2
Выходные регистры 30001...39999 чтение - функция 4
Входные регистры 40001...49999 чтение - функция 3, запись - функция 16

Таким образом пльзуясь функцией чтения 4 мы обращаемся к выходным регистрам (неявно указывая область 300хх).
Т.е. 4-й функцией читайте доступные 0-255 адресов.
Darkwolf13
читаем coogate prm:

base adr(hex) 1001
Dskret inp (hex) 1001
Coil (hex) 1001 on/off 1002 Filter
Holding Registers (hex) 1001 mode 10002 Fan speed 1003 Set temp
inp registers 1001 Root temperature 1002 Failure code

прочитав http://infosys.beckhoff.com/english.php?co...tm&id=13785
по аналогии адресации написал код в twincat где пытаюсь узнать хотя бы значение
...
MBH: ModbusRtuMaster_PcCOM;
InputRegisters: ARRAY[1..4]OF WORD;
...

MBH.ReadInputRegs(
UnitID:=1, (* station address *)
Quantity:=4, (* WORDs *)
MBAddr:= 16#3021, (*3-02 3021 hex*)
cbLength:= 10, (* *)
pMemoryAddr:= ADR(InputRegisters),
Execute:= TRUE,
Timeout:= T#1000ms,
Busy => busy );

переменные пустые а на выходе висит ошибка modbus_CHARREC_TIMEOUT sad.gif ...
Darkwolf13
по сигналу занятости снимается execute

IF NOT busy THEN
MBH.ReadRegs(Execute:= FALSE);
state := state + 1;
END_IF
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.