Многопоточность в ADAM 5510( или прерывания) |
Ответить | Страница <1234 7> |
Автор | ||
Участник Присоединился: 10 Апрель 2009 Категория: Afghanistan Online Status: Offline Публикации: 55 |
Опубликовано: 13 Апрель 2009 16:51 |
|
Чаще называют "команд-аппарат", и еще другие названия ........ С вуажением, SAN [/QUOTE]Спасибо большое буду разбираться |
||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 14 Май 2003 Online Status: Offline Публикации: 770 |
||
Обычно программисты, привыкшие писать программы для ПК, впервые столкнувшись с программированием ПЛК, входят в ступор. Все удобства, к которым они привыкли, здесь зачастую оказываются бесполезными и даже вредными! Итак: 1. Забудьте многопоточность, как страшный сон. Случаи, когда она действительно нужна, очень редки и, надеюсь, Вам они не попадутся. Я бы не хотел столкнуться с отладкой многопоточной программы на контроллере. 2. Забудьте ООП. Нет никаких объектов, есть функциональные блоки, и все, что с ними можно сделать, это их вызвать. Никакого наследования, никакого полиморфизма! 3. Динамическое распределение памяти - табу. Вся необходимая память отводится заранее. 4. Как можно реже используйте подпрограммы. Алгоритм, хорошо описывающий один технологический объект, может не подойти ко второму таком же. А если и подойдет, с течением времени картина может измениться. Копипаст - вот наш метод! 5. Существует только один цикл. Это цикл сканирования ПЛК. Если нужно повторить какое-то действие, повтори его на следующем цикле сканирования. 6. Научись, наконец, писать комментарии к каждой строчке программы! 7. Используй оператор GOTO... Шутка. Оператор GOTO использовать все равно нельзя! |
||
Инженер-системотехник
+7 (916) 477 3925 |
||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 14 Май 2003 Online Status: Offline Публикации: 770 |
||
А если серьезно, программа в контроллере выполняет функцию конечного автомата, т.е автомата с конечным числом состояний. Смысл её работы следующий. На входе программы имеется вектор Xn, описывающий состояние управляемого объекта на n-ом цикле выполнения программы. Программа вычисляет вектор управляющего воздействия Yn по формуле:
Yn = F(Xn, Sn-1), где Sn-1 - состояние автомата на предыдущем цикле программы, сохраненное в памяти: Sn-1 = F'(Xn-1, Sn-2). Интервал времени между n-ым и n-1 циклами, т.е. интервал дискретизации, называют также временем цикла сканирования. Чем он меньше, тем лучше. То есть, программа должна выполняться как можно чаще. Чтобы программа не оказалась слишком длинной и запутанной, векторы Xn, Sn и Yn можно разбить на векторы меньшей размерности, элементы которых имеют смысловую связь между собой (например, относятся к одному и тому же узлу управляемого объекта), получив таким образом набор векторных уравнений, которые можно вычислять последовательно. Этот процесс называют декомпозицией. Декомпозицию выполняют таким образом, чтобы уравнения имели как можно меньше зависимых членов. Подробнее см.: http://ru.wikipedia.org/wiki/Автоматное_программирование |
||
Инженер-системотехник
+7 (916) 477 3925 |
||
Участник Присоединился: 29 Июнь 2007 Категория: Russian Federation Online Status: Offline Публикации: 62 |
||
при использовании в проекте машины состояний программа становиться более гибкой и расширить ее функциональность для разработчика не составит особого труда. К тому же в дальнейшем можно создать бланк (некий костяк программы с набором состояний, например: инициализация, работа, обработка ошибок, завершение…) и использовать его в других проектах в качестве основы. Конечно если программа складывает два числа особого смысла нет городить машину состояний но вот если проект большой то рекомендую задуматься на над ее использованием. |
||
С уважением!
|
||
Действительный член Присоединился: 09 Октябрь 2003 Категория: Russian Federation Online Status: Offline Публикации: 187 |
||
В свое время делал довольно сложную программу для Adam 5510M. Выглядело примерно так:
int main(void) { //Инициализация while(!PrgStop) { //Обработка таймеров //Обработка регистров, измененных по Modbus TCP //Обработка нажатых в терминале клавиш //Обработка команд //Дискретный ввод //Аналоговый ввод //Выполнение команд //Формирование дискретных выходов //Формирование регистров Modbus TCP } } Там была такая структура struct { unsigned char Test_Run:1; unsigned char Test_Num:4; unsigned char Test_Step:5; unsigned char Test_Last_Code:2; unsigned char Reserv:4; } wStat; Она определяла, какой сейчас шаг программы выполняется. Выполнение команд выглядела так: switch (wStat.Test_Num) { case 1: switch (wStat.Test_Step) { case 0: //Действие break; case 1: //Действие break; ..... break; case 2: ... |
||
Участник Присоединился: 10 Апрель 2009 Категория: Afghanistan Online Status: Offline Публикации: 55 |
||
ну все примерно доехал как это есть ОК! Спасибо за советы учтем |
||
Участник Присоединился: 10 Апрель 2009 Категория: Afghanistan Online Status: Offline Публикации: 55 |
||
я уже попробовал написать получилось похоже дзякуй усiм прикольная штука |
||
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
||
Вы описали контроллер 50-ти летней давности, причем, переключающий свет в подсобке. Да еще и Реального Времени, который применяется далеко не всегда - в основном в ЧПУ ... Раньше, во времена ферритовых колец, память считали по битам, а не то что по байтам ! Рады бы - да не было. Тогда и были провозглашены временные постулаты, затянувшиеся на долго ... Сами Отцы Конечных Автоматов еще в 19-м веке мечтали о море памяти, и свободно рисовали стройную и гибкую схему многозадачной исполнительной машины ! Часто под многозадачностью понимают Windows-овую модель. А ведь она узко специфична, и предназначена для максимальной изоляции задач друг от друга. В пром-контроллерах - идеология прямо противоположная., обеспечить тесное взаимодействие задач, как по управлению, так и по обмену данными. В современных сложных процессах одноцикловая многозадачность - очень удобная вещь. И никакие фундаментальные принципы не запрещают динамически брать память , если она нужна. ( Да, и забудьте про монстрятно-нагроможденную Windows ... ) С уважением, SAN |
||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 14 Май 2003 Online Status: Offline Публикации: 770 |
||
Хоть процитированное Вами и было шуткой, но, как все знают, в каждой шутке есть доля шутки. Поэтому прокомментирую то, с чем не могу согласиться. 1. Контроллер всегда работает в режиме реального времени, поскольку управление без привязки к реальному времени перестает быть управлением. Это следует из ТАУ. 2. В современных ПЛК памяти хоть и не очень много, но вполне достаточно. Стиль их программирования связан не с этим. 3. Многозадачность нынешних Windows берет свое начало в UNIX. В свое время был и другой подход. Я думаю, многие помнят висюче-падучую Win'95... И понимают, чем чревато взаимодействие задач в контроллере. 4. Я не вполне понял определение "одноцикловая многозадачность". В современных контроллерах можно реализовать как вытесняющую, так и невытесняющую многозадачность. Вопрос, стоит ли это делать? В случае вытесняющей многозадачности сразу возникает вопрос с синхронизацией. А затем еще и с отладкой полученной программы. 5. Принцип, мешающий динамическому распределению памяти, всего один. Это принцип обеспечения надежности. Динамическое распределение порождает ряд проблем (сборка мусора, возможность утечки памяти, и т.д.). Но главное даже не в этом. Вы можете придумать ситуацию, в которой может понадобиться динамически выделить память в процессе работы контроллера? Что делать, если эта операция завершится отказом? |
||
Инженер-системотехник
+7 (916) 477 3925 |
||
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
||
Попробую ответить прямо по номерам Вашим пунктов: 1. С уважением, SAN |
||
Ответить | Страница <1234 7> |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |