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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Pavel_M
Новичок
Сообщения: 32
Зарегистрирован: 10 янв 2015, 11:44
Репутация: 9
Настоящее имя: Павел
Контактная информация:

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

Сообщение Pavel_M »

Пытаюсь внутри команды 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 изучил
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

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

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

...
echo "DEBUG: blah-blah-blah" >>debug.log
...
Pavel_M писал(а):почему данные конструкции не работаю, если внутри ошибки то при выполнении либо проваливается дальше, либо вылетает без всяких сообщений...
В шел-скриптах для M-кодов реакция на код возврата не предусмотрена, ибо непонятно как на него надо реагировать.
Pavel_M писал(а):проверка не срабатывает сигнал точно есть и состояние свое меняет
Потому-что в shell нет оператора "==". Попробуй waitfor с руками в терминале запустить - сам всё увидишь.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

способов несколько...
один из - 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
Pavel_M
Новичок
Сообщения: 32
Зарегистрирован: 10 янв 2015, 11:44
Репутация: 9
Настоящее имя: Павел
Контактная информация:

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

Сообщение Pavel_M »

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, а из М кода вызвать этот файл.
Может ещё будет версии/предложения?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Pavel_M писал(а):тогда почему задержка работает?
Ну да, ждёт... Бесконечно... :)
Ну попробуй сам запустить в терминале и посмотреть что говорят. Это будет гораздо быстрее ожидания ответа на форуме. :)
Pavel_M писал(а):Вроде есть команды halcmd getp и gets, но как их использовать так и не понял..
Естественным образом:

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

value=`halcmd gets spindle-at-speed`
:)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Pavel_M
Новичок
Сообщения: 32
Зарегистрирован: 10 янв 2015, 11:44
Репутация: 9
Настоящее имя: Павел
Контактная информация:

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

Сообщение Pavel_M »

Итог: заработала следующая конструкция:

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

#!/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
Новичок
Сообщения: 32
Зарегистрирован: 10 янв 2015, 11:44
Репутация: 9
Настоящее имя: Павел
Контактная информация:

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

Сообщение Pavel_M »

при запуске в терминале показывает далеко не все ошибки, но с такой отладкой всё равно веселей чем без неё!
Ответить

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