PDA

Просмотр полной версии : Системные события CodeSys3



yuriylvovich
18.08.2013, 15:42
Подскажите, как в CS3 получать и обрабатывать системные события STOP, Start и т.д.

Александр Приходько
19.08.2013, 16:10
Собственно самый главный вопрос для чего?

yuriylvovich
21.08.2013, 00:12
Хочется после старта считывать сохраненные в файле значения, а перед остановкой записывать

yuriylvovich
21.08.2013, 20:08
Неужели нет событий типа AfterStart, BeforeStop?

capzap
22.08.2013, 06:04
Неужели нет событий типа AfterStart, BeforeStop?

а Вам где то попадалось, что после отключения питания, контроллеры на третьем КДС продолжали работать?

yuriylvovich
22.08.2013, 23:02
Нет, вот и ищу решение, системные события перед затуханием PLC не отрабатывают...

capzap
23.08.2013, 07:43
черт побери, плк с третьим КДС нормально подключают внешние флеш-карты, пишите постоянно, если так необходимо следить за ситуацией

RustySM
29.11.2013, 13:18
А как же инициализация переменных (параметров системы) перед началом работы системы из сохраненных файлов ? Только не предлагайте Retain-переменные

kgsh82
29.11.2013, 14:41
А как же инициализация переменных (параметров системы) перед началом работы системы из сохраненных файлов ? Только не предлагайте Retain-переменные
Что мешает считать из файла?

arlyn
29.11.2013, 15:35
черт побери, плк с третьим КДС нормально подключают внешние флеш-карты, пишите постоянно, если так необходимо следить за ситуацией

А как записывать данные в файле в столбик, а то у меня получается только все в строку. Использую библиотеку SysFile. (библиотеку ArchiverSPK_3.5.3.53 не использую т.к. сижу на старой прошивке (стабильнее работа)).
Я сохраняю файл с расширением *.csv. Разделяю данные ";"
Думал необходимо в конце строки дописывать CRLF, но нет это не помогает.
Так как же записывать?

capzap
29.11.2013, 16:32
http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4_%D1%81% D1%82%D1%80%D0%BE%D0%BA%D0%B8
:)

как я сейчас могу сказать, мой плк на v3 убит, а так то я csv файлы с помощью sysexec библиотеки пишу

RustySM
29.11.2013, 22:45
Что мешает считать из файла?

см. первое сообщение в теме
необходим обработчик системного события типа "Init" или "Start"

kgsh82
29.11.2013, 23:58
см. первое сообщение в теме
необходим обработчик системного события типа "Init" или "Start"

И в чем загвоздка? Переменная start типа BOOL инициализируется при старте контроллера ложью.
IF NOT start THEN
Читаем из файла;
start:=TRUE;
END_IF

IF start THEN
Программа;
END_IF

RustySM
30.11.2013, 00:49
И в чем загвоздка? Переменная start типа BOOL инициализируется при старте контроллера ложью.
IF NOT start THEN
Читаем из файла;
start:=TRUE;
END_IF

IF start THEN
Программа;
END_IF

Работать, конечно, будет. Но мне как программисту со стажем, данный способ ужасно не нравится.
Вместо того, чтобы определенный код (функция или фб) отработал и больше не вызывался,
здесь постоянно проверяется условие инициализации.

capzap
30.11.2013, 06:11
Работать, конечно, будет. Но мне как программисту со стажем, данный способ ужасно не нравится.
Вместо того, чтобы определенный код (функция или фб) отработал и больше не вызывался,
здесь постоянно проверяется условие инициализации.

Программист со стажем чего? Систем реального времени? В каком году написана Ваша первая программа заказчику, моя в 1988 и я почему то не парюсь из-за таких вещей, думаю только заставших прокалывание дырок в перфокартах, может бесить лишний код, лишняя проверка. Вы вообще ни каких проверок не делаете, ни выход за диапазон, ни на КЗ и обрыв, ни состояние аварийной кнопки и т.д т.п? Уверены что Вы промышленной автоматизацией занимаетесь?

RustySM
30.11.2013, 15:00
Программист со стажем чего? Систем реального времени? В каком году написана Ваша первая программа заказчику, моя в 1988 и я почему то не парюсь из-за таких вещей, думаю только заставших прокалывание дырок в перфокартах, может бесить лишний код, лишняя проверка. Вы вообще ни каких проверок не делаете, ни выход за диапазон, ни на КЗ и обрыв, ни состояние аварийной кнопки и т.д т.п? Уверены что Вы промышленной автоматизацией занимаетесь?

