purebasic.info

PureBasic forum
Текущее время: Сб дек 15, 2018 7:54 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Битовые операции
СообщениеДобавлено: Пт дек 01, 2017 10:34 pm 
Не в сети
ассистент

Зарегистрирован: Ср мар 30, 2016 9:45 pm
Сообщений: 22
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
.... Step/DIR но отображает фактическую индикацию положения, а не программную.

т.е вы используете какой-то абсолютный датчик ?, оптическую линейку ? с шаговым двигателем ?
хм. мне все любопытней и любопытней. Это не ирония если что.

USB HID не даст нужной скорости обновления информации, там максимальный фрейм вроде-как 256 байт, это для низкоскоросных устройств.
У Вас кто занимается выполнением G-кода комп или контроллер ?

На счет С. Это промышленный стандарт аппаратно независимого языка. Знать его я думаю надо, но вот писать на нем, честно говоря, меня коробит от этого синтаксиса A++=B-- или A+=B, ну примеров таких неявных конструкций много, отдельная песня его компиляторы с оптимизаторами, особенно под AVR ;) хоть в каждой переменной volatile делай, ну или смотри asm листинг ;)

p.s. Напиши в личку что за устройство хочешь сделать и для каких целей (типа точности перемещений и аппаратной базы), может чем помогу.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Битовые операции
СообщениеДобавлено: Пт дек 01, 2017 11:06 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
Polkovnik писал(а):
USB HID не даст нужной скорости обновления информации
Обещают 64 КБ/с, но в реальности удалось достичь примерно 20 - 30 КБ/с в обе стороны. Думаю этого хватит.

Polkovnik писал(а):
отдельная песня его компиляторы с оптимизаторами, особенно под AVR
Для AVR почти не использовал, но GCC для ARM нормальный компилятор и не скажу что возникают проблемы с оптимизацией.

Polkovnik писал(а):
хоть в каждой переменной volatile делай
Это сведет на нет работу оптимизатора. Спецификатор volatile нужен если переменная используется в основном коде и прерывании или же в разных задачах (многопоточность).

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Битовые операции
СообщениеДобавлено: Сб дек 02, 2017 12:06 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 674
Благодарил (а): 2 раз.
Поблагодарили: 34 раз.
Пункты репутации: 9
Polkovnik писал(а):
.... Step/DIR но отображает фактическую индикацию положения, а не программную.

т.е вы используете какой-то абсолютный датчик ?, оптическую линейку ? с шаговым двигателем ?
хм. мне все любопытней и любопытней. Это не ирония если что.


Ev3658 писал(а):
Так-же это устройство следит за энкодерами двигателя и по требованию отсылает данные

Так энкодер и есть датчик угла поворота вала двигателя.
А зная рассчитав механичку можно узнать фактическое(условно,так как наверняка будет погрешность передачи при микронах) перемещение уже не в градусах оборота вала а в длине перемещения за некий импульс ctep\dir который делает в зависимости от шд. шаг на некие градусы(к примеру 1.8 градусов)

Поэтому да наверное можно двигатель( использовать одновременно в качестве фактической индикации,минуя дополнительный независимый прибор с линейками )и выводить данные к примеру сразу в прогу обработки G кода или
имея такой датчик обратной связи корректировать выполнение строки G сода(то есть если команда выполнения прошла и был пропуск то возможно повторить до достижения результата) и конечно же теоретически либо сам G код
должен иметь правильные координаты интерполяции(следующий шаг именно на угол движка) либо как то эффективно корректироваться промежуточным контроллером(что наверное серводвигатель+контроллер и занимается) :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Битовые операции
СообщениеДобавлено: Сб дек 02, 2017 12:34 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 674
Благодарил (а): 2 раз.
Поблагодарили: 34 раз.
Пункты репутации: 9
Ev3658 писал(а):
Суть в том, что нужно передать сантиметры (0-255), микроны (0-1000) и период (0-65536). (1микрон = 0,001мм) из данных ±X=0000.000 ±Z=0000.000 SPEED=0000
Период это типа редукция, к примеру надо переместится на 10 см по первому двигателю и на 1 см по второму, так вот, период это пропуск тактом в микронах, пока движется 10см, другой двигается по микронам с пропуском тактов(период) первого двигателя.
Скорость такта - это внутренний генератор в устройстве, который задаёт импульсы для равномерного перемещения.

Программа для станков пишется в G-cod`е, от туда можно выдрать координаты формата ±0000.000мм., из этой координаты надо выбрать сантиметры и микроны, после найти делитель разности, учесть остаток после деления и после озадачить контроллер.

Ну как-то так вот )))

Суть в том что не ясно принимаемые это данные от контроллера и их формат(пакета(ы)) или это какие то выдранные данные из текстового файла в виде кадров G-кода(и отправляемые в контроллер)?
Если это данные файла Gсода то как он парсится?, Например парсится строка и сразу вывод в контроллер или например сначала парсится весь код в массив а после уже выводится в контроллер в нужном формате(пакет за пакетом или группа пакетов) :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Битовые операции
СообщениеДобавлено: Сб дек 02, 2017 12:44 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Ср май 18, 2016 11:52 pm
Сообщений: 39
Откуда: Нижегородская обл.
Благодарил (а): 18 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Да, на двигателе есть датчик, точней у меня двигатель с блоком управления, он сам следит за торможением, ускорением и даже за позицией.
Всё, что надо для его управления - подать прямоугольный сигнал частотой до 200кГц, то-есть каждый ноль после единицы перемещает двигатель на 1 деление энкодера.
Энкодер двигателя имеет 2500 импульсов на оборот, в квадратурной дешифрации это 10 000 положений на 1 оборот.
Так как двигатель вращается максимум 3000 об./мин. * 10000 прерываний - подсчёт импульсов лучше сделать аппаратно.
В контроллере Xmega это делается довольно просто и причём на Бэйсике :D , правда есть одна проблема, кажись в России я среди тех, кто разобрался в аппаратной квадратурной дешифрации в контроллере AVR серии Xmega, возможно даже один единственный.
Сам контроллер вообще не напрягаясь может одновременно следить за счётом трёх таких двигателей (энкодеров) без использования ЦП контроллера, но проблема в разрядности счёта, аппаратно можно прикрутить 16 битный счётчик таймер, так-же можно расширить разрядность другим таймером до 32 бит, но второму таймеру не передаётся убавление дешифрации, он только прибавляется. Как не пытался у Немцев раздобыть немного информации, так и не смог перебороть языковый барьер.
Наверно слишком зажал контроллер и повесил на него сразу два двигателя и три энкодера, так как планирую тактирование осуществлять по энкодеру шпинделя к примеру для нарезания резьбы.

Энкодер двигателя идёт не напрямую, а через блок управления, нулевая метка для выхода в ноль тоже.
Блок управления двигателя имеет возможность электронной редукции, то-есть можно приравнять 1 импульс с контроллера к 1 микрону.

G-код как раз и хотел сделать на PureBasic и собственно внешнюю оболочку. Электроавтоматику тоже на контроллере и клавиатуру станка тоже.
Вот кстати клавиатура, правда она пока в таком виде для отладки, позже можно придать хороший вид:
Изображение

Сам станок или то, что от него осталось вот:
Изображение
Изображение


Двигатель с блоком управления до ужаса КиТаЙсКой, на Алиэкспрессе от 10т.р., в РФ 35т.р.
Изображение


По суди тела можно вообще облениться, сделать Uart устройство, которое тупо кидает заданные импульсы на блок двигателя и заваливать байтами Uart.
Ах да, сам двигатель шпинделя управляется по Modbus - там старый двигатель, но блок управления новый, какой-то Болгарский, весит как мой Москвич-2140, книжка с ОТК и описанием ячеек памяти есть.

Собственно видео в самом первом сообщении темы вы наверно уже видели :roll: .

Сергейчик писал(а):
.....Если это данные файла Gсода то как он парсится?, Например парсится строка и сразу вывод в контроллер или например сначала парсится весь код в массив а после уже выводится в контроллер в нужном формате(пакет за пакетом или группа пакетов) :roll:


Буду делать по принципу старых стоек ЧПУ, которые ещё с перфолентой работали. Там всё просто, каждая строка читается и по приоритету выполняются накопленные команды в строке G-coda.
Пока это в разработке. Алгоритм простой, тупо начинаю читать строку до буквы (N,N,X,Z,I,P,T.....) после неё забираю цифры до следующей буквы или конца, после всё отсылается на отработку где будет приоритетная последовательность исполнения команд.
Разумеется перед пуском программы должно прогоняться и проверяться на выход из границ координат и синтаксические ошибки.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Битовые операции
СообщениеДобавлено: Сб дек 02, 2017 1:18 am 
Не в сети
ассистент

Зарегистрирован: Ср мар 30, 2016 9:45 pm
Сообщений: 22
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
Polkovnik писал(а):
отдельная песня его компиляторы с оптимизаторами, особенно под AVR
Для AVR почти не использовал, но GCC для ARM нормальный компилятор и не скажу что возникают проблемы с оптимизацией.

Перт, при всем уважении, AVR Studio на C если asm listing посмотреть такие выкрутасы делает, что хрен разберешь, у bascom avr все намного логичнее и более читаемо в asm.

Polkovnik писал(а):
хоть в каждой переменной volatile делай
Это сведет на нет работу оптимизатора. Спецификатор volatile нужен если переменная используется в основном коде и прерывании или же в разных задачах (многопоточность).[/quote]

Все верно, но как определить, что ДАННЫЙ компилятор выбросит, а что оставит ?

p.s. Петр, со всем уважением, как у Вас продвинулись дела в освоении STM32 ?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Битовые операции
СообщениеДобавлено: Сб дек 02, 2017 3:53 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
Polkovnik писал(а):
как определить, что ДАННЫЙ компилятор выбросит, а что оставит
Для чего это знать? Обычно оптимизатор нужное не выбрасывает. Он пытается всяческими методами уменьшить размер программы и/или (в зависимости от настроек оптимизации) ускорить ее работу.

Polkovnik писал(а):
как у Вас продвинулись дела в освоении STM32
Нормально. Не скажу что возникли какие-то сложности. Один из проектов есть на этом форуме viewtopic.php?f=10&t=4713
Некоторые другие на соседнем http://purebasic.mybb.ru/viewforum.php?id=6

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Битовые операции
СообщениеДобавлено: Пт июн 29, 2018 7:24 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Сб июл 18, 2009 8:25 am
Сообщений: 815
Благодарил (а): 22 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Код:
1
2
3
4
5
6
7
8
9
10
int *out_b;
int mask;
int svar;
int iData;
int seek_bitz;
 
svar = (1 << (*(_BYTE *)out_b & 7)) - 1;
 
*(_BYTE *)(((unsigned int)*out_b >> 3) + mask) &= svar;
*(_BYTE *)(((unsigned int)*out_b >> 3) + mask) |= (_BYTE)iData << seek_b;



как это на ПБ будет выглядеть?

Первое (если я правильно понял синтаксис шарпа) будет как-то так:

Код:
1
2
3
4
5
;svar = (1 << (*(_BYTE *)out_b & 7)) - 1;
 
Protected a.a
PokeA(a, PeekA(out_b & 7))
svar = (1 << a) - 1



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Битовые операции
СообщениеДобавлено: Пт июн 29, 2018 10:34 pm 
Не в сети
доцент

Зарегистрирован: Пн мар 26, 2018 9:09 pm
Сообщений: 40
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Пункты репутации: 0
Volkoff писал(а):
;svar = (1 << (*(_BYTE *)out_b & 7)) - 1;

Выделяем в 32-битном знаковом числе (out_b) младшие 3 бита, получаем число от 0 до 7, сдвигаем влево на это число 1, получаем число и уменьшаем его на 1.
По факту получается в out_b номер бита, который нужно выделить.
Непонятно, почему используются знаковые 32-битные целые для работы с 3-мя младшими битами.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Битовые операции
СообщениеДобавлено: Вс июл 01, 2018 9:31 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 674
Благодарил (а): 2 раз.
Поблагодарили: 34 раз.
Пункты репутации: 9
Может так. :roll:
Код:
1
2
3
4
5
6
7
 
;svar = (1 << (*(_BYTE *)out_b & 7)) - 1
pokei(*mem,(1<<(peeki(*mem)&7))-1);В памяти
;или
svar =(1<<(peeki(*mem)&7))-1
;svar =от 13 до -1
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Битовые операции
СообщениеДобавлено: Пт июл 06, 2018 5:19 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Сб июл 18, 2009 8:25 am
Сообщений: 815
Благодарил (а): 22 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Спасиб, я уже разобрался :)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB