Частотник и Modbus. Универсальная заготовка.

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
aekhv
Мастер
Сообщения: 393
Зарегистрирован: 17 окт 2014, 15:03
Репутация: 218
Настоящее имя: Александр
Откуда: г.Хабаровск
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение aekhv »

mmavka писал(а):Частотник не поддерживает x06. пришлось пользоваться 10
Ничего не понял, поясните.
mmavka писал(а):Куда копать?
Покажите файлы вашей рабочей конфигурации, будем думать.
mmavka
Новичок
Сообщения: 27
Зарегистрирован: 04 окт 2014, 23:13
Репутация: 0
Настоящее имя: Илья
Откуда: Ярославль
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение mmavka »

BentScrew писал(а): Ничего не понял, поясните.
Частотник не умеет записывать один регистр. (в Modbus команда 0x06), а умеет записывать только по команде записи нескольких регистров (0x10). Поэтому пришлось переделать немного spindle-vfd.c
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

int my[2];
my[1] = (int)(speed_cmd);

    // Если заданная скорость изменилась...
    if (*hal_data_block->command_speed != old_speed) {
        if (verbose == 1) printf("%s : updating frequency register [%f RPM, 0x%X] ... ",
                              modname, *hal_data_block->command_speed, (int)(speed_cmd));
        // ...то записываем в ПЧ значение частоты (всего - один 16-ти битный регистр)
        /////tmp = preset_single_register(param, slave, SET_FREQUENCY_REGISTER, (int)(speed_cmd));
	      tmp = preset_multiple_registers(param, slave, COMMAND_REGISTER, 2, my); 
        // Проверка результата - сколько регистров записано?
        if (tmp == 2) {
            if (verbose == 1) printf("Write OK!\n");
            old_speed = *hal_data_block->command_speed;
            data_ok_count++;
        } else {
            goto failed;
        }
    }

    /* Подготовка управляющего слова */
    control = CONTROL_Stop;			// Начальное состояние - "стоп"
    if (*hal_data_block->spindle_on) {		// Если подан сигнал на запуск...
        if (*hal_data_block->spindle_fwd) {
            control = CONTROL_Run_Fwd;		// ...то "крутим вперёд"
        }
        if (*hal_data_block->spindle_rev) {
            control = CONTROL_Run_Rev;		// ...или "крутим назад"
        }
    }

    if (*hal_data_block->fault_reset == 1) {	// Кнопка "сбросить ошибку" нажата?
        control = CONTROL_Fault_Reset;
    }

    my[0] = control;    

    // Если управляющее слово изменилось...
    if (control != old_control) {
        if (verbose == 1) printf("%s : updating command register [0x%X] ... ", modname, control);
        // ...то записываем его в ПЧ
        //tmp = preset_single_register(param, slave, COMMAND_REGISTER, control);
        tmp = preset_multiple_registers(param, slave, COMMAND_REGISTER, 2, my);
        // Проверка результата - сколько регистров записано?
        if (tmp == 2) {
            if (control == CONTROL_Fault_Reset) {	// Если команда "сбросить ошибку" записана успешно, то...
                *hal_data_block->fault_reset = 0;	// ...пин деактивируем
            }
            if (verbose == 1) printf("Write OK!\n");
            old_control = control;
            data_ok_count++;
        } else {
            goto failed;
        }
    }

BentScrew писал(а):Покажите файлы вашей рабочей конфигурации, будем думать.
А какие файлы нужны все? Вот конфигурация и измененная заготовка.
Вложения
cnc.zip
(27.96 КБ) 384 скачивания
spindle-vfd.zip
(47.64 КБ) 386 скачиваний
Аватара пользователя
aekhv
Мастер
Сообщения: 393
Зарегистрирован: 17 окт 2014, 15:03
Репутация: 218
Настоящее имя: Александр
Откуда: г.Хабаровск
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение aekhv »

У вас задание частоты в компонент spindle-vfd не заведено, поэтому шпиндель стартует на минимальных оборотах. В custom.hal строку

Код: Выделить всё

net spindle-speed-cmd spindle-vfd.command-speed
замените на

Код: Выделить всё

net spindle-cmd spindle-vfd.command-speed
Это из-за разницы в наименовании сигналов в разных версиях StepConf и PncConf. Подробности уже не помню, но одни версии при создании конфигурации в hal-файл пишут spindle-speed-cmd, а другие spindle-cmd. Поэтому при подключении сторонних компонентов нужно быть внимательным.
mmavka
Новичок
Сообщения: 27
Зарегистрирован: 04 окт 2014, 23:13
Репутация: 0
Настоящее имя: Илья
Откуда: Ярославль
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение mmavka »

Попробую сегодня.
Аватара пользователя
aekhv
Мастер
Сообщения: 393
Зарегистрирован: 17 окт 2014, 15:03
Репутация: 218
Настоящее имя: Александр
Откуда: г.Хабаровск
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение aekhv »

mmavka писал(а):Попробую сегодня.
Помогло?
mmavka
Новичок
Сообщения: 27
Зарегистрирован: 04 окт 2014, 23:13
Репутация: 0
Настоящее имя: Илья
Откуда: Ярославль
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение mmavka »

BentScrew писал(а):
mmavka писал(а):Попробую сегодня.
Помогло?
Да. Спасибо. Все работает.
magrelo
Кандидат
Сообщения: 42
Зарегистрирован: 27 ноя 2015, 11:53
Репутация: 0
Настоящее имя: Andrey
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение magrelo »

Пытаюсь приспособить данную заготовку к обмену со своим контроллером. Долго смотрел на стандартную библиотеку modbus для микроконтроллеров, но там слишком много всего, отлаживать сложно. Пока написал свою программу, которая принимает посылку. Осталось теперь ее разобрать ))) Помогите разобрать что есть что. Заготовка отсылает 2 пакета по 8 байт через 500мС:
14 03 00 01 00 01 D7 0F
14 06 20 01 01 F4 D1 18
Кто там адрес, кто команды, кто контрольная сумма.
Аватара пользователя
aekhv
Мастер
Сообщения: 393
Зарегистрирован: 17 окт 2014, 15:03
Репутация: 218
Настоящее имя: Александр
Откуда: г.Хабаровск
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение aekhv »

magrelo писал(а):14 03 00 01 00 01 D7 0F
Вкратце, значит, так-с:
0х14 - обращение к устройству с адресом 0х14
0х03 - код функции чтения нескольких регистров
0х0001 - начальный адрес запрашиваемого регистра
0х0001 - количество запрашиваемых регистров
0хD70F - CRC

Остальное в гугле по запросу modbus rtu.
magrelo
Кандидат
Сообщения: 42
Зарегистрирован: 27 ноя 2015, 11:53
Репутация: 0
Настоящее имя: Andrey
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение magrelo »

Да, с содержанием пакета разобрался, контрольную сумму мой контроллер проверяет. Если контрольная сумма совпадает, я возвращаю посылку с данными. А как быть если контрольная сумма не совпала (пакет пострадал от помех)? по спецификации modbus я вроде как должен выслать обратно код ошибки. Но насколько я понял LinuxCNC бесконечно пытается передать мне выставленные параметры, даже если они не меняются. Т.е. при отсутствии ответа просто фиксируется ошибка и через 0.5 секунды LinuxCNC повторит передачу заданных параметров? Т.е. можно кривые пакеты просто игнорировать?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение Serg »

LinuxCNC ничего не будет повторять. Повторяет видимо сам компонент.
Игнорировать можно одиночные ошибки. Если их много, то надо куда-то ругаться, чтоб принимали меры, а то так можно и команду остановки шпинделя пропустить...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
aekhv
Мастер
Сообщения: 393
Зарегистрирован: 17 окт 2014, 15:03
Репутация: 218
Настоящее имя: Александр
Откуда: г.Хабаровск
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение aekhv »

magrelo писал(а):Но насколько я понял LinuxCNC бесконечно пытается передать мне выставленные параметры, даже если они не меняются.
Компонент в бесконечном цикле шлёт запросы с кодом 0х03 (чтение), читая регистры преобразователя частоты. В этом состоит суть мониторинга параметров, как бэ... Запросы с кодом 0х06 (запись) отсылаются в случае, если а) заданная частота изменилась и б) изменился статус шпинделя fwd/rev/stop. Если при запросе данные от ПЧ не были получены, то компонент сбрасывает пин modbus_ok в "0". Если ПЧ отвечает на запросы, то пин modbus_ok устанавливается в "1", но не сразу, а спустя 10 успешных запросов, для уверенности что связь стабильна. Последнюю цифру можно изменить в исходниках, см. MIN_MODBUS_OK.
magrelo
Кандидат
Сообщения: 42
Зарегистрирован: 27 ноя 2015, 11:53
Репутация: 0
Настоящее имя: Andrey
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение magrelo »

Удалось написать по аналогии свой компонент "heater" и подружить его со своим контроллером, который управляет температурой головки 3Dпринтера ))). Мониторинг температуры работает, задание через команду М106 P200 получается. Текст сценария по команде М106:
#!/bin/bash
halcmd setp heater.command_temperature $1
exit 0

В компоненте есть пин, отвечающий за флаг достижения заданной температуры heater.at_temperature . Как заставить LinuxCNC остановиться до тех пор пока этот флаг не выставится? есть в halcmd какая то команда типа while(!heater.at_temperature); ? Или это уже не через сценарий делается? Куда копать?
Аватара пользователя
aekhv
Мастер
Сообщения: 393
Зарегистрирован: 17 окт 2014, 15:03
Репутация: 218
Настоящее имя: Александр
Откуда: г.Хабаровск
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение aekhv »

Имхо, прежде всего, нужно создать свою отдельную тему...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение Сергей Саныч »

motion.spindle-at-speed - пин, отвечающий за ожидание разгона шпинделя. Пока не станет true, рабочие перемещения (G1, G2, G3) не будут делаться.
http://linuxcnc.org/docs/2.7/html/man/m ... ion.9.html
Чудес не бывает. Бывают фокусы.
magrelo
Кандидат
Сообщения: 42
Зарегистрирован: 27 ноя 2015, 11:53
Репутация: 0
Настоящее имя: Andrey
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение magrelo »

Да, связь пошла, за это огромное спасибо! Без этого примера пришлось бы пол года читать документацию ). Просто у меня нету ни шпинделя ни частотника, а пример позволил приладить любое внешнее устройство ). Дальше пора в другую тему перемещаться.
MGG
Мастер
Сообщения: 3673
Зарегистрирован: 08 фев 2016, 16:33
Репутация: 1010
Настоящее имя: Манн Геннадий Геннадьевич
Откуда: Москва
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение MGG »

Подскажите, в файлеке вид адресов идет так :

Код: Выделить всё

/* Регистры для чтения. Укажите значения из мануала на свой ПЧ! */
#define STATUS_Command_Frequency	0x0001	// заданная (опорная) частота
#define STATUS_Output_Frequency		0x0002	// выходная частота
#define STATUS_Output_Current		0x0003	// выходной ток
#define STATUS_Output_Voltage		0x0004	// выходное напряжение
#define STATUS_Output_Power		0x0005	// выходная мощность
#define STATUS_Output_Torque		0x0006	// выходной момент
#define STATUS_Motor_RPM		0x0007	// скорость вращения
#define STATUS_DC_Bus_Voltage		0x0008	// напряжение на шине DC
#define STATUS_Temperature		0x0009	// температура
#define STATUS_Uptime			0x000A	// время наработки
#define STATUS_Fault_Code		0x000B	// код ошибки ПЧ
У меня же адреса как на картике во вложении.
Как вприсывать адреса? так же через 0х.... и последние 3 символа, или вписывать как есть?

UPD из какой системы в какую надо переводить?
Вложения
вопрос_.JPG (3222 просмотра) <a class='original' href='./download/file.php?id=105243&sid=8abfdc30514e2d75cfd4c8e9c351ed36&mode=view' target=_blank>Загрузить оригинал (35.47 КБ)</a>
http://www.cnc-club.ru/forum/viewtopic. ... 76#p304076 Поставки оборудования для ваших станков
https://www.instagram.com/dtw.moscow/
dtw.moscow@gmail.com
Аватара пользователя
aekhv
Мастер
Сообщения: 393
Зарегистрирован: 17 окт 2014, 15:03
Репутация: 218
Настоящее имя: Александр
Откуда: г.Хабаровск
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение aekhv »

MGG писал(а):из какой системы в какую надо переводить?
Ничего переводить не надо, значения в вашей таблице уже даны в Hex, приставку H просто откидывайте. То есть, например, F3H превращается в 0xF3.
MGG
Мастер
Сообщения: 3673
Зарегистрирован: 08 фев 2016, 16:33
Репутация: 1010
Настоящее имя: Манн Геннадий Геннадьевич
Откуда: Москва
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение MGG »

Код: Выделить всё

mgg@cnc:~/Рабочий стол/temp/spindle-vfd/spindle-vfd$ sudo make install spindle-vfd.c
[sudo] password for mgg: 
mkdir -p .o
cc -I/usr/include/linuxcnc -URTAPI -U__MODULE__ -DULAPI -Os -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include   -o .o/spindle-vfd.o -c spindle-vfd.c
spindle-vfd.c:70:1: error: unknown type name ‘define’
spindle-vfd.c:70:23: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before numeric constant
spindle-vfd.c:149:3: warning: data definition has no type or storage class [enabled by default]
spindle-vfd.c:209:49: error: expected declaration specifiers or ‘...’ before ‘haldata_t’
spindle-vfd.c:350:50: error: expected declaration specifiers or ‘...’ before ‘haldata_t’
spindle-vfd.c: In function ‘usage’:
spindle-vfd.c:475:5: error: ‘DEFAULT_Bits’ undeclared (first use in this function)
spindle-vfd.c:475:5: note: each undeclared identifier is reported only once for each function it appears in
spindle-vfd.c:475:19: error: ‘DEFAULT_Device’ undeclared (first use in this function)
spindle-vfd.c:475:44: error: ‘DEFAULT_Parity’ undeclared (first use in this function)
spindle-vfd.c:476:5: error: ‘DEFAULT_Baud’ undeclared (first use in this function)
spindle-vfd.c:476:19: error: ‘DEFAULT_Stopbits’ undeclared (first use in this function)
spindle-vfd.c:476:37: error: ‘DEFAULT_Slave’ undeclared (first use in this function)
spindle-vfd.c: In function ‘main’:
spindle-vfd.c:484:16: error: ‘haldata’ undeclared (first use in this function)
spindle-vfd.c:497:13: error: ‘DEFAULT_Slave’ undeclared (first use in this function)
spindle-vfd.c:498:14: error: ‘DEFAULT_Device’ undeclared (first use in this function)
spindle-vfd.c:499:12: error: ‘DEFAULT_Baud’ undeclared (first use in this function)
spindle-vfd.c:500:12: error: ‘DEFAULT_Bits’ undeclared (first use in this function)
spindle-vfd.c:501:14: error: ‘DEFAULT_Parity’ undeclared (first use in this function)
spindle-vfd.c:502:16: error: ‘DEFAULT_Stopbits’ undeclared (first use in this function)
spindle-vfd.c:503:13: error: ‘DEFAULT_Debug’ undeclared (first use in this function)
spindle-vfd.c:504:15: error: ‘DEFAULT_Verbose’ undeclared (first use in this function)
spindle-vfd.c:505:16: error: ‘DEFAULT_Looptime’ undeclared (first use in this function)
spindle-vfd.c:611:27: error: expected expression before ‘)’ token
spindle-vfd.c:704:20: error: ‘AT_SPEED_TOLERANCE’ undeclared (first use in this function)
spindle-vfd.c:710:29: error: ‘MIN_MODBUS_OK’ undeclared (first use in this function)
make: *** [.o/spindle-vfd.o] Ошибка 1
Вот такая ошибка, подскажите, куда копать?
http://www.cnc-club.ru/forum/viewtopic. ... 76#p304076 Поставки оборудования для ваших станков
https://www.instagram.com/dtw.moscow/
dtw.moscow@gmail.com
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение nkp »

ругается на spindle-vfd.c
покажи этот файл
MGG
Мастер
Сообщения: 3673
Зарегистрирован: 08 фев 2016, 16:33
Репутация: 1010
Настоящее имя: Манн Геннадий Геннадьевич
Откуда: Москва
Контактная информация:

Re: Частотник и Modbus. Универсальная заготовка.

Сообщение MGG »

Вот во вложении
Вложения
spindle-vfd.c
(34.1 КБ) 944 скачивания
http://www.cnc-club.ru/forum/viewtopic. ... 76#p304076 Поставки оборудования для ваших станков
https://www.instagram.com/dtw.moscow/
dtw.moscow@gmail.com
Ответить

Вернуться в «LinuxCNC»