Просмотр полной версии : Системные события 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?
Неужели нет событий типа AfterStart, BeforeStop?
а Вам где то попадалось, что после отключения питания, контроллеры на третьем КДС продолжали работать?
yuriylvovich
22.08.2013, 23:02
Нет, вот и ищу решение, системные события перед затуханием PLC не отрабатывают...
черт побери, плк с третьим КДС нормально подключают внешние флеш-карты, пишите постоянно, если так необходимо следить за ситуацией
А как же инициализация переменных (параметров системы) перед началом работы системы из сохраненных файлов ? Только не предлагайте Retain-переменные
А как же инициализация переменных (параметров системы) перед началом работы системы из сохраненных файлов ? Только не предлагайте Retain-переменные
Что мешает считать из файла?
черт побери, плк с третьим КДС нормально подключают внешние флеш-карты, пишите постоянно, если так необходимо следить за ситуацией
А как записывать данные в файле в столбик, а то у меня получается только все в строку. Использую библиотеку SysFile. (библиотеку ArchiverSPK_3.5.3.53 не использую т.к. сижу на старой прошивке (стабильнее работа)).
Я сохраняю файл с расширением *.csv. Разделяю данные ";"
Думал необходимо в конце строки дописывать CRLF, но нет это не помогает.
Так как же записывать?
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 библиотеки пишу
Что мешает считать из файла?
см. первое сообщение в теме
необходим обработчик системного события типа "Init" или "Start"
см. первое сообщение в теме
необходим обработчик системного события типа "Init" или "Start"
И в чем загвоздка? Переменная start типа BOOL инициализируется при старте контроллера ложью.
IF NOT start THEN
Читаем из файла;
start:=TRUE;
END_IF
IF start THEN
Программа;
END_IF
И в чем загвоздка? Переменная start типа BOOL инициализируется при старте контроллера ложью.
IF NOT start THEN
Читаем из файла;
start:=TRUE;
END_IF
IF start THEN
Программа;
END_IF
Работать, конечно, будет. Но мне как программисту со стажем, данный способ ужасно не нравится.
Вместо того, чтобы определенный код (функция или фб) отработал и больше не вызывался,
здесь постоянно проверяется условие инициализации.
Работать, конечно, будет. Но мне как программисту со стажем, данный способ ужасно не нравится.
Вместо того, чтобы определенный код (функция или фб) отработал и больше не вызывался,
здесь постоянно проверяется условие инициализации.
Программист со стажем чего? Систем реального времени? В каком году написана Ваша первая программа заказчику, моя в 1988 и я почему то не парюсь из-за таких вещей, думаю только заставших прокалывание дырок в перфокартах, может бесить лишний код, лишняя проверка. Вы вообще ни каких проверок не делаете, ни выход за диапазон, ни на КЗ и обрыв, ни состояние аварийной кнопки и т.д т.п? Уверены что Вы промышленной автоматизацией занимаетесь?
Программист со стажем чего? Систем реального времени? В каком году написана Ваша первая программа заказчику, моя в 1988 и я почему то не парюсь из-за таких вещей, думаю только заставших прокалывание дырок в перфокартах, может бесить лишний код, лишняя проверка. Вы вообще ни каких проверок не делаете, ни выход за диапазон, ни на КЗ и обрыв, ни состояние аварийной кнопки и т.д т.п? Уверены что Вы промышленной автоматизацией занимаетесь?
Да, я именно в промышленной автоматизацией занимаюсь всю жизнь, и мой стаж всего на пару лет меньше Вашего. Но меня всегда коробит когда приходится изгаляться для решения элементарных задач.
В версии 2.3 были же системные события, почему здесь убрали?
прежде чем здесь написать что убрано, может определиться что среда разработки не вполне изучена, например зайти на сайт разработчика и разобраться с примером http://store.codesys.com/event-manager.html?___store=en&___from_store=default
и незнаю в чем трудности, зачем изгаляться и тому подобное, начав любую функцию со строчки
IF NOT MX0.0 THEN mx0.0:=true; RETURN END_IF;
это так сильно напрягает?
прежде чем здесь написать что убрано, может определиться что среда разработки не вполне изучена, например зайти на сайт разработчика и разобраться с примером http://store.codesys.com/event-manager.html?___store=en&___from_store=default
А вот за эту инфу спасибо. Ею, наверно, можно было сразу закрыть тему.
Только я весь день не могу скачать данный пример - не запускается закачка и всё. Если Вы скачали - скиньте мне пожалуйста на почту: sattarov.r@agrs.ru
А CodeSys я действительно плохо знаю - инфу взял из хелпа:
10931
я в командировке, эти примеры не скачивал, мне за ненадобностью они
ЗЫ не думаю, что тема закроется, открыл проект от какой то спкашки, системных событий нет, сменил устройство на 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
В конфигураторе задачь есть
10952
К сожалению данный метод не подойдёт: в таргете это урезано
Yury Evgenev
31.01.2014, 14:33
Присоединяюсь к вопросу.
Где же всё таки взять сигнал о старте контроллера?
Задача при старте ПЛК304 считать время из часов реального времени и запустить с инициализацией модуль RTC.
А так же как поймать стоп? если я не ошибаюсь, ПЛК серии 150 после пропадания питания ещё продолжают молотить программу какое то время.
Где же всё таки взять сигнал о старте контроллера?
в анналах истории, в программе первой строчкой создаете условие
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();
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot