AT_PID для автонастройки параметров PID servo

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
pkasy
Мастер
Сообщения: 1139
Зарегистрирован: 15 мар 2013, 09:39
Репутация: 45
Откуда: Владивосток

Re: AT_PID для автонастройки параметров PID servo

Сообщение pkasy »

Nick писал(а):раздельно?

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

// Values for tune-type parameter.
typedef enum {
    TYPE_PID,
    TYPE_PI_FF1,
} Mode;
(для просмотра содержимого нажмите на ссылку)

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

 // Calculate PID.
        *(this->ultimateGain) = (4.0 * fabs(*(this->tuneEffort)))/(PI * this->avgAmplitude);
        *(this->ultimatePeriod) = 2.0 * this->totalTime / *(this->tuneCycles);
        *(this->ff0Gain) = 0;
        *(this->ff2Gain) = 0;

        if(*(this->tuneType) == TYPE_PID){
           // PID.
            *(this->pGain) = 0.6 * *(this->ultimateGain);
            *(this->iGain) = *(this->pGain) / (*(this->ultimatePeriod) / 2.0);
            *(this->dGain) = *(this->pGain) * (*(this->ultimatePeriod) / 8.0);
            *(this->ff1Gain) = 0;
        }else{
          // PI FF1.
            *(this->pGain) = 0.45 * *(this->ultimateGain);
            *(this->iGain) = *(this->pGain) / (*(this->ultimatePeriod) / 1.2);
            *(this->dGain) = 0;

            // Scaling must be set so PID output is in user units per second.
            *(this->ff1Gain) = 1;
        }
я немного ошибся. там либо PID либо PI FF1
pkasy
Мастер
Сообщения: 1139
Зарегистрирован: 15 мар 2013, 09:39
Репутация: 45
Откуда: Владивосток

Re: AT_PID для автонастройки параметров PID servo

Сообщение pkasy »

еще его можно использовать для THC для плазменной резки.
Ямал
Новичок
Сообщения: 12
Зарегистрирован: 27 дек 2014, 13:40
Репутация: 0
Настоящее имя: Сергей
Контактная информация:

Re: AT_PID для автонастройки параметров PID servo

Сообщение Ямал »

Уважаемые форумчане, помогите настроить PID. Пытаюсь установить pid tuning пишет следующую ошибку:


ser@16k20:~/Документы/pid_tuning-1$ sudo halrun -f config.hal
[sudo] password for ser:
Error constructing dial({'edgecolor': 'green', 'max_': 100000, 'text': 'P', 'dotcolor': 'black', 'resolution': 0.001, 'dialcolor': 'yellow', 'min_': 0, 'cpr': 20, 'initval': 0, 'halpin': 'Pgain', 'size': 150}):
pyvcp_dial instance has no attribute 'halparam'
config.hal:17: pyvcp exited without becoming ready
ser@16k20:~/Документы/pid_tuning-1$
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: AT_PID для автонастройки параметров PID servo

Сообщение Nick »

sudo точно не надо.
Как ты все это запускал и откуда брал файлы?
Ямал
Новичок
Сообщения: 12
Зарегистрирован: 27 дек 2014, 13:40
Репутация: 0
Настоящее имя: Сергей
Контактная информация:

Re: AT_PID для автонастройки параметров PID servo

Сообщение Ямал »

Файлы брал здесь:http://www.linuxcnc.org/index.php/engli ... al?limit=6
Скачал-распаковал, заменил hal-фаил на этот:

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

loadrt threads name1=servo-thread period1=1000000
loadrt pid num_chan=1

loadrt hostmot2
loadrt hm2_pci config=" num_encoders=6 num_pwmgens=0 num_3pwmgens=0 num_stepgens=0 sserial_port_0=000xxxxx "
setp     hm2_5i25.0.watchdog.timeout_ns 10000000

loadrt siggen
loadrt line4to2 count=2
loadrt mux4 count=2
loadrt toggle
loadrt passthru count=8
loadrt reciprocal
loadrt logic personality=0x203
loadrt tristate_float names=xen,yen,zen

loadusr -Wn gui0 pyvcp -c gui0 servo-tuning-gui.xml

# ################################################
# THREADS
# ################################################

