Stránka 1 z 1
user define M code
Napsal: 15. 6. 2015, 9:50
od jezok
ahojte
chcel by som si napísať nejaké M kódy ale stále my vyhadzuje chybu Unknown M code used,
môj postup:
-v INI som dopísal pod [RS274NGC] USER_M_PATH = /home/cnc/Plocha/M_kody
-do zložky M_kody som uložil súbor s názvom M120 s obsahom:
#!/bin/bash
halcmd setp hm2_5i20.0.7i64.0.0.output-22 True (skusal som aj TRUE,true,1)
exit 0
-a keď cez MDI spustím M120 tak vyhodí chybu Unknown M code used
Ďakujem
Re: user define M code
Napsal: 12. 7. 2015, 4:51
od hans
M kódy používám takové:
#!/bin/sh
halcmd setp hm2_5i20.0.gpio.023.out 0
exit 0
Zkusil bych je ale dát do stejné složky, ze které otevíráte ngc soubor (g - kód). Cesta k M kódům mi při nastavování strojů taky nikdy nefungovala, takže to dávám do složky, kde jsou jednotlivé programy a jede to.
Re: user define M code
Napsal: 27. 6. 2024, 7:05
od Meki
Opráším tohle starší vlákno, zná někdo programovací jazyk Bash? v LinuxCNC mám vlastní M103 kod, vím že to je banalita ale nedaří se mi na to přijít:
Kód: Vybrat vše
#!/bin/bash
halcmd setp toggle2nist.5.in 1
while [ ${halcmd getp toggle2nist.5.on} -eq 0 ]; do
sleep 0.04s
done
halcmd setp toggle2nist.5.in 0
exit 0
Zkoušel jsem různý syntax (bez ${}, bez [], bez mezer, s mezerama, na jediném řádku atd.) ale stále mi nefunguje smyčka while. Zdá se, že si neumí přečíst stav pinu toggle2nist.5.on
Potřebuju dosáhnout tohoto:
1, Zapni pin
toggle2nist.5.in
2, čekej dokud
toggle2nist.5.on nebude true
3, Vypni pin
toggle2nist.5.in
komponenta toggle2nist je pro tlačítka, proto potřebuju její pin
toggle2nist.5.in zapnout a následně vypnout
příkazy halcmd jsou pro LinuxCNC:
https://linuxcnc.org/docs/html/man/man1/halcmd.1.html
Zbytek by měl být čistý jazyk Bash
vím že by toho šlo naprogramovat i v pythonu (#!/bin/python) ale ani v jedno programovacím jazyku jsem zatím nic neprogramoval
Mimochodem funguje to i bez dodatečného kodu takto:
Kód: Vybrat vše
#!/bin/bash
halcmd setp toggle2nist.5.in 1
halcmd setp toggle2nist.5.in 0
exit 0
ale mám strach že by mohla nastat situace kdy takt halu bude pomalejší než kod bash (neznám přesně priority vykonávání kodu) a komponenta toggle2nist nezareaguje. Pauza ( např sleep 0.04s) mezi příkazy se mi zdá jako neprofesionální řešení a tak bych chtěl použít smyčku while
Když zadám
halcmd getp toggle2nist.5.on do příkazového řádku tak příkaz funguje:
nevíte kde dělám chybu?
Děkuju
Re: user define M code
Napsal: 27. 6. 2024, 7:42
od robokop
Vystup prikazu si naber jako string a porovnavej ho jako string tzn nejde myslim pouzit eq ale melo by fungovat =
To vraceni stringu by mohlo byt (prikaz) ale uz si prd pamatuju
Re: user define M code
Napsal: 27. 6. 2024, 8:56
od Meki
robokop píše: ↑27. 6. 2024, 7:42
Vystup prikazu si naber jako string a porovnavej ho jako string tzn nejde myslim pouzit eq ale melo by fungovat =
To vraceni stringu by mohlo byt (prikaz) ale uz si prd pamatuju
rovnítko bohužel také nefunguje
To vraceni stringu by mohlo byt (prikaz) ale uz si prd pamatuju
Uniká mi myšlenka, šlo by to trochu rozvést?
Děkuju
Re: user define M code
Napsal: 28. 6. 2024, 8:46
od robokop
No vpodstate je nejaka syntaxe kdy navrat prikazu zpet do bash scriptu zanecha vystup prikazu v nejake stringove promenne. A je uplne jedno zda je to "1" nebo cela stranka textu.
Je treba najit si v doc. Jak se to dela.
Pak si tu promennou vypis pro kontrolu
Pak si zkus tu porovnavku te promenne.
Proste to debuguj krok po kroku..
Melo by to byt neco takovehoto var=$(command)
Pak nejake echo $var pro otestovani jak to chodu
Pak nejake to if... $var = "TRUE"
Re: user define M code
Napsal: 2. 7. 2024, 11:07
od Meki
Už jsem na to přišel
podmínka která zkoumá hodnotu pinu z halu musí být zapsána takto:
Kód: Vybrat vše
#!/bin/bash
if [ $(halcmd gets test_pin) = FALSE ]
then
#příkaz v podmínce
fi
- halcmd gets test_pin MUSÍ být v kulaté závorce
- 0 nefunguje, ani false nefunguje, musí být napsáno FALSE
- máš pravdu, -eq nejde použít, musí být =
Přišel jsem na to metodou pokud / omyl. Log erroru u M kodu není žádný, teda alespoň na mě zatím nic neřvalo a strýček google mi s syntaxi bashe moc neporadil (ale třeba jen neumím hledat

) a tak mi bohužel nezbylo než u toho pár hodin sedět a zkoušet.
Re: user define M code
Napsal: 2. 7. 2024, 11:07
od robokop
Log erroru u mcode nepotrebujes
Je to normalni bash script ktery si muzes pustit z konzole. Halcmd funguje taky z konzole kdyz bezi linuxcnc
Re: user define M code
Napsal: 3. 7. 2024, 9:12
od Meki
To mě nenapadlo. MDI v CNC mi žere jen jeden řádek a příkazový terminál u linuxu se pro mě na první pohled tváří podobně, asi proto mě to netrklo. Zkoušel jsem jen jednotlivé příkazy.
Díky, zase jsem chytřejší
