Дневник, ET10, управление шпинделем: 0-10v, PWM

Post Reply
SUN
Posts: 34
Joined: Tue Feb 18, 2020 3:41 pm

Дневник, ET10, управление шпинделем: 0-10v, PWM

Post by SUN »

Ниже текст - это не инструкция и не вопросы и ответы. Это именно дневник.
Это мой опыт по освоению программы "mycnc" и контроллера ET10.


№65
mycnc
Подключение к контроллеру "ET10" электроники двигателя постоянного тока для (шпиндель"sherline")
Следующий: Подключение квадратурного (инкрементального) энкодера шпинделя.

Просмотрел структуру параметров программы mycnc, могу использовать протокол ЦАП - управление шпинделем 0-10вольт. Имеется на борту "ET10" 4 - ШИМ (PWM) выхода.
Использовать буду:
Пин "DAC0", разъём "XT16" - переменная "dac01"
или:
Пин "PWM1", разъём "XT19" - переменная "pwm01".
Гальваническая развязку между контроллером шпинделя и ET10, сигналов PWM, могу сделать через модуль к Ардуины: "PWM to Voltage Converter Module 0-100% to 0-10V"
Или что-то типа "0-10V Analog Isolation Board Voltage Signal Isolation Module S-10V10V forPLC/MCU".

И так, что уже "нащупал" в программе "mycnc" и контроллера методом "тыка".
Напряжение сигнала на выходе "DAC0" появляется если включить шпиндель (кнопка "M03") и "тыкнуть" на закладке "Диагностика" (файл diagnose8.xml), кнопку (type="kspinbox") влево/вправо "Цап 1". Такой "фокус" срабатывает, если в параметрах шпинделя не отмечать флаг "RS485/Modbus communication".
Если значение в поле (Выход ЦАП) = 0 и жать кнопку влево, то физическое значение "DAC0" = -10v , если нажать кнопку вправо, то -9,9v.
При этом в поле цифра напряжения не меняется и равно 0, так, наверное, должно было бы и быть.
Видимо это какой-то рудимент - кнопки, так как нажатия ни на что видимое в профиле не влияют.
Нужно будет в моём профиле исправить или заблокировать эту опцию.
Явно. Функция "dac-outputs" в XML-файле не для ET10. Нужно проверить, может ли пользователь вообще изменить такие процедуры?
На закладке "PLC->Шпиндель" (user-spindle.xml) имеются настройки, изменения параметров никак не влияет на сигнал "DAC0", эти настройки для выполнения программ G-кода.
Для ожидания выполнение программы G-кодов установлена задержка на включения шпинделя и некоторые другие параметры. Любопытно, кнопка "PLC" имеет одну закладку для параметров и на этой закладке только одна строка "Spindle". Всякие параметры в mycnc записаны по всему проекту - это попытка структурировать проект, демонстрация возможностей, какие-то бывшие или будущие правила?
Вообще-то мне нужно сделать так, чтобы процесс выполнения кода начинался после того, как с энкодера будет получено соответствующее установленной скорости значение.

"По логике" и на примерах, пока, не получилось установить управляемый сигнал на выходе контроллера "DAC0".

Нужно искать, как решить мои проблемы.
Установил последнюю версию "01/16/2020 05:05 15,522,816", myCNC.exe_2020-0203_2110
В документации сказано, по поводу проверки портов выходов PWM/DAC
http://docs.pv-automation.com/plc/contr ... est_-_bv17

Мда. Мне не понравилась "Ребусная" идея запускать тест кнопкой с названием: "1" в правом нижнем углу на закладке "Диагностика", а кнопка: "0" - отключить!
Жму кнопку "1", цифры "бегут" во всех полях "PWM...", Физически меняется и напряжение. Например на плате контроллера, выход "PWM1", значение напряжения варьируется от 0 до 21v.
В поле ЦАП, на закладке "Диагностика", цифры не "бегут", но физически на выходах контроллера DAC0-DAC5 напряжение "циклично" меняется.
Отключил тест кнопкой "0".

При нажатии на кнопки "PWM" на закладке Диагностики, значение в полях меняется.
Для ET10, кнопки на закладке диагностика: PWM4-PWM8 - рудимент.

Ищу профили поновее...
Скачал ftp://mycnc.noip.me/profiles/
01/29/2020 05:22 1,957,121 preleases-2020-0129_0022.tar.gz
Ошибка - отказано в доступе: в "D:\CNC\preleases-2020-0129_0022.tar.gz\preleases-2020-0129_0022.tar\PRELEASES\X1366P\plc\soft\pins.h"
Та же ошибка и для X1366G,X1366GA.
Явно. C этим файлом какие-то проблемы, так как именно этот "pins.h" файл не распаковывается в трёх архивах профилей....
Вижу изменения в закладке "Info" - новая версия (видимо экзешника) ver 1.88.3752.
Бегло проверяю что изменилось:
Ошибка возникающая с закладкой инструментов не устранена.
Ошибка с кнопками в закладке установок для "Цап 1" не устранена (в этом профиле?). Хотя ошибка это или нет, непонятно. Профиль универсальный и для различных плат.
Попробую перепрошить контроллер, за одно проверю не исправлена ли ошибка со счётчиком переменных 9200(+16), смотреть удобно в области "VARS", в профиле X1366M4E.
На форуме разработчика идёт обсуждение проблемы настроек энкодера (Вопрос № 3): viewtopic.php?f=7&t=1483&start=20
Последний совет от "ivan" - установить прошивку "тестовая". Правда у меня ET10, а речь шла о ET7.
Для меня неудобно реализован механизм перепрошивки контроллера.
Как посмотреть номера прошивок, и что нового, до обновления?
Как вернуть прошивку на предыдущую? и так далее, далее...?
Перепрошиваю из под "Win64", платы не разъединяю...
Установил: "Ночная", "Релиз" - вышеперечисленные ошибки осталась.
Установил тестовую версию.
Номер версии прошивки тот-же: "15.042".
Дата прошивки "jul 10 2019, 10:25:23".
Так же, в тестовой версии прошивки остались ошибки с пересчётом переменной 9200(+16).
Установил значение параметру: "Encoder Number lines" = 2500, значения переменной 9200(+16) вычисляются не корректно!
По прежнему значение в ПЛИС корректно вычисляется только если установить значение параметру "Encoder Number lines" = 65000. (смотри Д.№58)

