Tools


«Сименс» в России

«Сименс» в России

S7-1200 и счетчик ALPHA 1805. Сбор данных по MODBUS RTU

Логические модули LOGO!, базовые контроллеры SIMATIC S7-1200

Модераторы: anna_razgoeva, gulenok_andrey

Alex_NN
Сообщения: 54
Зарегистрирован: 14 июн 2018, 12:28

Сообщение Alex_NN » 15 окт 2019, 09:40

Добрый день, форумчане.
Прошу помочь в решении следующей задачи.
Имеется S7-1200 и 2 счетчика электроэнергии ALPHA 1805. Сбор параметров идет через MODBUS RTU. Среди прочих параметров есть параметры потребленной энергии (блок из шести параметров) в формате INT48, т. е. каждый параметр - это 3 шестнадцати-разрядных регистра, содержащих целое число.
Возникает вопрос, как это число обработать в контроллере, чтобы вывести значение на панель оператора и на "верхний" уровень системы? У контроллера нет ни INT48, ни даже LInt64. Есть правда LReal, но как туда запихать это число из блока данных? Инструкции CONVERT опять же его надо как-то подать в виде цельного входного параметра...

Potapov
Сообщения: 445
Зарегистрирован: 16 апр 2018, 16:32

Сообщение Potapov » 15 окт 2019, 14:42

Энергетики считывают счётчик компом и обрабатывают все данные коммерческого учёта сами
или ставьте S7-1511, который по цене сравним со старшим S7-1215
Изображение

для технического учёта использую PAC3200 со своими трансформаторами, у него нет проблем с форматом данных
Изображение

Аватара пользователя
alexander_lifanov
Сообщения: 64
Зарегистрирован: 12 ноя 2018, 14:53
Откуда: Москва
Контактная информация:

Сообщение alexander_lifanov » 15 окт 2019, 15:12

Potapov, ну зачем сразу S7-1500? Для этой задачи он избыточен. Процесса управления-то нет.
Если уж менять железо - то тогда IOT2040. И RS-485 на борту, и обрабатывай как хочешь, и на отсылке почти любой протокол.

Но вопрос был не про замену железа.
Modbus RTU всё равно оперирует двухбайтовыми словами. Вот так их и хранить и передавать. Если очень надо - собрать в единое целое в SCADA.

LReal не надо - там мантисса и экспонента, потеряете содержимое на преобразовании.
С уважением,
Лифанов Александр
Siemens, DF FA AS, Москва

Potapov
Сообщения: 445
Зарегистрирован: 16 апр 2018, 16:32

Сообщение Potapov » 15 окт 2019, 15:59

alexander_lifanov писал(а):
15 окт 2019, 15:12
Potapov, ну зачем сразу S7-1500? Для этой задачи он избыточен.
вот когда в S7-1200 v4.4 добавят 64-разрядные целые LWORD/LINT числа, то только тогда можно рассуждать об избыточности самого простого S7-1511.
Разница в 100 евро по сравнению с S7-1215, у которого тоже нет RS485 на борту и придётся докупать сопроцессор.
Изображение

Я в прошлом году ввёл систему... по результатам эксплуатации решили её углубить и уширить... + 4 частотника, и до кучи всяких хотелок... и PAC3200 (по результатам эксплуатации поняли что всё таки нужен прибор контроля и регистрации фактического напряжения)
да без проблем... там стоит избыточный S7-1511* :)
Изображение

*немного утрирую... добавляю ещё S7-1215 в качестве вспомогательно сервера с 2 гигабатной картой памяти для локального архива и роутером LTE,
так как не хочу рисковать системой управления и картой в S7-1511.

к сожалению в текущем поколении S7-1500 нет возможности вести архив на выделенной карте памяти :(
S7-1200 - Новая прошивка 4.4
S7-1200 - S7 Graph
S7-1200 - OPC UA сервер
S7-1200 - чтение / запись файла ASCII
S7-1200 - GetSMCInfo
S7-1200 - поддержка DNS
S7-1200 - Безопасная электронная почта
S7-1200 - Большая несвязанная БД для журнала данных / рецептов
о преобразовании... побитно перевести в строку и сложить ... столбиком
Изображение
Прибор - эл.счетчик Elster Метроника A1800.
По мануалу максимальное хранимое значение - 99 999 999 999 = 999 999 999,99 кВт
В таком формате он хранит потребленную энергию Ватты, ВАРы, ВА с точностью до сотых.
Если пожертвовать точностью и выводить значения в формате Кило (Ватты, ВАРы, ВА), разделив на 100000 - то real'a должно хватить на максимальное значение в 999999,9 кВт

Potapov
Сообщения: 445
Зарегистрирован: 16 апр 2018, 16:32

Сообщение Potapov » 15 окт 2019, 19:33

повтор
Последний раз редактировалось Potapov 16 окт 2019, 19:18, всего редактировалось 1 раз.

Alex_NN
Сообщения: 54
Зарегистрирован: 14 июн 2018, 12:28

Сообщение Alex_NN » 16 окт 2019, 08:50

Спасибо за комментарии.
Действительно, коммерческий учет организован как положено. Но нужно организовать технический учет по интерфейсу MODBUS RTU.
Прибор - эл.счетчик Elster Метроника A1800.
По мануалу максимальное хранимое значение - 99 999 999 999 = 999 999 999,99 кВт
В таком формате он хранит потребленную энергию Ватты, ВАРы, ВА с точностью до сотых.
Если пожертвовать точностью и выводить значения в формате Кило (Ватты, ВАРы, ВА), разделив на 100000 - то real'a должно хватить на максимальное значение в 999999,9 кВт
По мануалу максимальное хранимое значение - 99 999 999 999 Вт*ч.
Если даже округлять до кВт*ч, это нужно игнорировать в обработке младшие 10 разрядов. 2 в 10-й = 1024. Остается 32+5 разрядов. Посчитать побитно через веса можно, но опять же куда и как получившееся целое число сохранить?

Хотя, поскольку UDInt хранит до 4,294,967,295 наверное должно получиться с кВт*ч.

В общем - танцы с бубном...

Potapov
Сообщения: 445
Зарегистрирован: 16 апр 2018, 16:32

Сообщение Potapov » 16 окт 2019, 10:03

Посчитать побитно через веса можно, но опять же куда и как получившееся целое число сохранить?
я ведь на картинке показал арифметику столбиком переменных строкового типа,
когда складываются символьные строки string "32768" + "16384"
результат получается строковый string = "49152"
Изображение
максимум тебе надо сложить 47 строк :)
(хотя ПЕРВЫЕ ГОДА достаточно ТОЛЬКО первые 31 бит сразу преобразовать в начальную строку одной командой,
а в последующие года к ней столбиком постепенно прибавлять веса остальных значащих битов INT48... с годами количество вычислений будет увеличиваться)

эту строку и пересылаешь...
на компе пусть смотрят как есть "49152" или конвертируют в двоичное число INT C000

Муторно... но как то на 8-ми битных 580ВМ80, 1816ВЕ48 и Атмел AVR умудрялись оперировать двойными 32-х битными словами и плавающей запятой :)
Переход на ARM64 (или S7-1511 в твоём случае) решил бы проблему арифметики большеразрядных чисел.
(в некоторые новые STM32 добавили 64-х битную плавающую запятую, но он так и остался 32-х разрядным ARM32)

Alex_NN
Сообщения: 54
Зарегистрирован: 14 июн 2018, 12:28

Сообщение Alex_NN » 16 окт 2019, 15:46

Да, пожалуй, что-то может получиться со string-ами.
Правда я все равно не понял, как получить string старшего регистра (слова) из INT48?
Пока я решил использовать учет в кВт*ч путем сдвига слов и переноса битов. Думаю - будет нормально.
Счетчики стоят по 10 кВ, а учет по 0,4 кВ реализован на приборах ЭНИП-2.
В связи с этим еще один вопрос.
Как организовать опрос энергий с ЭНИП с использованием предназначенной для этого функции h66?
В MODBUS MASTER код функции явно не прописывается...
С MODBUS столкнулся впервые, поэтому прошу сильно не пинать.)

Potapov
Сообщения: 445
Зарегистрирован: 16 апр 2018, 16:32

Сообщение Potapov » 16 окт 2019, 19:15

Реально можно минут за пять на LAD накопипастить для S7-1200 сложение INT48 или INT64
(жми на стрелку левее картинки)
Изображение
на картинке условно складывается текстовый вес старшего 36-ого бита
с накопленной до этого суммой других весов

на SCL минут за десять алгоритм накликать

Если посмотреть на битовое представление в калькуляторе,
то станет понятно, что в худшем случае придётся сложить
всего 6 весов для бит 31...36
с прямо конвертированной строкой S_CONV(DINT из бит 0...30).

Alex_NN
Сообщения: 54
Зарегистрирован: 14 июн 2018, 12:28

Сообщение Alex_NN » 17 окт 2019, 12:08

Спасибо за помощь!
Potapov писал(а): Если посмотреть на битовое представление в калькуляторе,
то станет понятно, что в худшем случае придётся сложить
всего 6 весов для бит 31...36
с прямо конвертированной строкой S_CONV(DINT из бит 0...30).
Да, я тоже увидел, что не все старшее слово надо обрабатывать. Даже пяти бит достаточно.
Только, конечно биты с 32 по 36-й и DINT из бит 0...31.

А у ЭНИПов, как выяснилось после углубленного изучения документации ), есть возможность собрать энергии с помощью стандартных функций с дополнительной последующей обработкой. Так что вопрос снят.

cron