Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
2 / 2 / 1
Регистрация: 10.01.2018
Сообщений: 26

Обмен данными по ModbusTCP

07.09.2018, 12:26. Показов 1514. Ответов 11

Студворк — интернет-сервис помощи студентам
Добрый день, Единомышленики! Последняя надежда на этот замечательный форум, уже порядка 3х недель бьёмся с проблемой чтения и записи аналоговых значений по ModbusTCP. Дискеты читаются исправно, запись дискретов не реализована.
Объясню всё подробно:
Есть 2 контроллера, они общаются по ModbusTCP. Один из них является контроллером верхнего уровня, другой ЛСАу. Необходимо с контроллера верхнего уровня читать и записывать аналоги (уставки) в контроллер ЛСАУ. Они находятся в разных сетях, маршруты автоматические сформировались на windows server. ping от одного до другого и обратно проходит.
Запись и чтение происходит по следующей схеме:
1. Запись: В скаде задаю значение уставки U (float) - преобразую в относительные единицы (AnOut = anpar.U / 1000 * Unom) - перевожу в INT( так как ЛСАУ принимает целочисленные значения 2 бита) - отправляю
2. Чтение: принимаю значение в о.е. INT - перевожу во float - перевожу из о.е. в нормальные значения (anpar.U = AnIn * 1000 \ Unom)
В результате считываю и записыва 0 по всем параметрам.
Был проведён эксперимент:
Вместо контроллера ЛСАУ подключили ноут с айпишником контроллера и запустили Modbus Slave. И по данной схеме всё работает. Прикладываю фото: верх - фото из СКАДы управляющей контроллером верхнего уровня, низ фото Modbus Slave. ( не обращаете внимания на Уст Ie, там была ошибка в коде.)
Ещё интересный момент:
Режимы работы устройства ЛСАУ я переключаю также аналоговым сигналом: 0, 1 или 2. И это работает исправно, режимы переключаются в контроллере ЛСАУ (это я отслеживаю по лампочкам на двери шкафа управления.

В связи с чем есть предположение что ошибки где то в преобразованиях. Не могу понять в чём проблема. Пожалуйста помогите.
Прошу прощения за много текста, хотелось дать исчерпывающую информацию что бы картина была как можно конкретней. Готов ответить на дополнительные вопросы, с данного момента буду онлайн постоянно.
Заранее всем спасибо за участие!
Миниатюры
Обмен данными по ModbusTCP  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.09.2018, 12:26
Ответы с готовыми решениями:

Простой обмен данными
Отправляю серверу строку, а функция recv() возвращает мне -1 :( Почему? client.cpp #include <iostream> #include...

MODBUS-TCP обмен данными
Моё простенькое чудо-приложение должно принимать/посылать данные от/на внешнее устройство. Внешнее устройство - ПЛК Овен, который...

Обмен данными через интернет
Искал ответ но так и не нашел... Прошу прощения если плохо искал Проблема такая... Хочу организовать обмен текстовыми формами через...

11
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
07.09.2018, 18:23
Rriderr, 1) а преобразование в целое случайно не так должно быть: float / Range * 1000? 2) правильный ли порядок байт в целом выбран?
0
2 / 2 / 1
Регистрация: 10.01.2018
Сообщений: 26
07.09.2018, 18:40  [ТС]
vxg, 1) тут Формула преобразования не указана, только преобразование в о.е., преобразование в целое идёт дальше в драйверах. Но судя по таблице из
Slave (приложенное фото нижняя часть) преобразование в целое число происходит верно.
2) Да, если я правильно понял. Ручкой подписано на нижней части фото номера, они соответствуют номерам в протоколе обмена ModbusTCP. От 0 байта до 15ого = 16.
И мне кажется что если была бы напутана номерация, я бы записал хоть что то Хоть куда то, а тут вообще нет реакции по всем параметрам.
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
07.09.2018, 19:34
Rriderr, просто логично предположить что если число с плавающей запятой передают (пишут) как целое то его в начале нормируют к диапазону измерений (делят на Unom) а потом умножают на точность дискретизации (1000) а извлекают (читают) обратным преобразованием - а у вас написано наоборот. про последовательность байт - я имел ввиду порядок следования младшего и старшего байта в одном целом значении если оно конечно имеет размер больше одного байта (WORD или DWORD) что напрашивается из предполагаемой точности дискретизации (1000 больше 255) - этот порядок может быть прямым или обратным
0
2 / 2 / 1
Регистрация: 10.01.2018
Сообщений: 26
08.09.2018, 04:28  [ТС]
vxg, вот это действительно хорошее предположение. Я думал об этом, но у меня получилась какая то ерунда при расчёте и решил что правильно будет наоборот. Завтра попробую записать так как сказали Вы, спасибо.
А по поводу старшего/младшего, я не смог разобраться какое направление необходимо для контроллера ЛСАУ и пробовал переворачивать, но результата никакого не дало.
0
2 / 2 / 1
Регистрация: 10.01.2018
Сообщений: 26
10.09.2018, 19:14  [ТС]
vxg, только сегодня удалось добраться до стенда. Пробовал записывать преобразование по Вашей формуле, значения так же пишутся и читаются только в Modbus Slave - скада их записывает и читает, а с контроллером ЛСАУ не получается.
Проверил через modbus slave также порядок байт, функцией Слейва BINARY. И увидел что мой способ переворота байт не работает.
Возник вопрос, а может ли это быть причиной? Ведь мне кажется я бы записал что то и прочил даже с неправильным порядком... Или я ошибаюсь?
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
11.09.2018, 06:20
Rriderr, на железе ячейки имеют тип WORD?
0
2 / 2 / 1
Регистрация: 10.01.2018
Сообщений: 26
11.09.2018, 08:32  [ТС]
vxg, имеете ввиду в контроллере?
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
11.09.2018, 18:22
Rriderr, да, в железе или описании ячеек модбас
0
2 / 2 / 1
Регистрация: 10.01.2018
Сообщений: 26
12.09.2018, 08:33  [ТС]
vxg, Сейчас проверил, в описании ячеек стоит WORD.
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
12.09.2018, 18:23
Rriderr, пробовали слать без математики прямо в них всегда 00 00 или всегда FF FF или 00 FF или FF 00?
0
2 / 2 / 1
Регистрация: 10.01.2018
Сообщений: 26
13.09.2018, 22:28  [ТС]
vxg, выяснили в чём проблема. Хочу поделиться, может кому будет полезно. Оказалось проблема была в чтении. И проблема в том, что в ЛСАУ стояло ограничение по количеству одновременно считываемых регистров - 28. Попытки считать разом большее количество регистров приводило к ошибке. А контроллер верхнего уровня читал стандартом 32.
Спасибо за участие и комментарии.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.09.2018, 22:28
Помогаю со студенческими работами здесь

Обмен данными между приложениями
Здравствуйте Нужна помощь Нужна программа которая будет брать некие данные из одной программы и копировать их в другую программу и...

Обмен данными без открытых портов
Может звучит глупо, но можно ли организовать обмен данными, при том, что все порты закрыты? Ну или как тогда программно открыть порты?...

Обмен данными между Linux и Windows
Здравствуйте, у меня есть малинка, и пк на windows, мне нужно с помощью сокетов передавать данные между Linux и Windows, возможно ли это,...

Обмен данными по сети между двумя приложениями
Всем доброго времени суток! суть вопроса: есть 2 приложения на разных компах. Одно приложение рассчитывает параметры движения объекта,...

Обмен данными php через socket и с++ сервера
В общем задача такова. Есть сервер написанный на С++ и к сожалению утрачены связи с его программистом. Из описания удалось вытащить вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru