Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Взлет и модбас
Диалог специалистов АВОК > ОБЩИЙ ФОРУМ > Автоматизация систем
Max2114
Пытаюсь считать данные с теплосчетчика ТСРВ-034 (Взлет) при помощи контроллера по протоколу модбас. Пока что ничего не выходит. Посоветовался с техподдержкой взлета - говорят что я делаю все так, как и надо... Может кто уже с подобым сталкивался?
йцукен
Цитата(Max2114 @ 25.1.2013, 16:46) *
Пытаюсь считать данные с теплосчетчика ТСРВ-034 (Взлет) при помощи контроллера по протоколу модбас. Пока что ничего не выходит. Посоветовался с техподдержкой взлета - говорят что я делаю все так, как и надо... Может кто уже с подобым сталкивался?

Из взлёта читал матбас rolleyes.gif с ТСРВ024 и УСРВ510.
Что конкретно у Вас не получается?
Max2114
Цитата(йцукен @ 25.1.2013, 19:09) *
Из взлёта читал матбас rolleyes.gif с ТСРВ024 и УСРВ510.
Что конкретно у Вас не получается?


пытаюсь считать температуру (в техподдержке сказали что это 4-ая функция чтения переменная типа float, адрес переменной 49222). На запрос теплосчетчтки отвечает, но приходят нули. Пробовал другие адреса - порой "ересь" приходит, порой нули... пробовал для интереса чиать с дареса 49221 и 49223 - вообще не отвечает, мастер фиксирует неответы.
йцукен
Цитата(Max2114 @ 25.1.2013, 20:31) *
пытаюсь считать

Чем? rolleyes.gif
Max2114
Цитата(йцукен @ 25.1.2013, 19:50) *
Чем? rolleyes.gif


Пока пытался контроллером SMH2Gi... могу завтра попытаться панелькой вайнтек, скадой ТМ6, опс-севрером, модсканом... 90% что с таким же адресом результат будет тот же.


йцукен
Цитата(Max2114 @ 25.1.2013, 19:53) *
Пока пытался контроллером SMH2Gi..

Скачайте вот эту программу:
Modbus Tester 2.0.5
Цитата
Программа тестер устройств MODBUS. Поддерживаются функции 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x0F, 0x10. Измеряет скорость обмена, анализирует синтаксис пакетов, подробный дамп пакетов, сохраняемые списки комманд Modbus, дружелюбный интерфейс. Режимы RTU и ASCII. RTU/ASCII по TCP/IP. Freeware.

http://www.agrostroy.ru/index.php?page=4
Лично у меня, ну не помню, чтоб хоть раз получилось без неё с новой железякой разобраться... rolleyes.gif
Max2114
Спасибо, попробую!
Demus
Имел похожие проблемы с ТМ6 и ТСРВ-024М. Там повышенная точность, поэтому нужно считывать не один регистр , а два и потом их преобразовывать в один. Второй в принципе не сильно нужен, но если его не считывать вместе с первым, то Взлет выдает нули или ошибку связи.
Max2114
Цитата(Demus @ 26.1.2013, 13:13) *
Имел похожие проблемы с ТМ6 и ТСРВ-024М. Там повышенная точность, поэтому нужно считывать не один регистр , а два и потом их преобразовывать в один. Второй в принципе не сильно нужен, но если его не считывать вместе с первым, то Взлет выдает нули или ошибку связи.

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


1. При помощи ТМ6 - счиал аднные без проблем.

2. При помощи модбастестера - считать float переменные не получилось. Инт-овые прочитал, а флоатовские - в ответ приходит какая-то хрень

3. При помощи SMH2Gi - в ответ приходят нули

4. При помощи панели Weintek - пробую считать переменную типа float (4 байта) - приходят нули, если заменить тип переменной на 32-х битный челочисленнный - приходит какое-то число.

Мучаюсь дальше...

йцукен
Цитата(Max2114 @ 26.1.2013, 15:53) *
Инт-овые прочитал, а флоатовские - в ответ приходит какая-то хрень

Какая именно? rolleyes.gif
Предполагаю, что "какая-то хрень" - это традиционный для Взлёта обратный порядок битов в float.
BROMBA
Цитата(йцукен @ 25.1.2013, 21:11) *
Скачайте вот эту программу:
Modbus Tester 2.0.5

Танунафиг, любой сниффер подойдет, портмонитор какой-нить, к примеру...
Там скорее всего надо подразобраться с типом переменной - может быть не float, а uint; как только будет видно содержимое "отклика", можно будет прикинуть, как этот отклик декодировать... И, скорее всего, не 8, и не 32-битный регистр, а 16 бит, или 2х16 в uint; впрочем надо глянуть, что оттуда вылазит...
йцукен
Цитата(BROMBA @ 27.1.2013, 13:35) *
Танунафиг, любой сниффер подойдет, портмонитор какой-нить, к примеру...

Танунафиг rolleyes.gif
Andrey_V
Цитата(йцукен @ 27.1.2013, 13:18) *
Танунафиг rolleyes.gif


ПЕРЕВЕДИ biggrin.gif . В общем, ждем положительных результатов и отчета...
йцукен
Цитата(Andrey_V @ 27.1.2013, 14:50) *
ПЕРЕВЕДИ biggrin.gif

Я сообщения уважаемого BROMBА сам со словарём читаю... rolleyes.gif
BROMBA
Цитата(йцукен @ 27.1.2013, 13:57) *
Я сообщения уважаемого BROMBА сам со словарём читаю... rolleyes.gif

Угу, без файного словныка ниц ние бендзе... laugh.gif
Max2114
Цитата(BROMBA @ 27.1.2013, 13:35) *
Танунафиг, любой сниффер подойдет, портмонитор какой-нить, к примеру...
Там скорее всего надо подразобраться с типом переменной - может быть не float, а uint; как только будет видно содержимое "отклика", можно будет прикинуть, как этот отклик декодировать... И, скорее всего, не 8, и не 32-битный регистр, а 16 бит, или 2х16 в uint; впрочем надо глянуть, что оттуда вылазит...

Там переменная типа Float, 32-х битная. По документации - старшиие два байта - читаемый адрес, младшие два байта - адрес+1. Пробовал читать переменную типа LONG (32-х битный int) - получал какое-то значение, птылася его перевести поменяв местами старший и младший байты - получал чушь. Т.е. какое-то значение получал, но оно не соответсвовало тому, что должно было прийти. Самое интересное - при помощи TraceMode6 процедура получения данных заняла минуты 3-5, не больше - с первого раза все заработало.


Модбастестер писал что-то "невнятное" вместо значения. Сейчас не помню уже что (что-то типа "ххххххх4F/2F" - хххх - какое-то слово, первод его не посмотрел, не до того было). Менял адреса запроса - ответ был абсолютно одинаоковым (т.е. теплосчетчик отвечал, но овтет был всегда одинаков.. имею в виду код ответа). Перменный типа INT считываются более-менее корректно и панелью и контроллером и модбастестером. А вот флоат считался пока только при помощи ТМ6. Я реши уже забить на это - у меня запасные датчики есть, поставлю их на ввод и подключу к контроллеру. А с тепосчетчика данные все-равно буду читать взлетовоской прогой.

PS у меня "ощущения" такие, что взлету не нравится запрос и он отвечает нулями. Видимо в ТМ6 как-то подрпавили запросы чтобы теплосчетчик ему корректно отвечал.
BROMBA
Цитата(Max2114 @ 27.1.2013, 15:56) *
Там переменная типа Float, 32-х битная. По документации - старшиие два байта - читаемый адрес, младшие два байта - адрес+1. Пробовал читать переменную типа LONG (32-х битный int) - получал какое-то значение, птылася его перевести поменяв местами старший и младший байты - получал чушь. Т.е. какое-то значение получал, но оно не соответсвовало тому, что должно было прийти. Самое интересное - при помощи TraceMode6 процедура получения данных заняла минуты 3-5, не больше - с первого раза все заработало.
.....
PS у меня "ощущения" такие, что взлету не нарвится запрос и он отвечает нулями. Видимо в ТМ6 как-то подрпавили запросы чтобы теплосчетчик ему корректно отвечал.