addf hm2_5i25.0.read servo-thread
addf line4to2.0 servo-thread
addf line4to2.1 servo-thread
addf mux4.0 servo-thread
addf mux4.1 servo-thread
addf pid.0.do-pid-calcs servo-thread
addf hm2_5i25.0.write servo-thread
addf hm2_5i25.0.pet_watchdog servo-thread
addf siggen.0.update servo-thread
addf toggle.0 servo-thread
addf passthru.0 servo-thread
addf passthru.1 servo-thread
addf passthru.2 servo-thread
addf passthru.3 servo-thread
addf passthru.4 servo-thread
addf passthru.5 servo-thread
addf passthru.6 servo-thread
addf passthru.7 servo-thread
addf reciprocal.0 servo-thread
addf logic.0 servo-thread
addf xen servo-thread
addf yen servo-thread
addf zen servo-thread

# ################
# Siggen
# ################

net period <= gui0.period-f => reciprocal.0.in

net amplitude <= gui0.amplitude-f => siggen.0.amplitude
net frequency <= reciprocal.0.out => siggen.0.frequency

net square-signal <=siggen.0.square => mux4.0.in0
net triangle-signal <=siggen.0.triangle => mux4.0.in1
net sine-signal <=siggen.0.sine => mux4.0.in2

net square-select <= gui0..Square => line4to2.0.in0
net triangle-select <= gui0..Triangle => line4to2.0.in1
net sine-select <= gui0..Sine => line4to2.0.in2

net mux0-select-0 <= line4to2.0.out0 => mux4.0.sel0
net mux0-select-1 <= line4to2.0.out1 => mux4.0.sel1

# ################
# Enable
# ################

net momentary-enable <= gui0.enable => toggle.0.in
net global-enable <= toggle.0.out => pid.0.enable

# ################
# PID
# ################

net p-gain-in <= gui0.Pgain => passthru.0.in 
net p-gain-out <= passthru.0.out => pid.0.Pgain

net i-gain-in <= gui0.Igain => passthru.1.in 
net i-gain-out <= passthru.1.out => pid.0.Igain

net d-gain-in <= gui0.Dgain => passthru.2.in 
net d-gain-out <= passthru.2.out => pid.0.Dgain

net pid-bias-in <= gui0.bias => passthru.3.in
net pid-bias-out <= passthru.3.out => pid.0.bias

net pid-ff0-in <= gui0.ff0 => passthru.4.in
net pid-ff0-out <= passthru.4.out => => pid.0.FF0

net pid-ff1-in <= gui0.ff1 => passthru.5.in
net pid-ff1-out <= passthru.5.out => => pid.0.FF1

net pid-ff2-in <= gui0.ff2 => passthru.6.in
net pid-ff2-out <= passthru.6.out => => pid.0.FF2

net pid-deadband-in <= gui0.deadband => passthru.7.in
net pid-deadband-out <= passthru.7.out => pid.0.deadband

setp pid.0.maxoutput 10.0000

net pid-command <= mux4.0.out => pid.0.command
net pid-output <= pid.0.output
net pid-feedback <= mux4.1.out => pid.0.feedback

net x-axis-feedback => mux4.1.in0
net y-axis-feedback => mux4.1.in1
net z-axis-feedback => mux4.1.in2

net x-axis-select <= gui0.axis-selection.X => line4to2.1.in0
net y-axis-select <= gui0.axis-selection.Y => line4to2.1.in1
net z-axis-select <= gui0.axis-selection.Z => line4to2.1.in2

net mux1-select-0 <= line4to2.1.out0 => mux4.1.sel0
net mux1-select-1 <= line4to2.1.out1 => mux4.1.sel1


net orout logic.0.or => hm2_5i25.0.7i77.0.1.analogena

# ################
# X Axis
# ################

setp   hm2_5i25.0.7i77.0.1.analogout0-scalemax  -10.0
setp   hm2_5i25.0.7i77.0.1.analogout0-minlim    -10.0
setp   hm2_5i25.0.7i77.0.1.analogout0-maxlim    10.0

net x-axis-select => logic.0.in-00

# encoder feedback
setp hm2_5i25.0.encoder.00.counter-mode 0
setp hm2_5i25.0.encoder.00.filter 1
setp hm2_5i25.0.encoder.00.index-invert 0
setp hm2_5i25.0.encoder.00.index-mask 0
setp hm2_5i25.0.encoder.00.index-mask-invert 0
setp  hm2_5i25.0.encoder.00.scale  1000

net x-axis-feedback <= hm2_5i25.0.encoder.00.position

net pid-output => xen.in
net pid-outx xen.out => hm2_5i25.0.7i77.0.1.analogout0
net x-axis-select => xen.enable

# ################
# Y Axis
# ################

setp   hm2_5i25.0.7i77.0.1.analogout1-scalemax  -10.0
setp   hm2_5i25.0.7i77.0.1.analogout1-minlim    -10.0
setp   hm2_5i25.0.7i77.0.1.analogout1-maxlim    10.0

