Подскажите, как в CS3 получать и обрабатывать системные события STOP, Start и т.д.
Вид для печати
Подскажите, как в CS3 получать и обрабатывать системные события STOP, Start и т.д.
Собственно самый главный вопрос для чего?
Хочется после старта считывать сохраненные в файле значения, а перед остановкой записывать
Неужели нет событий типа AfterStart, BeforeStop?
Нет, вот и ищу решение, системные события перед затуханием PLC не отрабатывают...
черт побери, плк с третьим КДС нормально подключают внешние флеш-карты, пишите постоянно, если так необходимо следить за ситуацией
А как же инициализация переменных (параметров системы) перед началом работы системы из сохраненных файлов ? Только не предлагайте Retain-переменные
А как записывать данные в файле в столбик, а то у меня получается только все в строку. Использую библиотеку SysFile. (библиотеку ArchiverSPK_3.5.3.53 не использую т.к. сижу на старой прошивке (стабильнее работа)).
Я сохраняю файл с расширением *.csv. Разделяю данные ";"
Думал необходимо в конце строки дописывать CRLF, но нет это не помогает.
Так как же записывать?
http://ru.wikipedia.org/wiki/%D0%9F%...BE%D0%BA%D0%B8
:)
как я сейчас могу сказать, мой плк на v3 убит, а так то я csv файлы с помощью sysexec библиотеки пишу
Программист со стажем чего? Систем реального времени? В каком году написана Ваша первая программа заказчику, моя в 1988 и я почему то не парюсь из-за таких вещей, думаю только заставших прокалывание дырок в перфокартах, может бесить лишний код, лишняя проверка. Вы вообще ни каких проверок не делаете, ни выход за диапазон, ни на КЗ и обрыв, ни состояние аварийной кнопки и т.д т.п? Уверены что Вы промышленной автоматизацией занимаетесь?
прежде чем здесь написать что убрано, может определиться что среда разработки не вполне изучена, например зайти на сайт разработчика и разобраться с примером http://store.codesys.com/event-manag..._store=default
и незнаю в чем трудности, зачем изгаляться и тому подобное, начав любую функцию со строчкиэто так сильно напрягает?Код:IF NOT MX0.0 THEN mx0.0:=true; RETURN END_IF;
А вот за эту инфу спасибо. Ею, наверно, можно было сразу закрыть тему.
Только я весь день не могу скачать данный пример - не запускается закачка и всё. Если Вы скачали - скиньте мне пожалуйста на почту: sattarov.r@agrs.ru
А CodeSys я действительно плохо знаю - инфу взял из хелпа:
Вложение 10931
я в командировке, эти примеры не скачивал, мне за ненадобностью они
ЗЫ не думаю, что тема закроется, открыл проект от какой то спкашки, системных событий нет, сменил устройство на WIN, события появились, так что если в таргете они убраны, значит кому то это нужно )))
В конфигураторе задачь есть
Вложение 10952
Присоединяюсь к вопросу.
Где же всё таки взять сигнал о старте контроллера?
Задача при старте ПЛК304 считать время из часов реального времени и запустить с инициализацией модуль RTC.
А так же как поймать стоп? если я не ошибаюсь, ПЛК серии 150 после пропадания питания ещё продолжают молотить программу какое то время.
А... понял. Т.е. flag это своя bool переменная, работает как событие. Хитро.
Подскажите тогда, если не сложно. Пользуясь этим флагом, как прочитать текущее время только 1 раз при старте программы? В конечном счете хочу инициализировать часы реального времени.
Я попробовал таким образом:
Но CurrentDateTime не меняется.Код:PROGRAM PLC_PRG
VAR
(* флаг подачи питания *)
START: BOOL:= FALSE;
InternalRTC: RTC; (* часы реального времени *)
Error: DTU.ERROR;
GetTime: DTU.GetDateAndTime;
CurrentDateTime: DT;
RT_TIME:R_TRIG;
Set:BOOL;
END_VAR
(*Получаем системное время в формате DATE_AND_TIME*)
RT_TIME(CLK:=GetTime.xDone);
IF NOT START THEN
GetTime(xExecute:= NOT(GetTime.xDone));
START:=TRUE;
END_IF;
IF RT_TIME.Q AND GetTime.xBusy=FALSE AND GetTime.xError=FALSE AND GetTime.eError=0 THEN
CurrentDateTime:=GetTime.dtDateAndTime;
END_IF
InternalRTC(EN:=START, PDT:=CurrentDateTime(*DT#2006-03-30-14:00:00*), Q=>VarBOOL2, CDT=>VarTimeCur);
GetTime у вас выполняется один раз(первый проход цикла).
Вызовите фб вне условия IF NOT START THEN, а внутри условия выполните инициализацию, примерно такКод:IF NOT START THEN
GetTime(xExecute:= NOT(GetTime.xDone));
START:=TRUE;
END_IF;
Код:GetTime();
IF NOT START THEN
GetTime.xExecute:= NOT(GetTime.xDone);
START:=TRUE;
END_IF;
Спасибо, попробую.
Расскажите поподробнее об этой функции.
при инициализации
при фронте сигнала получаем (или запускаем процедуру чтения текущего времени).Код:GetTime.xExecute = TRUE;
Правильно ли я считаю:
ФБ
нет смысла вызывать, когда время уже считано?Код:GetTime();
Это инициализация переменной функционального блока.(В этот момент он не отрабатывает)Код:GetTime.xExecute = TRUE;
Для того чтобы фб выполнился нужно его вызвать, соответственно вызов:
Код:GetTime();