А составитель программы тут ваще никаким боком?
Оно не так работает.
При вызове команд “ТхМ6”, барабан поворачивается на позицию"х", происходит обмен инструмента в шпинделе “у” на инструмент “х”, станок запоминает (причем в энергонезависимую память), что в шпинделе в него стоит теперь инструмент “х”, а инструмент “у” возвращается в ту ячейку в которой он был.
Так что не просто “запоминает” а помнит даже при выключении.
Я видел, что инструмент возвращался не в ту ячейку. Это было в 1992 году.
Такое тоже бывает.
Для этого создаются таблицы, в которых потом “пасьянс” раскладывается.
Тупо перезаписываются ячейки с номером инструмента и корректорами.
Программа усложняется, а это опять же LD.
В общем лишний и ненужный геморрой.
Мы такое не используем.
С цепями барабаны на овердофуя позиций не делали.
В общем в первом случае таблица коррекции длин и диаметров привязана к ячейке инструмента, а во втором к номеру инструмента, а в ячейку инструмента записывается номер инструмента.
Ну и соответственно второй случай более сложен в реализации.
Кроме операций с барабаном нужно ещё написать алгоритм нахождения кратчайшего пути к нужной ячейке.
Года два назад познакомился случаайно с инженером-конструктором.
Поинтересовался у него как детали для изготовления на ЧПУ программируются.
Он сказал, что чертишь на монитере деталь заданных размеров и форм - и все.
Но там, оказывается, и других премудростей хватает.
Так направления у “конструкторства” разные.
Что касается деталей под изготовление на станке ЧПУ, то да.
Тупо модель.
Дальше пусть программист-технолог думает как это выточить из куска металла.
@Kakmyc , ты профессионал, я любитель. Строго не суди, путаю названия должностей)
Хотел на Компас модуль такой, чтоб и программу создавать, но это денех стоит, а ломаных не нашёл. Так и приходится ручками всё на станке.
У полушагового шаговика 8 состояний выходов, идущих на драйвер движка. Их надо закодировать побитно в 8 байт, и выдавать прямо в порт, где подключены выходы на биты порта 0, 1, 2, 3.
И переключать при каждом шаге одну переменную - назовем Фаза, значения 0…7. Переключать или в + или в - в зависимости от направления.
И всё будет просто и наглядно, как мычание ахаха.
uint8_t const DrvState[]=
{
0b0001,
0b0011
//и так 8 состояний, лень вставлять реальные
};
uint8_t Faza=0;
void Step(bool Direction)
{
if (Direction) Faza++; else Faza--; Faza &= 0b111; //гоняем фазу туда-сюда на состояния 0...7
PORTC = (PORTC & 0b11110000) | DrvState[Faza]; //внедряем младшие 4 бита в порт
}
void setup() {
// put your setup code here, to run once:
DDRC=0; //output
}
void loop() {
// put your main code here, to run repeatedly:
}
Скетч использует 444 байт (1%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2039 байт для локальных переменных. Максимум: 2048 байт. ))
Состояния берем из таблицы:
Время между шагами добавляем по вкусу, через millis а то и в собственном таймерном прерывании, как большие.