1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Как просуммировать 31 значение DB в формате TIME_OF_DAY STEP7

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)

Модератор: Глоб.модераторы

Ответить

Автор темы
Serg70
здесь недавно
здесь недавно
Сообщения: 6
Зарегистрирован: 23 июн 2022, 12:21
Имя: Сергей
Страна: Россия
город/регион: Свердловская область
Поблагодарили: 1 раз

Как просуммировать 31 значение DB в формате TIME_OF_DAY STEP7

Сообщение Serg70 »

Возникла такая проблема.Поступило задание на проект для суммирования полезного времени работы станка по сменам по 12 часов в графике 1_1.
Контроллер S315-2.
Все шло нормально,все считаю,раскидал в таблице , 32 разрядного слова вполне хватило в каждой ячейке.
Теперь загвоздка встала в подсчете общего времени за месяц.
Размер форматов данных в STEP7 не позволяют суммировать в одно слово типа формате TIME_OF_DAY для подсчета окончательной суммы рабочего времени за месяц.
Или как то надо изощриться преобразованием в BCD или разбить двойное слово формате TIME_OF_DAY на часы,минуты и секунды.

Отправлено спустя 1 минуту 3 секунды:
Вопрос,как ?

Отправлено спустя 3 минуты 57 секунд:
DB.PNG
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Joshua
здесь недавно
здесь недавно
Сообщения: 98
Зарегистрирован: 21 мар 2023, 02:12
Имя: Владимир
Страна: РФ
город/регион: Псков
Благодарил (а): 2 раза
Поблагодарили: 21 раз

Как просуммировать 31 значение DB в формате TIME_OF_DAY STEP7

Сообщение Joshua »

Функция FC1 AD_DT_TM должна подойти. Находится в Libraries -> stdlibs -> iec.

Автор темы
Serg70
здесь недавно
здесь недавно
Сообщения: 6
Зарегистрирован: 23 июн 2022, 12:21
Имя: Сергей
Страна: Россия
город/регион: Свердловская область
Поблагодарили: 1 раз

Как просуммировать 31 значение DB в формате TIME_OF_DAY STEP7

Сообщение Serg70 »

Начальное слово DB23.DBD 0 (формат TIME) , в каждую ячейку пишется не более T#11h59m59s
Конечное DB23.DBD 244
Результат суммы в часах,минутах и секундах поместить в DB23.DBD 250 (формат TIME или куда то в другое слово ?)
Максимальное значение T#23h59m59s в DBD
Не могу сообразить,как прописать .

Joshua
здесь недавно
здесь недавно
Сообщения: 98
Зарегистрирован: 21 мар 2023, 02:12
Имя: Владимир
Страна: РФ
город/регион: Псков
Благодарил (а): 2 раза
Поблагодарили: 21 раз

Как просуммировать 31 значение DB в формате TIME_OF_DAY STEP7

Сообщение Joshua »

Очевидно же, что вы не сможете поместить целый месяц в одни сутки. Для суммы времени берите переменную DATE_AND_TIME (8 байт).
Вы ещё определитесь, в чём у вас время хранится. В посте пишете TIME_OF_DAY, а в программе TIME. Функция FC1 AD_DT_TM принимает в формате TOD.
Для суммы времён можете взять начало месяца в формате DATE_AND_TIME, через AD_DT_TM добавить все времена работы, из результата вычесть начало месяца. Получите количество часов наработки.

Вообще можно гораздо проще. TIME_OF_DAY и TIME хранят время одинаково, в мс. Берёте время, конвертируете его через TIME_TO_DINT или через DWORD_TO_DINT(DB23.DBDxx). Складываете все времена как DINT, получите полное время наработки в мс, уж во время его как-нибудь переведёте. Максимум можно насчитать почти 25 сутков, следите за переполнением DINT переменной.

Автор темы
Serg70
здесь недавно
здесь недавно
Сообщения: 6
Зарегистрирован: 23 июн 2022, 12:21
Имя: Сергей
Страна: Россия
город/регион: Свердловская область
Поблагодарили: 1 раз

Как просуммировать 31 значение DB в формате TIME_OF_DAY STEP7

Сообщение Serg70 »

Joshua писал(а): 18 окт 2024, 11:32 Вообще можно гораздо проще. TIME_OF_DAY и TIME хранят время одинаково, в мс. Берёте время, конвертируете его через TIME_TO_DINT или через DWORD_TO_DINT(DB23.DBDxx). Складываете все времена как DINT, получите полное время наработки в мс, уж во время его как-нибудь переведёте. Максимум можно насчитать почти 25 сутков, следите за переполнением DINT переменной.
Разве в STEP7 есть эти функции ?

Joshua
здесь недавно
здесь недавно
Сообщения: 98
Зарегистрирован: 21 мар 2023, 02:12
Имя: Владимир
Страна: РФ
город/регион: Псков
Благодарил (а): 2 раза
Поблагодарили: 21 раз

Как просуммировать 31 значение DB в формате TIME_OF_DAY STEP7

Сообщение Joshua »

Приведение типов есть во всех МЭКовский языках.
А сложение и вычитание есть в школе.
Ответить

Вернуться в «Simatic Step7»