Страница 2 из 17
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 17 окт 2016, 04:48
aekhv
mmavka писал(а):Частотник не поддерживает x06. пришлось пользоваться 10
Ничего не понял, поясните.
mmavka писал(а):Куда копать?
Покажите файлы вашей рабочей конфигурации, будем думать.
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 18 окт 2016, 03:18
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 писал(а):Покажите файлы вашей рабочей конфигурации, будем думать.
А какие файлы нужны все? Вот конфигурация и измененная заготовка.
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 18 окт 2016, 04:37
aekhv
У вас задание частоты в компонент spindle-vfd не заведено, поэтому шпиндель стартует на минимальных оборотах. В custom.hal строку
Код: Выделить всё
net spindle-speed-cmd spindle-vfd.command-speed
замените на
Это из-за разницы в наименовании сигналов в разных версиях StepConf и PncConf. Подробности уже не помню, но одни версии при создании конфигурации в hal-файл пишут
spindle-speed-cmd, а другие
spindle-cmd. Поэтому при подключении сторонних компонентов нужно быть внимательным.
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 18 окт 2016, 13:39
mmavka
Попробую сегодня.
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 20 окт 2016, 07:52
aekhv
mmavka писал(а):Попробую сегодня.
Помогло?
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 23 окт 2016, 21:11
mmavka
BentScrew писал(а):mmavka писал(а):Попробую сегодня.
Помогло?
Да. Спасибо. Все работает.
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 31 янв 2017, 14:08
magrelo
Пытаюсь приспособить данную заготовку к обмену со своим контроллером. Долго смотрел на стандартную библиотеку modbus для микроконтроллеров, но там слишком много всего, отлаживать сложно. Пока написал свою программу, которая принимает посылку. Осталось теперь ее разобрать ))) Помогите разобрать что есть что. Заготовка отсылает 2 пакета по 8 байт через 500мС:
14 03 00 01 00 01 D7 0F
14 06 20 01 01 F4 D1 18
Кто там адрес, кто команды, кто контрольная сумма.
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 31 янв 2017, 14:28
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.
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 02 фев 2017, 13:53
magrelo
Да, с содержанием пакета разобрался, контрольную сумму мой контроллер проверяет. Если контрольная сумма совпадает, я возвращаю посылку с данными. А как быть если контрольная сумма не совпала (пакет пострадал от помех)? по спецификации modbus я вроде как должен выслать обратно код ошибки. Но насколько я понял LinuxCNC бесконечно пытается передать мне выставленные параметры, даже если они не меняются. Т.е. при отсутствии ответа просто фиксируется ошибка и через 0.5 секунды LinuxCNC повторит передачу заданных параметров? Т.е. можно кривые пакеты просто игнорировать?
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 02 фев 2017, 14:07
Serg
LinuxCNC ничего не будет повторять. Повторяет видимо сам компонент.
Игнорировать можно одиночные ошибки. Если их много, то надо куда-то ругаться, чтоб принимали меры, а то так можно и команду остановки шпинделя пропустить...
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 02 фев 2017, 14:24
aekhv
magrelo писал(а):Но насколько я понял LinuxCNC бесконечно пытается передать мне выставленные параметры, даже если они не меняются.
Компонент в бесконечном цикле шлёт запросы с кодом 0х03 (чтение), читая регистры преобразователя частоты. В этом состоит суть мониторинга параметров, как бэ... Запросы с кодом 0х06 (запись) отсылаются в случае, если а) заданная частота изменилась и б) изменился статус шпинделя fwd/rev/stop. Если при запросе данные от ПЧ не были получены, то компонент сбрасывает пин modbus_ok в "0". Если ПЧ отвечает на запросы, то пин modbus_ok устанавливается в "1", но не сразу, а спустя 10 успешных запросов, для уверенности что связь стабильна. Последнюю цифру можно изменить в исходниках, см. MIN_MODBUS_OK.
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 15 фев 2017, 15:50
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); ? Или это уже не через сценарий делается? Куда копать?
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 15 фев 2017, 15:57
aekhv
Имхо, прежде всего, нужно создать свою отдельную тему...
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 15 фев 2017, 16:10
Сергей Саныч
motion.spindle-at-speed - пин, отвечающий за ожидание разгона шпинделя. Пока не станет true, рабочие перемещения (G1, G2, G3) не будут делаться.
http://linuxcnc.org/docs/2.7/html/man/m ... ion.9.html
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 16 фев 2017, 15:59
magrelo
Да, связь пошла, за это огромное спасибо! Без этого примера пришлось бы пол года читать документацию ). Просто у меня нету ни шпинделя ни частотника, а пример позволил приладить любое внешнее устройство ). Дальше пора в другую тему перемещаться.
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 06 мар 2017, 21:28
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 из какой системы в какую надо переводить?
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 07 мар 2017, 02:51
aekhv
MGG писал(а):из какой системы в какую надо переводить?
Ничего переводить не надо, значения в вашей таблице уже даны в Hex, приставку H просто откидывайте. То есть, например, F3H превращается в 0xF3.
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 12 мар 2017, 18:13
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
Вот такая ошибка, подскажите, куда копать?
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 12 мар 2017, 18:17
nkp
ругается на spindle-vfd.c
покажи этот файл
Re: Частотник и Modbus. Универсальная заготовка.
Добавлено: 12 мар 2017, 18:21
MGG
Вот во вложении