Страница 1 из 16

"Первые шаги"

Добавлено: 31.12.2015{, 01:41}
VirSpy
На сколько понимаю эта тема важная и начать ее некому. Поэтому позвольте мне. Буду приводить примеры на плате Uno (ATmega328), язык - FBD. (если нужны разъяснения по выбору(смене) платы, распиновке, прошивке и внешнего подключения - спрашивайте, объясню)
Урок 1.
Начнем с простого примера - мигание светодиодом (подключенным к D13). Собираем следующую "программу" - Led1.
Изображение
Здесь видим (слева-направо, сверху-вниз): генератор - выход D13 (встроенный led). На входе генератора - константа "1", заставляющая его постоянно работать. Сам генератор сконфигурирован как Симметричный мультивибратор ("1" и "0" одинаковой продолжительностью времени) на Константу в 500 миллисекунд (0,5 сек.).
Константу можно задать и с внешнего входа (прим. Led2).
Изображение
Изменяя ее можем получить мигание с разной частотой.
В случае Несиметричного мультивибратора будем иметь разные временные диапазоны как для "1", так и для "0" (прим. Led3).
Изображение
Ну а Одновибратор просто дает "1" на определенное время
Изображение
(15 сек. моргает светодиод с соотношением 5 к 1. (Перезапустить программу можно при нажатии кнопки Reset). прим.Led4).

На этом вроде все. Ждите второго урока (будем подрубать кнопку).

"Первые шаги"

Добавлено: 31.12.2015{, 10:59}
Airis
VirSpy писал(а):На сколько понимаю эта тема важная и начать ее некому.
Тут есть целый раздел "Видео уроки" от автора программы, где очень наглядно разъяснено как работатьс самой программой, и как использовать ту или иную функцию.

Хотя, возможно для совсем новичков нужны объяснение самых азов работы сFBD и LAD. У меня уже был опыт работы с Siemens LOGO! (самостоятельно изучал LAD), и рисованию релейных и булевых схем.

"Первые шаги"

Добавлено: 31.12.2015{, 11:23}
DWD
Но если тема не заглохнет а будет продолжаться с постепенно усложняющимися задачками, то получится не плохой хелр...

Дело в том, что с видеоурока трудно вытянуть один интересущий вопрос, в то время как в тексте достаточно задать поисковую фразу.

Для новичков самое то.

"Первые шаги"

Добавлено: 31.12.2015{, 13:08}
AlexRyzh
Огромное спасибо за энтузиазм. Возможно Ваши уроки будут вполне полезны, если Вы отнесетесь к ним как профессиональный преподаватель, учитывая, что ученик абсолютно не сведом в том, чему Вы будете учить.
Как принято в обучении на программировании в ИДЕ на Ардуино, первый урок это включить диод на пине 13, чтоб постоянно горел. Потом мигание и так далее.
Я бы хотел видеть урок немного иначе, т.к. очень важно понять почему в ФЛП используем именно гениратор (или еще что), с кратким (но понятным) описанием самой схемы подключения на плате. Да, не сложно повторить ваш урок1, соединить гениратор с диодом, откомпелировать. Подключить к Ардуино светодиод и он будет ... а дальше по уроку не понятно, светить или все же мигать. У Вас написано "На входе генератора - константа "1", заставляющая его постоянно работать. " и тут же написано... "Сам генератор сконфигурирован как Симметричный мультивибратор ("1" и "0" одинаковой продолжительностью времени) на Константу в 500 миллисекунд (0,5 сек.)." Так все таки будет гореть или мигать благодаря встроенному мультивибратору?
Т.к. подобный урок для абсолютных новичков в этой программе, поэтому нужно для понимания более детально описывать применяемые инструменты, целесообразность их применения в данной ситуации и как проходит реализация. 
Например: Урок №1 - зажигаем светодиод на пине 13
Задача
- зажечь светодиод на пине 13 чтоб он постоянно светил.
Пример реализации на языке Ардуино IDE:

