user define M code

Odpovědět
jezok
Příspěvky: 9
Registrován: 31. 12. 2014, 6:23

15. 6. 2015, 9:50

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
hans
Příspěvky: 127
Registrován: 29. 10. 2006, 8:54
Bydliště: Jablunkov
Kontaktovat uživatele:

12. 7. 2015, 4:51

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.
Uživatelský avatar
Meki
Příspěvky: 492
Registrován: 20. 4. 2020, 11:37
Bydliště: Trojanovice

27. 6. 2024, 7:05

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
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22471
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

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
Vsechna prava na chyby vyhrazena (E)
Uživatelský avatar
Meki
Příspěvky: 492
Registrován: 20. 4. 2020, 11:37
Bydliště: Trojanovice

27. 6. 2024, 8:56

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
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22471
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

28. 6. 2024, 8:46

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"
Vsechna prava na chyby vyhrazena (E)
Uživatelský avatar
Meki
Příspěvky: 492
Registrován: 20. 4. 2020, 11:37
Bydliště: Trojanovice

2. 7. 2024, 11:07

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.
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22471
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

2. 7. 2024, 11:07

Log erroru u mcode nepotrebujes
Je to normalni bash script ktery si muzes pustit z konzole. Halcmd funguje taky z konzole kdyz bezi linuxcnc
Vsechna prava na chyby vyhrazena (E)
Uživatelský avatar
Meki
Příspěvky: 492
Registrován: 20. 4. 2020, 11:37
Bydliště: Trojanovice

3. 7. 2024, 9:12

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ší :)
Odpovědět

Zpět na „LinuxCNC - drive pod nazvem EMC2“