Сообщение от
drvlas
Приветствую тебя, мой далекий коллега! Я оттуда же пришел к ПЛК, совесм недавно. Интересно теперь наблюдать, как это происходит :)
Особо психологию тут и не надо менять, если ты программировал на МК задачи реального времени. Одна из ошибок, которую я делал - переоценивал отличия. На самом деле, если взять грамотно написанную программу той же АВР-ки, в которой есть пофазное исполнение программы - то отличия только в наличии здесь ОС, обслуживающей входы-выходы.
Смотрим на страшилки, которыми автоматчики путают, и немного приглаживаем их. Здесь я умышленно придерживаюсь нестрогого изложения, да простят меня взрослые зубастые ПЛК-шники. Важно, чтобы родная душа меня поняла и двинулась вперед быстрее и проще. А там и сам поймешь, какую чушь я иногда говорю для понятности.
Итак,
1) Петля
Ну что тут особенного? Нужно знать, что ОС ПЛК уже организовала бесконечный цикл. Все, что ты делаешь обычно до своего цикла (а он всегда есть!), свои всякие init() - запихни в условную петлю, для которой теперь ТЫ САМ организуешь ОДНОКРАТНОЕ исполнение. И все. Больше об этой страшной петле не говорим.
2) Остановки
Да, нужно забыть о примочке типа стою, курю, жду повторения программного цикла стопитцот раз. Или жду, пока датчки не покажет событие. Так ты меня прости - об этом пора было забыть давным давно, если ты МК управлял реальной задачей с событиями. Там все равно создавалось либо пофазное прохождение, либо вообще ОСРВ в том или ином виде.
Здесь обслуживание событий в режиме "поставил слежение за флажком и полетел дальше" - the must
3) Возвраты
Вот уж не понимаю, что тут такого. Да можно вернуться куда ХОШЬ! Тот же цикл, например - это многочисленные возвраты. С учетом п.п. 1 и 2 о страшилке 3 можно вообще не думать
4) Конфигуратор ПЛК
Вот это нужно учитывать - но ты, вижу, уже в курсах. Для меня было проблемой просто понять, что вот так вот ручками поназывал переменные (илди просто создал табличку для себя) - и тепереь юзаешь эту область, не думая, как она там опрашивается.
ДОБАВИЛ: даже не так. С пользовательской точки зрения как раз все просто: обращайся себе к переменным из области ввода-вывода, НЕ ДУМАЯ ОБ ИХ ОСОБОМ СТАТУСЕ. Просто переменные. Я вот как раз придавал им некую исключительность, даже создавал копию в "обычном ОЗУ". Не нужно этого делать.
Единственное, что надо понять момент их использования исполняющей системой для ввода-вывода. Этот момент - за пределами твоей програмульки. Раз вся прога включена в цикл, то все, что наваял, будет проходиться за цикл контроллера (не факт, что исполняться, естественно, ведь есть же условные операторы, переключатели и прочее), а в это время входы-выходы НЕ ИЗМЕНЯЮТСЯ. Вот когда дойдешь до конца (а ОС сама перекинет в начало) - в этот таинственный момент выходы установятся, а входы опросятся.
Всего-то и делов.
А про SFC - это бомба! Попиши пока на ST, но потом обязательно вернись к нему.
И, конечно, коллеги правы. Поиграйся с простыми примерами. День-два, неделю-две - это уж как получится. Но без этого никак. Иначе скоро тебя начнут пинать ногами за вопросы, которые не возникают у прилежного ученика.
Вспомнл еще одну проблему. Отнесись флегматично к качеству документации и некоторым кострубастостям КоДеСис. Это нужно принять :)
Успехов!