Здравствуйте друзья!
Приобрёл на Али CNC 1419 за 25 тыр., думаю, отличие от CNC 3018 не большое.
На фото 1 это то, что получил.
Но как то не заходит,( может возраст сказывается, мне 64й идёт) прошу помощи кто сталкивался с подобным или есть какие соображения. Буду очень благодарен за участие.
Опишу проблему. Прошу не судить строго, т.к. сей агрегат вижу впервые и могу описать не общепринятыми выражениями, а по своему умозаключению.
И так, при получении и сборке ось «Х» не накручивалась на латунную втулку,(фото 2) вернее их две со шлицами и между ними пружина, туда сюда разобрался, что у вала шаг другой, выписал с Али нужный вал, поставил, но люфт на валу не менее 0,25 мм ( причём на всех).Для уменьшения люфта поставил дополнительные пружины поверх существующих раза в 3-4 мощнее. Прочитал на форуме, что пружина даёт дополнительный износ втулок (мы же сначала собираем, потом инструкцию читаем).Теперь буду опять всё разбирать и снимать дополнительные пружины. Прошивку поставил 1.1 , запустил Candle и пробую китайскую модель в .nc формате. И двигатель произвольно в любом месте отключается и в программе отображается следующее:
[CTRL+X] < Grbl 1.1f [‘$’ for help]
M3 S1500 < ok
M5 < ok
M3 S1500 < ok
M5 < ok
M3 S1500 < ok
Ошибка последовательного порта 9: Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения.
Ошибка последовательного порта 2: Отказано в доступе.
Ошибка последовательного порта 9: Неверный дескриптор.
Ошибка последовательного порта 1: No such file or directory
[CTRL+X] < Grbl 1.1f [‘$’ for help]
M3 S1500 < ok
Нажимаешь в программе на значок «шпиндель»-молчит, но на визуализации показывает, что крутиться. Рукой тронул вал, он раскручивается и останавливается. И так можно бесконечное количество раз. Бывает и рукой не трогаешь запуститься, а тронешь -останавливается.
Пытался поставить лазер, предварительно выставив $32=1.Его как будто и нету.
Блок питания регулируемый от 12 до 24 вольт на 5 ампер. При подключении к нему двигателя (шпинделя) на прямую, работает прекрасно, чётко, без остановок.
Друзья, прошу отозваться , у кого какие мысли, куда посмотреть , что сделать?
Спасибо!
dshym

