Форум АО "ВЗЛЕТ"

Приборы ЗАО "Взлет" => Отдел программистов => Тема начата: Серов Максим от 15.11.2019, 08:50:53



Название: Чтение регистров Взлет Лайт М (RS-485)
Отправлено: Серов Максим от 15.11.2019, 08:50:53
Доброго времени суток! Столкнулся с проблемой чтения нужных мне данных с расходомера Взлет Лайт М с RS-485. Проблема заключается в том, что мне никак не удается прочитать часть требуемых регистров (в первую очередь регистры 332771, 332773, 332775, 332777, 332771, 349161). При этом часть регистров читается нормально, например, индекс скорости обмена, сетевой адрес и т.д.
Чтение регистров осуществляю в соответствии с руководством (старшим байтом вперед, функция чтения 0x04, от адреса отбрасываю левую цифру и отнимаю 1). С установлением связи между устройствами проблем нет (так как часть регистров читается нормально). Считывать данные пробовал как программируемым реле ПР200, так и OPC-сервером MasterOPC. Результат +- один и тот же, но если  OPC-сервер не видит в этих регистрах вообще ничего, то ПР200 что-то видит, но эти значения не соответствуют реальности (мягко говоря). Прилагаю скриншоты с обращением к расходомеру с ПР200 и OPC-сервера. Прошу помощи в решении проблемы! Заранее большое спасибо за ответ! P.S. На названия регистров в OPC-сервере не обращайте внимания.


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: Серов Максим от 15.11.2019, 08:52:08
Чтение пары тестовых регистров. С ними проблем нет.


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: Серов Максим от 15.11.2019, 08:53:42
Попытка чтения нужного мне регистра. Значение там точно не должно быть нулевым.


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: Серов Максим от 15.11.2019, 08:55:56
Попробовал разные варианты формата данных в устройстве.


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: Серов Максим от 15.11.2019, 08:58:12
Попытка чтения регистров с ПР200.


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: Серов Максим от 15.11.2019, 08:59:21
Продолжение


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: yura от 15.11.2019, 10:18:30
Максим, вы неправильный тип регистра указываете.
Смотрите внимательно описание списка регистров: http://www.vzljot.ru/files/soft/docs/modbus_er_lite_m.pdf
332771 - Объем прямого направления потока, м3 - signed long - Целая  часть объемов
У вас тип этого регистра указан как Float, а должен быть 32-битное целое со знаком.
Вот следующий регистр 332773, в котором дробная часть, вот он Float.


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: yura от 15.11.2019, 10:22:17
И этот регистр INPUT, а не HOLDING, как у вас на скриншоте написано. Хотя в первом посте вы верно указываете номер функции для чтения регистра - 0x04, ей читаются INPUT-регистры.


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: Серов Максим от 15.11.2019, 10:35:00
Если речь про попытку чтения с ПР200, то там есть три типа данных: целочисленные, битовые и с плавающей запятой. Если про OPC-сервер, то там то же нет именно такого типа.
В связи с этим три вопроса:
1) Я не смогу прочесть нужные мне данные с помощью имеющегося в наличии программируемого реле?
2) Почему тогда нормально не читается регистр 332773 в ПР200 (при чтении какая-то абракадабра получается)?
3) Есть ли какой-то вариант достучаться до параметра в формате long имеющимися средствами, например, считать его в формате float, разложить побитово, а затем работать с отдельными битами?


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: Серов Максим от 15.11.2019, 10:40:28
И еще вопрос по поводу holdinh/input регистров. В OPC-сервере при добавлении нового тега он сразу подписывается как Holding регистр и я не знаю можно ли это как то менять. Вот скрин настроек добавляемого тега. Может подскажите как можно изменить регистр на Input?


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: Серов Максим от 15.11.2019, 10:44:03
Если речь про попытку чтения с ПР200, то там есть три типа данных: целочисленные, битовые и с плавающей запятой. Если про OPC-сервер, то там то же нет именно такого типа.
В связи с этим три вопроса:
1) Я не смогу прочесть нужные мне данные с помощью имеющегося в наличии программируемого реле?
2) Почему тогда нормально не читается регистр 332773 в ПР200 (при чтении какая-то абракадабра получается)?
3) Есть ли какой-то вариант достучаться до параметра в формате long имеющимися средствами, например, считать его в формате float, разложить побитово, а затем работать с отдельными битами?
Тут ошибся. В OPC-сервере есть 32-х битное знаковое целочисленное, но на скриншотах выше видно, что я пробовал его использовать и результата нет


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: Серов Максим от 15.11.2019, 10:46:38
Правильно ли я понимаю, что целая часть потока в прямом и обратном направлении должна читаться в целочисленном формате? Я пробовал этот формат и в OPC-сервере и в ПР200 и значения в регистрах 32771 и 32775 были нулевые (хотя на экране показывалось к тому моменту около 1500 кубометров)


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: yura от 15.11.2019, 11:18:46
И еще вопрос по поводу holdinh/input регистров. В OPC-сервере при добавлении нового тега он сразу подписывается как Holding регистр и я не знаю можно ли это как то менять. Вот скрин настроек добавляемого тега. Может подскажите как можно изменить регистр на Input?
Вероятно, причина кроется здесь, потому что нужные вам регистры INPUT. Если они указаны как HOLDING то будут читаться регистры 432771, 432775 - которые в этом приборе не используются и из них будет читаться 0.
Но вот как изменить тип регистра в используемом у вас OPC я не знаю, может быть кто то другой сможет подсказать.


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: Серов Максим от 15.11.2019, 11:22:14
Спасибо большое за ваши ответы! А что касаемо вопроса неправильного чтения регистров 332773 и 332775 они же указаны в правильном формате float? Вопрос именно о чтении с ПР200 т.к. OPC-сервер просто для проверки используется.


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: Серов Максим от 15.11.2019, 11:23:03
Спасибо большое за ваши ответы! А что касаемо вопроса неправильного чтения регистров 332773 и 332775 они же указаны в правильном формате float? Вопрос именно о чтении с ПР200 т.к. OPC-сервер просто для проверки используется.
Не 32775, а 32777


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: yura от 15.11.2019, 11:44:33
Да, тип регистров 332773 и 332777 float, тут верно.
А можете написать абракадабру, которые показывает ПР200 при чтении этих регистров, и значения V+/V-  с экрана прибора или прочитанные нашей программой-монитором? Можно будет попробовать сопоставить числа в побайтном виде.

По поводу вашего вопроса "Есть ли какой-то вариант достучаться до параметра в формате long имеющимися средствами. Если речь про попытку чтения с ПР200, то там есть три типа данных: целочисленные, битовые и с плавающей запятой" - так и указывайте для регистра 332771 тип "целочисленные", и он должен правильно читаться при этом.


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: Серов Максим от 15.11.2019, 11:58:45
Да, тип регистров 332773 и 332777 float, тут верно.
А можете написать абракадабру, которые показывает ПР200 при чтении этих регистров, и значения V+/V-  с экрана прибора или прочитанные нашей программой-монитором? Можно будет попробовать сопоставить числа в побайтном виде.

По поводу вашего вопроса "Есть ли какой-то вариант достучаться до параметра в формате long имеющимися средствами. Если речь про попытку чтения с ПР200, то там есть три типа данных: целочисленные, битовые и с плавающей запятой" - так и указывайте для регистра 332771 тип "целочисленные", и он должен правильно читаться при этом.

Прикрепленные к 4 и 5 посту скриншоты. Переменные Var 11(332773) и Var 13(332777). 4 варианта скриншотов (Старшим/младшим байтом/регистром вперед. Перебирал разные варианты). Значения на экране расходомера около 1500 кубов. Я бы скинул точные значения на расходомере, но он сейчас не под рукой, так что скриншоты того что читается ПР200 и соответствующие этому значения на экране расходомера смогу прислать только в понедельник.


Название: Re:Чтение регистров Взлет Лайт М (RS-485)
Отправлено: yura от 15.11.2019, 14:58:32
Прикрепленные к 4 и 5 посту скриншоты. Переменные Var 11(332773) и Var 13(332777). 4 варианта скриншотов (Старшим/младшим байтом/регистром вперед. Перебирал разные варианты). Значения на экране расходомера около 1500 кубов. Я бы скинул точные значения на расходомере, но он сейчас не под рукой, так что скриншоты того что читается ПР200 и соответствующие этому значения на экране расходомера смогу прислать только в понедельник.
Немного поэкспериментировал с прочитанным там значением Var11 - "9.49E+29". В виде байт в шестнадцатеричном представлении это "0x713FA626". Адекватное число из данного регистра должно быть от 0 до 1, поскольку мы читаем дробную часть накопленного объёма. Если переставить байты местами попарно, то есть сделать "0x3F7126A6", то это будет "9.42E-1 = 0.942". Но при этом заданная у вас настройка "Старшим байтом вперед" правильная...
Можете ли вы из этого ПО получить непосредсвенно modbus-ответ прибора на запрос данного регистра (в виде просто последовательности байт)? Хотелось бы понять как переданное прибором значение конвертировал ПР200.