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

функции sfc0 и sfc1

PLC, прочие контроллеры, промышленные компьютеры, операторские панели

Автор темы
gazman
здесь недавно
здесь недавно
Сообщения: 9
Зарегистрирован: 20 янв 2017, 11:48
Имя: Каравкин Павел Николаевич

функции sfc0 и sfc1

Сообщение gazman » 13 апр 2017, 15:21

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

я хочу записать значение времени в контроллер при нажатии кнопки, а потом его считать.
скриншот прилагаю.

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

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


Автор темы
gazman
здесь недавно
здесь недавно
Сообщения: 9
Зарегистрирован: 20 янв 2017, 11:48
Имя: Каравкин Павел Николаевич

функции sfc0 и sfc1

Сообщение gazman » Вчера, 12:17

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

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

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

вот код:

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

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

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

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

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

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

L "new_date".second // устанавливаемая секунда
ITB // преобразование INT в BCD
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
Последний раз редактировалось gazman 25 апр 2017, 14:55, всего редактировалось 1 раз.


winb
здесь недавно
здесь недавно
Сообщения: 39
Зарегистрирован: 31 янв 2017, 08:44
Имя: Маркушин Андрей Геннадьевич
Поблагодарили: 5 раз

функции sfc0 и sfc1

Сообщение winb » Вчера, 12:51

gazman писал(а):Источник цитаты главное не забыть преобразовать тип данных INT в WORD

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

:o
Вы уверены, что ITB - преобразование INT в WORD?


Автор темы
gazman
здесь недавно
здесь недавно
Сообщения: 9
Зарегистрирован: 20 янв 2017, 11:48
Имя: Каравкин Павел Николаевич

функции sfc0 и sfc1

Сообщение gazman » Вчера, 14:54

оговорился. извините. исправил

ITB преобразование INT в BCD

спасибо за замечание.
главное код работает))


Вернуться в «Средний уровень автоматизации»



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

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