PDA

Просмотр полной версии : Насосы



Exen3city
02.07.2019, 10:17
Всем доброе утро, посмотрите на код, как считаете, нормальный? SendUp - датчик, pump - насос.
43407

Sulfur
02.07.2019, 10:35
Было бы здорово, если бы перед заливкой картинок они проверялись. Всё размыто, ничего не понятно.
Ну и поставленную задачу неплохо бы описать более подробно.

Exen3city
02.07.2019, 10:45
Задача: осуществить передачу воды из одной емкости в другую при срабатывании датчика, посредством насоса.
Я сделал так: когда датчик срабатывает насос передающий воду в след емкость срабатывает, иначе он не работает и мы переходим к след метке.
Картинку более точную сейчас сделаю

Exen3city
02.07.2019, 10:48
Прикладываю фотографию кода 43408

capzap
02.07.2019, 10:58
есть ли хоть какой то опыт работы с контроллерами или только работали с компьютерными языками программирования. По коду, Вы вроде не поняли принцип работы плк

Exen3city
02.07.2019, 11:08
Новичок в этом, вы правы, что не так, что изменить надо?

capzap
02.07.2019, 11:20
как минимум прыжки вовсе не обязательны, код и так выполнятся, потому что в контроллерах весь код выполняется с периодичностью называемой время цикла/скана, с лева на право с верху в низ. Если хотите чтоб программа застревала на каком то этапе, вместо меток должны быть кейсы оператора CASE

ЗЫ такую задачу, более расторопный студент уже задавал здесь, попробуйте поискать возможно решение уже давалось

Exen3city
02.07.2019, 11:23
Понятно, есть ли критические ошибки? Беспокоюсь что не так как задумано будет работать.

Sulfur
02.07.2019, 11:25
Exen3city
Ну вот как-то так:
43409

Не хватает защиты от дребезга датчиков.

capzap
02.07.2019, 11:32
если этот код работает как задумано, то значит критических ошибок нет. Хотя если смотреть на задание, сам код одна сплошная ошибка

Exen3city
02.07.2019, 11:32
Спасибо! А в коде у меня есть ошибки?

Exen3city
02.07.2019, 11:34
Говорите загадками, почему одна сплошная ошибка? Напишите конкретно что на ваш взгляд не так, благодарю.

capzap
02.07.2019, 11:47
как преподаватель, я бы хотел видеть от учеников, что они идентифицировали общие элементы на технологической схеме участка, построили общий класс, в данном случае это емкость с одним входным аргументом(это сенсор) и первым выходным элементом(это насос) и вторым выходным элементом(это индикация лампочки) Внутри класса описали бы алгоритм, что если сенсор в активном состоянии или удовлетворяющий определенным порогам включения и выключения насоса(одним словом гистерезис), то включался бы насос, в идеале это должна быть одна строчка без всяких условий или уж если условие, то были оставлены комментарии какой блок для чего. Когда общий класс(функциональный блок) создан, останется разместить в программе экземпляры созданного ФБ с присвоением соответствующих входов/выходов

Exen3city
02.07.2019, 11:57
Понятно, у меня есть шаблон программы с ФБ. Решил что код небольшой и можно все уместить в одном POU.

capzap
02.07.2019, 12:44
Понятно, у меня есть шаблон программы с ФБ. Решил что код небольшой и можно все уместить в одном POU.

ну вот например не сможете Вы обосновать зачем используются блинкеры р0-р3, потребуется убирать их в четырех местах, а в случае с шаблоном только в одном месте

Sulfur
02.07.2019, 13:04
Exen3city

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

Exen3city
02.07.2019, 14:33
Понятно, от неопытности сделал громоздко, согласен. Спасибо большое за помощь!

Exen3city
02.07.2019, 14:34
Sulfur, спасибо!

capzap
02.07.2019, 14:45
ладно было бы написано

IF FLAG THEN
PUMP:=TRUE;
(* TODO *)
ELSE
PUMP:=FALSE;
(* TODO *)
END_IF;
проверяющий бы оценил для чего это нагорожено, но без этого, непойму, почему нельзя сделать PUMP:=FLAG;