|
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141
|
|
Програмно задать поведение двигателей в С.16.07.2017, 10:06. Показов 5205. Ответов 26
Метки нет (Все метки)
Есть системы с довольно сложным поведением.
Скажем есть система где 1. пользователь нажимает на кнопку ОТКРЫТЬ 2. Мотор №1 начинает двигаться - открывается крышка - мотор останавливается достигнув концевого выключателя №1. 3. Мотор №2 начинает двигаться - выезжает экран - мотор останавливается достигнув концевого выключателя №2. 4. пользователь нажимает на кнопку ЗАКРЫТЬ 5. Мотор №2 начинает двигаться - экран заезжает обратно - мотор останавливается достигнув концевого выключателя №3. 6. Мотор №1 начинает двигаться - закрывается крышка - мотор останавливается достигнув концевого выключателя №4. Естественно на любом участке пути пользователь может применять команды СТОП, ОТКРЫТЬ, ЗАКРЫТЬ и логика отрабатывает команды в соответствии с положением моторов. То есть если нажать на кнопку ОТКРЫТЬ при закрытой крышке - начнет двигаться Мотор №1. А если нажать на кнопку ОТКРЫТЬ в середине пути - начнет двигаться Мотор №2. И отслеживаются все положения - скажем Мотор №2 не может начать движение пока крышка полностю не открыта (концевик №1 нажат) До сих пор я этот сценарий жестко кодировал в микроконтроллере и все было хорошо. Сейчас есть требование сделать эти сценарии движения програмируемые. (Пользователь загружает скрипт.) У меня в принципе есть проект где пользователь по UART заливает скрипт я его обрабатываю и произвожу действия. Но там простой PLC - по входным условиям (значениям на аналоговых и дигитальных входах) я выставляю значения на выходах. В данном случае никак не соображу какую структуру создать под сценарий движения и как учитывать все логические условия.
0
|
|
| 16.07.2017, 10:06 | |
|
Ответы с готовыми решениями:
26
Задать запрос програмно к файлу MS Access Как в DBGrid програмно задать ширину столбца? Как програмно задать значение для DateTimePicker |
|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 396
|
|
| 16.07.2017, 11:26 | |
|
Еще проверку состояний где крышка и экран не описали. У Вас всё расписано.
0
|
|
|
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141
|
||
| 16.07.2017, 12:02 | ||
Нужен общий алгоритм. Есть такая система. Выезжает короб. Из него выезжает экран. Экран поворачивается вправо влево. Иногда вместо концевиков я останавливаюсь по положению энкодера или по току. Но это уже частности.
0
|
||
|
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
|
||
| 16.07.2017, 12:06 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
|
|
| 16.07.2017, 12:13 | |
|
Есть 2 действия:
1. Открыть 2. Закрыть Если нажимаешь кнопку "Открыть" выполняется действие 1, если кнопку "закрыть" - действие 2. Есть еще кнопка "стоп", но она просто останавливает процесс. На перечень действий она не влияет и не стоит акцентировать на нее внимание. Опишите алгоритм для открытия, для закрытия. По кнопке "стоп" отключайте оба двигателя. Примерно так Открытие 1. Крышка открыта? Если да - Конец 2. Если крышка не открыта - вращать двигатель до открытия крышки 3. Переход к п.1 4. Конец Закрытие 1. Крышка закрыта? Если да - Конец 2. Если крышка не закрыта - вращать двигатель до закрытия крышки 3. Переход к п.1 4. Конец Стоп 1. Отключить питание со всех двигателей
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 737
|
|
| 16.07.2017, 12:30 | |
|
Если пользователю предлагается загружать скрипт, нужно сначала договориться, на каком языке будет этот скрипт.
Когда язык выбран, Вам придется написать для МК интерпретатор этого языка.
0
|
|
|
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141
|
||
| 16.07.2017, 12:58 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,400
|
|||||||
| 16.07.2017, 13:18 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141
|
|||||||
| 16.07.2017, 13:25 | |||||||
Это уже ближе к телу, как говорил Моппасан, но все же это частный случай. Скажем until sw1 - это в данном случае, как и move m1. А вдругом случае условие поменяется. То есть должно быть что то вроде 1. Смотрим какая команда пришла 2. По команде смотрим какое действие к ней пришпандорено (указатель на ф-цию?) 3. Идем в действие - какой мотор должен двигаться и в какую сторону. 4. Проверяем следующее действие - другой мотор начинает движение или нет Ну это так в общем, каша в голове. А в коде это выразиться в структуре и в алгоритме проверки этой структуры.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 396
|
|
| 16.07.2017, 14:48 | |
|
Сессия давно закончилась, вроде лето пришло. Вам надо программу написать или зачем Вы собой народ мучаете?
0
|
|
|
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
|
|
| 16.07.2017, 14:48 | |
|
Слово "IEC 61131-3" еще не прозвучало? Можно взять кого-нибудь из них и реализовать некое подобие.
Но я бы предложил кардинально другой подход: основная прошивка - это исполняющая среда и библиотека. "Скрипт" пользователя - это программа на Си, использующая эту библиотеку. Компилируем локально, отправляем на МК, там вызываем.
0
|
|
|
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,400
|
||
| 16.07.2017, 14:55 | ||
Но ТС, похоже, хочет как можно проще реализовать сторону пользователя. Чуть ли не ПЛК свою запилить...
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
|
|
| 16.07.2017, 14:57 | |
|
Что-то я не вижу здесь проблемы. От слова совсем.
Эленент скрипта = действие. Список описанных действий: 1. Мотор №1 двигается до концевого выключателя №1 (->) 2. Мотор №2 двигается до концевого выключателя №2 (->) 3. Мотор №2 двигается до концевого выключателя №3 (<-) 4. Мотор №1 двигается до концевого выключателя №4 (<-) В скрипте следует прописать, по команде ОТКРЫТЬ: п1, п2 ЗАКРЫТЬ: п3, п4 Если последовала команда СТОП, то интерпретатор останавливается. В любой момент можно нажать любую кнопку, она вызовет прерывание текущей операции и начнет свою. В "примере" нет "кольцевых" команд, поэтому скрипту вообще перпендикулярно текущее состояние механики. Если кото не понял, расшифрую - "Мотор №1 двигается до концевого выключателя №1" означает, что мотор будет двигаться до тех пор, пока не сработает концевик. Если на начало команды мотор уже находился в сработавшем концевике, то он начнет движение и сразу остановится, т.к. состояние достигнуто. Короче говоря, Никаких проблем нет. Но они появятся, если в скрипте появятся "кольца". Например, надо обойти препятствие. Для этого надо вначале идти вверх, затем вправо, затем вниз. Обратное движение будет зеркальным - вверх, слево, вниз. Если движение прервано в неизвестной точке, то выполнение скрипта ... будет выполнено нормально. Довольно трудно придумать то, что-бы не работало. )) Взаимно симметричные команды буду выполняться правильно, вне зависимости от места их прерывания (в том числе и при отрубании питания системы и кидания механики в неизвестное состояние). Когда же будет проблема? А тогда, когда появятся НЕ симметричные команды. Например - открыть, выдвинуть, вдвинуть, закрыть. Их последовательное выполнение не вызывает проблем (никогда), но если пропустить или передвинуть одну из команд, то выйдет хрень. Пропустили "вдвинуть", получили режим закрытия с выдвинутой fosi. Fosi прищемили. Здесь выходов два - или по команде STOP делать UNDO (обратное выполнение скрипта до начала операции) или ставить концевики и (или) заводить состояние механики (current state). Вот это точно "хрень". Короче - делайте нормальные симметричные скрипты. Тогда всё просто и надежно. ))
0
|
|
|
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141
|
||
| 16.07.2017, 15:56 | ||
typedef struct PORSED_SCRIPT_S { }PORSED_SCRIPT;
0
|
||
|
0 / 0 / 0
Регистрация: 07.08.2016
Сообщений: 432
|
||||||
| 16.07.2017, 16:53 | ||||||
|
jimyo77
u37 предложил простой вариант, разбить файл на 2 секции, в одной кодируем действия, в другой - список действий для кнопки. Какие Вам ещё члены структуры?
0
|
||||||
|
1 / 1 / 0
Регистрация: 08.05.2015
Сообщений: 225
|
|
| 16.07.2017, 16:55 | |
|
yacc Вам в помощ. Генерит лексические анализаторы в зависимости от ваших условий.
0
|
|
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
||
| 16.07.2017, 16:59 | ||
а вам зачем его, грубо говоря, компилировать? интерпретируйте текст на ходу, каждый раз, будет гораздо проще.
0
|
||
|
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141
|
||
| 16.07.2017, 17:05 | ||
[ID][Условие завершения][Действие1][Действие2][Действиеn] [Секция кнопок] [Кнопка][ID1][ID2][IDn] ну да...что то вроде того...ну это и есть члены структуры - [ID][Условие завершения][Действие1][Действие2][Действиеn]. это ведь мне передал пользователь в скрипте. мне ведь это хранить где то надо. осталось оформить это как то програмно.
0
|
||
|
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141
|
||
| 16.07.2017, 17:07 | ||
а вам зачем его, грубо говоря, компилировать? интерпретируйте текст на ходу, каждый раз, будет гораздо проще. зачем? я положил все это один раз - ну хоть сюда [ID][Условие завершения][Действие1][Действие2][Действиеn] и работаю с этим.
0
|
||
|
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
|
||
| 16.07.2017, 17:10 | ||
https://github.com/cesanta/mjs https://github.com/elua/elua
0
|
||
| 16.07.2017, 17:10 | |
|
Помогаю со студенческими работами здесь
20
Как в GridView програмно задать нужное количество строк? Как програмно задать цвет шрифта опции ListBox Знатокам API - как програмно задать положение Band'а на CoolBar'е Как задать свойство Binding для столбца не xaml, а програмно? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|