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:
Snímek obrazovky_2024-06-27_07-22-43.png
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ší :)