Страница 1 из 3

Панель Weintek как slave устройство (Modbus server)

СообщениеДобавлено: 17 май 2012, 12:34
VanMo
Чтобы настроить панель как Modbus RTU/ASCII slave, достаточно добавить в проект устройство "MODBUS Server" или "MODBUS ASCII Server" соответственно для RTU и для ASCII.
В настройках необходимо указать параметры связи и адрес устройства.

Изображение

Соответствие регистров Modbus памяти панели:
LB 0 ~ 9998 соответствует 0x/1x 1 ~ 9999
LW 0 ~ 9998 соответствует 3x/4x 1 ~ 9999
RW 0 ~ 55536 соответствует 3x/4x 10000 ~ 65536
Тестовый проект:
ModbusServer.zip
(14.27 КБ) Скачиваний: 2737

Re: Панель Weintek как slave устройство (Modbus server)

СообщениеДобавлено: 03 дек 2013, 11:04
arhatkin
День добрый. А как разделить Hold и Input регистры (по datasheet регистры 3х и 4х доступны только через LW, причет 3х0001 - это LW0 и 4х0000 - это LW0).

Re: Панель Weintek как slave устройство (Modbus server)

СообщениеДобавлено: 03 дек 2013, 11:45
arhatkin
кстате ссылка на расположение адресов не открывается

Re: Панель Weintek как slave устройство (Modbus server)

СообщениеДобавлено: 03 дек 2013, 15:47
den_po
а есть необходимость их разносить?

Re: Панель Weintek как slave устройство (Modbus server)

СообщениеДобавлено: 03 дек 2013, 16:05
VanMo
Ссылку исправил. Регистры 3х и 4х ассоциированы с одним и тем же пространством LW0~9998. Не понятно, зачем нужен раздельный доступ? Тем более, что 3х-регистры доступны только для чтения.

Re: Панель Weintek как slave устройство (Modbus server)

СообщениеДобавлено: 03 дек 2013, 17:09
arhatkin
согласен, 3х (Input_Register)-только для чтения, но это со стороны MODBUS master (тобишь персоналки), а со стороны MODBUS slave (тобишь панели) исправления вполне возможны. Разве нет? В итоге так как 3х и 4х регистры ассоциированны с одним пространством, записывая в регистры 4х мы меняем значения регистров 3х.
Мною был проведен экперимент: Вначале было записано по команде ModBus 10h в регистры 0000h....0003h значений 1,2,3,4. Затем прочитано по команде 04h значение регистров 0000h...0005h и полуно 1,2,3,4,0,0... Писал в Holding Register, а в панели изенились как Holding Register, так и Input Register. Вот в чем проблема.

Re: Панель Weintek как slave устройство (Modbus server)

СообщениеДобавлено: 03 дек 2013, 17:58
VanMo
Все верно, Ваш эксперимент подтвердил правило.
В каждом устройстве, в котором реализуется протокол Modbus-slave, регистры назначаются произвольным образом, на усмотрение производителя.
В данном случае, панель предоставляет полный доступ ко всем имеющимся регистрам памяти и нет никакого смысла в разделении этой памяти на пространства Input registers и Holding registers.
У Вас есть полная свобода назначить какие угодно регистры для взаимодействия с проектом.

Re: Панель Weintek как slave устройство (Modbus server)

СообщениеДобавлено: 03 дек 2013, 18:47
arhatkin
Если панель в режиме slave, значит работаем по запросам от внешней системы, так?
И вот ситуация: извне командой WriteHoldingRegister обновляются значения HoldingRegister (допустим с 0-го по 5-ый), следом снешняя система запрашивает значения InputRegister командой ReadInputRegister (так же с 0-го по 5-ый) и получает в ответ паравоз из 6-ти байт со значениями HoldingRegister. ModBus то апппаратный и отвечает панель соответственно автоматически. Что лежало на данный момент в регистрах LW0...LW5, то и отправила. А как вклиниться в этот процес, дабы подпихнуть истинные данные я не нашел. Потому и обратился за советом.
"Полная свобода назначить какие угодно регистры для взаимодействия с проектом" - я так понимаю имеется ввиду, что при разработке протокола обмена заранее заложить смещение адреса младшего InputRegister с 0-го на значение адреса старшего HoldingRegister, так? А что делать, если протокол уже есть? Или же есть возможность самому разделить адресное пространство на Input registers и Holding registers?

Re: Панель Weintek как slave устройство (Modbus server)

СообщениеДобавлено: 04 дек 2013, 09:21
den_po
arhatkin писал(а):А как вклиниться в этот процес, дабы подпихнуть истинные данные я не нашел

какие данные панели считаются истинными?

Re: Панель Weintek как slave устройство (Modbus server)

СообщениеДобавлено: 04 дек 2013, 11:26
arhatkin
какие данные панели считаются истинными?
причем тут данные панели? истинные данные - это запрашиваемые данные. Из конкретного типа регистра.
по протоколу ModBus посылка включает в себя адрес начального регистра ( HoldingRegister или InputRegister неважно ). Как я понял для драйвера панели ModBus_Server 0-ой адрес HoldingRegister и 0_ой адрес InputRegister одно и тоже - LW0000. Так? В итоге при чтении (команда 04 или 03), задавая начальное значение адреса регистра как "0", в ответ я могу получить значение нулевого регистра как InputRegister так и HoldingRegister (они же одинаковы для панели). Все зависит от того какие данные я записал в LW0 на момент запроса. Все же делается аппаратно! HoldingRegister можно не только записывань, но и читать. И вот как раз при чтении есть вероятность получить данные InputRegister, считанные из LW