Приветствую всех!
Помогите! Написал программу для передачи информации по modbus c одного из устройств, в зависимости от выбранного адреса. Имеются 3 одинаковых устройства. Не могу сделать чтобы программа одновременно считывала сразу с трех устройств информацию.
Как я понимаю нужно на вход кластера Slave adress подать массив из 3-х адресов или как то по иному пути
Считывание с прибора по modbus
-
- VIP
- Сообщения: 1338
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 6
- Версия LabVIEW: 6.1 - 2024
- Откуда: Германия
- Благодарил (а): 1 раз
- Поблагодарили: 44 раза
- Контактная информация:
Re: Считывание с прибора по modbus
А эти устройства - они к одному СОМ порту подключены или всё-таки к трём разным?
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Считывание с прибора по modbus
Вставлю и свои пять копеек...
У Вас в цикле каждый раз будет производиться инициализация коммуникации, и в результате - на второй итерации цикла выскочит ошибка. Инициализировать нужно раз, перед циклом.
Потом, не стоит использовать три функции Index Array - достаточно потянуть нижний край первой иконки вниз, на три позиции - и брать элементы массива из него.
Также, Вы не выводите кластер ошибки з функции - индикатора Код Ошибки Вам будет недостаточно, нужно использовать и кластер ошибки.
И, есть более новая версия библиотеки для Modbus, можете установить ее из-под VIPM (VI Package Manager).
У Вас в цикле каждый раз будет производиться инициализация коммуникации, и в результате - на второй итерации цикла выскочит ошибка. Инициализировать нужно раз, перед циклом.
Потом, не стоит использовать три функции Index Array - достаточно потянуть нижний край первой иконки вниз, на три позиции - и брать элементы массива из него.
Также, Вы не выводите кластер ошибки з функции - индикатора Код Ошибки Вам будет недостаточно, нужно использовать и кластер ошибки.
И, есть более новая версия библиотеки для Modbus, можете установить ее из-под VIPM (VI Package Manager).
Мы делили апельсин - много наших полегло...
-
- beginner
- Сообщения: 49
- Зарегистрирован: 22 янв 2016, 10:41
- Версия LabVIEW: 12
- Контактная информация:
Re: Считывание с прибора по modbus
Да, они все к одному com порту подключены.AndreyDmitriev писал(а):А эти устройства - они к одному СОМ порту подключены или всё-таки к трём разным?
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Считывание с прибора по modbus
Так как все приборы сидят на одном порту их нельзя считывать одновременно. Только по одному с заданным адресом по очереди. Параметры передачи должны быть одинаковые во всех приборах. Адреса должны быть разные для всех приборов. Нулевой адрес использовать нельзя. Это адрес для одновременной передачи во все приборы. В этом случае приборы должны только слушать. Никто отвечать не должен.
Остальные рекомендации согласно ответу от Kosist
Остальные рекомендации согласно ответу от Kosist
-
- beginner
- Сообщения: 49
- Зарегистрирован: 22 янв 2016, 10:41
- Версия LabVIEW: 12
- Контактная информация:
Re: Считывание с прибора по modbus
В ModBus на одной физической линии сети RS485 не может быть опрошено сразу несколько slave?
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Считывание с прибора по modbus
На одной физической линии нет. Кратко схема такая: Master->Запрос к Slave Адрес 1->Ожидание ответа от Slave Адрес 1->Получение ответа от Slave Адрес 1, Master->Запрос к Slave Адрес 2->Ожидание ответа от Slave Адрес 2->Получение ответа от Slave Адрес 2 и т.д.
Здесь документация по протоколу
http://labviewportal.org/viewtopic.php? ... 500#p67928
Здесь документация по протоколу
http://labviewportal.org/viewtopic.php? ... 500#p67928
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Считывание с прибора по modbus
Инициализацию выносите за цикл. Далее внутри цикла While делаете цикл FOR на три итерации. На каждой итерации меняете адрес устройства. У каждого устройства должен быть свой адрес, чтобы они не отвечали разом.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 19 Ответы
- 7878 Просмотры
-
Последнее сообщение Artem.spb
-
- 38 Ответы
- 13306 Просмотры
-
Последнее сообщение AndreyDmitriev
-
- 5 Ответы
- 252 Просмотры
-
Последнее сообщение IvanLis