Страница 1 из 1

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

Добавлено: 01 дек 2017, 18:12
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 изучил

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

Добавлено: 02 дек 2017, 00:01
Serg
Pavel_M писал(а):Не понял как отлаживать M коды
Запуском руками в терминале или так:

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

...
echo "DEBUG: blah-blah-blah" >>debug.log
...
Pavel_M писал(а):почему данные конструкции не работаю, если внутри ошибки то при выполнении либо проваливается дальше, либо вылетает без всяких сообщений...
В шел-скриптах для M-кодов реакция на код возврата не предусмотрена, ибо непонятно как на него надо реагировать.
Pavel_M писал(а):проверка не срабатывает сигнал точно есть и состояние свое меняет
Потому-что в shell нет оператора "==". Попробуй waitfor с руками в терминале запустить - сам всё увидишь.

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

Добавлено: 02 дек 2017, 00:02
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

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

Добавлено: 02 дек 2017, 07:24
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, а из М кода вызвать этот файл.
Может ещё будет версии/предложения?

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

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

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

value=`halcmd gets spindle-at-speed`
:)

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

Добавлено: 04 дек 2017, 14:38
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

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

Добавлено: 04 дек 2017, 14:39
Pavel_M
при запуске в терминале показывает далеко не все ошибки, но с такой отладкой всё равно веселей чем без неё!