Добрый день. У меня два вопроса.
Проблемы с работой Modbus TCP. Запустил порт 502 по дефолту. Пытаюсь прочитать
Вот что выдает терминал:
root@wirenboard-AZ6WODNS:~# modbus_client --debug -mtcp -a218 -t0x04 -r44893 -c1 192.168.42.1
Connecting to 192.168.42.1:502
[00][01][00][00][00][06][DA][04][AF][5D][00][01]
Exception response Exception Response(132, 4, IllegalAddress)
Waiting for a confirmation...
<00><01><00><00><00><03><DA><84><02>
ERROR Illegal data address
ERROR occured!
Через mosquitto_sub показывает значения
root@wirenboard-AZ6WODNS:~# mosquitto_sub -t "/devices/power_status/controls/Vin" -v | head -n 10
/devices/power_status/controls/Vin 24.1
В Modbus Poll просто нули
Писал еще скрипты на python для чтения тоже не читает. Вот что пишет:
Ошибка чтения данных: Exception Response(132, 4, IllegalAddress)
До перепрошивки получилось запустить modbus, но тоже непоятно почему он тогда заработал. Как-то нашел в одном из топиков на форуме поменял UnitID на 1 и заработало, потом вернул на тот, что был и тоже работало. Сейчас такой же финт не проходит.
Because
October 25, 2024, 12:11pm
3
Здравствуйте.
Поскольку два ваших вопроса не относятся друг к другу непосредственно - прошу создать отдельную тему со вторым вопросом.
Because
October 25, 2024, 12:55pm
4
Касательно первого вопроса, прошу уточнить:
К какому устройству подключаетесь?
Как сконфигурирован порт?
Благодарю за ответы.
У меня wirenboard 7 + demo kit
Порт запускал python скрпитом:
import asyncio
from pymodbus.server.async_io import ModbusTcpServer
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext
from pymodbus.datastore import ModbusSequentialDataBlock
from pymodbus.server import ServerAsyncStop
store = ModbusSlaveContext(
di=ModbusSequentialDataBlock(0, [0]*100), # Дискретные входы
co=ModbusSequentialDataBlock(0, [0]*100), # Катушки
hr=ModbusSequentialDataBlock(0, [0]*100), # Регистры хранения
ir=ModbusSequentialDataBlock(0, [0]*100) # Входные регистры
)
context = ModbusServerContext(slaves=store, single=True)
async def run_server():
server = ModbusTcpServer(context, address=("192.168.42.1", 502)) # Укажите адрес контроллера
await server.serve_forever()
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(run_server())
скрипт запускал через консоль.
вот настройки на веб интрефейсе:
Для диагностики проблемы пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации .
приложен диагностический архив, доступен только сотрудникам поддержки
(219.1 KB)
Вот пожалуйста.
Because
October 28, 2024, 10:28am
9
Благодарю за ожидание.
Вы следовали данной инструкции ?
Не вижу где вы прописали настройки подключения к MQTT брокеру - это важно
Проследовав инструкции я получил:
root@wirenboard-ATY5YNRK:~# modbus_client --debug -mtcp -a95 -t0x04 -r60742 -c1 192.168.0.51
Connecting to 192.168.0.51:502
[00][01][00][00][00][06][5F][04][ED][46][00][01]
Waiting for a confirmation...
<00><01><00><00><00><05><5F><04><02><00><18>
SUCCESS: read 1 of elements:
Data: 0x0018
Да я следовал инструкции, кроме MQTT брокера,
Было:
Я поменял на (согласно инструкции):
Сейчас я снова сделал все по инструкции, но все по-прежнему
root@wirenboard-AZ6WODNS:~# modbus_client --debug -mtcp -a207 -t0x04 -r8027 -c1 192.168.42.1
Connecting to 192.168.42.1:502
[00][01][00][00][00][06][CF][04][1F][5B][00][01]
Waiting for a confirmation...
Exception response Exception Response(132, 4, IllegalAddress)
<00><01><00><00><00><03><CF><84><02>
ERROR Illegal data address
ERROR occured!
Приложу еще раз диагностический архив
Спасибо
diag_AZ6WODNS_2024-10-28-12.48.31.zip (136.2 KB)
Прощу прощения за мой фейл. Еще раз все заново сделал. Заработало. Остался вопрос как поменять ip-адрес для TCP чтобы можно было конектится по заданному адресу.
Если менять в веб-интрефейсе то не работает
Вот по дефолтному 192.168.42.1 работает, а если я хочу к примеру использовать другой адрес? Спасибо за помощь!
1 Like
Because
October 28, 2024, 1:56pm
13
В таком случае вам следует:
Прописать ip адрес контроллера статикой. После этого все обращения к контроллеру следует производить на новый адрес.
Указать новый адрес в настройках шлюза Modbus RTU/TCP или ничего не менять, если в поле IP-адрес указано «*»