Да, я именно в промышленной автоматизацией занимаюсь всю жизнь, и мой стаж всего на пару лет меньше Вашего. Но меня всегда коробит когда приходится изгаляться для решения элементарных задач.
В версии 2.3 были же системные события, почему здесь убрали?

capzap
30.11.2013, 16:08
прежде чем здесь написать что убрано, может определиться что среда разработки не вполне изучена, например зайти на сайт разработчика и разобраться с примером http://store.codesys.com/event-manager.html?___store=en&___from_store=default

и незнаю в чем трудности, зачем изгаляться и тому подобное, начав любую функцию со строчки

IF NOT MX0.0 THEN mx0.0:=true; RETURN END_IF;

это так сильно напрягает?

RustySM
01.12.2013, 19:35
прежде чем здесь написать что убрано, может определиться что среда разработки не вполне изучена, например зайти на сайт разработчика и разобраться с примером http://store.codesys.com/event-manager.html?___store=en&___from_store=default


А вот за эту инфу спасибо. Ею, наверно, можно было сразу закрыть тему.
Только я весь день не могу скачать данный пример - не запускается закачка и всё. Если Вы скачали - скиньте мне пожалуйста на почту: sattarov.r@agrs.ru
А CodeSys я действительно плохо знаю - инфу взял из хелпа:
10931

capzap
01.12.2013, 20:19
я в командировке, эти примеры не скачивал, мне за ненадобностью они

capzap
01.12.2013, 20:24
ЗЫ не думаю, что тема закроется, открыл проект от какой то спкашки, системных событий нет, сменил устройство на WIN, события появились, так что если в таргете они убраны, значит кому то это нужно )))

Mikhail Shvetsov
01.12.2013, 20:48
http://forum-ru.codesys.com/viewtopic.php?f=8&t=1112

Mikhail Shvetsov
03.12.2013, 15:54
В конфигураторе задачь есть
10952

kgsh82
03.12.2013, 18:10
В конфигураторе задачь есть
10952

К сожалению данный метод не подойдёт: в таргете это урезано

Yury Evgenev
31.01.2014, 14:33
Присоединяюсь к вопросу.
Где же всё таки взять сигнал о старте контроллера?
Задача при старте ПЛК304 считать время из часов реального времени и запустить с инициализацией модуль RTC.
А так же как поймать стоп? если я не ошибаюсь, ПЛК серии 150 после пропадания питания ещё продолжают молотить программу какое то время.

capzap
31.01.2014, 22:24
Где же всё таки взять сигнал о старте контроллера?
в анналах истории, в программе первой строчкой создаете условие
IF NOT flag THEN flag:=TRUE; END_IF;это и будет событие старта плк, останется добавить в тело условия свой код для действий по событию

Yury Evgenev
05.02.2014, 20:54
А... понял. Т.е. flag это своя bool переменная, работает как событие. Хитро.

Yury Evgenev
06.02.2014, 07:34
Подскажите тогда, если не сложно. Пользуясь этим флагом, как прочитать текущее время только 1 раз при старте программы? В конечном счете хочу инициализировать часы реального времени.
Я попробовал таким образом:


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);


Но CurrentDateTime не меняется.

Мурат Ахриев
06.02.2014, 15:27
GetTime у вас выполняется один раз(первый проход цикла).


IF NOT START THEN
GetTime(xExecute:= NOT(GetTime.xDone));
START:=TRUE;
END_IF;


Вызовите фб вне условия IF NOT START THEN, а внутри условия выполните инициализацию, примерно так



GetTime();
IF NOT START THEN
GetTime.xExecute:= NOT(GetTime.xDone);
START:=TRUE;
END_IF;

Yury Evgenev
06.02.2014, 19:12
Спасибо, попробую.

Расскажите поподробнее об этой функции.
при инициализации

GetTime.xExecute = TRUE;
при фронте сигнала получаем (или запускаем процедуру чтения текущего времени).
Правильно ли я считаю:
ФБ

GetTime();
нет смысла вызывать, когда время уже считано?

Мурат Ахриев
07.02.2014, 16:06
GetTime.xExecute = TRUE;
Это инициализация переменной функционального блока.(В этот момент он не отрабатывает)

Для того чтобы фб выполнился нужно его вызвать, соответственно вызов:

GetTime();