Wb-mai6

Здравствуйте. Купил WB-MAI6 для подключения термопар ТХА (К) и опроса их через Trace mode 6. Подключился через OWEN OPC server. Без проблем поменял скорость опроса, формат данных. Установил тип датчика - термопару ТХА. Для этого по адресу 5120 установил значение 4096. Пытаюсь опрашивать вход 1 по адресу 5378. Формат int32. Получаю число далекое от реальности. Опрашиваю напряжение питания блока по адресу 123 получаю число 3315. Блок запитан напряжением ровно 24 В. Опрашиваю температуру модуля по адресу 124 - получаю число 414. Как правильно опрашивать модуль?

Соответствует норме, 3.315В нормальное напряжение микроконтроллера.

Так же вполне адекватная температура 41,4 градуса (в щите, у микроконтроллера). У меня сейчас за бортом -2, а у модуля около 5 градусов.

Что выдаёт по термопарам? Какие ожидаются показания? Термопары в правильной полярности подключены? (Плюс-минус не перепутан?)
Единственное, не увидел есть ли у данного модуля компенсация температуры холодного спая, но по идее должно быть.

Добрый день!
Как сообщил @Al-x, считанные значения из регистров в используемом вами ПО необходимо преобразовать в соответствующий формат.

Единственное, не увидел есть ли у данного модуля компенсация температуры холодного спая, но по идее должно быть.

Да, в схеме WB-MAI6 компенсация холодного спая предусмотрена.

1 лайк

Ура!!! Я общаюсь с людьми. Первая проблема как вычислить адрес регистра по которому надо прописать код датчика. У меня ТП ТХА(К). Код датчика 4096 (далее все десятичное). А вот адрес регистра прописан мудреной формулой: 4096X + 1024 где X номер входа в моем понимании. Т. е. адрес регистра в который надо прописать код датчик для входа 1 будет 40961+1024 = 5120. Для входа 2 формула будет 40962+1025 = 9217 Если я не прав - поправьте. Адрес регистра с которого надо считывать значение с первого входа тоже прописаны формулой 4096X + 1280. Т. е. 4096*1+1280 = 5376. Снова поправьте меня. Не просто ли было просто написать адрес регистра? Укажите мне просто адреса регистров где надо прописать код датчика и адреса регистров где надо считать значения. Заранее спасибо.

:warning: Напишу как я вижу этот вопрос (я обычный пользователь, не сотрудник WB)…

В описании указано : " В таблице 5 символ X в адресе регистра — это номер входа от 1 до 6 (от 0x1 до 0x6)."

Настройка: Тип датчика (диф режим) - (регистр 0хХ400 )
Справочно 400(hex) = 1024(dec)

Тип датчика для 1-го  входа:  4096  х 1 + 1024 = 5120   (шестнадцатеричный 0х 1 400)
Тип датчика для 2-го  входа:  4096  х 2 + 1024 = 9216   (шестнадцатеричный 0х 2 400)
Тип датчика для 3-го  входа:  4096  х 3 + 1024 = 13312  (шестнадцатеричный 0х 3 400)
Тип датчика для 4-го  входа:  4096  х 4 + 1024 = 17408  (шестнадцатеричный 0х 4 400)
Тип датчика для 5-го  входа:  4096  х 5 + 1024 = 21504  (шестнадцатеричный 0х 5 400)
Тип датчика для 6-го  входа:  4096  х 6 + 1024 = 25600  (шестнадцатеричный 0х 6 400)

Допустим, нам нужно читать Измеренное значение для канала INxP либо дифференциального канала INx для входов (датчиков) с номерами 1,2,3,4,5,6 (в таблице за это отвечает регистр 0хХ500, только чтение, значение 32-bit, знаковое, целое).

Справочно 500(hex) = 1280(dec) = смещение от начала “страницы” данного входа

:point_right:
1-й датчик: 4096 х 1 + 1280 = 5376 (шестнадцатеричный 0х1500)
2-й датчик: 4096 х 2 + 1280 = 9472 (шестнадцатеричный 0х2500)
3-й датчик: 4096 х 3 + 1280 = 13568 (шестнадцатеричный 0х3500)
4-й датчик: 4096 х 4 + 1280 = 17664 (шестнадцатеричный 0х4500)
5-й датчик: 4096 х 5 + 1280 = 21760 (шестнадцатеричный 0х5500)
6-й датчик: 4096 х 6 + 1280 = 25856 (шестнадцатеричный 0х6500)

Если обратить внимание на шестнадцатеричное представление регистров, то становится проще понимать “страничную” организацию карт регистров (для шести пар датчиков/входов будет шесть идентичных “карт” (блоков/страниц) регистров с идентичными назначениями, но смещенные друг относительно друга на 4096 х “номер датчика” )


Допустим, вам нужно получить (считать) “Текущий коэффициент усиления для канала INxP либо дифференциального канала INx” для входов 1, 2, 3

В таблице мы видим, что за это отвечает регистр 0хХ506 (только чтение, 16-ти битное, знаковое, целое)

:point_right: Получаем нужные нам адреса для входа/датчика:
Первый вход(датчик) = 0х1506 => 5382 (Dec)
Второй вход(датчик) = 0х2506 => 9478 (Dec)
Третий вход(датчик) = 0х3506 => 13574 (Dec)
И так далее.

Здесь гораздо нагляднее представление в 16-тиричном виде - видна структура/логика: 0х1506, 0х2506, 0х3506 , чем тоже самое, но в десятичном: 5382, 9478, 13574…

На мой взгляд (у меня специфический взгляд :slight_smile: ) , если бы ребята из WB исключили бы вообще упоминание “формул” для десятичного значения, то было бы нагляднее воспринимать “блоки” <номер входа><параметр>

Десятичные значения, в данном случае, только “сбивают наглядность” (плохо видна повторяемость/страничность/цикличность/блочность)

Но команду WB я могу понять - не все могут полученное HEX значение “переварить” в DEC, отсюда и вторая колонка в таблице, с которой у вас возникли “запутки”…

:bulb: PS:
Это мое “видение организации адресного пространства” - если оно “не такое как надо” :slight_smile:, то ребята из WB меня наверное поправят.

1 лайк

Видимо вы программист, раз коэффициент 0х1000 не вызывает у вас сомнений, а 4096 вызывает :laughing:
Это ж обычное число 4096, которое повторяется. А господа из WB просто не хотели таблицу в описании раздувать, поэтому описали общую структуру для входа, а не повторили 6 раз, что на самом деле было бы логичнее, и у других производителей как правило, всё же описано (простыня на 5 страниц, да).

Вы почти правы, но только все гораздо запущеннее :slight_smile:
Я разработчик и производитель “железа” с большим стажем, поэтому мои взгляды на жизнь уже безвозвратно проф.деформированы :slight_smile:
Для меня совершенно нормально, что
10+10=100 и что
90+90=120
и если это не так, то я бегу за осциллографом или логическим анализатором чтобы найти и устранить ошибку…

И все (по крайней мере первые 32) числа 2 в степени n для меня слишком родные и не вызывают проблем, даже наоборот, когда я вижу на каком-нибудь ответственном датчике (например, температура) значение 32.768 С - меня это очень сильно напрягает.
4096 - одно из моих “родных” чисел (2 в степени 12, “вес” 12-го разряда шины и т.п.).
Поэтому, как я и писал чуть выше - у меня специфический взгляд. И если произойдет восстание машин, то я скорее всего, автоматически окажусь на другой стороне оси зла :roll_eyes:

Для топикстартера 4096 - некое “абракадабренное” число и непонятные манипуляции с вычислением адреса, поэтому я попытался (как смог) предложить ему взглянуть на эту “математику” моими “бинарными” глазами :slight_smile: (предложить прикоснуться к моей религии)…
Видимо, не очень удачно.

:star2: В свое время ходила шутка:
Как отличить обычного пользователя от системного программиста?
Первый уверен, что в килобайте 1000 байтов, в то время как второй точно знает, что в килограмме колбасы 1024 грамма :slight_smile:

1 лайк

Да, я сам считаю что выкинуть из таблиц “десятичные” - пошло б на пользу.

А вот тут я бы не согласился. В том же modbuspoll регистры задаются в десятичной форме на сколько я помню. Да и сам протокол по факту оперирует десятичными регистрами. По-моему, эта шестнадцатеричная добавка появилась для удобства программистов.

В общем, я бы просто таблицу расширил явными значениями.

Нет.
Под как адрес так и количесво выделено два байта.

Я говорю про названия регистров, они всегда описываются десятичными.
Например, диапазон адресов регистров: с 10001 по 19999. Правда согласен, что без расшифровки в смещения это неудобно программисту, поэтому везде фигурируют и те, и те значения, да ещё и с привязкой к функции.

Записал по адресу 1520 код датчика 4096. Это термопара ХА. Подключаю термопару к входу 1 контакты N минус P плюс. Показания снимаю с адреса 5376. Показывает отрицательное значение. Подключаю термопару к Gnd и P, получаю правдоподобное значение 254. Чуть перепоказывает. В описании написано что для термопары входы N,P. Ладно, что-то показывает, даже температуру тела 395. Теперь хочу подключить термометр сопротивления 1000П. По адресу 5121 отсылаю код датчика 4627. С адреса 5376 снимаю число 100013. Опять ничего не понятно.

У OWEN есть для всех внешних модулей отличные конфигураторы. Может и здесь есть такие?

Согласно таблице регистров вам необходимо считать ДВА регистра 5376 и 5377 , получив 32-х битное знаковое целое

image

регистр 5376 вернет “первые” 16 бит (АВ), а регистр 5377 вернет “вторые” 16 бит (CD),
Значение 32 бит (ABCD) должно быть интерпретировано как знаковое целое.
Обычно специализированный софт, формирующий запрос на чтение регистров, если ему правильно указать ТИП возвращаемого значения, сам примет решение относительно того сколько регистров ему читать (один - для 16-ти битных данных, два - для 32-х битных данных, четыре - для 64-х битных данных)

PS Если запрос к регистрам формируете вручную, то необходимо считывать пару значений (два регистра) за один раз (в одном цикле запроса) чтобы избежать “временнОй рассинхронизации данных” - когда значение из одного регистра принадлежит одному циклу измерений, а значение второго регистра, полученное в другое время, принадлежит уже другому циклу измерений - в этом случае “склеивание” первых 16-ти бит одного измерения и “вторых” 16-ти бит второго измерения в одно 32-х битное значение для получения 32-bit sint даст неверный результат.

Посмотрите, например, вот здесь - Rilheva Modbus Poll — Wiren Board + шаблон для mai6 - wb-community/templates/rilheva-modbus-poll/templates/wb-mai6.rilmp at main · wirenboard/wb-community · GitHub
Возможно это упростит вам настройку устройства и даст более удобную визуализацию данных…

Я так понимаю, что контроллера WB6 / WB7 / WB8 у вас нет? В контроллере есть шаблоны, которые позволяют настраивать и использовать устройства просто и наглядно (выбирать значения из выпадающих списков, отмечать пункты “галочками” и пр.)

1 лайк

С регистра 5376 я считываю Int32. Это подразумевает считывание 2 регистров одновременно. Если в этом WB нет и в этом заморочек.

Нет контроллеров. Но блоки WB иногда использую.

Скачал. Подключил. Заработало. Огромное спасибо.