void setup() {                 // Инициализируем цифровой вход/выход в режиме выхода.  // Выход 13 на большинстве плат Arduino подключен к светодиоду на плате.  pinMode(13, OUTPUT);   } void loop() {  digitalWrite(13, HIGH);   // зажигаем светодиод}
Результат работы кода - светодиод постоянно горит.
Пример реализации на FLP: led1.flp (пример для скачивания)

Добавлено (31.12.2015, 13:04)
---------------------------------------------
Пояснения к примеру: 
1. Создаем светодиод:

     Т.к. светодиод это управляемый элемент, он будет реагировать на ВЫХОДНОЙ сигнал Ардуины, поэтому его назначаем во вкладке "Выходы"
    Во вкладке Tags в группе "Выходы"  создаем выход с названием "светодиод", перетаскиваем на плату.
    Далее, светодиод нужно зажечь. Для этого нужен входной сигнал, создаем во вкладке "Входы" входной сигнал на пине 1. Чтобы установить на пине 1 единицу (+5В), нужно поставить галочку "Включить подтягивающий резистор". Как установить состояние в ноль - я не знаю. Если не включать подтягивающий резистор, то происходит только назначение пина как цифрового без указания его состояния (0 или 1). Каким будет состояние пина в случае без подтягивающего резистора? Почему оно будет таким и всегда ли оно будет таким?
Созданный вход перетаскиваем на плату и соединяем со светодиодом. Компилируем. Получаем код.

Полученный код с подтягивающим резистором: (в коде добавлю пояснения, т.к. программа коментарии не добавляет)

void setup()
{
pinMode(1, INPUT); //назначение пина 1 вход
digitalWrite(1, HIGH); // устанавливаем пин 1 в единицу (+5В)
pinMode(13, OUTPUT); //пин 13 назначаем на выход (куда будет подключен диод)

}
void loop()
{

digitalWrite(13,  (digitalRead (1))); // состояние пина 13 зависит от состояния пина 1. Т.к. пин 1 установлен в единицу, то на 13 пине так же будет единица и диод будет светиться.

}

В таком духе продолжить и объяснения с мигающим светодиодом. Кроме того по мигающему светодиоду можно сделать несколько вариантов (хотя бы 2), т.к. светодиод может мигать с помощью задержки программы (delay(500);) и как- привязать к зависимости от времени в цикле программы (если возможно).
Возможно в программе это можно реализовать еще проще. Не думаю, что зажечь светодиод программа вынуждает занять 2 пина. Наверняка есть какой-то другой подход. Но я не знаю как это сделать проще, используя только пин 13.
Еще раз повторюсь, Вы не должны забывать, что данный пост могут читать только абсолютные новички, своего рода первоклашки в работе с программой FLP, поясняя каждый элемент, почему используется именно этот элемент или какой еще можно использовать для решения поставленной задачи. Поэтому излишнее разжевывать пойдет только в пользу знаниям. (Если Вы действительно хотите помочь создателю программы и дать какие-то знания страждущим).
Кроме этого хочу сказать, что избавления от большой писанины, такие уроки лучше делать видео. Писать придется намного меньше, да и наглядность действий  воспринимается в разы эффективнее.
Извините, что возможно покажусь занудой, но уверен, что таких новичков как я много и все хотят не просто повторить Ваши действия, а ПОНЯТЬ! суть происходящего.

Что касается программы FLP, думаю она эффективна при совместном понимании построения в программе и полученного кода.
Т.к. основу кода можно создать в FLP, а доводку сделать уже в ИДЕ компиляторе.

Вот мигание светодиода написанное для ИДЕ: Реализовано ожиданием программы.
/*  Зажигаем светодиод на одну секунду, затем выключаем его на    одну  секунду в цикле. */ void setup() {                 // Инициализируем цифровой вход/выход в режиме выхода.  // Выход 13 на большинстве плат Arduino подключен к светодиоду на плате.  pinMode(13, OUTPUT);   } void loop() {  digitalWrite(13, HIGH);   // зажигаем светодиод  delay(1000);              // ждем секунду  digitalWrite(13, LOW);    // выключаем светодиод  delay(1000);              // ждем секунду}
Вот мигание из урока 2. Видимо реализовано по времени. Хотелось бы хотя бы на таких простейших примерах видеть комментарии к полученному коду.
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
void setup()
{
pinMode(13, OUTPUT);

}
void loop()
{

if (1) { if (! _gen1I) { _gen1I = 1;
_gen1O = 1;
_gen1P = millis(); 
} } else { _gen1I = 0 ; _gen1O= 0;
}
 if (_gen1I) {  if ( _isTimer ( _gen1P , 500 )) { _gen1P = millis();
_gen1O = ! _gen1O;
}}
digitalWrite(13, _gen1O);

}
bool _isTimer(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));
} else {return (currentTime >=(4294967295-startTime+period));
}
  }

Добавлено (31.12.2015, 13:08)
---------------------------------------------
VirSpy писал(а):Тут есть целый раздел "Видео уроки" от автора программы, где очень наглядно разъяснено как работатьс самой программой, и как использовать ту или иную функцию.
Да, видеоуроки хороши, но более-менее продвинутых. Нет начального понимания программы - нет понимания уроков от автора Изображение

"Первые шаги"

Добавлено: 31.12.2015{, 15:43}
Олег
AlexRyzh писал(а):Так все таки будет гореть или мигать благодаря встроенному мультивибратору?
А вам диаграммы работы генератора из хелпа совсем не понятны?
Если так, то тогда для совсем начинающих нужно более разжеванное описание работы каждого элемента, а когда с элементами знаком, тогда и так придет понятие что использовать в данном случае - генератор, таймер или еще что нибудь.

"Первые шаги"

Добавлено: 01.01.2016{, 03:34}
VirSpy
To AlexRyzh
Тяжело ответить сразу на такое количество вопросов. По порядку:
    На чем писать.
FlProg создовалась как раз для того, что бы не вникая в код можно было писать программы. Это как : сижу в баре, заказал пиво.один бармен принес мне свежеваренное, другой - бутилированное. Результат почти одинаковый, а производство разное. Так и здесь. Мы "рисуем" программу, далее, по законам автора, она преобразуется в конечный код, который и прошивается. И не стоит путать с кодом, написанным на Си.

"Первые шаги"

Добавлено: 01.01.2016{, 04:04}
VirSpy
    Создание "макета"
Для создании любого устройства, нужны не только знании программирования, основную роль играет проектирование схемы (а тем паче электрической принципиальной), а так же пригодиться навык пояния.
Дополнение к Уроку1
Вопрос-
""Задача - зажечь светодиод на пине 13 чтоб он постоянно светил.
Пример реализации на языке Ардуино IDE:

