Проверка пина с паузой в M1xx-M199

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.

Проверка пина с паузой в M1xx-M199

Сообщение Pavel_M » 01 дек 2017, 18:12

Пытаюсь внутри команды M190 проверить в течении 100секунд пин.
Пробывал M66 внутри Gкода работает, а внутри М кода пролетает, оформлено было так:

Код: Выделить всёРазвернуть
#!/bin/bash
voltage=$1
halcmd setp thc.voltage $voltage // это работает
M66 P0 L3 Q100 //а это не работает, но работает если вынести в G код.
exit 0


Пробывал так:
M190:
Код: Выделить всёРазвернуть
#!/bin/sh
voltage=$1
halcmd setp thc.voltage $voltage // это работает
~/emc2/nc_files/waitfor m66test TRUE  //а это не работает...
exit 0



waitfor:

Код: Выделить всёРазвернуть
#!/bin/bash

if [ $# != 2 ]; then
    echo usage: $0 SignalName DesiredValue
    exit 1
fi

signal=$1
value=$2
COUNTER=0;
while :; do
    set -- $(halcmd -s show sig $signal)
    if [ x"$2" == x"$value" ]; then   // проверка не срабатывает сигнал точно есть и состояние свое меняет
        exit 0
    fi
    if [ $COUNTER == 100 ]; then  // задержка срабатывает
        exit 0
    fi
    sleep 1
    (($COUNTER++))
done



Не понял как отлаживать M коды, и почему данные конструкции не работаю, если внутри ошибки то при выполнении либо проваливается дальше, либо вылетает без всяких сообщений...
Может кто сталкивался?
З.Ы. http://linuxcnc.org/docs/html/gcode/m-code.html изучил
Pavel_M
Новичок
 
Сообщения: 24
Зарегистрирован: 10 янв 2015, 11:44
Репутация: 9
Настоящее имя: Павел

Re: Проверка пина с паузой в M1xx-M199

Сообщение UAVpilot » 02 дек 2017, 00:01

Pavel_M писал(а):Не понял как отлаживать M коды

Запуском руками в терминале или так:
Код: Выделить всёРазвернуть
...
echo "DEBUG: blah-blah-blah" >>debug.log
...


Pavel_M писал(а):почему данные конструкции не работаю, если внутри ошибки то при выполнении либо проваливается дальше, либо вылетает без всяких сообщений...

В шел-скриптах для M-кодов реакция на код возврата не предусмотрена, ибо непонятно как на него надо реагировать.

Pavel_M писал(а):проверка не срабатывает сигнал точно есть и состояние свое меняет

Потому-что в shell нет оператора "==". Попробуй waitfor с руками в терминале запустить - сам всё увидишь.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16543
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4059
Медальки:
Настоящее имя: Сергей

Re: Проверка пина с паузой в M1xx-M199

Сообщение nkp » 02 дек 2017, 00:02

способов несколько...
один из - remap M кода
в ini файл:
Код: Выделить всёРазвернуть
[RS274NGC]

REMAP=M290  ngc=m290  modalgroup=10


в папку с gcode файл m290.ngc :
Код: Выделить всёРазвернуть
o<m290> sub
(msg, m290_ok)

   M66 P0 L3 Q100
   o<error> if [#5399 LT 0]
     (msg, m290_error)
   o<error> endif

o<m290> endsub
m2

сделать исполняымым
------------------
http://linuxcnc.org/docs/2.7/html/remap ... ed-m-codes
nkp
Мастер
 
Сообщения: 7375
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1233
Медальки:

Re: Проверка пина с паузой в M1xx-M199

Сообщение Pavel_M » 02 дек 2017, 07:24

nkp, к сожалению я жестко ограничен кодами в диаппазоне M100-M199

UAVpilot
Потому-что в shell нет оператора "==". Попробуй waitfor с руками в терминале запустить - сам всё увидишь.

тогда почему задержка работает?
Код: Выделить всёРазвернуть
COUNTER=0;
while :; do
    if [ $COUNTER == 100 ]; then  // задержка срабатывает
        exit 0
    fi
    sleep 1
    (($COUNTER++))
done


Вроде есть команды halcmd getp и gets, но как их использовать так и не понял..
Завтра доберусь до железа и попробую М66 вынести в *.ngc, а из М кода вызвать этот файл.
Может ещё будет версии/предложения?
Pavel_M
Новичок
 
Сообщения: 24
Зарегистрирован: 10 янв 2015, 11:44
Репутация: 9
Настоящее имя: Павел

Re: Проверка пина с паузой в M1xx-M199

Сообщение UAVpilot » 02 дек 2017, 14:39

Pavel_M писал(а):тогда почему задержка работает?

Ну да, ждёт... Бесконечно... :)
Ну попробуй сам запустить в терминале и посмотреть что говорят. Это будет гораздо быстрее ожидания ответа на форуме. :)

Pavel_M писал(а):Вроде есть команды halcmd getp и gets, но как их использовать так и не понял..

Естественным образом:
Код: Выделить всёРазвернуть
value=`halcmd gets spindle-at-speed`

:)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16543
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4059
Медальки:
Настоящее имя: Сергей

Re: Проверка пина с паузой в M1xx-M199

Сообщение Pavel_M » 04 дек 2017, 14:38

Итог: заработала следующая конструкция:
Код: Выделить всёРазвернуть
#!/bin/bash
volatge=$1  //берем значение переменной сопутствующем команде M, тоесть из М190 Р55 получили значение 55 (тут при запуске в ком строке была ругань "Invalid for float" но задача выполнялась
halcmd setp pid.2.command $voltage // значение на вход ПИДа
halcmd setp comp.0.in1 $voltage  // значение на вход компаратора
COUNTER=0;
while :; do
    signal=$(halcmd gets m66test) // получаем значение компаратора
    if [ $signal == FALSE ]; then  // проверяем значение компаратора
        exit 0
    fi
    if [ $COUNTER == 100 ]; then  // задержка
        exit 0
    fi
    sleep 1
    (($COUNTER++))
done
Pavel_M
Новичок
 
Сообщения: 24
Зарегистрирован: 10 янв 2015, 11:44
Репутация: 9
Настоящее имя: Павел

Re: Проверка пина с паузой в M1xx-M199

Сообщение Pavel_M » 04 дек 2017, 14:39

при запуске в терминале показывает далеко не все ошибки, но с такой отладкой всё равно веселей чем без неё!
Pavel_M
Новичок
 
Сообщения: 24
Зарегистрирован: 10 янв 2015, 11:44
Репутация: 9
Настоящее имя: Павел


Вернуться в LinuxCNC

Кто сейчас на конференции

Зарегистрированные пользователи: andrew75, Bing [Bot], error101, exe, gendos, Google [Bot], iMaks-RS, Majestic-12 [Bot], niksooon, Рома33, xenon-alien, Yandex [bot]

Поделиться

cron
Reputation System ©'