1. Ну в принципе я с этим не спорил.
Но система конечно удобна, хоть от "классичиского" кодесис внешне почти ничего не осталось... Дальше конечно все зависит от программера.
2. Ну я как бы не мешал... Просто чтобы не открывать новую тему, просто спросил про экраны и кнопочки. Почему вообще спросил? Не из-за того что про меня написал capzap , а потому что в документации по ЖКИ на стр. 16:
(*Перед между режимами осуществляется не мгновенно, может потребовать до 0.5сек) и возможен не из всех режимов. Для гарантированного перехода может потребоваться многократный вызов функции SWITCH_TO_SINGLE_MODE*)
Вот подобные мелочи я имел ввиду... Как-то не хочется чтобы сломали панель, пытаясь переключить что-то... А если есть какие-то задержки, то люди автоматически начинают нажимать сильнее на порядок...
3. Теперь с исходником в плк63 все понятно. Причем утверждение capzap про то что это "забывчивость" как-то начинает вызывать сомнения...
Лог ведется просто в массив, заданный моей структурой, с интервалом в 1 час (ну или сколько задашь в настройках). Причем массив даже не ретайн. Простой одномерный массив с размером 1..100, при достижении конца, автоматически начинает писать с начала. Если не вырубят питание, то нужную инфу я просмотреть успею. Если вырубят - не мои проблемы. Я предупредил если что.
Хотел сделать запись в файл, но прочитав доку (да-да - я иногда документацию все же читаю) "Ограничения ПЛК63.pdf", отказался от этой затеи.
Или я опять что-то делаю не так?
4. Сделал один в один как в примере. Скоро пойду тестировать.
5. Сменим. Потом.
ЗЫ Чей-то пример, вставленный практически один в один (добавил задержку чтобы не гонять каждый цикл), заработал...
Код:
VAR
HOUR:UINT; (* Часы *)
MINUTE:UINT; (* Минуты *)
SECOND:UINT; (* Секунды *)
TIME_NOW:TIME; (* Текущее время *)
DTNow: SystemTimeDate;
STNow: SysTime64;
GetCurrentTime: CurTimeEx;
TCLOCK: TON; (* Таймер обновления текущего времени *)
END_VAR
(* Обновляем раз в 500 мс - некуда спешить *)
TCLOCK (IN:=NOT TCLOCK.Q, PT := T#500ms);
IF TCLOCK.Q THEN
(* Текущее время *)
DTNow.Day :=0;
DTNow.DayOfWeek :=0;
DTNow.dwHighMsec :=0;
DTNow.dwLowMSecs :=0;
DTNow.Milliseconds :=0;
DTNow.Minute :=0;
DTNow.Second :=0;
DTNow.Hour :=0;
DTNow.Year :=0;
DTNow.Month :=0;
STNow.ulHigh :=0;
STNow.ulLow :=0;
GetCurrentTime(SystemTime:=STNow , TimeDate:=DTNow );
HOUR := DTNow.Hour;
MINUTE := DTNow.Minute;
SECOND := DTNow.Second;
TIME_NOW := UINT_TO_TIME((HOUR*3600 + MINUTE*60 + SECOND) * 1000);
END_IF
Всем спасибо!