Вот-вот. Может быть, запрос сформулирован некорректно - если, к примеру, засылается команда "read single holding register", усторойство отдаёт значение этого регистра, невзирая, что там "лежит"; если же засылается команда "read multiply registers", то устройство отдаст содержимое регистров, и разбирайтесь, мол с этим дальше, как хотите. В Трейсмоде есть какая-никакая автоматическая "распознавалка", то есть, если указывать, какую собственно, float Вы хотите видеть, Трейсмода Вам это самое и покажет; В ТМ6, возможно, процедуру запроса/декодирования и подправили, это науке неизвестно.
Кстате, в документации на разные устройства и софт, имеет место быть различная трактовка типов переменных - одни говорят - long, другие - uint; float тоже может быть одинарной и двойной точности...
К примеру, если читать из овенского МВА8 по стандартному овенскому протоколу - отдаёт float одинарной точности, если использовать modbus-rtu, отдаёт uint с устанавливаемой десятичной точкой... Содержимое регисторв одно, а в различных протоколах отображается по-разному...
йцукен
Цитата(Max2114 @ 27.1.2013, 14:56) *
Видимо в ТМ6 как-то подрпавили запросы чтобы теплосчетчик ему корректно отвечал.

А у ТМ6 есть собственный драйвер под ТСРВ-034?
Или Вы стандартным матбасовским опрашиваете?

Цитата(BROMBA @ 27.1.2013, 14:55) *
Угу, без файного словныка ниц ние бендзе... laugh.gif

У меня нет словоря чтоб понять Вас. rolleyes.gif
йцукен
Цитата(Max2114 @ 27.1.2013, 14:56) *
PS у меня "ощущения" такие, что взлету не нравится запрос и он отвечает нулями. Видимо в ТМ6 как-то подрпавили запросы чтобы теплосчетчик ему корректно отвечал.

Надо будет потроллить ТСРВ034, пока время есть свободное...
Может пригодиться... rolleyes.gif
Max2114
Цитата(йцукен @ 27.1.2013, 16:14) *
А у ТМ6 есть собственный драйвер под ТСРВ-034?
Или Вы стандартным матбасовским опрашиваете?

Стандартным модбасовским
йцукен
Цитата(Max2114 @ 27.1.2013, 16:27) *
Стандартным модбасовским

Тогда как они могли чё-то там подправить? rolleyes.gif
Или содержимое ответа анализируют, и включают нужный алгоритм обработки? Молодцы, если так... rolleyes.gif
Заинтересовали, возьму сей прибор у друзей, помучить... rolleyes.gif
Max2114
Цитата(BROMBA @ 27.1.2013, 16:13) *
Вот-вот. Может быть, запрос сформулирован некорректно - если, к примеру, засылается команда "read single holding register", усторойство отдаёт значение этого регистра, невзирая, что там "лежит"; если же засылается команда "read multiply registers", то устройство отдаст содержимое регистров, и разбирайтесь, мол с этим дальше, как хотите. В Трейсмоде есть какая-никакая автоматическая "распознавалка", то есть, если указывать, какую собственно, float Вы хотите видеть, Трейсмода Вам это самое и покажет; В ТМ6, возможно, процедуру запроса/декодирования и подправили, это науке неизвестно.
Кстате, в документации на разные устройства и софт, имеет место быть различная трактовка типов переменных - одни говорят - long, другие - uint; float тоже может быть одинарной и двойной точности...
К примеру, если читать из овенского МВА8 по стандартному овенскому протоколу - отдаёт float одинарной точности, если использовать modbus-rtu, отдаёт uint с устанавливаемой десятичной точкой... Содержимое регисторв одно, а в различных протоколах отображается по-разному...
В описалове на взлет написано что флоат - четырех байтовый. И что поддерживается как функция чтения "read multiply registers" так и "read single registers". А вот в модбастестере действительно не понятно сколько байт он запрашивает и типа Float там вообще нет. При помощи панели и при помощи ПЛК я запрашиваю как раз 32-х битный флоат. И ничего не выходит. Если бы старйший и младший бат были бы поменяни местами, то приходило бы хоть что-то в экспотенциальном виде невразумиетльное. А так он нули отвечает.


BROMBA
Цитата(йцукен @ 27.1.2013, 16:22) *
Надо будет потроллить ТСРВ034, пока время есть свободное...
Может пригодиться... rolleyes.gif

Кстате, MULTICAL® 601 троллить не доводилось?
Когда понадобилось читать значения расхода для частотника, мы когда-то, не заморачиваясь, воткнули опционно-стандартный аналоговый выход... но, времени на пытки и издевательства катастрофически нехватает, а в скором времени, возможно, надо будет массово подключать к существующим сеткам, ибо у заказчика в одном месте уже засвербело...
Max2114
Цитата(йцукен @ 27.1.2013, 16:31) *
Тогда как они могли чё-то там подправить? rolleyes.gif
Или содержимое ответа анализируют, и включают нужный алгооритм обработки? Молодцы, если так... rolleyes.gif
Заинтересовали, возьму сей прибор у друзей, помучить... rolleyes.gif

Я так думаю, что подправили. У них на форуме несколько лет назад люди писали что не могут данные со взлета по модбасу считать.. возможно тогда они что-то и добавили... надо будет им в понедельник позвонить и попробовать "попытать" на эту тему...
йцукен
Цитата(BROMBA @ 27.1.2013, 16:32) *
Кстате, MULTICAL® 601 троллить не доводилось?

Неа... "Мультиговно" пока удавалось обходить стороной... rolleyes.gif
Demus
Это я и писал им (трейсмодовцам) несколько лет назад на форуме. Слежу активно за ТМ. Вроде по поводу взлетов не было новостей.

Автор, можете описать в ТМ какой источник-приемник выбирали, какой тип канала привязывали. На экране какой формат отображения ставили? И дайте уже цифры той аброкадабры побайтово которую получаете не в ТМ и какому значению должна соответствовать.
Max2114
Цитата(Demus @ 27.1.2013, 17:37) *
Это я и писал им (трейсмодовцам) несколько лет назад на форуме. Слежу активно за ТМ. Вроде по поводу взлетов не было новостей.

Автор, можете описать в ТМ какой источник-приемник выбирали, какой тип канала привязывали. На экране какой формат отображения ставили? И дайте уже цифры той аброкадабры побайтово которую получаете не в ТМ и какому значению должна соответствовать.

В ТМ6 в источниках-приемниках использовал группу Modbus, переменную типа "Rin_Float(4)" считал для пробы два адреса c046 и c048 (в десятичном виде 49222 и 49224). На экарне создал аргументы с типом Real. Источники-прииемники перетщил в RTM. Создал в RTM нужный ком-порт с правильными настройками. Перетащил экран в RTM, привязал к аргументам получившиеся два канала со счетчика. Поставил на экране два объекта типа "Текст", привязал их к двум аргументам, задал в настройках отображения типа Float. Скомпилировал, запустил под МРВ. Все с первого раза заработало.


PS Небольшая поправка - сначала я считал одну температуру. Она сразу заработала. После считал вторую. Сравнил с показаниями в теплосчетчике - все совпадало вплоть до сотых.
PPS аброкадабру из цифр при чтении 32-х битного целочисленного числа привести не могу, так как сейчас не на объекте и я еще нигде не записал. На вскидку было число 32501672 (что-то типа того). По идее соответсвовать оно должно было значению 70-68 градусов по Цельсию. Но оно не менялось совсем (а во время работы у меня температура "плавала", так как я паралельно с котлами баловался).
Romer
ТМ автоматом проставляет нужное количество регистров в запросе от начального адреса в зависимости от типа канала, к которому привязан описатель. Если запросили 3-й или 4-й функцией значение для канала float, то он не один регистр запросит у прибора, а два, чтобы во float конвертнуть.

Кстати, сам лично на практике работал со взлетами и в ТМ6 и сейчас работаю в своей скаде, там есть свои нюансы, не только в протокольной части, но Взлеты еще и капризны по настройкам канала связи.
йцукен
Цитата(йцукен @ 27.1.2013, 16:31) *
Заинтересовали, возьму сей прибор у друзей, помучить... rolleyes.gif

Короче, докладываю. rolleyes.gif Сегодня дошли до него руки.
Без особого труда получил показания с прибора ВЗЛЁТ ТСРВ-034 на дисплей контроллера SMH-2G.
Вся процедура заняла примерно 3 часа рабочего времени вместе с изучением документации, поиском решений и пайкой шнуров.
Выявлены следующие особенности чтения переменных из ВЗЛЁТ ТСРВ-034:
1. На запрос числа float он отвечает долго. В 200 мс не укладывается точно. Я поставил тайм-аут 1 сек, хотя, возможно, он отвечает и быстрее, позже проверю.
2. Читать температуру нужно с адресов (hex):
С000 - канал 1
С002 - канал 2
С004 - канал 3
По документации взлёта она именуется как "преобразованная температура" и именно она отображается на его дисплее и, скорее всего, пишется в архив (нужно проверить).
3. Читать в SMH-2G нужно переменную long, а затем преобразовывать её в переменную real при помощи макроса, выложенного неким Arsiе на форуме стигматикса:
http://forum.segnetics.com/showthread.php?t=461, установив значение 1 на входе "Mode".
Max2114
Цитата(йцукен @ 28.2.2013, 19:16) *
Короче, докладываю. rolleyes.gif Сегодня дошли до него руки.
Без особого труда получил показания с прибора ВЗЛЁТ ТСРВ-034 на дисплей контроллера SMH-2G.
Вся процедура заняла примерно 3 часа рабочего времени вместе с изучением документации, поиском решений и пайкой шнуров.
Выявлены следующие особенности чтения переменных из ВЗЛЁТ ТСРВ-034:
1. На запрос числа float он отвечает долго. В 200 мс не укладывается точно. Я поставил тайм-аут 1 сек, хотя, возможно, он отвечает и быстрее, позже проверю.
2. Читать температуру нужно с адресов (hex):
С000 - канал 1
С002 - канал 2
С004 - канал 3
По документации взлёта она именуется как "преобразованная температура" и именно она отображается на его дисплее и, скорее всего, пишется в архив (нужно проверить).
3. Читать в SMH-2G нужно переменную long, а затем преобразовывать её в переменную real при помощи макроса, выложенного неким Arsiе на форуме стигматикса:
http://forum.segnetics.com/showthread.php?t=461, установив значение 1 на входе "Mode".

А какой тип переменных брали? R(in)?

PS Некий Arise - это разработчик конструктора и техподдержка сегнетикса smile.gif (если что)
Max2114
Если Вы не поленились и потратили 3 часа времени... предлагаю выложить прогу с чтением переменных со взлета на форуме сегнетикса... Кому-нибудь да пригодится...
йцукен
Цитата(Max2114 @ 1.3.2013, 5:34) *
А какой тип переменных брали? R(in)?

Да. R(in).
All_Ex81
может кому поможет, читал веинтеком с помощью скриптов:
GetData(g1, "MODBUS RTU (zero-based addressing)", 3x, 49426, 2)
Max2114
Цитата(All_Ex81 @ 15.3.2013, 8:06) *
может кому поможет, читал веинтеком с помощью скриптов:
GetData(g1, "MODBUS RTU (zero-based addressing)", 3x, 49426, 2)
А в какую переменную записывал? т.е. типа данныйх g1 какой?


All_Ex81
float g1
Max2114
а 2 в конце что значит? ( в скрипте по умолчанию стоит 1)..
All_Ex81
Цитата(Max2114 @ 15.3.2013, 8:13) *
а 2 в конце что значит? ( в скрипте по умолчанию стоит 1)..


количество принимаемых элементов
Max2114
вот я пенелью по сути тоже самое делал, тольке не скриптом читал а в элемент оборажения... когда читал float - приходили нули, когда целочисленное 32-х битное - какая-то фигня из чисел...
All_Ex81
Цитата(Max2114 @ 15.3.2013, 9:53) *
вот я пенелью по сути тоже самое делал, тольке не скриптом читал а в элемент оборажения.


в скрипте читает 2 элемента, а в элементе отображения только один, может в этом дело
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.