net y-axis-select => logic.0.in-01

# encoder feedback
setp hm2_5i25.0.encoder.01.counter-mode 0
setp hm2_5i25.0.encoder.01.filter 1
setp hm2_5i25.0.encoder.01.index-invert 0
setp hm2_5i25.0.encoder.01.index-mask 0
setp hm2_5i25.0.encoder.01.index-mask-invert 0
setp  hm2_5i25.0.encoder.01.scale  1000

net y-axis-feedback <= hm2_5i25.0.encoder.01.position

net pid-output => yen.in
net pid-outy yen.out => hm2_5i25.0.7i77.0.1.analogout1
net y-axis-select => yen.enable


# ################
# Z Axis
# ################

setp   hm2_5i25.0.7i77.0.1.analogout2-scalemax  -10.0
setp   hm2_5i25.0.7i77.0.1.analogout2-minlim    -10.0
setp   hm2_5i25.0.7i77.0.1.analogout2-maxlim    10.0

net z-axis-select => logic.0.in-02

# encoder feedback
setp hm2_5i25.0.encoder.02.counter-mode 0
setp hm2_5i25.0.encoder.02.filter 1
setp hm2_5i25.0.encoder.02.index-invert 0
setp hm2_5i25.0.encoder.02.index-mask 0
setp hm2_5i25.0.encoder.02.index-mask-invert 0
setp  hm2_5i25.0.encoder.02.scale  -1000

net z-axis-feedback <= hm2_5i25.0.encoder.02.position

net pid-output => zen.in
net pid-outz zen.out => hm2_5i25.0.7i77.0.1.analogout2
net z-axis-select => zen.enable


# ################
# Let's Go!
# ################


net cnc-enable => hm2_5i25.0.7i77.0.0.output-00
sets cnc-enable true
net M6-non => hm2_5i25.0.7i77.0.0.output-02
sets M6-non true

start
loadusr halscope
Зашел в папку,куда распраковал файлы, открыл консоль ввел sudo comp --install *.comp

запустил Sudo halrun -f config.hal
большие вещи, прячь под спойлер (spoiler), а конфиги - лучше в

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

поправил
-NightV[/note]
Последний раз редактировалось Ямал 30 янв 2015, 18:43, всего редактировалось 1 раз.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AT_PID для автонастройки параметров PID servo

Сообщение Serg »

Ямал писал(а):pyvcp_dial instance has no attribute 'halparam'
Надо в XML во все секции dial добавить атрибут:

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

<param_pin>1</param_pin>
Только вот работает этот at_pid как-то странно, мне ещё ни разу с его помощью не удалось настроить привод хотя-бы приблизительно, в рукопашную гораздо лучше получается.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AT_PID для автонастройки параметров PID servo

Сообщение Serg »

Ямал писал(а):Файлы брал здесь:http://www.linuxcnc.org/index.php/engli ... al?limit=6
Так это не at_pid, это GUI для удобства ручной настройки. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ямал
Новичок
Сообщения: 12
Зарегистрирован: 27 дек 2014, 13:40
Репутация: 0
Настоящее имя: Сергей
Контактная информация:

Re: AT_PID для автонастройки параметров PID servo

Сообщение Ямал »

А как редактировать HML файл? Пытаюсь вставить, но не получается.
Ямал
Новичок
Сообщения: 12
Зарегистрирован: 27 дек 2014, 13:40
Репутация: 0
Настоящее имя: Сергей
Контактная информация:

Re: AT_PID для автонастройки параметров PID servo

Сообщение Ямал »

HML фаил подправил с помощью программы Firebag, Pid tuning запустился.Спасибо за помощь. :D
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AT_PID для автонастройки параметров PID servo

Сообщение Serg »

Ямал писал(а):А как редактировать HML файл? Пытаюсь вставить, но не получается.
Обычным текстовым редактором. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ямал
Новичок
Сообщения: 12
Зарегистрирован: 27 дек 2014, 13:40
Репутация: 0
Настоящее имя: Сергей
Контактная информация:

Re: AT_PID для автонастройки параметров PID servo

Сообщение Ямал »

А в НАL файле encoder scale указывать 1024 или 4096 при разрешении энкодера 1024 имп/об.?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AT_PID для автонастройки параметров PID servo

Сообщение Serg »

Оно к разрешению прямого отношения не имеет, там количество импульсов энкодера на милиметр движения оси.
Да и для настройки PID это вообще не важно.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

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