Получение данных из float Holding Register

Связь между InTouch и программируемыми логическими контроллерами, компьютерами
и другими устройствами.

Получение данных из float Holding Register

Сообщение Igor V. Zhdanov » Чт июн 10, 2010 9:15 am

Используется связка:
УВП-280А --> Шлюз Modbus/TCP --> DASMBTCP
Значение float не правильно отображается, например, вместо 10 показывает 1,634774E-19. Это связано с не корректным считыванием информации из регистров Modbus.
Можно ли как-нибудь исправить ситуацию настройками драйвера, без написания дополнительных скриптов?
Igor V. Zhdanov
 
Сообщения: 54
Зарегистрирован: Вт авг 21, 2007 4:28 pm

Сообщение Klinkmann_Msk » Чт июн 10, 2010 9:57 am

To Igor V. Zhdanov:

Попробуйте:
1.
• 219 HRS 16-bit signed integer
• 000 HRL 32-bit signed integer
• 100 HRF 32-bit floating point
• 000 HRU 32-bit unsigned integer

2.
400001 F
When a space and the letter "F" follow the register
number, the register contents are treated as a floatingpoint
quantity.
This takes up two consecutive registers.
Klinkmann_Msk
 
Сообщения: 819
Зарегистрирован: Пт сен 18, 2009 10:12 am

Сообщение Igor V. Zhdanov » Чт июн 10, 2010 11:28 am

Первый пункт не понял.

Item выглядит таким образом: 41033 f. Т.е обращаюсь 3-ей функцией к регистрам 1032 и 1033.
RTU запрос: 01 03 04 08 00 02 44 F9
А вот ответ RTU: 01 03 04 00 00 20 41 23 C3. Здесь все правильно, 20 41 как раз и есть 10,0. А вот драйвер DASMBTCP не хочет нормально определить. Может, есть какая-то хитрая настройка?
Igor V. Zhdanov
 
Сообщения: 54
Зарегистрирован: Вт авг 21, 2007 4:28 pm

Сообщение Klinkmann_Msk » Вт июн 15, 2010 8:16 am

To Igor V. Zhdanov:

1. Первый пункт не понял.
The MBTCP DAServer also uses another naming convention called the
Absolute Notation. This naming convention is independent of the PLC model numbers.
The Absolute naming convention allows access to the four Modbus data types, each with an address from 0 to 65535. The data types are indicated by the item name suffix characters.
The IR and HR absolute notation can also be combined with the following
conversions: L (long), F (floating), S (signed), or U (unsigned).

2. Какова версия DASMBTCP ? Свежая версия = 2.0

3. Попробуйте "поиграть" полями Use Concept data structures (Reals), Register Size и Register Type на закладке New ModbusPLC Parameters.
Klinkmann_Msk
 
Сообщения: 819
Зарегистрирован: Пт сен 18, 2009 10:12 am

Сообщение Igor V. Zhdanov » Вт июн 15, 2010 11:20 am

DASMBTCP 1.1
где можно скачать 2?
Igor V. Zhdanov
 
Сообщения: 54
Зарегистрирован: Вт авг 21, 2007 4:28 pm

Сообщение Klinkmann_Msk » Вт июн 15, 2010 12:11 pm

To Igor V. Zhdanov:

Попробуйте отсюда:
http://files.mail.ru/BJK7YH

Хотя, и версия 1.5 SP1, скорее всего, подошла бы.
Klinkmann_Msk
 
Сообщения: 819
Зарегистрирован: Пт сен 18, 2009 10:12 am

Сообщение Igor V. Zhdanov » Ср июн 16, 2010 4:15 am

никакого результата :(
нужно бы читать как 41 20 00 00 тогда все ОК
Igor V. Zhdanov
 
Сообщения: 54
Зарегистрирован: Вт авг 21, 2007 4:28 pm

Сообщение Klinkmann_Msk » Ср июн 16, 2010 8:26 am

To Igor V. Zhdanov:

никакого результата
Странно. Жаль.
Если я правильно понял, на Вашем приборе есть последовательный порт. Можете попробовать считывать информацию через него с помощью DASMBSerial?
Klinkmann_Msk
 
Сообщения: 819
Зарегистрирован: Пт сен 18, 2009 10:12 am

Сообщение Klinkmann_Msk » Ср июн 16, 2010 8:34 am

To Igor V. Zhdanov:

Очень надеюсь, что поможет.
Копипаст из техноты 693:

When accessing a floating point value on some end devices, the value may be incorrect. For example, if a value of 123.45 is expected but a value of -2.7E+38 is being returned, the order of the two 16 bit registers that make up the 32-bit floating point value must be reversed. This can be done by selecting (or unselecting) the Use Concept Data Structures (Reals) option in the DASMBTCP PLC object.
Klinkmann_Msk
 
Сообщения: 819
Зарегистрирован: Пт сен 18, 2009 10:12 am

Сообщение Igor V. Zhdanov » Ср июн 16, 2010 9:37 am

Use Concept Data Structures выбрана. Если отключаю, то значение 0.
Во всей документации, которую прочитал, сказано, что драйвер поддерживает IEEE float. где-то какая-то хрень сидит...
Пробовал Item такого вида: 1000 IRF (сейчас я мучаю эти регистры), с тем же результатом.
В обед уже пришла мысль использовать Serial. буду пытать дальше
Igor V. Zhdanov
 
Сообщения: 54
Зарегистрирован: Вт авг 21, 2007 4:28 pm

Сообщение Igor V. Zhdanov » Ср июн 16, 2010 12:19 pm

DASMBSerial - такой же результат
Igor V. Zhdanov
 
Сообщения: 54
Зарегистрирован: Вт авг 21, 2007 4:28 pm

Сообщение Klinkmann_Msk » Ср июн 16, 2010 2:27 pm

To Igor V. Zhdanov:

А можете продолжить мучения?
Есть масса OPC-серверов для Modbus (KEPWare, Matricon). А у WW есть OPC-клиент (OPCLink/FSGateway). Можете обкатать такую связку?
Klinkmann_Msk
 
Сообщения: 819
Зарегистрирован: Пт сен 18, 2009 10:12 am

Сообщение Klinkmann_Msk » Ср июн 16, 2010 4:44 pm

To Igor V. Zhdanov:

Я тут подумал (и мне понравилось!)
А не связаны ли Ваши проблемы с национальными настройками ОС? Попробуйте установить национальные настройки ОС на English (USA). В первую очередь это касается раздела "Числа-Разделитель целой и дробной части".
Klinkmann_Msk
 
Сообщения: 819
Зарегистрирован: Пт сен 18, 2009 10:12 am

Сообщение Igor V. Zhdanov » Чт июн 17, 2010 4:11 am

У меня установлен Windows XP Pro Eng SP3. Установил региональные настройки в English (United States). В строке Number: 123,456,789.00
Попробовал установить Modicon MODBUS Serial IO Server 7.5. Там включение/отключение Use Concept Data никак не влияет на результат.
Вообщем, все по-старому :(
Igor V. Zhdanov
 
Сообщения: 54
Зарегистрирован: Вт авг 21, 2007 4:28 pm

Сообщение Klinkmann_Msk » Чт июн 17, 2010 3:52 pm

To Igor V. Zhdanov:

Тогда пока остаётся только:
Есть масса OPC-серверов для Modbus (KEPWare, Matricon). А у WW есть OPC-клиент (OPCLink/FSGateway). Можете обкатать такую связку?
Klinkmann_Msk
 
Сообщения: 819
Зарегистрирован: Пт сен 18, 2009 10:12 am

Сообщение Джа » Ср июл 07, 2010 3:17 pm

Klinkmann_Msk писал(а):To Igor V. Zhdanov:

Я тут подумал (и мне понравилось!)
А не связаны ли Ваши проблемы с национальными настройками ОС? Попробуйте установить национальные настройки ОС на English (USA). В первую очередь это касается раздела "Числа-Разделитель целой и дробной части".

Национальные настройки к протоколу Modbus не относятся, числа в памяти хранятся без точек, пробелов и запятых :lol: - вот если бы вы число из какого-нить текста конвертили - другое дело. Проблема просто в последовательноти регистров, вечная бага ModBus - протокол официально 16тиразрядный, float - 32 бита - ну и получаем на выходе что напридумывали своих форматов следования 16ти разрядных слов (их 2 получается - но кто-то и в словах байты додумался переставлять :twisted: ). Надо действительно тестить с хорошими OPC-серверами, как предложил Klinkmann_Msk, например KepWare - там есть опция "переворота" слов для float (в Matrikon-е не видел, но мож есть, у KepWare более удобная демка для этого).
Как вариант проверки - попробуйте прочитать регистры float со сдвигом в адресе на +1, лучше чтобы после 2го регистра был 0 записан - если получите похожее на нужное число (после запятой - будет 0 или лажа) - значит просто слова перевернуты.
Джа
 
Сообщения: 18
Зарегистрирован: Сб ноя 28, 2009 9:19 am

Сообщение Klinkmann_Msk » Чт июл 08, 2010 6:39 am

To Джа:

"Проблема просто в последовательноти регистров, вечная бага ModBus - протокол официально 16тиразрядный, float - 32 бита - ну и получаем на выходе что напридумывали своих форматов следования 16ти разрядных слов (их 2 получается - но кто-то и в словах байты додумался переставлять )."
Помню, специально тестировал Modbus-сервера от WW на предмет работы с 64-битными числами (Long, Real64). И нормально работали. Правда, с "правильным" KEPWare-сервером :)
Klinkmann_Msk
 
Сообщения: 819
Зарегистрирован: Пт сен 18, 2009 10:12 am

Сообщение Джа » Чт июл 08, 2010 8:46 am

Klinkmann_Msk писал(а):To Джа:

"Проблема просто в последовательноти регистров, вечная бага ModBus - протокол официально 16тиразрядный, float - 32 бита - ну и получаем на выходе что напридумывали своих форматов следования 16ти разрядных слов (их 2 получается - но кто-то и в словах байты додумался переставлять )."
Помню, специально тестировал Modbus-сервера от WW на предмет работы с 64-битными числами (Long, Real64). И нормально работали. Правда, с "правильным" KEPWare-сервером :)

Дак в том-то и дело что именно KepWare И собирает регистры правильно. Но если существующий софт этого не позвоялет - бывает даже переписывают программу ПЛК, переворачивают регистры там специально - есть реальные примеры.
Джа
 
Сообщения: 18
Зарегистрирован: Сб ноя 28, 2009 9:19 am

Сообщение Igor V. Zhdanov » Вт июл 13, 2010 12:33 pm

С ОРС серверами не экспериментировал, т.к. уверен, что результат будет положителен. Корень проблемы ясен. Существует даже ОРС специально для УВП-280 от Инсат. Но покупать никто не будет. Требуется выводить только расход, всего несколько тегов. Поэтому будет проще считать float как 2 целых и перевернуть в Интаче.
Igor V. Zhdanov
 
Сообщения: 54
Зарегистрирован: Вт авг 21, 2007 4:28 pm

Сообщение Igor V. Zhdanov » Чт сен 16, 2010 2:30 am

УВП-280 не только переворачивает регистры (с этой проблемой драйвер модбас справился бы), но переворачивает еще и байты в слове. Поэтому считываю как целое и преобразовываю в Интаче вот таким образом (может, кому пригодится):
Получение старшего слова и перестановка байтов:
((T1 SHL 16 SHR 24)+(T1 SHL 24 SHR 16))
Получение младшего слова и перестановка байтов:
((T1 SHR 24)+(T1 SHL 8 SHR 16))
Преобразование:
H31=(((a31 - (Int(a31/128))*128)+128)*65536+b31)*2**((Int(a31/128)) - 150)
Делаем подстановку в последнюю формулу и получаем в итоге:
(((((T1 SHL 16 SHR 24)+(T1 SHL 24 SHR 16)) - (Int(((T1 SHL 16 SHR 24)+(T1 SHL 24 SHR 16))/128))*128)+128)*65536+((T1 SHR 24)+(T1 SHL 8 SHR 16)))*2**((Int(((T1 SHL 16 SHR 24)+(T1 SHL 24 SHR 16))/128)) - 150)
Тег в Интаче должен быть Real с диапазоном от -1e+015 до 1e+015, item типа 31001I, 31004I ит.д. Считывается как двойное слово.
Можно и упростить, но делал в спешке.
Igor V. Zhdanov
 
Сообщения: 54
Зарегистрирован: Вт авг 21, 2007 4:28 pm

Re: Получение данных из float Holding Register

Сообщение b4900113 » Ср фев 01, 2012 12:01 pm

что то не выходит, не могли бы вы подробнее описать третью формулу
b4900113
 
Сообщения: 15
Зарегистрирован: Ср янв 25, 2012 6:33 pm

Re: Получение данных из float Holding Register

Сообщение b4900113 » Пт фев 03, 2012 3:43 pm

Igor V. Zhdanov Вы работали с архивами данного прибора? Посвятите пожалуйста в тонкости этой черной магии.
b4900113
 
Сообщения: 15
Зарегистрирован: Ср янв 25, 2012 6:33 pm

Re: Получение данных из float Holding Register

Сообщение trs » Вт мар 27, 2012 1:35 pm

А можно ли стандартными средствами получить данные double float?
trs
 
Сообщения: 7
Зарегистрирован: Вт мар 27, 2012 1:23 pm

Re: Получение данных из float Holding Register

Сообщение Генератор зла » Вт мар 27, 2012 4:08 pm

Джа писал(а):Klinkmann_Msk писал(а):
To Джа:

"Проблема просто в последовательноти регистров, вечная бага ModBus - протокол официально 16тиразрядный, float - 32 бита - ну и получаем на выходе что напридумывали своих форматов следования 16ти разрядных слов (их 2 получается - но кто-то и в словах байты додумался переставлять )."
Помню, специально тестировал Modbus-сервера от WW на предмет работы с 64-битными числами (Long, Real64). И нормально работали. Правда, с "правильным" KEPWare-сервером
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

Re: Получение данных из float Holding Register

Сообщение trs » Вт мар 27, 2012 4:30 pm

Генератор зла писал(а):

Только через kepware, я правильно понял?
trs
 
Сообщения: 7
Зарегистрирован: Вт мар 27, 2012 1:23 pm

Re: Получение данных из float Holding Register

Сообщение Генератор зла » Вт мар 27, 2012 4:53 pm

Нет, не правильно.
Я работаю через KEPWare. С ним у меня всё Ок. Как с другими - не знаю. Запросите техсаппорт.
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

Re: Получение данных из float Holding Register

Сообщение trs » Вт мар 27, 2012 5:17 pm

Да, с kepware всё хорошо, и float, и double float. Неужели нельзя нормальный DASMBTCP (DASMBSerial) сделать?
trs
 
Сообщения: 7
Зарегистрирован: Вт мар 27, 2012 1:23 pm

Re: Получение данных из float Holding Register

Сообщение Генератор зла » Вт мар 27, 2012 5:33 pm

С версией 2.0 не работает?
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

Re: Получение данных из float Holding Register

Сообщение trs » Вт мар 27, 2012 5:51 pm

Double float даже в документации не упоминается. С float вышеобозначенную проблему (с перестановкой байтов) решить не удаётся. (А я ещё удивлялся - что это подрядчики кучу формул нагородили?).
trs
 
Сообщения: 7
Зарегистрирован: Вт мар 27, 2012 1:23 pm

Re: Получение данных из float Holding Register

Сообщение Генератор зла » Вт мар 27, 2012 5:56 pm

trs писал(а):Double float даже в документации не упоминается.

В документации много чего не упоминается ;) Например, в InTouch тип IO Integer/Memory Integer. Но диапазон у него как у Double, а вовсе не -32768 - +32767.
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

След.

Вернуться в Связь InTouch с ПЛК

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

cron