Segnetics

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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.06.2018, 14:48   #1
OlegM
Member
 
Регистрация: Apr 2017
Сообщения: 71
Благодарил(а): 0 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
По умолчанию Неправильная запись значения в ЭРИС-110-МВТ (решено)

Имеется девайс СГМ ЭРИС-110-МВТ (адрес устройства 93 (5D)). Пытаюсь записать в регистр 10E значение 3 в формате Integer, но записывается 512. При записи любого другого значения в диапазоне от 0 до 512 всё равно в регистре оказывается 512. Какое значение записалось в регистр просматриваю с помощью специальной программы предоставленной разработчиком девайса.
Вот лог обмена при записи:

5D 10 01 0E 00 01 02 00 03 5E BC
5D 03 01 0E 00 01 E8 A9
5D 10 01 0E 00 01 6D 6A

Пробный проект прикладываю.
Вложения
Тип файла: psl Эрис_Trim5.psl (74.9 Кбайт, 13 просмотров)
OlegM вне форума   Ответить с цитированием
Старый 25.06.2018, 17:00   #2
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 016
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Неправильная запись значения в ЭРИС-110-МВТ

Цитата
Сообщение от OlegM Посмотреть сообщение
5D 10 01 0E 00 01 02 00 03 5E BC
5D 03 01 0E 00 01 E8 A9
5D 10 01 0E 00 01 6D 6A
Вы записываете 010Eh значение 03, Эрис отвечает, что принял 2 байта. Т.е. с точки зрения обмена, всё хорошо.

Покажите ответ на команду чтения по адресу 010Eh, пожалуйста. Эта команда у вас второй строчкой идёт.

И почему у вас ответ на запись приходит позже запроса на чтение? Похоже, тайм-аут маленький слишком?


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

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 25.06.2018, 17:33   #3
OlegM
Member
 
Регистрация: Apr 2017
Сообщения: 71
Благодарил(а): 0 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
По умолчанию Ответ: Неправильная запись значения в ЭРИС-110-МВТ

Вот лог чтения:

5D 03 01 0E 00 01 E8 A9
5D 03 02 02 00 69 29
OlegM вне форума   Ответить с цитированием
Старый 25.06.2018, 18:47   #4
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 016
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Неправильная запись значения в ЭРИС-110-МВТ

Цитата
Сообщение от OlegM Посмотреть сообщение
Вот лог чтения:

5D 03 01 0E 00 01 E8 A9
5D 03 02 02 00 69 29
Всё верно, девайс ответил 512.

Итого, имеем запись контроллером нужного вам значения по нужному адресу. Проблема однозначно в Эрисе. Пинайте его разработчиков.


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

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 25.06.2018, 22:25   #5
OlegM
Member
 
Регистрация: Apr 2017
Сообщения: 71
Благодарил(а): 0 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
По умолчанию Ответ: Неправильная запись значения в ЭРИС-110-МВТ

Ок! Я так и думал.
OlegM вне форума   Ответить с цитированием
Старый 28.06.2018, 13:22   #6
OlegM
Member
 
Регистрация: Apr 2017
Сообщения: 71
Благодарил(а): 0 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
По умолчанию Ответ: Неправильная запись значения в ЭРИС-110-МВТ (решено)

Производитель утверждает, что лог записи должен быть следующий:
Tx:5D 10 01 0E 00 01 00 03 EC BE
В реальности такой:
Tx:5D 10 01 0E 00 01 02 00 03 5E BC

У кого Modbus реализован более кошерно?

Напомню задачу.
В устройство с адресом 93 (5D) нужно записать в регистр 10E значение 3 в формате Integer.


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

Производитель утверждает, что лог записи должен быть следующий:
Tx:5D 10 01 0E 00 01 00 03 EC BE
В реальности такой:
Tx:5D 10 01 0E 00 01 02 00 03 5E BC

У кого Modbus реализован более кошерно?

Напомню задачу.
В устройство с адресом 93 (5D) нужно записать в регистр 10E значение 3 в формате Integer.
OlegM вне форума   Ответить с цитированием
Старый 28.06.2018, 15:23   #7
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 016
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Неправильная запись значения в ЭРИС-110-МВТ (решено)

Цитата
Сообщение от OlegM Посмотреть сообщение
Производитель утверждает, что лог записи должен быть следующий:
Tx:5D 10 01 0E 00 01 00 03 EC BE
В реальности такой:
Tx:5D 10 01 0E 00 01 02 00 03 5E BC

У кого Modbus реализован более кошерно?
Открываем документ описания стандарта, читаем и подставляем:

Slave Address 5D
Function 10
Starting Address Hi 01
Starting Address Lo 0E
No. of Registers Hi 00
No. of Registers Lo 01
Byte Count 02
Data Hi 00
Data Lo 03
Error Check (LRC or CRC) 5E BC


Возникает второй вопрос к производителю. Почему на якобы ошибочный запрос от нашего контроллера ЭРИС отвечает подтверждением? По стандарту при несовпадении формата запроса, слейв отбрасывает запрос и не генерирует ответа.


Я думаю, вас просто дезинформировали.


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

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 28.06.2018, 15:45   #8
OlegM
Member
 
Регистрация: Apr 2017
Сообщения: 71
Благодарил(а): 0 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
По умолчанию Ответ: Неправильная запись значения в ЭРИС-110-МВТ (решено)

Спасибо большое за подробный ответ!
OlegM вне форума   Ответить с цитированием
Старый 28.06.2018, 15:52   #9
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 016
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Неправильная запись значения в ЭРИС-110-МВТ (решено)

Цитата
Сообщение от OlegM Посмотреть сообщение
Спасибо большое за подробный ответ!
Я думаю, судя по тому, что вам сказали, что проблема в парсе запроса. Подсчёт контрольной суммы ведётся верно, проверка формата проходит как нужно, а вот при работе с данными парсер (точнее его программист) "забывает", что данные начинаются с указателя размера данных, т.е. с этого самого 02.

Ну и в результате распарсивает не 02 00 03, а 02 00 03 - это и есть те самые 512


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

Добро всегда побеждает зло. Кто победил - тот и добрый.

Последний раз редактировалось Arsie, 28.06.2018 в 16:20
Arsie сейчас на форуме   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сквозная запись значения уставки p001p Связь с внешним миром 68 22.04.2020 14:46


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


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