здравствуйте
помогите, пожалуйста разобраться с работой данных функций.
я хочу записать значение времени в контроллер при нажатии кнопки, а потом его считать.
скриншот прилагаю.
"baza".init_time должно задавать нужное мне время. "baza".time_start сюда записывается время.
при нажатии на кнопку I0.0 происходит сброс на дату 95-го года и время отсчитывается дальше. для отслеживания времени создал таблицу переменных и оттуда смотрю. в DB указываю для "baza".init_time время, нужное мне, например 99-й год. но установка времени всё равно происходит на 95-й. формат времени DT указываю правильно.
что делаю не так?
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
функции sfc0 и sfc1
-
- здесь недавно
- Сообщения: 17
- Зарегистрирован: 20 янв 2017, 11:48
- Имя: Каравкин Павел Николаевич
- Страна: Россия
- город/регион: Рязань
-
- здесь недавно
- Сообщения: 17
- Зарегистрирован: 20 янв 2017, 11:48
- Имя: Каравкин Павел Николаевич
- Страна: Россия
- город/регион: Рязань
функции sfc0 и sfc1
решил проблему.
если кому интересно, то приведу пример решения. пошарил буржуйскую документацию.
смысл такой:
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
если кому интересно, то приведу пример решения. пошарил буржуйскую документацию.
смысл такой:
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 раз.
-
- освоился
- Сообщения: 248
- Зарегистрирован: 31 янв 2017, 08:44
- Имя: Маркушин Андрей Геннадьевич
- Страна: Россия
- город/регион: Нижегородская обл., Выкса
- Благодарил (а): 19 раз
- Поблагодарили: 64 раза
-
- здесь недавно
- Сообщения: 17
- Зарегистрирован: 20 янв 2017, 11:48
- Имя: Каравкин Павел Николаевич
- Страна: Россия
- город/регион: Рязань
функции sfc0 и sfc1
оговорился. извините. исправил
ITB преобразование INT в BCD
спасибо за замечание.
главное код работает))
ITB преобразование INT в BCD
спасибо за замечание.
главное код работает))
-
- администратор
- Сообщения: 17589
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 825 раз
- Поблагодарили: 1653 раза
функции sfc0 и sfc1
Коды лучше запихивать в тэг "code"
Иначе будете потом удивляться, куда символы деваются - автозамена сработает.
Иначе будете потом удивляться, куда символы деваются - автозамена сработает.
По вопросам работы Форума можно обратиться по этим контактам.