Как ЕЩЁ проще сделать "будильник"?
Не программер; 30.7.04

Помогите решить задачку - на S7-300 (CPU314) нужно реализовать будильник типа "Включить во вторник в 9-30, выключить в среду в 16-00".

Заранее благодарен за любую инфу!
Re: Как ЕЩЁ проще сделать
GorA; 1.8.04

Можно сделать следующее:

1. Установить в PLC текущую дату и время PLC->Set time of day...
2. Существуют организационные блоки прерываний OB10 - OB17 нужно их активизировать. Для этого в HW Config кликнуть два раза на процессор и выбрать вкладку Time-of-Day Interrupts. В данной вкладке активизировать (для предложенного примера), например, ОВ10 для включения, ОВ11 для выключения. Затем в графе EXECUTION выбрать Every week и далее Start day установить, например, 3 августа, Time of day - 9-30. Аналогично для ОВ11 - EXECUTION - Every week, Start day - 4 августа, Time of day - 16-00.
3. Теперь необходимо создать сами ОВ10, ОВ11 и запрограммировать деиствия. Например, устройство включается/выключается выходом Q10.5.
Тогда в ОВ10 пишем
Set
S Q10.5

В ОВ11 пишем
Set
R Q10.5

И тогда получаем - начиная со вторника 3 августа в 9-30 и в дальнейшем каждый вторник в контроллере будет вызываться организационный блок ОВ10, где выполняется включение устройства.
И, аналогично, работает ОВ11, только там производится отключение устройства начиная со среды 4 августа и каждую неделю.
Re: Как ЕЩЁ проще сделать
MooR; 2.8.04

Все бы хорошо только у CPU314, на сколько я помню, всего один блок временного прерывания ОВ10 соответственно:) Я выдерал день недели и час из DATE_AND_TIME и сравнивал с уставками.

Re: Как ЕЩЁ проще сделать
Не программер; 2.8.04

Во-во!!!

Не даёт включить ещё один ОВ...
MooR, а нельзя как ить по-подробнее?
Или, хотя бы - что и где почитать(желательно на нашем)???
Спасибо всем, кто откликнулся!
Re: Как ЕЩЁ проще сделать
Diana; 3.8.04

Есть такие функции у 314-го: FC14-FC40. Они лежат в stdlibs. Насколько я понимаю, вам нужны функции READ_CLK (SFC1), DATE and TOD to DT (FC3) и, например, LE_DT (FC18). Help по ним имеется. Вот этот хитрый формат есть просто количество тысячных долей секунды, прошедших с начала 1990-го года.

Re: Как ЕЩЁ проще сделать
GorA; 3.8.04

Действительно можно использовать только ОВ10.

Тогда возможно использовать функции SFC28 - SFC31 для установки и активизации прерывания ОВ10.

Re: Как ЕЩЁ проще сделать
MooR; 3.8.04

Пишите на мыло вышлю пример. А вобще Уважаемая(ый) Diana как раз про то и пишет.

Re: Как ЕЩЁ проще сделать
Чистяков Дмитрий ОАО СеверСталь; 4.8.04

Ну раз уж вы не "Не программер", то пригласите "программера". ;-)

Re: MooR; - написал на мыло!
Не программер; 4.8.04

Спасибо!

Жду!
Re: Как ЕЩЁ проще сделать
Darwin; 5.8.04

CALL "READ_CLK"

RET_VAL:=#CUR_RETVAL // Contains error code
CDT :=#OUT_TIME_DATE // Contains read time



LAR1 P##OUT_TIME_DATE

L B [AR1,P#0.0]
T "Data time".Year
L B [AR1,P#1.0]
T "Data time".Month
L B [AR1,P#2.0]
T "Data time".Data_month
L B [AR1,P#3.0]
T "Data time".Time_hour
L B [AR1,P#4.0]
T "Data time".Time_minute
L B [AR1,P#5.0]
T "Data time".Time_second



A(
A(
L "Data time".Time_hour
L B#16#8
==I
)
A(
L "Data time".Time_minute
L 0
==I
)
A(
L "Data time".Time_second
L 0
==I
)
O
A(
L "Data time".Time_hour
L B#16#20
==I
)
A(
L "Data time".Time_minute
L 0
==I
)
A(
L "Data time".Time_second
L 0
==I
)
)
AN "Reset_complete"
JC rst
BEU




Re: Как ЕЩЁ проще сделать
Darwin; 5.8.04

Это для записи данных в конце смен 08:00 и 20:00. Ну а будильник или что еще там делается аналогично

Re: Как ЕЩЁ проще сделать
Не программер; 5.8.04

Спасибо!

Про двигатель внутреннего сгорания я понял! И куда бензин заливать - понял!
Я не понял - ЛОШАДЬ-ТО КУДА ЗАПРЯГАТЬ??? (Шутка с бородой) :-))
А как ввести - то "RET_VAL:=#CUR_RETVAL // Contains error code
CDT :=#OUT_TIME_DATE // Contains read time", например???
Степ 5.2 красным цветом ругается...
и про "rst" он что-то неприличное рассказывает! :-)
НЕ ПРОГРАММЕР Я! (Так получилось - вынужден!)
Всё остальное, вроде, принял, а вот это-то я и не догнал... :-(
Где описать CUR_RETVAL и т.п.???

Спасибо заранее!
Re: Как ЕЩЁ проще сделать
Darwin; 6.8.04

CUR_RETVAL - это TEMP переменная тип Word, вводится в описании интерфейса блока (сейчас речь о функции). В редакторе вверху есть таблица такая, там есть in out in-out temp. Также и OUT_TIME_DATE там надо прописать тип DATA_AND_TIME.

rst это метка перехода, ставишь ее далее и пишешь что там тебе надо сделать при совпадении этих условий.
Re: Как ЕЩЁ проще сделать
Не программер; 13.8.04

Спасибо, уже лучше!!!

вот только со строчкой типа:
L "Data time".Time_hour
какие-то проблемки....
Не принимает, хоть и пробовал как-то прописывать, но, видимо, не угадаю где...
Подскажите, плиз!!!
И ещё - где поситать-то по-понятнее про эти вещи?!!
Re: Как ЕЩЁ проще сделать
Darwin; 13.8.04

L "Data time".Time_hour

"Data time" это символьное имя глобального блока данных (т.е. доступного везде) вы можете использовать любой свой блок данных или создать новый, но есттно необходимо создать там области подобно Time_hour-это в блоке данных,если проще, строчка с типом данных БАЙТ т.к. мы загружаем туда временную переменную БАЙТ типа, потом мы считываем Time_hour или в СТеп программе или в Протуле или где еще.
<<br>