Вход

Просмотр полной версии : Работа с FLOAT переменными.



EvilH0mer
26.12.2025, 11:39
Подскажите пожалуйста. В сети RS-485 есть МЭ110-220.3М, ПР100 и Slave на ПК. Для тестов используется одна переменная, напряжение на фазе А. В slave на ПК она передаётся и нормально отображается. Но в режиме отладки на ПР100 значения прыгают от минус миллионов до плюс квадриллионов. К примеру, при сравнении значения переменной напряжения на входе А с константой, выход ПРки периодически срабатывает, как будто на фазе более 300 вольт. Не понимаю как правильно сделать. 87414

melky
26.12.2025, 11:43
скорее всего вы зацепили соседний регистр с половиной нужного. но это не точно.

EvilH0mer
26.12.2025, 12:07
Мда, походу так и есть:)

Dimensy
26.12.2025, 12:10
А кто в слейф на ПК пишет, Прка?

EvilH0mer
26.12.2025, 12:24
А кто в слейф на ПК пишет, Прка?

Да переменная с МЭ110-220.3М на ПРке записывается в сетевую переменную для ПК.

Королев Кирилл
26.12.2025, 12:30
Подскажите пожалуйста. В сети RS-485 есть МЭ110-220.3М, ПР100 и Slave на ПК. Для тестов используется одна переменная, напряжение на фазе А. В slave на ПК она передаётся и нормально отображается. Но в режиме отладки на ПР100 значения прыгают от минус миллионов до плюс квадриллионов. К примеру, при сравнении значения переменной напряжения на входе А с константой, выход ПРки периодически срабатывает, как будто на фазе более 300 вольт. Не понимаю как правильно сделать. 87414

Попробуйте изменить порядок байт/регистров - сначала в настройках обмена в лоджике, а потом, когда значения будут приходить корректные в ПР, уже и в MasterOPC.

EvilH0mer
26.12.2025, 12:34
Попробуйте изменить порядок байт/регистров - сначала в настройках обмена в лоджике, а потом, когда значения будут приходить корректные в ПР, уже и в MasterOPC.

Разобрался, просто путал протоколы Овен и Modbus. В Овен только Float, а в Modbus есть и Float и Int, в итоге всё перемешалось в голове. В итоге переделал всё на Int.87415

EvilH0mer
26.12.2025, 12:36
скорее всего вы зацепили соседний регистр с половиной нужного. но это не точно.

Спасибо за наводку:)

kondor3000
26.12.2025, 13:23
Подскажите пожалуйста. В сети RS-485 есть МЭ110-220.3М, ПР100 и Slave на ПК. Для тестов используется одна переменная, напряжение на фазе А. В slave на ПК она передаётся и нормально отображается. Но в режиме отладки на ПР100 значения прыгают от минус миллионов до плюс квадриллионов. К примеру, при сравнении значения переменной напряжения на входе А с константой, выход ПРки периодически срабатывает, как будто на фазе более 300 вольт. Не понимаю как правильно сделать. 87414
Просто у вас Float даже читается не правильно, регистры переставлены, в итоге вы сравниваете с 300 не 230 В, а число в 6 степени,
при передаче в ОРС регистры снова переставляются, в итоге правильно.
Перестановку регистров надо было сделать и при чтении и при записи.

EvilH0mer
26.12.2025, 13:38
Просто у вас Float даже читается не правильно, регистры переставлены, в итоге вы сравниваете с 300 не 230 В, а число в 6 степени,
при передаче в ОРС регистры снова переставляются, в итоге правильно.
Перестановку регистров надо было сделать и при чтении и при записи.

Да, спасибо. Я уже понял, что была проблема с регистрами. Было не понятно как в лоджик вбить 0x0019, 0x001A, в итоге разобрался, что вбивается последний регистр. Получилось 26, 28, 30.87416 С Float было тоже самое.

kondor3000
26.12.2025, 13:56
Да, спасибо. Я уже понял, что была проблема с регистрами. Было не понятно как в лоджик вбить 0x0019, 0x001A, в итоге разобрался, что вбивается последний регистр. Получилось 26, 28, 30.87416 С Float было тоже самое.

И опять не правильно, читать надо 1 регистр 0x0019, переводите калькулятором из HEX в DEC и получаете 25 адрес (а не 26 как у вас), а перестановку регистров делать в мастере, поставив галку.

Вы же читаете 26 и 27 регистр, половину из фазы А, вторую из фазы В, так как они одинаковые, у вас правильно, но в других случаях будет жопа,
особенно с Float.

Dimensy
26.12.2025, 14:26
И опять не правильно, читать надо 1 регистр 0x0019, переводите калькулятором из HEX в DEC и получаете 25 адрес (а не 26 как у вас), а перестановку регистров делать в мастере, поставив галку.

Вы же читаете 26 и 27 регистр, половину из фазы А, вторую из фазы В, так как они одинаковые, у вас правильно, но в других случаях будет жопа,
особенно с Float.

Насколько я понял, чел читает UINT16. И так получается, что по адресу 26 находится младший регистр числа INT32.

kondor3000
26.12.2025, 14:40
Насколько я понял, чел читает UINT16. И так получается, что по адресу 26 находится младший регистр числа INT32.

Это понятно, просто выводы он сделал не правильные.
И будет читать Float по 2 адресу всегда и получать задницу в измерениях.
А ещё кроме Напряжения, там есть ток, мощность и фаза, где нибудь, да всплывёт хрень непонятная.

EvilH0mer
26.12.2025, 15:39
И опять не правильно, читать надо 1 регистр 0x0019, переводите калькулятором из HEX в DEC и получаете 25 адрес (а не 26 как у вас), а перестановку регистров делать в мастере, поставив галку.

Вы же читаете 26 и 27 регистр, половину из фазы А, вторую из фазы В, так как они одинаковые, у вас правильно, но в других случаях будет жопа,
особенно с Float.

Что то я совсем запутался. Понятно если переключаю на инт беру инт, если флоат то флоат, а что вбивать в регистор то? 87422

melky
26.12.2025, 15:48
адрес 80 (или 81), количество регистров = 2, Тип Вещественное

у вас же адрес указан 0x0050 - это в HEX, калькулятором в режиме программист смотрите какое это DEC значение (возможно надо делать адрес+1, определить опытным путем)

Dimensy
26.12.2025, 15:58
Что то я совсем запутался. Понятно если переключаю на инт беру инт, если флоат то флоат, а что вбивать в регистор то?

Так как в приборе целочисленный формат INT32, а ПРка поддерживает только UINT32, правильнее будет выбрать FLOAT. Регистр 80 и поиграться галками в строке "Порядок байт" (скорее всего, надо поставить еще и старшим регистром вперед)

kondor3000
26.12.2025, 16:38
Что то я совсем запутался. Понятно если переключаю на инт беру инт, если флоат то флоат, а что вбивать в регистор то? 87422

Всегда вбиваете первый адрес, для целого (32 бита) 25, для флоат 80.
Далее в ПР мастере, ставите (снимаете) галку Старшим регистром вперёд, добиваясь правильных показаний.
Для напряжения примерно 235 В.
Это касается всех 32 битных переменных (где 2 регистра).

EvilH0mer
26.12.2025, 16:40
Так как в приборе целочисленный формат INT32, а ПРка поддерживает только UINT32, правильнее будет выбрать FLOAT. Регистр 80 и поиграться галками в строке "Порядок байт" (скорее всего, надо поставить еще и старшим регистром вперед)

Спасибо, выбрал Float, все переделал, выбрал регистры 81,83, 85, да, нужно было старшим битом вперёд. Все заработало, ну как всё:))) Третья фаза, 10 раз перепроверил, даже в ПРку читается какая то фигня. 87425 По выделенному на скрине читается фигня. Так и не понял по какому читать, что из 0x0054, 0x0055 по третьей фазе вбивать в ПРку на чтение с прибора.

EvilH0mer
26.12.2025, 16:41
Всегда вбиваете первый адрес, для целого 25, для флоат 80.
Далее в ПР мастере, ставите (снимаете) галку Старшим регистром вперёд, добиваясь правильных показаний.
Для напряжения примерно 235 В.

Спасибо попробую.

kondor3000
26.12.2025, 21:44
Спасибо попробую.

Чтобы больше не мучились, скрин из шаблона, с адресами 80, 82, 84 и т. д. 87430
Осталось проверить галку на перестановке регистров

melky
27.12.2025, 06:46
Вроде Овен адресацию указывает от 0, сколько настраивал приборов, вроде так было, но чудны бывают.
И если так, то ставя на чтение адрес 81 вы прочтете две половины разных переменных.

И какая тут будет разница, как вы настраиваете последовательность? Только обман зрения :)