[?]: Время цикла программ на языках STL и SCL
-
- Posts: 202
- Joined: Wed Mar 19, 2008 1:12 pm
- Location: Ukraine
[?]: Время цикла программ на языках STL и SCL
Здравствуйте, подскажите куда копать по следующему вопросу:
Есть CPU 314C-2 PN/DP, код к нему написан в Step7. Процентов 80 кода это STL - время цикла 12мс
Сделал новый проект(ПЛК тотже) практически с таким же функционалом в ТІАv14 (тут уже 80 процентов кода на SCL) - время цикла запредельные 60 мс, что в моей практике никогда не было
Даже если у меня и есть ошибки с оптимизацией то 50мс это уж сильно круто
Понимаю, что без кода мой вопрос глуповат, но может кто сталкивался с подобной проблемой, и сможет подсказать куда копать
Есть CPU 314C-2 PN/DP, код к нему написан в Step7. Процентов 80 кода это STL - время цикла 12мс
Сделал новый проект(ПЛК тотже) практически с таким же функционалом в ТІАv14 (тут уже 80 процентов кода на SCL) - время цикла запредельные 60 мс, что в моей практике никогда не было
Даже если у меня и есть ошибки с оптимизацией то 50мс это уж сильно круто
Понимаю, что без кода мой вопрос глуповат, но может кто сталкивался с подобной проблемой, и сможет подсказать куда копать
-
- Site Admin
- Posts: 3992
- Joined: Thu Feb 16, 2006 3:25 pm
- Location: Russia
Re: [?]: Время цикла программ на языках STL и SCL
Надо ставить эксперимент на одной конкретной задаче, написав идентичный функционал на разных языках.
Сравнить размер занимаемой программой памяти.
Можно сгенерировать "исходники" Source и сравнить самописный код STL и скомпилированный из SCL.
Учитывать обращение к внешней периферии и коммуникациям.
Сравнить размер занимаемой программой памяти.
Можно сгенерировать "исходники" Source и сравнить самописный код STL и скомпилированный из SCL.
Учитывать обращение к внешней периферии и коммуникациям.
-
- Posts: 202
- Joined: Wed Mar 19, 2008 1:12 pm
- Location: Ukraine
Re: [?]: Время цикла программ на языках STL и SCL
Запутался и по моему мое представление о правильной архитектуре программы неправильно...
Допустим из OB вызывается FB1/DB1
в FB1 вызывается 10 раз FB2(мотор) который использует память FB1/DB1:
Motor1(FB2)
Motor2(FB2)
Motor3(FB2)
Motor4(FB2)
Motor5(FB2)
Motor6(FB2)
Motor7(FB2)
Motor8(FB2)
Motor9(FB2)
Motor10(FB2)
В каждом FB2 вызывается FB3 и FC1:
Motor1(FB2)
------------>FB3
------------>FC1
Motor2(FB2)
------------>FB3
------------>FC1
Motor3(FB2)
------------>FB3
------------>FC1
и т.д......
Вопрос : если заметить вызовы FB3 и FC1 на обработку их задач внутри FB2 это даст экономию времени цикла????
Допустим из OB вызывается FB1/DB1
в FB1 вызывается 10 раз FB2(мотор) который использует память FB1/DB1:
Motor1(FB2)
Motor2(FB2)
Motor3(FB2)
Motor4(FB2)
Motor5(FB2)
Motor6(FB2)
Motor7(FB2)
Motor8(FB2)
Motor9(FB2)
Motor10(FB2)
В каждом FB2 вызывается FB3 и FC1:
Motor1(FB2)
------------>FB3
------------>FC1
Motor2(FB2)
------------>FB3
------------>FC1
Motor3(FB2)
------------>FB3
------------>FC1
и т.д......
Вопрос : если заметить вызовы FB3 и FC1 на обработку их задач внутри FB2 это даст экономию времени цикла????
-
- Posts: 878
- Joined: Tue Dec 26, 2006 5:21 am
- Location: Russia
-
- Posts: 193
- Joined: Fri Feb 24, 2012 8:28 am
Re: [?]: Время цикла программ на языках STL и SCL
SCL компилятор создает кучу всякого дополнительного, и иногда ненужного кода (особенно когда код с циклами), а это дополнительная нагрузка на ресурсы. Даже ЛАД или ФБД создает дополнительный код (но меньше). Может лучше на СТЛ сделать?
-
- Posts: 202
- Joined: Wed Mar 19, 2008 1:12 pm
- Location: Ukraine
Re: [?]: Время цикла программ на языках STL и SCL
Спс всем за ответы,
да дало, уже выиграл 7 мс только на вызове одного "типа" оборудования - сделал вызов вложенных FC и FB по условию,
еще вопрос, есть инструкция Return часто ли ее используют при программировании, я как бы ее ни разу не использовал так как надобности не было????
да дало, уже выиграл 7 мс только на вызове одного "типа" оборудования - сделал вызов вложенных FC и FB по условию,
еще вопрос, есть инструкция Return часто ли ее используют при программировании, я как бы ее ни разу не использовал так как надобности не было????
-
- Posts: 202
- Joined: Wed Mar 19, 2008 1:12 pm
- Location: Ukraine
Re: [?]: Время цикла программ на языках STL и SCL
Судя по всему лучше, но его не знаю, проект большой переделать не успею....Usver wrote:SCL компилятор создает кучу всякого дополнительного, и иногда ненужного кода (особенно когда код с циклами), а это дополнительная нагрузка на ресурсы. Даже ЛАД или ФБД создает дополнительный код (но меньше). Может лучше на СТЛ сделать?
-
- Posts: 193
- Joined: Fri Feb 24, 2012 8:28 am
Re: [?]: Время цикла программ на языках STL и SCL
А как без нее? Если дальнейшие действия в функции не имеют значения, или имеют, но они не нужны, то как без нее обойтись? Даже на ЛАД есть инструкция RET (на ФБД не помню, но скорее она тоже есть). Используется конечно же часто, как и на С++ и т.д и т.п.есть инструкция Return часто ли ее используют при программировании
-
- Posts: 202
- Joined: Wed Mar 19, 2008 1:12 pm
- Location: Ukraine
Re: [?]: Время цикла программ на языках STL и SCL
Спасибо, теперь все стало понятно почему такой большой разбег
-
- Posts: 118
- Joined: Sun Apr 17, 2011 9:49 pm
Re: [?]: Время цикла программ на языках STL и SCL
скажите, как по условию вызывать?a_gricaj wrote:Спс всем за ответы,
сделал вызов вложенных FC и FB по условию,
if чегото=совпало then
FB(FC)_Name_DB();
end_if;
???
-
- Posts: 878
- Joined: Tue Dec 26, 2006 5:21 am
- Location: Russia
Re: [?]: Время цикла программ на языках STL и SCL
На каком языке?
На СТЛ:
если не совпало то прыгаем на первый, а если совпало, то продолжаем, в конце продолжения прыгаем дальше первого на второй (или вылетаем из блока (или из программы ( или стоп процессора (или записываем неправильный формат в DB и процессор зависнет (или запусканем СТУХНЕТ ).
На СТЛ:
если не совпало то прыгаем на первый, а если совпало, то продолжаем, в конце продолжения прыгаем дальше первого на второй (или вылетаем из блока (или из программы ( или стоп процессора (или записываем неправильный формат в DB и процессор зависнет (или запусканем СТУХНЕТ ).
-
- Posts: 202
- Joined: Wed Mar 19, 2008 1:12 pm
- Location: Ukraine
Re: [?]: Время цикла программ на языках STL и SCL
Да тут все стало ясно - решил переделать на свою голову свои типовые блоки, переделывал на 1500-том - цикл был норм))), а когда засунул их в большом количестве в 300-тый то увидел какой я "суперский" программер, и теперь опять переделыватьDfcz wrote:На каком языке?
На СТЛ:
если не совпало то прыгаем на первый, а если совпало, то продолжаем, в конце продолжения прыгаем дальше первого на второй (или вылетаем из блока (или из программы ( или стоп процессора (или записываем неправильный формат в DB и процессор зависнет (или запусканем СТУХНЕТ ).
-
- Posts: 118
- Joined: Sun Apr 17, 2011 9:49 pm
Re: [?]: Время цикла программ на языках STL и SCL
SCL, отчего пример спросил, потому что в 1500 у меня в циклах и в IF блоках таймер не работает.Dfcz wrote:На каком языке?
пик пок посмотрел, не получится с оптимированными блоками их применить.
меня слайс доступ в цикле интересует
viewtopic.php?f=9&t=26308&p=84596#p84596
-
- Posts: 202
- Joined: Wed Mar 19, 2008 1:12 pm
- Location: Ukraine
Re: [?]: Время цикла программ на языках STL и SCL
а че в IF блоках не работают таймеры? если условие выполняется должны работать, штатные таймеры не юзаю, но свои в блоке IF работают, или может че неправильно понял...
-
- Posts: 118
- Joined: Sun Apr 17, 2011 9:49 pm
Re: [?]: Время цикла программ на языках STL и SCL
да, IEC таймеры, как и S5 в TIA в SCL не работают.
в симуляторе короткое время можно наблюдать, что стартует таймер, но время не отрабатывает.
далее даже симулятор не отображает, что условие
выполняется, хотя оно выполняется.
стоит вынести таймер за "скобки", пределы блока, все становится OK.
Вначале я таймер в FUB NW создал и оно заработало, затем в другом NW на SCL и тоже все ок.
Как бы в S7 классике я вставлял таймеры в IF блок.
вот так не работают.
вот так работают
а вообще я хотел так реализовать, без #Timer_Start_min
вызывается FC блок (пробовал и в FB и таймеры в интерфейсе блока размещал)10 раз в секунду.
генерирую минутные, часовые и переходные через 24 часа импульсы.
коллега говорит, что не работает так и не работало никогда.
как то стыдно стало, так как не знаю почему. на форуме сименся тему делал,
ответа нет.
Но я как бы делал когда-то и работало
может приснилось?
в симуляторе короткое время можно наблюдать, что стартует таймер, но время не отрабатывает.
далее даже симулятор не отображает, что условие
Code: Select all
IF "Takten_DB".min_act <> "Takten_DB".min_old THEN
стоит вынести таймер за "скобки", пределы блока, все становится OK.
Вначале я таймер в FUB NW создал и оно заработало, затем в другом NW на SCL и тоже все ок.
Как бы в S7 классике я вставлял таймеры в IF блок.
вот так не работают.
Code: Select all
#RetVal := RD_LOC_T("Takten_DB".sysTime);
// if RetVal si true then sommer time
"Takten_DB".min_act := "Takten_DB".sysTime.MINUTE;
IF "Takten_DB".min_act <> "Takten_DB".min_old THEN
#Timer_Start_min := TRUE;
"IEC_Timer_for_min_Imp".TP(IN := #Timer_Start_min,
PT := t#5000ms,
Q => "Takten_DB".min_Imp);
END_IF;
"Takten_DB".min_old := "Takten_DB".min_act;
Code: Select all
#RetVal := RD_LOC_T("Takten_DB".sysTime);
// if RetVal si true then sommer time
"Takten_DB".min_act := "Takten_DB".sysTime.MINUTE;
IF "Takten_DB".min_act <> "Takten_DB".min_old THEN
#Timer_Start_min := TRUE;
END_IF;
"IEC_Timer_for_min_Imp".TP(IN := #Timer_Start_min,
PT := t#5000ms,
Q => "Takten_DB".min_Imp);
"Takten_DB".min_old := "Takten_DB".min_act;
Code: Select all
#RetVal := RD_LOC_T("Takten_DB".sysTime);
// if RetVal si true then sommer time
"Takten_DB".min_act := "Takten_DB".sysTime.MINUTE;
IF "Takten_DB".min_act <> "Takten_DB".min_old THEN
"IEC_Timer_for_min_Imp".TP(IN := TRUE,
PT := t#5000ms,
Q => "Takten_DB".min_Imp);
END_IF;
"Takten_DB".min_old := "Takten_DB".min_act;
генерирую минутные, часовые и переходные через 24 часа импульсы.
коллега говорит, что не работает так и не работало никогда.
как то стыдно стало, так как не знаю почему. на форуме сименся тему делал,
ответа нет.
Но я как бы делал когда-то и работало
может приснилось?
своих нет, если делать то нужно привязывать к циклическим OB?но свои в блоке IF работают
-
- Posts: 193
- Joined: Fri Feb 24, 2012 8:28 am
Re: [?]: Время цикла программ на языках STL и SCL
А по-вашему должны? Ну может быть, конечно. Ну а если отменяется вызов блока таймера(IF "Takten_DB".min_act <> "Takten_DB".min_old не будет ИСТИНОЙ), тогда как он должен работать? Попробуйте тоже самое написать в стл, пойдет?вот так не работают.
Таймер вызывается постоянно, потому и работает.вот так работают
а чего тут такого?как то стыдно стало, так как не знаю почему.
-
- Posts: 118
- Joined: Sun Apr 17, 2011 9:49 pm
Re: [?]: Время цикла программ на языках STL и SCL
один раз истина в в минуту. если секунды считывать то раз в секунду. условие выполняется верно, если таймер вынести за блок IF.Ну а если отменяется вызов блока таймера(IF "Takten_DB".min_act <> "Takten_DB".min_old не будет ИСТИНОЙ)
#Timer_Start_min Typ temp, живет один цикл. можно и так приписать после вызова таймера за блоком, все будет работать, так как условие выполняется. если таймер в блоке, то условие не выполняется#
Code: Select all
#Timer_Start_min:=FALSE;
но стуацию не меняет. просто, говорят, что таймер в блоке никогда не работал и работать не будет.
я хотел это прояснить. у меня в руках только TIA
да, но #Timer_Start_min=FALSE есть если условие не выполняетсяТаймер вызывается постоянно, потому и работает.
-
- Posts: 193
- Joined: Fri Feb 24, 2012 8:28 am
Re: [?]: Время цикла программ на языках STL и SCL
Какие типы данных и логика работы Вашей программы мне не известны.
Вроде бы я тоже самое и сказал, что таймер в блоке работать не должен. Таймер должен постоянно вызываться. Тут не важно на каком языке выполнено. Можно попробовать на ЛАДе, но только, чтобы с прыжками или возвратом. Если выполните так, как у Вас в СЦЛ, то результат измениться не должен.просто, говорят, что таймер в блоке никогда не работал и работать не будет
-
- Site Admin
- Posts: 1387
- Joined: Sat Aug 13, 2005 6:15 am
Re: [?]: Время цикла программ на языках STL и SCL
так точно работать не будетOll Bell wrote:а вообще я хотел так реализовать, без #Timer_Start_minCode: Select all
#RetVal := RD_LOC_T("Takten_DB".sysTime); // if RetVal si true then sommer time "Takten_DB".min_act := "Takten_DB".sysTime.MINUTE; IF "Takten_DB".min_act <> "Takten_DB".min_old THEN "IEC_Timer_for_min_Imp".TP(IN := TRUE, PT := t#5000ms, Q => "Takten_DB".min_Imp); END_IF; "Takten_DB".min_old := "Takten_DB".min_act;
IEC_Timer_for_min_Imp".TP(IN) всегда TRUE
scl использует set/reset
т.е. как минимум надо делать":
Code: Select all
ELSE "IEC_Timer_for_min_Imp".TP(IN := FALSE,
PT := t#5000ms,
Q => "Takten_DB".min_Imp);
-
- Posts: 118
- Joined: Sun Apr 17, 2011 9:49 pm
Re: [?]: Время цикла программ на языках STL и SCL
логично, наверное к этому бы пришел, если бы в блоке IF таймер работал.т.е. как минимум надо делать":
поделитесь примером своего таймера который в блоке IF работаетно свои в блоке IF работают