Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

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


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

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

Сообщение Kreadlling » 29 июн 2016, 00:41

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


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 2555
Зарегистрирован: 07 окт 2011, 08:12
Ф.И.О.: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 41 раз
Поблагодарили: 70 раз

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

Сообщение Ryzhij » 29 июн 2016, 08:05

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

Аватара пользователя

megavolt86
специалист
специалист
Сообщения: 627
Зарегистрирован: 14 ноя 2013, 19:35
Ф.И.О.: Анатолий Сергеевич
Откуда: Башкортостан
Благодарил (а): 3 раза
Поблагодарили: 6 раз

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

Сообщение megavolt86 » 29 июн 2016, 08:51

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

Аватара пользователя

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

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

Сообщение den_vish » 29 июн 2016, 09:44

берем
[+] 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
здесь недавно
здесь недавно
Сообщения: 23
Зарегистрирован: 25 май 2016, 23:44
Ф.И.О.: Евсюков Юрий Николаевич
Благодарил (а): 7 раз

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

Сообщение Kreadlling » 30 июн 2016, 17:02

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


Спасибо буду пробовать


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

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

Сообщение Kreadlling » 30 июн 2016, 17:03

den_vish писал(а):Источник цитаты и втыкаем ее к себе в прогу, у нее есть два выхода - RET (состояние функции - ошибка, норма)и

den_vish писал(а):Источник цитаты - Current Date TIME (текущее дата и время), что нам и надо, а далее извлекаем нужный нам байт, и преобразуем в нужное нам целое, как то так.


Спасибо большое за информацию


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

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

Сообщение Kreadlling » 13 июл 2016, 18:17

den_vish писал(а):Источник цитаты далее извлекаем нужный нам байт,

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


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 2555
Зарегистрирован: 07 окт 2011, 08:12
Ф.И.О.: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 41 раз
Поблагодарили: 70 раз

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

Сообщение Ryzhij » 13 июл 2016, 19:10

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

Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 519
Зарегистрирован: 21 сен 2012, 21:45
Ф.И.О.: Воробьев Александр
Поблагодарили: 12 раз
Контактная информация:

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

Сообщение aranea » 13 июл 2016, 21:13

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

Аватара пользователя

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

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

Сообщение den_vish » 14 июл 2016, 03:36

Kreadlling писал(а):Источник цитаты
den_vish писал(а):Источник цитаты далее извлекаем нужный нам байт,

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

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


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

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

Сообщение Alex87 » 30 авг 2016, 08:28

Я думаю от седо можно будет вытащить!
Инструкции по настройке системных часов с 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
Ф.И.О.: Дьяков С.

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

Сообщение Alex87 » 30 авг 2016, 16:50

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


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



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей