PDA

Просмотр полной версии : язык St



freeon
19.05.2010, 09:51
Всем доброго дня! Почитав форум и попробовав свои силы в CoDeSys понял, что хоть язык ST и позволяет реализовывать циклы repeat, while и т.д., но, как правило, их использование приводит к зависанию контроллера. Может кто-нибудь разъяснит мне каким образом реализуется каждый из циклов на примере какого-нибудь простого примера. Заранее благодарю. (Прошу сильно не материть - я не программист, я только учусь:) )

ASo
19.05.2010, 10:21
а зачем конкретно вам нужны эти циклы? обрисуйте задачу.

freeon
19.05.2010, 10:29
Задача примерно такая: необходимо включать и отключать насос в зависимости от уровня воды в резервуаре. Видимо я ещё не перестроил мозги и описываю задачу примерно так:
while уровень<2 do
насос:=true;
end_while;
if уровень>9 then
насос:=false;
end_if;
понимаю, что где-то что-то не так, вот и хочу разобраться как лучше реализовывать циклы в CoDeSys...

Малышев Олег
19.05.2010, 10:39
Задача примерно такая: необходимо включать и отключать насос в зависимости от уровня воды в резервуаре. Видимо я ещё не перестроил мозги и описываю задачу примерно так:
while уровень<2 do
насос:=true;
end_while;
if уровень>9 then
насос:=false;
end_if;
понимаю, что где-то что-то не так, вот и хочу разобраться как лучше реализовывать циклы в CoDeSys...

подключите util.lib
HYST_PUMP:HYSTERESYS;
HYST_NASOS(in:=level,low:=2,high:=9,OUT=>pump);

freeon
19.05.2010, 10:41
хм, спасибо за ответ. попробую.

ASo
19.05.2010, 12:28
Или по шагам, без стандартного блока, как учебный пример.

VAR
Pump_ON: BOOL
END_VAR

if Pump_ON then
if level > 9 then
Pump_ON := false;
OUT:= false;
END_IF;
ELSE
if level < 2 then
Pump_ON := true;
OUT:= true;
END_IF;
END_IF;

Главное, при переходе от классического программирования, запомните, запишите большими буквами, и т.п. - цикл "крутит" для Вас сам ПЛК!, не пытайтесь в него вмешаться!

freeon
19.05.2010, 13:17
спасибо за внимание, кое что для себя прояснил.

bango
19.05.2010, 17:58
Почитав форум и попробовав свои силы в CoDeSys понял, что хоть язык ST и позволяет реализовывать циклы repeat, while и т.д., но, как правило, их использование приводит к зависанию контроллера.
Это что правда?

lara197a
20.05.2010, 08:01
нет,это все нормально работает и зависит только от организации циклов. если условия приведут к бесконечному циклу, то плк перезагрузится.

freeon
20.05.2010, 08:02
Очевидно, что да. В CoDeSys несколько по иному реализуются циклы, поскольку основной цикл крутит сам ПЛК.

Николаев Андрей
21.05.2010, 16:16
ПЛК не зависает.
Просто если программу пишут люди, не совсем освоившиеся с принципами программирования на языках МЭК - они загоняют контроллер в цикл, который и так уже организовуется самим контроллером.
И когда ПЛК видит, что его пытаются "повесить" бесконечным циклом - перезагружается по WatchDog...

Jolly
14.12.2016, 19:07
Есть следующий обрывок кода, который выводит дату и время в формате ЧЧ.ММ.ГГГГ Часы:Минуты
'echo -n "$$(date $'+%F %T$');" >> '
Вопрос: "Как к ним приписать еще секунды?"

capzap
14.12.2016, 19:28
Есть следующий обрывок кода, который выводит дату и время в формате ЧЧ.ММ.ГГГГ Часы:Минуты
'echo -n "$$(date $'+%F %T$');" >> '
Вопрос: "Как к ним приписать еще секунды?"

в КДС2.3 нет bash оболочки, такой вопрос лучше по гуглить

Jolly
14.12.2016, 19:41
У меня КДС 3.5. Просто не в ту тему написал случайно. В 3.5 возможно ли такое реализовать?

Евгений Кислов
14.12.2016, 19:45
У меня КДС 3.5. Просто не в ту тему написал случайно. В 3.5 возможно ли такое реализовать?

Можно. См. документ СПК. Системное время.