Segnetics

Вернуться   Segnetics > Форум Segnetics > Связь с внешним миром

Связь с внешним миром Modbus, RS232, RS485, Lon и другое.

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2021, 14:15   #1
neiiron
Новичок
 
Регистрация: Sep 2013
Сообщения: 10
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Получение данных от Болида через шлюз С2000-ПП

Добрый день,
поставили довольно интересную задачу в плане интеграции с оборудованием Болид. Вентустановки должны менять производительность в зависимости от кол-ва взятых/снятых с охраны разделов Болида. Решение - получение от Болида событий постановки/снятия раздела и по количеству снятых с охраны определять требуемую производительность или вообще останавливаться, если все на охране. Для получения событий используется преобразователь протоколов С2000-ПП (Болид), который по протоколу modbus-rtu может выдавать данные стороннему оборудованию. С2000-ПП является слейвом, SMH4 - мастером.
Собственно сам вопрос: чтение выполняется командой 03 - Чтение значений из нескольких регистров хранения (Read Holding Registers). Формат пакета:
event-rd.png
Как правильно организовать таблицу Модбас слейва (С2000-ПП) для получения данного пакета (24 байт)? Разместил последовательно регистры типа int с чтением по запросу и привязал вход запроса к одному выходу, как требует help для организации получения данных в одном запросе.
map.jpg
Что-то не так делаю в организации регистров или запроса? При запросе должны вернуться данные описания последнего события, а возвращаются нулевые значения. Данные о кол-ве событий в буфере, номера первого и последнего считываются успешно и при появлении событий в системе инкрементируются.
Проект опроса - во вложении.
Спасибо.
Вложения
Тип файла: psl mb_s2000-pp.psl (176.3 Кбайт, 21 просмотров)
neiiron вне форума   Ответить с цитированием
Старый 15.01.2021, 14:54   #2
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 086
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Получение данных от Болида через шлюз С2000-ПП

Цитата:
Сообщение от neiiron Посмотреть сообщение
Как правильно организовать таблицу Модбас слейва (С2000-ПП) для получения данного пакета (24 байт)? Разместил последовательно регистры типа int с чтением по запросу
int в модбасе это 2 байта. Не многовато их у вас?)


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 15.01.2021, 15:02   #3
ATS
Senior Member
 
Регистрация: Aug 2013
Сообщения: 3 784
Благодарил(а): 12 раз(а)
Поблагодарили: 194 раз(а) в 190 сообщениях
По умолчанию Ответ: Получение данных от Болида через шлюз С2000-ПП

Цитата:
Сообщение от neiiron Посмотреть сообщение
Что-то не так делаю в организации регистров или запроса? При запросе должны вернуться данные описания последнего события, а возвращаются нулевые значения.
Так в запросе должно быть 14 регистров (28 байт) а Вы просите 27 (54 байта)
Наверняка получаете отлуп от Болида.


УПС! Опоздал...
ATS вне форума   Ответить с цитированием
Старый 15.01.2021, 17:14   #4
neiiron
Новичок
 
Регистрация: Sep 2013
Сообщения: 10
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Получение данных от Болида через шлюз С2000-ПП

Цитата:
Сообщение от Arsie Посмотреть сообщение
int в модбасе это 2 байта. Не многовато их у вас?)
согласен, по кол-ву перебор (уменьшил по кол-ву байт, результат не изменился), но хотелось бы узнать - принцип чтения нескольких holding-регистров правильный? и как в этом случае мастер должен сообщить слейву сколько байт он хочет прочитать? не понятно.
neiiron вне форума   Ответить с цитированием
Старый 15.01.2021, 17:25   #5
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 086
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Получение данных от Болида через шлюз С2000-ПП

Цитата:
Сообщение от neiiron Посмотреть сообщение
согласен, по кол-ву перебор (уменьшил по кол-ву байт, результат не изменился)
Начните с чтение одного регистра. Вообще одного. Идеально, который содержит серийник или другое известное и неизменное значение.

Вопросы "как мастер" весьма полно раскрыты в даташите на модбас, не вижу никакого объективного смысла пересказывать вам содержимое статьи из Википедии.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 15.01.2021, 17:41   #6
ATS
Senior Member
 
Регистрация: Aug 2013
Сообщения: 3 784
Благодарил(а): 12 раз(а)
Поблагодарили: 194 раз(а) в 190 сообщениях
По умолчанию Ответ: Получение данных от Болида через шлюз С2000-ПП

Цитата:
Сообщение от Arsie Посмотреть сообщение
Начните с чтение одного регистра. Вообще одного. Идеально, который содержит серийник или другое известное и неизменное значение.
Так это у ТС работает.

Цитата:
Сообщение от neiiron Посмотреть сообщение
согласен, по кол-ву перебор (уменьшил по кол-ву байт, результат не изменился), но хотелось бы узнать - принцип чтения нескольких holding-регистров правильный?
Точно четырнадцать? А не 13? Принцип правильный.

Цитата:
и как в этом случае мастер должен сообщить слейву сколько байт он хочет прочитать? не понятно.
Вот сколько есть в групповом запросе столько и попросит.

P.S. Начинает казаться что обязательное использование сниффера на новых устройствах это только моя вредная привычка.
ATS вне форума   Ответить с цитированием
Старый 15.01.2021, 17:46   #7
neiiron
Новичок
 
Регистрация: Sep 2013
Сообщения: 10
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Получение данных от Болида через шлюз С2000-ПП

[QUOTE=Arsie;62635]Начните с чтение одного регистра. Вообще одного. Идеально, который содержит серийник или другое известное и неизменное значение.

с одиночными регистрами проблем нет: кол-во сообщений в буфере событий, номера первого и последнего события - читаются и изменяются при появлении событий в Болиде.
neiiron вне форума   Ответить с цитированием
Старый 15.01.2021, 17:47   #8
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 086
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Получение данных от Болида через шлюз С2000-ПП

Цитата:
Сообщение от ATS Посмотреть сообщение
Так это у ТС работает.
А, ну тогда точно косяк с размером запроса или с размером буфера ПП, который одним махом столько осилить не может.


Добавлено через 45 секунд


Цитата:
Сообщение от neiiron Посмотреть сообщение
с одиночными регистрами проблем нет: кол-во сообщений в буфере событий, номера первого и последнего события - читаются и изменяются при появлении событий в Болиде.
Добавляйте по одному в запрос (это что у вас в прямоугольничке. Рано или поздно настанет момент истины)


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 15.01.2021, 17:49   #9
neiiron
Новичок
 
Регистрация: Sep 2013
Сообщения: 10
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Smile Ответ: Получение данных от Болида через шлюз С2000-ПП

Цитата:
Сообщение от ATS Посмотреть сообщение
Точно четырнадцать? А не 13? Принцип правильный.

Вот сколько есть в групповом запросе столько и попросит.
Теперь понятно - при группировке в тело запроса помещается кол-во требуемых байт. Спасибо


Добавлено через 3 минуты


Цитата:
Сообщение от Arsie Посмотреть сообщение
А, ну тогда точно косяк с размером запроса или с размером буфера ПП, который одним махом столько осилить не может.


Добавлено через 45 секунд




Добавляйте по одному в запрос (это что у вас в прямоугольничке. Рано или поздно настанет момент истины)
Попробую с размером пакета, спасибо за помошь
neiiron вне форума   Ответить с цитированием
Старый 15.01.2021, 17:55   #10
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 086
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Получение данных от Болида через шлюз С2000-ПП

Цитата:
Сообщение от neiiron Посмотреть сообщение
Теперь понятно - при группировке в тело запроса помещается кол-во требуемых байт. Спасибо
Повторяю ещё раз - модбас не оперирует единицей измерения "байт". Будете ходить по граблям, пока не поймёте это


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 15.01.2021, 18:07   #11
ATS
Senior Member
 
Регистрация: Aug 2013
Сообщения: 3 784
Благодарил(а): 12 раз(а)
Поблагодарили: 194 раз(а) в 190 сообщениях
По умолчанию Ответ: Получение данных от Болида через шлюз С2000-ПП

Цитата:
Сообщение от neiiron Посмотреть сообщение
Теперь понятно - при группировке в тело запроса помещается кол-во требуемых байт.
Регистров!
И это число 14 (0x0E) явно указано в запросе на первой картинке.

А чтение произвольного числа далеко не все устройства позволяют.
ATS вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать свои сообщения

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 17:57.


Версия vBulletin: 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2024