void setup() {                 // Инициализируем цифровой вход/выход в режиме выхода.
// Выход 13 на большинстве плат Arduino подключен к светодиоду на плате.
pinMode(13, OUTPUT);
} void loop() {
digitalWrite(13, HIGH);   // зажигаем светодиод}""

проще простого - на входе выхода задаем еденицу.
Изображение
(с условием, что диод подключен на "землю") прим. Led5

"Первые шаги"

Добавлено: 01.01.2016{, 12:08}
kipiaxxx
Спасибо, VirSpy, за инициативу в подготовке уроков!
У многих не всегда есть возможность оперативно посмотреть учебные файлы Led1.flp, Led2.flp..... 
Просьба, скриншоты "схем" разместить непосредственно в тексте урока, так будет нагляднее.

"Первые шаги"

Добавлено: 01.01.2016{, 12:55}
AlexRyzh
Олег писал(а):FlProg создовалась как раз для того, что бы не вникая в код можно было писать программы.
Думаю это не совсем так, иначе компиляция была бы реализована по другому. Но в ФЛП после сборки плат вызывается ИДЕ компилятор, где полученный код можно посмотреть, оценить, поправить, добавить...  и только потом компилировать в ХЕКС
Олег писал(а):И не стоит путать с кодом, написанным на Си.
Согласен, путать не стоит, но он особо не отличается, и зная (понимая) Си и ИДЕ можно что-то в коде добавить (изменить).... и спользуя один из языков. Что очень удобно. Это может пригодиться при отладке своей сборки. Например допустили ошибку при сборке в ФЛП и какое-то из устройств не так ведет себя в определенных условиях. И вот сопоставляя с кодом, иногда можно быстрее обнаружить ошибку параметра.
VirSpy писал(а):Для создании любого устройства, нужны не только знании программирования, основную роль играет проектирование схемы (а тем паче электрической принципиальной), а так же пригодиться навык пояния.
Ну это однозначно, и требования эти не только к программе ФЛП, а вообще к конструирования на Ардуино. 
VirSpy писал(а):проще простого - на входе выхода задаем еденицу. (с условием, что диод подключен на "землю") прим. Led5
А вот это как раз то что нужно!!! Это пример дает понятие применения простейших действий, без которых дальше никак. И без этого понятия уроки 2, 3,... становятся не понятными.
Еще раз спасибо за инициативу по созданию уроков

Добавлено (01.01.2016, 12:55)
---------------------------------------------
И вопрос по возможностям программы: 
В программе можно реализовать любую задачу, которую можно реализовать в ИДЕ компиляторе? 
Реализовано как-то применение готовых библиотек для датчиков, часов и др. модулей?
Развернутый ответ не нужен, т.к. это рано туда заглядывать. Просто да или нет.

"Первые шаги"

Добавлено: 01.01.2016{, 13:11}
kipiaxxx
AlexRyzh писал(а):И вопрос по возможностям программы: В программе можно реализовать любую задачу, которую можно реализовать в ИДЕ компиляторе?
 НЕТ.
В планах Автора - разработка пользовательских блоков с возможностью вставок на языке Си. Тогда возможности FLProg резко возрастут.
AlexRyzh писал(а):Реализовано как-то применение готовых библиотек для датчиков, часов и др. модулей?
ДА.
Не всех, конечно, но достаточно многих. Для начинающих хватит "за глаза".

"Первые шаги"

Добавлено: 01.01.2016{, 13:33}
AlexRyzh
Лишь после урока5 в голове все стало на свои места. Пересмотрел уроки 1,2,3,... теперь все понятно стало как, что и для чего реализуется...
Жду следующий урок, как обещали, "Подрубаем кнопку".
Спс.

"Первые шаги"

Добавлено: 03.01.2016{, 14:47}
VirSpy
Для второго урока мне пригодилась платка управления от какого-то старого принтера на которой есть три кнопки и три светодиода.
СпойлерПоказать
Изображение
Входы (кнопки) и Выходы (светодиоды) для разнообразия подключил как и к цифровым, так и к аналоговым портам.
СпойлерПоказать
Изображение
Схемотехнически все кнопки  "замыкают на землю", однако на кнопке3 дополнительно припаян подтягивающий резистор, светодиоды - через токоограничительные резисторы на "землю".
И так: Урок 2.
Простой индикатор нажатия кнопки.
СпойлерПоказать
Изображение
А так как кнопка у нас - Активный "0", инвертируем ее:
Изображение
прим.Key1.( при нажатии кнопки - загорается встроенный светодиод). Усложним, добавив второй (он же будет первым внешним):
СпойлерПоказать
Изображение
Для красоты проинвертируем его:
Изображение
Теперь добавим триггер ТТ
Изображение
прим.Key2. (при первом нажатии кнопки загорается Led1, при втором - тушится. Светодиод на плате показывает когда нажата кнопка).
Заставим второй светодиод зажигаться на определенное время.
СпойлерПоказать
Для этого выделим импульс нажатия кнопки:
Изображение
теперь светодиод будет зажигаться на очень короткое время, независимо от продолжительности нажатия. Добовляем таймер с задержкой на отключение, допустим, 5 секунд.
Изображение
Так же это можно сделать через переменную:
Изображение
Изображение
Здесь есть свое "но" - пока горит Led2, каждое нажатие на кнопку вызовет перезапуск генератора. Для устранения этого эффекта добавим элемент "И" и еще одну переменную, в которую запишем состояние Led2.
Изображение
Теперь пока горит Led2 (Out Led2 - "1") элемент "И" недаст перезапустить генератор от Imp1, т.к. на втором входе будет удерживаться "0" (проинвертирован).
Ну и для красоты разобьем третий пример (Key3) на платы.

"Первые шаги"

Добавлено: 09.01.2016{, 05:38}
stvor
Всем добрый день!
Почему бы не создать новый раздел "Уроки" по данной теме ?
Возможно даже продублировать раздел "Видео уроки".
Таким образом, не придется утомительно разглядывать что там изображено в диалоговом окне примера и работать кнопками в старт-стопном режиме.

"Первые шаги"

Добавлено: 09.01.2016{, 17:35}
kipiaxxx
Программируемые логические контроллеры: практическое руководство для начинающего инженера
И.Г. Минаев, В.В. Самойленко. - Ставрополь: АГРУС, 2009. - 100 с.

Изложены общие сведения по применению программируемых логических контроллеров (ПЛК) в системах управления технологическими процессами, описываемых с позиций событийно-управляемой логики. Все примеры рассмотрены в комплексе CoDeSys на языке LD).

