функции sfc0 и sfc1 step7

Инженерное программное обеспечение
Ответить
Аватара пользователя
gazman
Любитель
Сообщения: 32
Зарегистрирован: 17 апр 2017, 15:50
Откуда: Новомичуринск
Контактная информация:

функции sfc0 и sfc1 step7

Сообщение gazman »

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

я хочу записать значение времени в контроллер при нажатии кнопки, а потом его считать.
скриншот прилагаю. https://yadi.sk/i/FrNmuO5j3H3y2x

"baza".init_time должно задавать нужное мне время. "baza".time_start сюда записывается время.
при нажатии на кнопку I0.0 происходит сброс на дату 95-го года и время отсчитывается дальше. для отслеживания времени создал таблицу переменных и оттуда смотрю. в DB указываю для "baza".init_time время, нужное мне, например 99-й год. но установка времени всё равно происходит на 95-й. формат времени DT указываю правильно.

что делаю не так?

Аватара пользователя
gazman
Любитель
Сообщения: 32
Зарегистрирован: 17 апр 2017, 15:50
Откуда: Новомичуринск
Контактная информация:

Re: функции sfc0 и sfc1 step7

Сообщение gazman »

решил проблему.
если кому интересно, то приведу пример решения. пошарил буржуйскую документацию.

смысл такой:
1. создаём временную переменную с форматом DATE_AND_TIME
2. заносим свои значения из DB в нужные байты (год, месяц, день и т.д.) с помощью косвенной адресации
3. потом эту временную переменную устанавливаем в sfc0

главное не забыть преобразовать тип данных INT в WORD

вот код:

LAR1 P##NEW_TIME // новая временная переменная DATE_AND_TIME

L "new_date".year // устанавливаемый год
ITB // преобразование INT в WORD
T B [AR1,P#0.0]

L "new_date".month // устанавливаемый месяц
ITB // преобразование INT в WORD
T B [AR1,P#1.0]

L "new_date".day // устанавливаемый день
ITB // преобразование INT в WORD
T B [AR1,P#2.0]

L "new_date".hour // устанавливаемый час
ITB // преобразование INT в WORD
T B [AR1,P#3.0]

L "new_date".minute // устанавливаемая минута
ITB // преобразование INT в WORD
T B [AR1,P#4.0]

L "new_date".second // устанавливаемая секунда
ITB // преобразование INT в WORD
T B [AR1,P#5.0]


// запись нужных значений в DB (делал в LAD с помощью MOVE при нажатии на кнопку I0.0)

A I 0.0
= L 42.0
A L 42.0
JNB _001
L 17 // 2017 год
T "new_date".year
_001: NOP 0
A L 42.0
JNB _002
L 2 // февраль
T "new_date".month
_002: NOP 0
A L 42.0
JNB _003
L 25 // 25 число
T "new_date".day
_003: NOP 0
A L 42.0
JNB _004
L 4 //4 часа
T "new_date".hour
_004: NOP 0
A L 42.0
JNB _005
L 5 // 5 минут
T "new_date".minute
_005: NOP 0


// установка системного времени

A I 0.1
JNB _006
CALL "SET_CLK"
PDT :=#NEW_TIME // новая дата и время
RET_VAL:=LW40
_006: NOP 0

Ответить