Ошибка последовательного порта При включенном шпинделе
Описание станка, основные характеристики: Самодельный станок по собственному проекту, материал металл 8мм. Шаговые двигатели nema 23hs8430. Шпиндель 500Вт (китай)
Рабочее поле: 500*700
Обрабатываемые материалы: Как получится
Вопросы: Проблема возникла после покупки шпинделя, до этого фрезеровал гравером и было все нормально. При включении шпинделя grblcontroll начинает выводить какие то символы (скорее всего помехи от коллекторного шпинделя)
Лог программы:
порта 1: No such file or directory
[CTRL+X] < Grbl 0.9j [‘$’ for help]
.000,0.000,0.000>
.000,0.000,0.000>
0.000,0.000,0.000>
0.000,0.000,0.000>
0.000,0.000,0.000>
.000,0.000,0.000>
.000,0.000,0.000>
0.000,0.000,0.000>
.000,0.000,0.000>
:0.000,0.000,0.000>
0.000,0.000,0.000>
.000,0.000,0.000>
.000,0.000,0.000>
.000,0.000,0.000>
.000,0.000,0.000>
Ошибка последовательного порта 11: Неизвестная ошибка
Ошибка последовательного порта 9: Неверный дескриптор.
[CTRL+X]
Шпиндель питается от комплектного БП 100 вольт, как я понял он построен на ШИМе.
С двух сторон провода шпинделя одеты ферритовые трубки, так же по питанию БП.
Управляет всем arduino UNO, драйверы шаговых двигателей TB6600.
Заземление в доме и на станке отсутствует (я понимаю что его надо… нету)
Все пока находится в стадии настройки, короб будет для Блока управления.
Ориентировочный бюджет: Станок вышел на 35К
- Вложения
-
Я разработал простую программу для последовательного порта, которая отлично работает с COM-портами ниже 10 (COM9, COM8,… COM1). Но когда мое устройство подключено к порту более 10, например COM11, оно не подключается, и я получаю INVALID_HANDLE. Мой код:
comport = CreateFileA(comPortName.toAscii(), GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if(comport == INVALID_HANDLE_VALUE)
{
//Write exception code here
connectionStatus = CONNECTION_STATUS_DISCONNECTED;
}
Что случилось с моим кодом? Есть ли какое-либо решение?
02 нояб. 2012, в 10:28
Поделиться
Источник
2 ответа
Чтобы добраться до COM-портов >= 10, вы можете использовать символическую ссылку драйвера. Например, для COM10 это \\.\COM10
.
Просто попробуйте:
comport = CreateFileA("\\.\COM10", GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if(comport == INVALID_HANDLE_VALUE)
{
// Write exception code here
connectionStatus = CONNECTION_STATUS_DISCONNECTED;
}
Конечно, это также работает для COM-портов < 10.
David J
02 нояб. 2012, в 09:28
Поделиться
Ещё вопросы
- 0jQuery при нажатии prepend divs в начале «списка»
- 0как сообщить, что область видимости обновлена в angularjs?
- 0Функция импорта Matlab Coder и C ++ исполняемый файл
- 0Не можете прочитать свойство $ обещание тогда неопределено?
- 0ASP.NET API Controller возвращает XMLHttpRequest не может загрузить URL Неверный код состояния HTTP 404
- 1Scrapy пустой CSV-файл
- 1Получение ошибки Gradle без указания причины
- 0Запретить ввод, пока не закончится первое действие?
- 1Python — необычное вещание для загадки особого случая
- 0тип начала эффекта (HTML, CSS, JQUERY)
- 0Если в iframe показать / скрыть div
- 1Использование foreach с движком представления ASP.NET внутри ASP: Repeater не работает
- 1Это отношения многие ко многим?
- 0Почему ElementTree не может правильно проанализировать этот тег XML?
- 1Какова сложность времени для следующей программы?
- 0Как найти ближайшие значения как нижних, так и верхних в массиве объектов в PHP?
- 0Несколько экземпляров свойства перехода среди классов, используемых в одном элементе
- 1Группировать по numpy.mean
- 0Связывание проблем с libharu
- 0Сделайте фон поля поиска кликабельным
- 0Добавить, где предложения к SQL выбрать динамически
- 1Как я могу сделать цикл в XML-файле, который я получаю значение Attributte?
- 0Начиная Angular на Xampp
- 1NancyFx не может найти ссылку на NewtonSoft в Razor View Engine
- 1Чтение данных из Http-ответа редко вызывает BindException: адрес уже используется
- 0Ошибка подключения к базе данных, статус HTTP 500
- 0Доступ к защищенным статическим членам суперкласса подклассами в C ++
- 0Symfony отображает значение BLOB-объекта
- 0asp.net получает данные из запроса
- 0Сортировка пользовательского связанного списка с помощью <алгоритма> сортировки
- 0Как подключиться к серверу sql используя php в xampp
- 0как передать max_streak_length из командной строки
- 1выбрать отдельные строки в мультииндексном панде данных [дубликаты]
- 1Самый простой способ добавить политику конфиденциальности с моим приложением для Android
- 0Предупреждающее сообщение Недопустимый тип смещения от функции Где Mysql php
- 0AngularJS Valdiation не работает с директивой People Picker
- 0Замена строкового значения в PHP
- 1Десериализовать JSON C #
- 1Закрепление WinForm внутри другого WinForm
- 1Разделить ArrayList на несколько ArrayList в зависимости от ввода пользователя
- 1Ищет наличие составного ключа в трех DataFrames и соответственно объединяет DataFrames
- 0HTML несколько уровней развернуть свернуть для таблицы с большим количеством строк медленно
- 1Добавить DataFrame внутри функции
- 0Подождите, пока загрузится следующая страница, затем нажмите
- 1Как проверить, что одно из многих условий выполнено на Мокито? Можно ли проверить, был ли вызван один ИЛИ другой метод?
- 0Коды Javascripts, которые запомнят предыдущие настройки пользователя на Radio flash Player
- 0Как я могу изменить массив в директиве, а затем отразить это изменение в моем контроллере?
- 0Разобрать $ routeParams в объекте config
- 0Чтение данных с firebase в angularfire
- 1Имеет ли название «взаимосвязанный» какое-то конкретное значение?
#c #serial-port #file-descriptor
#c #последовательный порт #файловый дескриптор
Вопрос:
Я реализую простой протокол для передачи файлов между 2 ПК через последовательный порт, и я получаю странную ошибку.
На главном я вызываю функцию «llopen»:
int
llopen(int port, int type) {
int fd = 0;
char* PORT;
PORT = malloc( sizeof(char) * (strlen(COM) 1) );
sprintf(PORT,"%s%d",COM,port);
fd = initialization(PORT); // Open(...): returns a file descriptor!
switch(type) {
case SENDER:
return connectSender(fd);
break;
case RECEIVER:
return connectReceiver(fd);
break;
}
return fd; // The fd value here is 5
}
После этого я вызываю функцию llwrite(int fd, …), чтобы записать строку в файловый дескриптор, но я получаю сообщение об ошибке: «Неверный файловый дескриптор» на llwrite(int fd, …). Если я снова вызову функцию инициализации (порта), перед этим она сработает и запишет N байтов в файловый дескриптор, но если я этого не сделаю, она снова выдаст мне ошибку «Неверный файловый дескриптор».
Здесь это функция llwrite(int fd, …):
int
llwrite(int fileDescriptor, unsigned char* buffer, unsigned int length) {
// The fd value here is 5
return writeBuffer(fileDescriptor,buffer,length);
}
Даже перед операцией return, если я вызываю, например, функцию tcflush(…), я получаю сообщение об ошибке «Неверный файловый дескриптор».
Есть какие-нибудь подсказки? Заранее спасибо!
Редактировать:
Проблема решена.
ошибка llopen(…). Я возвращал количество байтов, записанных в ConnectReceiver(…) / ConnectSender(…), а не в файловый дескриптор
Теперь все правильно:
int
llopen(int port, int type) {
int fd = 0;
char* PORT;
PORT = malloc( sizeof(char) * (strlen(COM) 1) );
sprintf(PORT,"%s%d",COM,port);
fd = initialization(PORT); // Open(...): returns a file descriptor!
switch(type) {
case SENDER:
if( connectSender(fd) > 0 ) return fd;
case RECEIVER:
if( connectReceiver(fd) > 0 ) return fd;
}
return -1;
}
Комментарии:
1. Вы не выделяете достаточно байтов для порта, должно быть не менее 2, чтобы хватило места для номера порта. В остальном это кажущаяся странной смесь *nix и кода Windows.
2. обратите внимание, что это позволяет использовать только порт COM1 на COM9 и может привести к сбою с некоторыми usb / последовательными преобразователями. вы действительно должны открыться
.COM1
(остерегайтесь правильного экранирования обратной косой черты …)3. @HansPassant Да, вы правы. Но проблема не в этом. Я имею в виду, я могу выполнить ConnectSender(…) и ConnectReceiver(…) , и я получаю правильный файловый дескриптор, но затем я пытаюсь выполнить llwrite(int fd) , и это не работает.
4. @AdrienPlisson Это не имеет отношения к делу.
5. Ну, вы знаете, что повреждаете кучу, а затем задаетесь вопросом, почему программа работает неправильно. Сначала прекратите разрушать кучу. Используйте отладчик, если это не поможет.
Ответ №1:
На самом деле здесь недостаточно информации, но стоит отметить, что вы делаете
return connectSender(fd);
break;
Разрыв там является мертвым кодом, поскольку возврат останавливает выполнение функции. Возможно, вы не хотели возвращаться?
Если это не так, попробуйте использовать strace
, чтобы получить более подробную информацию о том, что происходит. Если вы не используете Linux, в других ОС должны быть аналогичные инструменты, такие как dtruss
или ktrace
.
Комментарии:
1. Вы правы. Это мертвый код, и я хотел вернуться прямо туда, но это не имеет отношения к проблеме.
-
Доброго времени. При управлении нагрузкой через ардуино по последовательному порту, очень часто возникает проблема: выдает ошибку «Ошибка при настройке параметров последовательного порта: 9 600 N 8 1». Нагрузкой является двигатель, который вращается в разные стороны. Пример кода:
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
}void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()>0){
int val = Serial.read();
if(val==‘1’){ //если нажата 1, то вал двигателя вращается по часовой стрелке
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
Serial.println(«RIGHT»);
}
if(val==‘2’){//если нажата 2, то вал двигателя вращается против часовой стрелке
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
Serial.println(«LEFT»);
}
if(val==‘3’){ //если нажата 3, то останавливаем
digitalWrite(7,LOW);
digitalWrite(8,LOW);
Serial.println(«STOP»);
}
}
}Собственно говоря, не в коде дело. Дело в том, что эта ошибка постоянно возникает. Как ее решать даже не знаю. Двигатель подключен через реле. Параллельно управляющей обмотке стоит диод. Что интересно, данная проблема достает на 7 винде, а на 8 не так часто. По вашему опыту в чем может быть дело?
-
rkit, а с чем эти проблемы (с usb) могут быть связаны?
-
Питание для двигателя откуда берется?
-
127 В переменного напряжения
-
Со всем, что касается usb. Начиная от драйверов и заканчивая электромагнитным фоном в помещении.