Скачать здесь:
http://publ.lib.ru/ARCHIVE....tml#001

Содержание:
СпойлерПоказать
Вместо введения, или с чего все начиналось
Применение алгебры Буля для описания логических элементов и систем
Логическое умножение
Логическое сложение
Логическое отрицание
Инверсия конъюнкции
Инверсия дизъюнкции
Аксиомы и законы булевой алгебры
Применение законов и аксиом при анализе и синтезе СЛУ
Пример проектирования комбинационной СЛУ
Синтез последовательностной СЛУ на контактных элементах
Краткие сведения о ПЛККраткие сведения о комплексе CoDeSys
Выбор комплекса и языка
Редакторы
Инсталляция среды CoDeSys
Компоненты организации программ (POU)
Запуск CoDeSys
Разделитель экрана
Окно сообщений
Статусная строка
Контекстное менюПроектирование СЛУ на языке LD
Контакты, катушки
Построение СЛУ в LD
Подключение ПЛК
Дополнительные приемы при построении LD-диаграмм
Катушки реле
Исследование СЛУ в режиме эмуляции
Триггеры
Таймеры
Счетчики
Пример проектирования СЛУ
Постановка задачи
Нормальный режим работы
Вопросы безопасности
Перенос программы в ПЛК
Визуализация
Заключение
Сокращения и термины
Список используемой литературы

"Первые шаги"

Добавлено: 24.02.2016{, 19:48}
VirSpy
Урок N. Подключение аналог.джойстика.
СпойлерПоказать
Изображение
Изображение
Изображение
Для данной схемы входа А6 и А7. Выхода: переменные X+,X-,Y+,Y-. Можно добавить элементов для деления зон на несколько групп, например - на два: выходы X+ и X++ = 0-150 и 150-400 для, например, увеличении скорости прибавления.
Аналог. клавиатура
СпойлерПоказать
Изображение.Изображение
Изображение
<a class="link" href="http://u.to/Rh8ZDg" title="http://www.sxemotehnika.ru/delitel-napryazheniya.html" rel="nofollow" target="_blank">Делитель напряжения
Изображение</a>

"Первые шаги"

Добавлено: 28.02.2016{, 16:05}
VirSpy
Макетная для макета :). В планах - через дно разводка питания, и побольше стоек (отверстий) для более гибкого монтажа.

"Первые шаги"

Добавлено: 22.01.2017{, 16:37}
boss220v
VirSpy, я начинаю создание электронной книги с примерами. Очень важны ваши наработки. Не можете вы продолжить эту тему.

"Первые шаги"

Добавлено: 26.01.2017{, 16:02}
MAN8007
Закон Ома

"Первые шаги"

Добавлено: 22.03.2017{, 09:22}
Churkin
Добрый день.
Я видимо где-то пропустил информацию об этом: Плата 1, плата 2 - что это такое? Как это понимать и этим пользоваться?

"Первые шаги"

Добавлено: 22.03.2017{, 09:45}
Олег
Чтобы не рисовать огромную простыню, разбиваете проект на отдельные платы как вам угодно. Например, на одной плате клавиатура, на второй датчики, на третьей исполнительные устройства и т.д.
 Необходимые данные с платы на плату переносятся с помощью переменных.
 Задавая имя и описание платы вы потом без проблем увидите что к чему относится.
 Кроме того платы можно включать по условию, например, вы хотите чтобы этот кусок кода использовался только один раз в программе, тогда в настройках платы пишете необходимое условие и этот код после отработки больше не учавствует в процессе.