Настроил профиль "X1366M6".
Запускаю тест кнопкой "1" как и в профиле X1366M4E.
Настраиваю шпиндель, снимаю флаг "RS485/Modbus communication". Теперь после команды "M3", в поле "Цап 1" отображается значение напряжения (dac01 в PLC "M03") соответствующее настроенным параметрам шпинделя, Пока на выходе "DAC0" напряжение не изменяется при активации команд; "M03".
Явно. Я чего-то ещё не настроил...
Нахожу, что : "parameter=0x800-(eparam/2)+(1<<12);" (http://docs.pv-automation.com/plc/plc_examples)
Два последних бита переменной: "parameter" - это ID номер выхода ЦАП. Такой способ экономит регистровую память в FPGA, но поддержит не более 8 устройств в тексте языка программирования.
В общем - вывод. Не смог найти для решения моих задач, подходящего кода в профилях.
Нужно писать самостоятельно макрокоды для PLC.
Ищу по форумам и в документациях что-нибудь ...
Вот обсуждение моей задачи
viewtopic.php?f=7&t=7
Кажется, это то что нужно.

Обнаруживаю ошибку.
В тексте макроса нельзя установить примечание в строке после #include pins.h. Кстати, кто-то на форуме жаловался, что примеры у него не работают, это как раз и есть та самая причина "нерабочего примера".
Позже разберусь в чём именно проблема такого конфуза.
Вот так нужно изменить текст примера чтобы он заработал:
//Turn on Spindle clockwise
//set Spindle speed control ET10 DAC channel #2
#include pins.h
//defines for pins numbers
....
Понравилось. Обнаружил, что в области редактора кода PLC, имеется возможность компилировать код текущего PLC - кнопка "Build", c выводом некоторой отладочной информации в окно отладки.
Нужно детально разобраться, что означает отладочная таблица.

Быстро применил пример. Недоразумение. Пример формулы от разработчиков "parameter=0x800-(eparam/2)+(DACid<<12);" - это управление напряжением ЦАП от -10 до 0.
Для того чтобы регулировать напряжение на выходе DAC0(ET10) от 0 до +10 нужно прибавить смещение "0x800": "parameter=0x800+(eparam/2)+(DACid<<12);"
Попробую настроить обороты шпинделя от 0 до +10v для выхода DAC0. Формула в коде PLC (M03, SPN): "parameter=0x800+(eparam/2)+(DACid<<12);//DACid=0".
Проверил напряжение питания ET10 - на плате +24,01v.
У меня получается в одной процедуре изменить напряжение только на одном из выходов ЦАП с помощью конструкции: command= 0x32, и "parameter...".
Как изменить выходное напряжение одновременно на несколько выходов ЦАП?
Пока сделал такую конструкцию:
parameter=0x800+(eparam/2)+(0<<12);
message=PLCCMD_SET_CNC_EXTVAR;
texit=timer+2;do{timer++;}while(timer<texit);
parameter=0x800+(eparam/2)+(1<<12);
message=PLCCMD_SET_CNC_EXTVAR;
texit=timer+2;do{timer++;}while(timer<texit);
...
parameter=0x800+(eparam/2)+(5<<12);
message=PLCCMD_SET_CNC_EXTVAR;
texit=timer+2;do{timer++;}while(timer<texit);
Все 6 выходов Цап одновременно переключаются. (проверил осциллографом)
Не уверен, что я делаю правильно.
Конструкция "gvarset(0x101001...,...); //dac" не работает в "Hardware PLC" или не работает только в макросе: "M03"?
Тест: "__BV17, из: "....->Software PLC" "корректно работает, (проверил осциллографом).
Установил следующие подобранные параметры шпинделя в версии прошивки: "jul 10 2019, 10:25:23",профиль: "X1366M6":
"Spindle speed [rpm](min,max,step)" = 1, 4095, 4;
"Spindle Overspeed, [%](Min, Max, Step)" = 1, 100, 1;
"Encoder" = "Not used";
"Encoder pulses per revolution" = 1;
"Voltage offset, units" = 0;
//Этим значение нужно подобрать так, чтобы на выходе сигнала "DAC0" ET10 был физический 0v, (-0.01v) при установке значения в PLC: "eparam" = 2047 //("M03 S1")
Если установить значение, например -100, то физическое значение напряжение на выходе DAC0 станет изменятся после значения "100" в поле профиля скорости шпинделя. Какой в этом смысл?
Пока не буду пользоваться этим параметром. Смещение напряжения в отрицательную сторону (меньше чем, +0,34v) буду регулировать из моей процедуры PLC - константа: "DACoffset".
"Voltage ratio, units" = 0.965; //(units = %) значение нужно подобрать так, чтобы на выходе сигнала "DAC0" ET10 был физический +10v, при установке значения в PLC: "eparam" = 4095 //("M03 S4095")
"RS485/Modbus communication" = disable.
Остальные не важны.
Нужно бы скрывать ненужные элементы в профиле(серыми), если не отмечен флаг: "RS485/Modbus communication".
В ручную по кнопке "M03" запускается код корректно.
Из командной строки ошибки.
Например "M03 S2500", выдаст в поле значение "2501". Где-то ещё имеется скрытая обработка кода или ошибка в формулах?
Если из командной строки отдать команду: "M03 S100000000" превышающее максимальное значение, установленное в "Spindle speed [rpm](min,max,step) = 1, 4095, 4;", то получаю значение "4244".
Причина в том, что где-то в формуле mycnc существует операция деления..., а не умножения..., вот как-то так: "Spindle speed"/"Voltage ratio, units" = 4243.523316(правила округление в большую сторону даёт число 4244)
Получается, что я не могу пользоваться "Voltage ratio, units" и "Voltage offset, units".
Устанавливаю "Voltage ratio, units" = 1;. Буду регулировать максимум напряжения из формулы PLC.
На закладке "CNC Settings->G-code settings->Accept single S-code" отмеченный флаг не позволит регулировать или повторно установить команду скорости шпинделя из программы.
Не понравилось. В области общих настроек, находится специфический параметр.
Разотметил. "Save CFG".
Теперь после команды, например: "M03 S1000" можно изменять значение скорости шпинделя кнопками во время выполнения G-кода, а так же отдавать новые команды "S#" из текста программы G-кода и из командной строки.

Ищу другие косвенные настройки которые могут повлиять на настройку параметров шпинделя.
На закладке "CNC Settings->Technology->Plasma Cutting->Plasma Settings-Control through DAC" флаг не снимается, так как это переключатель-радиобар, зависимый от двух других элементов флагов.
Стиль использовать элемент Флаг, там где логика "переключателя" - вводит в заблуждение...
Установил "птичку" на флаг "Modbus control".
На закладке "CNC Settings->Technology->THC->THC Enable". Разотметил. "Save CFG".

Явно определил и исправил предыдущие ошибки. Возникает в Win64 операционной среде.
Заметку в тексте кода PLC нельзя ставить в одной строке с включением файла: "#include pins.h //defines for pins numbers".
Мне не нравится, что политика программы mycnc позволяет править "на лету" исходные файлы программы. Во время входа на закладку: "CNC SSetting->PLC->Hardware PLC" перезаписывается исходный код файла pins.h и используется как хранилище переменных пинов. Текст создаётся в ANSI UNIX. В UNIX версии mycnc, скорее всего, такой ошибки нет.
Мне нравится, что существует возможность посмотреть определённые пользователем пины в одном месте (файл pins.h в котором можно будет увидеть ошибку, если в проекте один и тот же пин используется дважды).

Нужно подсказать разработчику о критических ошибках (Win64):
1. Исправить ошибку во время компиляции строк с "#include pins.h //..." с примечанием - в конструкции примечание находится в одной строке эта ошибка наблюдается в прошивках Firmware Version: "Release" (May 4 2018 9:11:37) и в Firmware Version: "Night Build" (jan 17 2019, 00:28:53). В версии прошивки "тестовая" (Дата прошивки "jul 10 2019, 10:25:23") эта ошибка так же наблюдается, (Странное поведение. Был случай, когда проект версии "jul 10 2019, 10:25:23" компилировался и исполнялся корректно с примечанием в одной строке с "#include pins.h //..." и только после повторной перепрошивки снова после перекомпиляций PLC процедура, с такой вот конструкцией примечания, не работала).
2. Исправить процедуру кнопки "Save ALL" относительно сохранения файла pins.h. Если файл pins.h был загружен в редактор mycnc, то после нажатия на кнопку "Save ALL", эта процедура "размножает" перевод строк в файле pins.h.
У меня в win64 ошибка генерируется так: В программе mycnc, с соединённым с программой и включённым контролером ET10, выделяю файл "CNC SSetting->PLC->Hardware PLC\pins.h" чтобы текст файла показался в области редактирования, затем жму на кнопку "Save ALL", затем выделяю другой файл и перехожу на другую закладку (или перезагружаю программу mycnc) и в дальнейшем именно в момент активации события входа на закладку: "CNC SSetting->PLC->Hardware PLC", программа mycnc перезаписывает файл pins.h, в этом момент и удваивается количество переносов строк в тексте файла.
"Размножение" будет бесконечно всякий раз как будет нажиматься кнопка "Save ALL" при загруженном в mycnc для редактирования файла(выделении файла): pins.h. В некоторых архивах (X1366G...), которые распространяются с ресурса: ftp://mycnc.noip.me/profiles/ файлы pins.h уже не распаковываются.



Далее код.

Добавляю в конец файла: "vars.h", на закладке: "CNC SSetting->PLC->Hardware PLC\PLC Includes", текст:

Code: Select all

//------------------------------------------------------
#define  DACoffset (0-60) //Это тоже самое, что параметр: "Voltage offset, units". Но можно регулировать в отрицательную сторону. Компилятор ругается на отрицательное значение, по-этому подбирал формулой.. Напряжение на выходе ЦАП макс = -0.01v, при мин. значении скорости шпинделя(1).
#define   DACid  0	//это будет номер порта ЦАП. Впрочем, пока буду управлять всеми выходами одновременно. При 
#define  DACbits  12 	//Это константа битности ЦАП в ET10. Системный параметр "parameter" - 16-битный, последние 2 бита - номер порта.
#define  DACcount  6 	//Это количество ЦАП в ET10. 
#define  DACratio 970 	//Это тоже самое, что параметр: "Voltage ratio, units"*1000. Напряжение на выходе ЦАП макс = +10.001v, при макс значении скорости шпинделя.  Значение коэффициента должно быть увеличено на 1000. Плавающая точка в FPGA.
//------------------------------------------------------
Жму кнопку "Save All".

Создаю новый файл в "PLC Includes", "ET10_M03_SPN.h"
Вставляю в новый файл текст кода:

Code: Select all

//start. ET10_M03_SPN.h------------------------------------------------------
//sun
//Этот код - пример. Использовать на свой страх и риск.
//
//Для включения в тело PLC процедур: M03, SPN


#include vars.h 
//defines for variable names

 timer=0;
  //-блок инициализации параметров скорости шпинделя
val=eparam;   //"eparam" - 32 битное число.  Может быть больше 4095 или меньше 0?
 if (val>0xfff) {val=0xfff;};
 if (val<0x0) {val=0x0;};

  if (proc==plc_proc_spindle) //Значение переменных установить , если включен шпиндель 
  {
	dac01=val;
  	pwm01=val;

	command=0x32; //EXT_ET5_DAC_OFFSET  - Почему нельзя использовать системную константу?
	i=DACid;
	do{
		parameter = 1<<(DACbits-1) + 1 + DACoffset + DACratio * val/2/1000 + (i<<DACbits); // 0v to +10v
		message=PLCCMD_SET_CNC_EXTVAR;
		texit=timer+2;do{timer++;}while(timer<texit);
		i++;	
	     }while(i<DACcount); 

  }; 
 gvarset(7370,1); timer=30;do{timer--;}while (timer>0); //Spindle State
 gvarset(7371,val); timer=30;do{timer--;}while (timer>0); //Spindle Speed Mirror register
//end.  ET10_M03_SPN.h------------------------------------------------------

Жму кнопку "Save All".



В области ресурсов: "PLC Sources", в "M03" ("M03.plc") удаляю весь старый текст и вставляю новый текст кода:

Code: Select all

//start M03--------------------------------------------------------------
//sun
//Этот код - пример. Использовать на свой страх и риск.

//Turn on Spindle clockwise
//set Spindle speed control ET10 DAC channel #0 (ET10 0-5)
#include pins.h  
//defines for pins numbers - Эту заметку нельзя ставить в одной строке с #include pins.h 

main()
{
  proc=plc_proc_spindle;

 #include ET10_M03_SPN.h

   portclr(OUTPUT_CCW_SPINDLE);
   portset(OUTPUT_SPINDLE);
 
 //Wait till Spindle Rotation Speed comes to good values before next motion started
  timeout=timeout_on_delay+timer;
  do{timer++;}while (timer<timeout);               //delay for Spindle reach given speed
 
  exit(99);                                        //normal exit.
};
//end M03--------------------------------------------------------------


В области ресурсов: "PLC Sources", в "SPN" ("SPN.plc")удаляю текст кода и вставляю новый текст кода:

Code: Select all

//start SPN--------------------------------------------------------------
//sun
//Этот код - пример. Использовать на свой страх и риск.

main()
{
 #include ET10_M03_SPN.h
exit(99);  //normal exit.
};
//end SPN --------------------------------------------------------------

В области ресурсов: "PLC Sources", очищаю весь текст кода в "M05" ("M05.plc"), и вставляю новый текст кода:

Code: Select all

//start M05------------------------------------------------------------
//Spindle Stop
//set Spindle speed control via DAC & PWM1 channel

#include pins.h
#include vars.h


main()
{
  portclr(OUTPUT_SPINDLE);
  portclr(OUTPUT_CCW_SPINDLE);
  proc=plc_proc_idle;


 dac01=0x0;

 pwm01=0x0;
 pwm02=0x0; 
 pwm03=0x0;
 pwm04=0x0;


	command=0x32; //EXT_ET5_DAC_OFFSET  - Почему нельзя использовать системную константу?
	i=DACid;
	do{
		parameter = 1<<(DACbits-1) + 1 + DACoffset  + (i<<DACbits); //set 0v
		message=PLCCMD_SET_CNC_EXTVAR;
		texit=timer+2;do{timer++;}while(timer<texit);
		i++;	
	     }while(i<DACcount); 


  if (spindle_off_delay!=0)
  {
    timer=spindle_off_delay;
    do { timer--; } while (timer>0);
  };

  gvarset(7370,0);  timer=30;do{timer--;}while(timer>0); //Spindle State
  gvarset(7371,0);  timer=30;do{timer--;}while(timer>0); //Spindle Speed

  exit(99);  //normal exit 
};
//end M05------------------------------------------------------------
Жму кнопку: "Build", затем кнопку:"SEND"
перегружаю программу mycnc.

ivan
Posts: 279
Joined: Tue Apr 16, 2019 5:30 pm
Location: Ottawa, Canada

Re: Дневник, ET10, управление шпинделем: 0-10v, PWM

Post by ivan »

Добрый день. Спасибо за описание процесса настройки, я думаю найдутся пользователи которым будет интересно почитать. Первая мысль - если в будущем у вас будут возникать конкретные вопросы по техподдержке, то скорее всего лучше их будет задавать в отдельной теме, чтобы было сразу видно какие вопросы закрыты, а какие еще нет.

Для начала, не уверен если у вас была возможность взглянуть на нашу документацию, но вот тут описывается работа DAC для ET10: http://docs.pv-automation.com/spindle_s ... annel_et10

Пример PLC процедуры для управления шпинделем через DAC на ET10: http://docs.pv-automation.com/spindle_s ... annel_et10

Насчет критических ошибок - баг с файлом pins.h чинили какое-то время назад, но по всей видимости что-то осталось. Перепроверим, и постараемся исправить.

mycnc
Posts: 784
Joined: Thu May 10, 2018 2:42 pm
Location: Ottawa, Canada
Contact:

Re: Дневник, ET10, управление шпинделем: 0-10v, PWM

Post by mycnc »

Каналы DAC 0...10В на контроллерах ЕТ6, ЕТ7 и
каналы DAC0...DAC5 -10В...+10В на контроллере ЕТ10 различаются по управлению и не совместимы друг с другом.

Разные процедуры и регистры доступа используются для ЕТ10 и для ЕТ6/ЕТ7.

Через запись переменной PLC "dac01" не получится получить доступ к ЦАП на ЕТ10.

Этому посвящены статьи документации -
http://docs.pv-automation.com/spindle_s ... annel_et10
http://docs.pv-automation.com/plc/spind ... annel_et10
http://docs.pv-automation.com/plc/plc_e ... r_et10_dac
http://docs.pv-automation.com/plc/plc_e ... r_et10_dac

В окне диагностики поле "выход ЦАП" отображает состояние регистра ЦАП для ЕТ6, ЕТ7 и не годится для диагностики ЕТ10.

Каналы PWM на всех контроллерах ЕТ6, ЕТ7, ЕТ10 управляются одинаково.
Если вам надо организовать гальваническую развязку, то с ШИМ сигналом это будет сделать проще и ЦАП выходы вам не нужны

Мы сделали форум техподдержки почти 2 года назад и призываем всех пользователей обращаться с вопросами сюда.
Жаль, что вы не обратились за поддержкой раньше. Я думаю, это сэкономило бы массу времени. Мы, в свою очередь, постоянно дорабатываем документацию, основываясь на вопросах пользователей. Нам важно знать какие разделы требуют переработки и дополнений.

По поводу обновления прошивки контроллера основная рекомендация - НИЧЕГО ОБНОВЛЯТЬ НЕ НАДО,
до тех пор, пока именно вам для решения именно вашей задачи не посоветовала это сделать наша техподдержка.


Сформулируйте, пожалуйста, вашу задачу и мы постараемся показать вам решение шаг за шагом.

mycnc
Posts: 784
Joined: Thu May 10, 2018 2:42 pm
Location: Ottawa, Canada
Contact:

Re: Дневник, ET10, управление шпинделем: 0-10v, PWM

Post by mycnc »

Жаль, что вы все в одну кучу свалили, надо было хотя бы разными постами, чтобы легче найти, процитировать.

По поводу Windows - у нас физически не хватает времени на тестирование системы под Windows. Хотя Windows версия строится из тех же исходных кодов, на ней есть некоторое количество известных "особенностей" (и, вероятно, еще некоторое количество неизвестных).
Мы настоятельно рекомендуем Linux для работы с myCNC.
Не смотря на наши рекомендации, есть большое количество пользователей myCNC под Windows. Выбор за пользователем.

По поводу комментариев в строке include -
include делается очень простым препроцессором, который, вероятно, не знает формата комментариев.
Надо понимать, что компилятор языка у нас самописный. Он ОЧЕНЬ УПРОЩЕННЫЙ!
Не смотря на то, что он "похож " на синтаксис "С", возможностей и гибкости у него на несколько порядков меньше, чем у настоящего языка программирования.

Изначально мы проектировали PLC для себя, чтобы можно было решать кастом задачи пользователей под заказ. Компилятор был выполнен в виде внешней утилиты. Когда удалось встроить PLC Builder внутрь самого софта, появилась возможность предоставить пользователю возможность вносить некоторые коррективы в PLC код. Но надо всегда помнить, что возможности PLC весьма скромные и сильно отличаются от настоящих компиляторов или "фирменных" PLC.

SUN
Posts: 34
Joined: Tue Feb 18, 2020 3:41 pm

Re: Дневник, ET10, управление шпинделем: 0-10v, PWM

Post by SUN »

Доброго времени суток!
Уважаемые разработчики, спасибо за ваши комментарии.
(Цитата от mycnc(не проект): "..По поводу комментариев в строке include -..." - проблему я наблюдаю только в конструкции include с файлом "pins.h", вот так: "#include pins.h //ошибка есть" , с остальными подключениями файлов, например "#include vars.h //ошибки нет". )
Конкретных вопросов к техподдержке, да и к самому проекту "mycnc" у меня пока нет. Проект мне понятен и, как по мне, реализован достаточно хорошо.
Для меня и моих друзей, формат дневника удобен тем, что в таких записях имеется не только решение, но и ошибки, например как делать не следует.
Собственно я и сейчас пишу дневник и ваши сообщения попадают "в мою историю..."


Хочу детально описать одну проблему с ET10, c которой я столкнулся, во время подключения к нему энкодеров серводвигателя,.
В дневнике выше "в одной куче" я об этом писал.

Решил не начинать новую тему, а в остальном постараюсь следовать вашим пожеланиям формулировать конкретно задачу.

№71

Задача:
Настроить программу mycnc с подключёнными энкодерами серводвигателей так, чтобы значения переменных: #9200 - #9203 отвечали бы правилу, например: [#9202/"#Pulses per Unit"] == [#5023].
#9200(16) - это переменные бесконечных счётчиков( описание в документации);
"Pulses per Unit" - это параметр устанавливается на закладке Оси/Моторы, столбец: "Пульс на единицу измерения (мм)" (переменную в ресурсах пока не нашёл, и пока не знаю как сослаться на этот параметр из кода макросов....)
[#5021](8) - эта переменная: "GVAR_CURRENT_MACHINE_POSITION" - текущие машинные координаты по оси: "Х".

На первый взгляд задача тривиальная, быстренько настроил и вроде как всё работает, но в итоге обнаружил массу неожиданных проблем - помехи, вибрация и программный код в mycnc.
По этому собираю тестовый стенд:
сервопривод: "JMC 40jasm501230K-M23B-T" (в этом экспериментальном подключение энкодер как абсолютный 23-битный не использую. Настраиваю энкодер сервопривода: "P03-25" = 2500);
энкодер: "GTK08-LDH-RAG2500Z1-2M" - этот дополнительный энкодер соединяю непосредственно на вал сервопривода:
Питание 5v.
Сигналы управления сервоприводом подключаю к оси "Z" (2). Сигналы энкодеров ко входам: "ENC#2"; "ENC#3".
Схема сборки энкодеров сделана так, что два энкодера идентично будут выдавать сигналы во время поворота вала сервопривода (сигнал "Z" будет отличаться по значению, синхронизировать хлопотно...).
Такая синхронная установка энкодеров позволяет точнее определить неисправности подключений, существование помех, ну и проверить как контроллер пересчитывает переменные счётчиков.
Как в профиле инвертировать сигналы энкодера - не нашёл.
mycnc - ET10: Для примера возьму профиль X1366M4E, из пререлиза: "02/13/2020 07:23 1,972,803 ftp://mycnc.noip.me/profiles/preleases- ... 423.tar.gz". В общем-то, установленные настройки в профиле достаточны для данного примера, но кое-что нужно поднастроить.
На закладке Оси/Моторы установить для осей: "Z" а "A":
"Пульс на единицу измерения (мм)" = "10000";
"Максимальная скорость" = 5000;
"Люфт" = 0.
Ещё подкорректирую некоторые параметры в этом профиле для удобства.
Чтобы во время закрытия программы mycnc, из профиля X1366M4E, не появлялось окно "ошибка..."(у меня, увы, появляется), на закладке "Настройки UI" снимаю флаг: "Показать закладку инструментов" (при втором закрытии программы ошибка исчезнет)
Снимаю все флаги на закладках: "Ошибки";"Пределы".
На закладке: "Энкодеры":
В строке "Linear Encoder Dimension", значение: "0,0001", для "#2"; "#3" В таком случае в закладке: "VARS", переменные #9218,#9219 будут соответствовать по модулю [#5023], [#5024].
Как сбросить значение переменных #9200-#9219? Ответ - пока никак, кроме как закрыть программу и выключить на время контроллер.
На закладке Диагностика сбросил все возможные значения осей.
Перегружаю одновременно программу и контроллер.
Активирую сигнал SERVO_ON
Экспериментальный стенд готов.

Жёстко закрепляю корпус дополнительного энкодера к корпусу сервомотора, а сам сервомотор прижимаю в тиски на станине, чтобы уменьшить вибрации.
Чтобы максимально подавить сетевые помехи подключаю к разным фазам сервопривод и питание контроллера.

Теперь тест для контроллера mycnc.
Устанавливаю параметры первого теста.
"Encoder Number lines" (для "#2"; "#3") = 2500;
"Ручная скорость.[%]" = 19.
Открываю закладку "VARS".
Жать буду кнопку переметки: "Z+" (всегда в одну сторону).
"Ручная скорость.[%]" = 19. Результат без ошибок от 1-999 оборотов в минуту. Значение переменных, практически(по модулю), идентичны: #9218,#9219, [#5023](5023 можно смотреть в главном окне ось: "Z").
"Ручная скорость.[%]" = 20. Ошибка. Значение переменных (по модулю) #9218 == #9219, но значения синхронно пересчитываются в противоположную сторону относительно "Ручная скорость.[%]" = 19. Ошибка начинается ровно с 1000 оборотов в минуту. Разумеется, что ни #9218 ни #9219 не равны #5023.
"Ручная скорость.[%]" = 40. Ошибка. Значение переменных (по модулю) #9218 == #9219. Значения переменных энкодеров, практически, не пересчитываются.
И так далеее...



Второй тест
"Encoder Number lines" (для "#2"; "#3") = 10000;
Соответственно, тоже самое что и в первом тесте, но скорость без ошибок можно установить вплоть до 3000 оборотов в минуту.

Третий тест "Encoder Number lines" (для "#2"; "#3") = 65000;
Никаких ошибок ни при каких допустимых скоростях не обнаружил, значения переменных идентичны: #9218,#9219, #5023.

Итог. Задача как бы решена: "[#9202/"#Pulses per Unit"] == [#5023]".
Но ошибка в счётчиках осталась...
Если понятно объяснил и будет время, то пожалуйста поправьте что-нибудь в коде для ET10, чтобы можно было установить "Encoder Number lines" = 2500 и не было ошибок в счётчиках переменных #9200(16) на скоростях выше 1000rpm, так как мне нужен корректный сигнал "Z".
Мне неудобно применять функции остатка от деления на 26.

philip
Posts: 121
Joined: Tue Oct 16, 2018 10:45 am

Re: Дневник, ET10, управление шпинделем: 0-10v, PWM

Post by philip »

А чего Фанука или Сименса не взяли ?
Ну на край китайцев (недорого, но очень ограничен функционал конечно) ? :)
Просто интересно, почему вы взяли myCNC, Ув. Солнышко ?

mycnc
Posts: 784
Joined: Thu May 10, 2018 2:42 pm
Location: Ottawa, Canada
Contact:

Re: Дневник, ET10, управление шпинделем: 0-10v, PWM

Post by mycnc »

SUN wrote:
Sat Feb 22, 2020 3:36 pm
Настроить программу mycnc с подключёнными энкодерами серводвигателей так, чтобы значения переменных: #9200 - #9203 отвечали бы правилу, например: [#9202/"#Pulses per Unit"] == [#5023].
#9200(16) - это переменные бесконечных счётчиков( описание в документации);
Сейчас запускаем пару машин, где это будет. По готовности обновим документацию.

mycnc
Posts: 784
Joined: Thu May 10, 2018 2:42 pm
Location: Ottawa, Canada
Contact:

Re: Дневник, ET10, управление шпинделем: 0-10v, PWM

Post by mycnc »

SUN wrote:
Sat Feb 22, 2020 3:36 pm
На первый взгляд задача тривиальная, быстренько настроил и вроде как всё работает, но в итоге обнаружил массу неожиданных проблем - помехи, вибрация
Откуда взялась вибрация? Вы closed-loop замыкаете?

SUN
Posts: 34
Joined: Tue Feb 18, 2020 3:41 pm

Re: Дневник, ET10, управление шпинделем: 0-10v, PWM

Post by SUN »

to: mycnc.
Нет closed-loop я не использовал и вибрация не из-за настроек программы myCNC. Извините, что ввёл в заблуждение "вибрацией" - это рудимент в тексте сообщения. Скопировал из личного дневника....
Второй энкодер, подсоединённый на вал серводвигателя, при определённых условиях крепления, выдавал неожиданный результат из-за невидимых вибраций на высоких скоростях.
Ниже в тексте сообщении я записал, что: "Жёстко закрепляю корпус дополнительного энкодера к корпусу сервомотора, а сам сервомотор прижимаю в тиски на станине... "

SUN
Posts: 34
Joined: Tue Feb 18, 2020 3:41 pm

Re: Дневник, ET10, управление шпинделем: 0-10v, PWM

Post by SUN »

№80
Профиль: X1366M4E ; архив: "preleases-2020-0225_1246"
Проверяю корректность счётчиков энкодромов на высоких скоростях.


ubuntu18_64,
_ myCNC ; ver 1.88.3803 ; программа myCNC запустилась корректно.

win64
_ Файл: myCNC.exe_2020-0225_1331 ; ver.1.88.3791 : вылетает после соединения с контроллером.
_ Файл: myCNC.exe ; ver.1.88.3795 ; программа myCNC запустилась корректно.

Подключил энкодер к: "ENC#2".


Исправлена ошибка, когда после отметки флага: "Показать закладку инструментов", в среде win64, при следующем закрытии программы myCNC, появлялось сообщение об ошибке. Файл mycnc.exe оставался в tree.
Появилась ошибка, в win64, ubuntu18_64.
На закладке "Энкодеры" и "Диагностика" цифры энкодера изменяются. При этом в окне "VARS" значение переменных не изменяются. На главном экране myCNC, под символом оси: "Z", цифры не изменяются.

Профиль: X1366M4E ; архив: "preleases-2020-0213_1423"
_ Файл: myCNC.exe ; ver.1.88.3795

На закладке "Энкодеры" и "Диагностика" цифры энкодера изменяются. При этом в окне "VARS" изменяется значения только в переменной #9002, остальные не изменяются. На главном экране myCNC, под символом оси: "Z", цифры не изменяются.

Post Reply