Просмотр полной версии : Библиотека SysLibTime
Я не могу заставить её работать.
Сделал строго все как в описании на библиотеку:
- создал
SysTime: SysTime64;
Data_Time: SystemTimeDate;
- присвоил 0 в соответствующие поля
- вызвал блок CurTimeEx
в итоге у меня в переменных относящихся к SysTime данные меняются, а собственно время и дата по 0-м. Записать свои значения тоже не удается. Что нужно еще?
И хотелось бы отметить, что наличие видео уроков и примеров, не отменяет наличие внятной документации. Потому что отлаживаться нередко приходится на объекте и если у меня там ПЛК110, то куда мне грузить пример для ПЛК150 например? И поскольку Интернет нередко в техпомещениях не очень, то и наблюдать как автор урока бессмысленно возит мышью по экрану и пытаться на смартфоне увидеть что он там полезного делает = тоже не айс. Гораздо правильнее качнуть текстовый файл документации и спокойно разобраться.
Я не могу заставить её работать.
Сделал строго все как в описании на библиотеку:
- создал
SysTime: SysTime64;
Data_Time: SystemTimeDate;
- присвоил 0 в соответствующие поля
- вызвал блок CurTimeEx
в итоге у меня в переменных относящихся к SysTime данные меняются, а собственно время и дата по 0-м. Записать свои значения тоже не удается. Что нужно еще?
И хотелось бы отметить, что наличие видео уроков и примеров, не отменяет наличие внятной документации. Потому что отлаживаться нередко приходится на объекте и если у меня там ПЛК110, то куда мне грузить пример для ПЛК150 например? И поскольку Интернет нередко в техпомещениях не очень, то и наблюдать как автор урока бессмысленно возит мышью по экрану и пытаться на смартфоне увидеть что он там полезного делает = тоже не айс. Гораздо правильнее качнуть текстовый файл документации и спокойно разобраться.
Вот делал когда-то для установки времени ПЛК из панели СП270
PROGRAM PLC_PRG
VAR
GetTime: CurTimeEx;
TimeAndDate: SystemTimeDate;
Sys_Time: SysTime64;
END_VAR
imeAndDate.Day :=0;
TimeAndDate.DayOfWeek :=0;
TimeAndDate.dwHighMsec :=0;
TimeAndDate.dwLowMSecs :=0;
TimeAndDate.Milliseconds :=0;
TimeAndDate.Minute :=0;
TimeAndDate.Second :=0;
TimeAndDate.Hour :=0;
TimeAndDate.Year :=0;
TimeAndDate.Month :=0;
Sys_time.ulHigh :=0;
Sys_time.ulLow :=0;
GetTime (SystemTime:=Sys_Time , TimeDate:= TimeAndDate);(*Текущее время*)
(*--------------------------------------------------------------*)
HMI_Y:=TimeAndDate.Year;
HMI_M:=TimeAndDate.Month;
HMI_D:=TimeAndDate.Day;
HMI_HH:=TimeAndDate.Hour;
HMI_MM:=TimeAndDate.Minute;
HMI_SS:=TimeAndDate.Second;
(*--------------------------------------------------------------*)
IF set_HH OR set_MM OR set_SS THEN
IF set_HH THEN (*Если set_HH - истина, то менять только часы*)
TimeAndDate.Minute:=HMI_MM; (*Оставляем текущие минуты*)
TimeAndDate.Second:=HMI_SS; (*Оставляем текущие секунды*)
TimeAndDate.Hour:=HH; (*а часы пишем новые*)
ELSIF set_MM THEN (*Если set_MM - истина, то менять только минуты*)
TimeAndDate.Minute:=MM; (*минуты пишем новые*)
TimeAndDate.Second:=HMI_SS; (*Оставляем текущие секунды*)
TimeAndDate.Hour:=HMI_HH; (*Оставляем текущие часы*)
ELSIF set_SS THEN (*Если set_SS - истина, то менять только секунды*)
TimeAndDate.Minute:=HMI_MM; (*Оставляем текущие минуты*)
TimeAndDate.Second:=SS; (*секунды пишем новые*)
TimeAndDate.Hour:=HMI_HH; (*Оставляем текущие часы*)
END_IF
GetTime (SystemTime:=Sys_Time , TimeDate:= TimeAndDate);
set_HH:=set_MM:=set_SS:=FALSE;
END_IF
(*--------------------------------------------------------------*)
IF set_date THEN (*Если set_date - истина, то менять дату*)
TimeAndDate.Day:=D;
TimeAndDate.Month:=M;
TimeAndDate.Year:=Y;
GetTime (SystemTime:=Sys_Time , TimeDate:= TimeAndDate);
set_date:=FALSE;
END_IF
kondor3000
22.03.2023, 09:48
И хотелось бы отметить, что наличие видео уроков и примеров, не отменяет наличие внятной документации. Потому что отлаживаться нередко приходится на объекте и если у меня там ПЛК110, то куда мне грузить пример для ПЛК150 например? И поскольку Интернет нередко в техпомещениях не очень, то и наблюдать как автор урока бессмысленно возит мышью по экрану и пытаться на смартфоне увидеть что он там полезного делает = тоже не айс. Гораздо правильнее качнуть текстовый файл документации и спокойно разобраться.
Теорию вы должны изучить до того, как отправились на объект, а изучать примеры на объекте это не дело. Поменять таргет с ПЛК150 на ПЛК110 дело 2 минут.
Конкретно в примере с библиотекой Времени, переносить вообще нечего, только сменить целевую платформу. Это делается несколькими нажатиями мыши. После смены платформы надо нажать Дополнения / Стандартная конфигурация, получите новый чистый таргет.
Перенести конфигурацию можно при помощи программы https://owen.ru/forum/showthread.php?t=18269
Документация есть на всё, если вы её не нашли, то не надо жаловаться.
Теорию вы должны изучить до того, как отправились на объект, а изучать примеры на объекте это не дело. Поменять таргет с ПЛК150 на ПЛК110 дело 2 минут.
Перенести конфигурацию можно при помощи программы https://owen.ru/forum/showthread.php?t=18269
Я так и сделал - написал программу в соответствии с описанием на библиотеку. Приехал и не работает. И что я сделал не так? Конечно я уже на объекте начал пытаться разобраться.
А вот менять таргеты и переносить конфигурации отдельной программой, вот это точно не дело на объекте.
Это квест что ли такой от ОВЕН - "заставь библиотеку работать" и надо его успешно пройти, найдя скрытые "ключи"? Потому что из документации все просто выходит. Но не работает у меня. Я ничего не говорю, может и у меня косяк, но куда смотреть, я не могу понять.
kondor3000
22.03.2023, 10:13
Я так и сделал - написал программу в соответствии с описанием на библиотеку. Приехал и не работает. И что я сделал не так? Конечно я уже на объекте начал пытаться разобраться.
А вот менять таргеты и переносить конфигурации отдельной программой, вот это точно не дело на объекте.
Это квест что ли такой от ОВЕН - "заставь библиотеку работать" и надо его успешно пройти, найдя скрытые "ключи"? Потому что из документации все просто выходит. Но не работает у меня. Я ничего не говорю, может и у меня косяк, но куда смотреть, я не могу понять.
Вы не проверили программу, этого достаточно. Даже не имея ПЛК, прогу с биб-кой SysLibTime, можно проверить с помощью виртуального контроллера PLC WIN NT.
В эмуляции она не работает.
ЗЫ : Чтобы запустить пример, выложенный petera , мне понадобилась минута, при этом заменив контроллер на PLC WIN NT.
Спасибо у меня так и есть. Разница только в том, что я на языке CFC это написал и у меня один сигнал на установку времени и даты.
А еще такой вопрос - допустим у меня не устанавливается время. Но что происходит с часами, если время не установлено? Должны же секунды/минуты идти, начиная с 0? И если у меня все время 0 везде, то это означает, что я не получаю время, а не только не устанавливаю? Или просто не получаю.
А еще такой вопрос - допустим у меня не устанавливается время. Но что происходит с часами, если время не установлено? Должны же секунды/минуты идти, начиная с 0? И если у меня все время 0 везде, то это означает, что я не получаю время, а не только не устанавливаю? Или просто не получаю.
сомнительно как то, что проблема в документации, после такого вопроса напрашивается встречный, Вы читали её? 66666
А откуда сомнения в том, что я её читал? У меня все так и сделано - присваиваются 0 каждый цикл, полученные данные отправляются на панель оператора (ничего не получается только). Есть возможность установки - ввел данные, нажал кнопку, должно установиться, но нет. Данные из панели в переменные нужные записываются, данные из переменных записываются в панель, это все я проверил. У если у меня исходно присваивается нули, то потом я должен же получить время? И полученное время должно отобразиться. Часы ведь ИДУТ же, значит через 1 секунду их значение уже не будет 0, а будет 1 и я должен это все увидеть, если чтение происходит? Или нет? А если я этого не вижу, значит у меня и не читается, я пытаюсь разобраться.
Вы ни проект, даже скрин не предоставили как у Вас это всё выглядит. В доках, да и в примере на ST четко прописано, во все переменные ставим нули -> выполняем функцию -> получаем текущее время, если хотим записать: то вставляем нужное значение в необходимую переменную, выполняем функцию и измененное значение должно установить часы и дату в соответствии с изменениями
ЗЫ если цикл плк хотя бы на порядок меньше чем секунда, то выполняя в каждом цикле чтение ни каких проблем видеть "бегущие" секунды
Вы ни проект, даже скрин не предоставили как у Вас это всё выглядит. В доках, да и в примере на ST четко прописано, во все переменные ставим нули -> выполняем функцию -> получаем текущее время, если хотим записать: то вставляем нужное значение в необходимую переменную, выполняем функцию и измененное значение должно установить часы и дату в соответствии с изменениями
При установке значений часов нужно все поля заполнять и часы и минуты и секунды, иначе если заполнить только минуты, например, а часы и секунды оставить нулевыми, то время не установится.
Вот так
IF set_HH OR set_MM OR set_SS THEN
IF set_HH THEN (*Если set_HH - истина, то менять только часы*)
TimeAndDate.Minute:=HMI_MM; (*Оставляем текущие минуты*)
TimeAndDate.Second:=HMI_SS; (*Оставляем текущие секунды*)
TimeAndDate.Hour:=HH; (*а часы пишем новые*)
ELSIF set_MM THEN (*Если set_MM - истина, то менять только минуты*)
TimeAndDate.Minute:=MM; (*минуты пишем новые*)
TimeAndDate.Second:=HMI_SS; (*Оставляем текущие секунды*)
TimeAndDate.Hour:=HMI_HH; (*Оставляем текущие часы*)
ELSIF set_SS THEN (*Если set_SS - истина, то менять только секунды*)
TimeAndDate.Minute:=HMI_MM; (*Оставляем текущие минуты*)
TimeAndDate.Second:=SS; (*секунды пишем новые*)
TimeAndDate.Hour:=HMI_HH; (*Оставляем текущие часы*)
END_IF
GetTime (SystemTime:=Sys_Time , TimeDate:= TimeAndDate);
set_HH:=set_MM:=set_SS:=FALSE;
END_IF
Я проверю дома, может у меня не во всех переменных 0, я сейчас подумал. Но это не точно конечно. Время с SysTime я получаю ведь.
При установке значений часов нужно все поля заполнять и часы и минуты и секунды, иначе если заполнить только минуты, например, а часы и секунды оставить нулевыми, то время не установится.
Вот так
IF set_HH OR set_MM OR set_SS THEN
IF set_HH THEN (*Если set_HH - истина, то менять только часы*)
TimeAndDate.Minute:=HMI_MM; (*Оставляем текущие минуты*)
TimeAndDate.Second:=HMI_SS; (*Оставляем текущие секунды*)
TimeAndDate.Hour:=HH; (*а часы пишем новые*)
ELSIF set_MM THEN (*Если set_MM - истина, то менять только минуты*)
TimeAndDate.Minute:=MM; (*минуты пишем новые*)
TimeAndDate.Second:=HMI_SS; (*Оставляем текущие секунды*)
TimeAndDate.Hour:=HMI_HH; (*Оставляем текущие часы*)
ELSIF set_SS THEN (*Если set_SS - истина, то менять только секунды*)
TimeAndDate.Minute:=HMI_MM; (*Оставляем текущие минуты*)
TimeAndDate.Second:=SS; (*секунды пишем новые*)
TimeAndDate.Hour:=HMI_HH; (*Оставляем текущие часы*)
END_IF
GetTime (SystemTime:=Sys_Time , TimeDate:= TimeAndDate);
set_HH:=set_MM:=set_SS:=FALSE;
END_IF
Я точно не устанавливаю секунды, они мне не нужны. А если мне нужно установить время 00:00:00 как быть?
kondor3000
22.03.2023, 16:18
Я точно не устанавливаю секунды, они мне не нужны. А если мне нужно установить время 00:00:00 как быть?
Для чего надо? Просто установить, или начать отсчёт с 0 ?
to starmos
repeat
Вы ни проект, даже скрин не предоставили как у Вас это всё выглядит...
until false
платформу сами махнёте
Нашел я похоже ошибку у себя - не все переменные присваивались в 0. Из-за этого и не читалось ничего скорее всего никогда. Но проверить я только на следующей неделе смогу, когда буду на объекте. А пока у меня еще вопрос к знатокам - в каком виде надо записывать год? В нормальном, например нынешний = 2023? Или от какой-то даты, как часто бывает? И еще вопрос - надо ли устанвливать вместе с датой и день недели? Или система сама его вычислит из даты и при считывании я его получу? (Ардуино так умеет делать даже).
И я еще спрошу здесь, чтобы темы не плодить, в Codesys можно где нибудь задать галку, чтобы порядок выполнения ВСЕГДА был "в соответствии с потоком данных"?
kondor3000
23.03.2023, 19:07
Нашел я похоже ошибку у себя - не все переменные присваивались в 0. Из-за этого и не читалось ничего скорее всего никогда. Но проверить я только на следующей неделе смогу, когда буду на объекте. А пока у меня еще вопрос к знатокам - в каком виде надо записывать год? В нормальном, например нынешний = 2023? Или от какой-то даты, как часто бывает? И еще вопрос - надо ли устанвливать вместе с датой и день недели? Или система сама его вычислит из даты и при считывании я его получу? (Ардуино так умеет делать даже).
В нормальном виде 2023. Ставить надо год, месяц и число, день недели определит сам.
. И я еще спрошу здесь, чтобы темы не плодить, в Codesys можно где нибудь задать галку, чтобы порядок выполнения ВСЕГДА был "в соответствии с потоком данных"?
Завязывай с квадратиками и такого вопроса в принципе не будет
Завязывай с квадратиками и такого вопроса в принципе не будет
Я понимаю, но здесь уже поздно. Переделывать проект на другой я зык я не буду, да и "квадратики" нагляднее = сразу вижу всю логику программы. Хотя не так удобно как текст, это да.
Я понимаю, но здесь уже поздно. Переделывать проект на другой я зык я не буду, да и "квадратики" нагляднее = сразу вижу всю логику программы. Хотя не так удобно как текст, это да.
Да никто и не заставляет. Был просто совет.
Про "наглядность и видна вся логика" : пару дней искали что забыли ещё один квадратик нарисовать - холста не хватило или не сразу увидели что пропустили Н-ский проезд на карте Москвы ?))
Да никто и не заставляет. Был просто совет.
Про "наглядность и видна вся логика" : пару дней искали что забыли ещё один квадратик нарисовать - холста не хватило или не сразу увидели что пропустили Н-ский проезд на карте Москвы ?))
Ну я не все два дня непрерывно искал, но не заметил на холсте, да. В тексте я бы дольше искал, пусть не в этом случае, но в более-менее сложном алгоритме в текст въехать сложнее. Я и так и так программирую, на разных языках и могу сравнивать.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot