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

Узнать номер месяца

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

Ответить

Автор темы
Kreadlling
здесь недавно
здесь недавно
Сообщения: 37
Зарегистрирован: 25 май 2016, 23:44
Имя: Евсюков Юрий Николаевич
Благодарил (а): 8 раз

Узнать номер месяца

Сообщение Kreadlling »

Здравствуйте. Не подскажете как узнать какой месяц текущий (номер месяца)?
Программа на FBD. Задача такая: нужно из текущей даты вытащить
номер месяца и сохранить его в переменной типа int.

Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 5793
Зарегистрирован: 07 окт 2011, 09:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 674 раза
Поблагодарили: 845 раз

Узнать номер месяца

Сообщение Ryzhij »

Если лень считать самому, то открытые библиотечные функции OSCAT Вам в помощь!
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
Аватара пользователя

megavolt86
эксперт
эксперт
Сообщения: 1172
Зарегистрирован: 14 ноя 2013, 20:35
Имя: Анатолий Сергеевич
Страна: Россия
город/регион: Башкортостан
Благодарил (а): 13 раз
Поблагодарили: 68 раз

Узнать номер месяца

Сообщение megavolt86 »

Конвертируете в bcd, сдвигаете на 8бит, конвертируете в инт...
У шнейдер электрик это делается проще простого, есть системные слова, содержащие текущий год, дату и месяц, день недели, часы и минуты, секунды.
А вот таких слов я в сименсе не встречал, самому интересно узнать на будущее)))
:ext_secret:
Аватара пользователя

den_vish
освоился
освоился
Сообщения: 233
Зарегистрирован: 11 апр 2013, 13:22
Имя: Вишневский Денис
Благодарил (а): 11 раз
Поблагодарили: 13 раз

Узнать номер месяца

Сообщение den_vish »

берем
[+] SFC 1 READ_CLK
так нам говорит мануал к степу:
With SFC 1 "READ_CLK" (read system clock), you read the current date or current time of the system clock of the CPU.
и втыкаем ее к себе в прогу,
у нее есть два выхода - RET (состояние функции - ошибка, норма)
и
[+] CDT
эта переменная идет в формате DT - DATE_AND_TIME

When you enter date and time using the DATE_AND_TIME data type (DT), your entries are stored in binary coded decimal format in 8 bytes. The DATE_AND_TIME data type has the following range:

DT#1990-1-1-0:0:0.0 to DT#2089-12-31-23:59:59.999

The following examples show the syntax for the date and time for Thursday, December 25, 1993, at 8:12 and 34,567 seconds in the morning. The following two formats are possible:

DATE_AND_TIME#1993-12-25-8:12:34.567

DT#1993-12-25-8:12:34.567

The following special IEC (International Electrotechnical Commission) standard functions are available for working with the DATE_AND_TIME data type:
Convert date and time of day to the DATE_AND_TIME format
FC3: D_TOD_DT
Extract the date from the DATE_AND_TIME format
FC6: DT_DATE
Extract the day of the week from the DATE_AND_TIME format
FC7: DT_DAY
Extract the time of day from the DATE_AND_TIME format
FC8: DT_TOD
The following table shows the contents of the bytes that contain the date and time information for the example Thursday, December 25, 1993, at 8:12 and 34,567 seconds in the morning.


Byte Contents Range
0 Year ... 89 (from 1990 to 2089)
1 Month to 12
2 Day to 31
3 Hour to 23
4 Minute to 59
5 Second to 59
6 MSD of ms to 99
7 (4 MSB) LSD of ms to 9
7 (4 LSB) Day of week to 7 (1 = Sunday)
The permitted range for the data type DATE_AND_TIME is:
min.: DT#1990-1-1-0:0:0.0
max.: DT#2089-12-31-23:59:59.999
- Current Date TIME (текущее дата и время), что нам и надо, а далее извлекаем нужный нам байт,
и преобразуем в нужное нам целое, как то так.
"- Знаешь, дружище, в чем истинный смысл второго закона термодинамики?
Как ни упирайся, а бардака все больше. И чем серьезнее ты упираешься, тем страшнее неразбериха."(с)

Автор темы
Kreadlling
здесь недавно
здесь недавно
Сообщения: 37
Зарегистрирован: 25 май 2016, 23:44
Имя: Евсюков Юрий Николаевич
Благодарил (а): 8 раз

Узнать номер месяца

Сообщение Kreadlling »

megavolt86 писал(а): Конвертируете в bcd, сдвигаете на 8бит, конвертируете в инт...У шнейдер электрик это делается проще простого, есть системные слова, содержащие текущий год, дату и месяц, день недели, часы и минуты, секунды.А вот таких слов я в сименсе не встречал, самому интересно узнать на будущее)))
Спасибо буду пробовать

Автор темы
Kreadlling
здесь недавно
здесь недавно
Сообщения: 37
Зарегистрирован: 25 май 2016, 23:44
Имя: Евсюков Юрий Николаевич
Благодарил (а): 8 раз

Узнать номер месяца

Сообщение Kreadlling »

den_vish писал(а): и втыкаем ее к себе в прогу, у нее есть два выхода - RET (состояние функции - ошибка, норма)и
den_vish писал(а): - Current Date TIME (текущее дата и время), что нам и надо, а далее извлекаем нужный нам байт, и преобразуем в нужное нам целое, как то так.
Спасибо большое за информацию

Автор темы
Kreadlling
здесь недавно
здесь недавно
Сообщения: 37
Зарегистрирован: 25 май 2016, 23:44
Имя: Евсюков Юрий Николаевич
Благодарил (а): 8 раз

Узнать номер месяца

Сообщение Kreadlling »

den_vish писал(а): далее извлекаем нужный нам байт,
Не подскажете как извлечь нужный байт, ведь переменная размером в 8 байт, а указатель может быть только 4 байта (2-ое слово)? Или есть другой способ?

Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 5793
Зарегистрирован: 07 окт 2011, 09:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 674 раза
Поблагодарили: 845 раз

Узнать номер месяца

Сообщение Ryzhij »

Универсальный способ - наложение маски (побитное "И") с последующими сдвигом (целочисленным умножением или делением на степень двойки).
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Узнать номер месяца

Сообщение aranea »

и разумеется все это на FBD
Изображение
Аватара пользователя

den_vish
освоился
освоился
Сообщения: 233
Зарегистрирован: 11 апр 2013, 13:22
Имя: Вишневский Денис
Благодарил (а): 11 раз
Поблагодарили: 13 раз

Узнать номер месяца

Сообщение den_vish »

Kreadlling писал(а):
den_vish писал(а): далее извлекаем нужный нам байт,
Не подскажете как извлечь нужный байт, ведь переменная размером в 8 байт, а указатель может быть только 4 байта (2-ое слово)? Или есть другой способ?
ну самый глупый способ который лезет в голову - это просто обратится по номеру байта, если данные занимают в дб 7 байт, начиная с нулевого, то логично что адрес DBx.DBB1 - искомый
"- Знаешь, дружище, в чем истинный смысл второго закона термодинамики?
Как ни упирайся, а бардака все больше. И чем серьезнее ты упираешься, тем страшнее неразбериха."(с)

Alex87
здесь недавно
здесь недавно
Сообщения: 5
Зарегистрирован: 29 авг 2016, 09:43
Имя: Дьяков С.
Страна: Россия
Поблагодарили: 1 раз

Узнать номер месяца

Сообщение Alex87 »

Я думаю от седо можно будет вытащить!
Инструкции по настройке системных часов с SFC0 (SET_CLK)
1. Вы определяете временную переменную типа данных DATE_AND_TIME, "writeDateAndTime", например, и загрузить адрес этой переменной в регистр адреса AR1 , используя команду " LAR1 P ## writeDateAndTime " (рис. 3). Загрузка и передача данных в отдельных байт за год, месяц, день, час и т.д. осуществляется с помощью косвенной адресации.
2. Пример для передачи час должен быть установлен "Write" .Hour (здесь DB2.DBB3) в байт 3 (час) во временной переменной "writeDateAndTime":
L "Написать" .Hour
T B [AR1, P # 3.0]
3. Из - за перекрытия в байтах 6 и 7 для миллисекунд и дня недели, до передачи значения , которое будет установлено в течение миллисекунд вы должны переместить содержимое операнда (здесь "Написать" .Millisecond, DB2.DBW6) 4 бита влево ( SLW 4 ).
4. Вам не нужно, чтобы установить день недели, потому что это происходит от установленной даты.

Рисунок. 3
5. Вызов системной функции SFC0 (SET_CLK) для установки системных часов и обеспечивают входной параметр "PDT" с переменной "writeDateAndTime" временного (рис. 4). Важно, что SFC0 вызывается только для одного одиночного цикла, в противном случае система синхронизации будет установлен снова в каждом цикле и, следовательно, будет оставаться на заданное время.
6. В примере (рис. 4) операнд "Write" .setCLK (здесь DB2.DBX8.0) проверяется на наличие положительного фронта. В случае положительного лезвию SFC0 называется и система синхронизации установлено значение значений, указанных во временной переменной "writeDateAndTime".

Рисунок. 4
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Alex87
здесь недавно
здесь недавно
Сообщения: 5
Зарегистрирован: 29 авг 2016, 09:43
Имя: Дьяков С.
Страна: Россия
Поблагодарили: 1 раз

Узнать номер месяца

Сообщение Alex87 »

Извините за плохое качество изображений...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить

Вернуться в «ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)»