На чем написать эмулятор станка, наиболее компактно?
Есть программа, которая общается со станком, фактически им управляет. В станке каретка, управляется двигателями, есть датчики положения моторов, концевики.
Станок реализует простые команды (упрощенно)
- поехать направо (включи мотор 1)
- поехать налево (включи мотор 2)
- дай показания энкодеров
- дай показания датчиков.
Т.е. станок только отвечает на команды, не инициирует запросы.
Формат обмена - бинарный, простой. Номер команды, данные, контрольная сумма.
Нужно написать для теста пока простой эмулятор станка.
Дальше размышления вслух.
Эмулятор должен отвечать на команды (это понятно).
Эмулятор должен внутри держать модель станка - каретка двигается - значит показания энкодеров растут, уперся в датчик - энкодеры не растут, как ни подавай команду.
Рисуются в голове такая архитектура.
1. Объект - Состояние (энкодеры, датчики, движение или нет) в текущий момент.
2. Поток - принимает команды, отдает или модифицирует состояние.
3. Поток - модель станка. Проверяет состояние, модифицирует его (изменение энкодеров, концевиков).
Прием данных неважно по чему, на одном ПК это все будет работать управлялка станка и эмулятор станка.
GUI эмулятору не нужно.
Вопрос. На какую технологию, язык программирования все это хорошо ложиться?
Владею неплохо C++, Qt, QML, чуть JS, GO.
Хочется максимальной компактности итогового кода, чтобы эмулятор можно было окинуть глазами в 1-2 экрана.
Скорость не важна, справится что-угодно. Бронебойность не важна - упало и ладно.
Например, в Go раз, и вот тебе поток. В Qt больше писанины, обосабливаешь ее в файл и привет - у тебя 50 файлов в проекте.
Но Go со своими заморочками получается тоже многослово, много незначащего мусора.
Казалось бы, взять инструмент, которым владеешь лучше всего (Qt). Но вдруг для такой задачи есть более мощное средство?
Можно и подучиться чему-то, если обещанная технология мощнее, чем владеешь.
Теория автоматического управления (ТАУ) вам в помощь. С помощью нее можете описать как объект управления, так и определить устойчивость системы, что для станка очень важно. Ну и там много других плюшек есть.
Как только опишете станок методами ТАУ, тогда и выберете язык программирования. Если у вас привода с ускорением, тогда точно будет описание станка в дифурах, ну и тогда хоть на фортране.
ТАУ и дифуры — это, конечно, прекрасно. Но хочется иногда FBD-like соединить десяток блоков и получить "станок" со всеми прелестями физики процессов и таблицу регистров по всем упомянутым устройствам.
Сергей Сергей, Так все-таки модель реального станка? Или типа Лего? Если реальная имитация для отработки системы управления, то надо по серьезному. Если поиграться, то можно и в одной функции на питоне.
Сергей Сергей, Главная характеристика станка - точность. Она зависит от динамической жесткости конструкции станка в первую очередь, и от точности приводов, ШВП, датчиков, шаговых двигателей и т.п. Понятно, что при обработке допустим фрезой, деталь будет сопротивляться, причем нелинейно от усилия давления фрезы. Точно так-же будут сопротивляться станина станка, привод, инструмент. Это всё микронные, но отклонения.
Корректирующие действия системы управления и алгоритм этих действий - это и есть главные секреты производителей станков с ЧПУ.
Поэтому смотрите сами - начните с Лего, понравится - включите непостоянную скорость на приводах, дальше - режимы резания и т.д. Может и до описания жесткости доберетесь.
Сергей Сергей, помнится, мы в институте пару месяцев переводили в Паскаль математически готовый расчет ж/б купола по сопромату. Начали как раз с ситуации "описание тонкостей есть".
Причем это была - статика...
Adamos, ну и как с модульностью программы в Паскале? Разве нельзя наработки купольной программы частично применить для цилиндрических зданий, например? Да и пару месяцев, что такого?