Можно ли самому изучить программирование логических контроллеров?
===================================================================

 Здравствуйте! Я оканчивал Синергию, специальность "Информационные системы и технологии". Затем пошёл в армию, по возвращению устроился... продаваном в "М.Видео". Карьеру не начал в IT.  

  

Всё хотел податься в веб, но как-то через силу шло. Потерял интерес и занимался через силу, в итоге бросил. В общем, на YouTube наткнулся на видеоролик о программировании логических контроллеров. Посмотрел целый плейлист. Безумно увлекательная штука. Да ещё и сразу результат своего труда видишь, да и нет гонки за технологиями, как в вебе, т.е. в этой сфере будет всё-таки более "стабильно". У меня такой вопрос: можно ли эту профессию освоить самостоятельно или всё-таки нужны курсы? Допустим, теорию можно выучить, а вот для практики - купить ПЛК.  

  

Так как данный ресурс именно для технических вопросов, то, пользуясь случаем, хочу уточнить ещё такие моменты:  

  

1) Можно ли программировать ПЛК на языке Си? Этот язык мне нравится ещё в университете, некоторые знания остались до сих пор.   

  

2) Правильно ли я понимаю, что сначала первым делом лучше изучить цифровую электронику, устройство контроллеров, а затем - заниматься именно программированием? Я пока собираюсь почерпнуть основы. Выбрал следующие книги:  

  

* Цифровая схемотехника и архитектура компьютера. Дополнение по архитектуре ARM | Харрис Дэвид М., Харрис Сара Л.
* Стивен Прата "Язык программирования C. Лекции и упражнения"
* «Погружение в Паттерны Проектирования» автор Александр Швец

  

  

Как считаете, этого достаточно для того, чтобы заложить базовые знания?  

  

Заранее благодарю за ответы и советы! 

 ПЛК программируются на одном из [стандартных языков](https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B9_%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80#%D0%AF%D0%B7%D1%8B%D0%BA%D0%B8_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%9F%D0%9B%D0%9A)   

  

С и С++ в этом списке нет, есть *подобия*  

  

Знания и методы программирования, которые пригодны для программирования ПК, для ПЛК не годны, там своя специфика.   

  

Связано это с тем исторически, ПЛК заменили собой релейные схемы. А релейная схема работает не в виде исполнения последовательности инструкций (как работает ПК), а в виде переходов между состояниями (читать в вики "автомат с конечным числом состояний"). И для того, чтобы перенести все наработки старой доброй релейной логики (и разработчиков), ПЛК сделали удобным для такого программирования.  

  

Главное, что нужно для этой разработки - практика на реальном железе, то есть стенды, контроллеры и софт для программирования. Чисто теоретически, в каких-то симуляторах можно научиться только пониманию специфики, но вот отладка/наладка - это только реальное железо с реальными глюками.  

  

Цифровая электроника здесь стоит не на первом месте, в ПЛК с точки зрения электроники никто серьезно не полезет (потому что убытки от поехавшего крышей ПЛК могут легко и многократно перекрыть стоимость замены сдохшего). Достаточно обычной науки о контактах и понимания закона Ома.  

  

Чтобы прикинуть свои силы, попробуйте прямо здесь набросать, как вы при помощи ПЛК будете автоматизировать работу простого советского воздушного компрессора, который кто-то захотел подключить к SCADA-системе в своем гараже.   

  

-какие нужны датчики  

-какие нужны исполнительные механизмы  

-как обеспечить безопасную работу машины при поехавшем крышей ПЛК 

 Почитайте [CoDeSys](http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf)  

Нужны языки ST (аналог Паскаля/С), графические CFC и SFC.  

Есть ещё 3 версия Codesys, там можно применять объекты и интерфейсы (ООП).