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

изменение пина при закрытии linuxcnc

Добавлено: 24 янв 2020, 08:11
j4zzur1
Друзья, добрый день! Столкнулся с необходимостью привязать определенный пин к моменту закрытия Linuxcnc (в т.ч. ручного). Однако заметил, что linuxcnc не меняет значение ни одного пина (по крайней мере из тех, что я пробовал, типа halui.machine.is-on или iocontrol.0.user-unable-out) при выключении. Может есть какой-то пин/параметр или еще что, который я упустил? или другое подходящее решение.
Заранее спасибо.)

Re: изменение пина при закрытии linuxcnc

Добавлено: 24 янв 2020, 09:09
MX_Master
По-моему, в INI файле можно указать HAL файл, который будет выполнен перед выходом из LinuxCNC. Что-то типа

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

[HAL]
SHUTDOWN = shutdown.hal
внутри файла shutdown.hal можно установить нужный пин

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

setp PIN1 1
setp PIN2 0
# ...
Но стоить помнить, что после выхода из LinuxCNC, вся выделенная под HAL память будет освобождена. Я, честно говоря, не знаю, когда именно выполняется этот файл - до выгрузки всех компонентов или после. И не могу сказать точно, успеет ли дёрнуться какой-то физический пин, установленный в этом файле.

Re: изменение пина при закрытии linuxcnc

Добавлено: 24 янв 2020, 10:56
j4zzur1
MX_Master писал(а):Но стоить помнить, что после выхода из LinuxCNC, вся выделенная под HAL память будет освобождена. Я, честно говоря, не знаю, когда именно выполняется этот файл - до выгрузки всех компонентов или после. И не могу сказать точно, успеет ли дёрнуться какой-то физический пин, установленный в этом файле.
Да уж, пин вообще не дергается никак.. Причем он бы дернулся даже если LCNC бы тупо нажал условный "F1", то бишь pin joint.0.amp-enable-out. Но нет;(
Не понятно, когда этот shutdown выполняется.
Может есть другие варианты? Например, скриптом через halrun какой-нибудь..

Re: изменение пина при закрытии linuxcnc

Добавлено: 24 янв 2020, 11:08
nkp
j4zzur1 писал(а):Не понятно, когда этот shutdown выполняется.
хорошо бы проверить - выполняется ли
для этого запусти свой конфиг из терминала
потом "погаси"
и почитай - что пишет терминал
там должна быть строка

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

Running HAL shutdown script
========
если все это почему то не работает - можно переделать скрипт выхода из емс
но это ,если ты не из секты ярых противников менять что либо в исходниках программ

Re: изменение пина при закрытии linuxcnc

Добавлено: 24 янв 2020, 11:25
Сергей Саныч
Если использовать chargepump, вопрос решается автоматически. Причем независимо от причины закрытия LCNC.

Re: изменение пина при закрытии linuxcnc

Добавлено: 24 янв 2020, 11:32
nkp
Сергей Саныч писал(а):Если использовать chargepump, вопрос решается автоматически.
да,но это если просто все нужно отключить
а если требуется что то переключить-дождаться_подтверждения-etc

Re: изменение пина при закрытии linuxcnc

Добавлено: 24 янв 2020, 11:40
Сергей Саныч
nkp писал(а):а если требуется что то переключить-дождаться_подтверждения-etc
Ну, тогда проще всего завести отдельную кнопку для выключения. Скажем, в pyvcp или вообще физическую, и пользоваться только ею.

Re: изменение пина при закрытии linuxcnc

Добавлено: 24 янв 2020, 11:49
nkp
Сергей Саныч писал(а):Скажем, в pyvcp или вообще физическую, и пользоваться только ею.
да,в стойке так и делаю
это когда скрин растянут на весь экран и нет даже декоратора окна
(как бы - "онднооконный" интерфейс))
там по другому даже захочешь - не выключишь(кнопка выключает стойку(комп)
а вот в pyvcp человек может забыть и нажать на крестик,или в меню "файл" есть пункт "Закрыть"

Re: изменение пина при закрытии linuxcnc

Добавлено: 24 янв 2020, 12:12
nkp
сценарий выхода:

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

    echo "Shutting down and cleaning up LinuxCNC..."
    # Kill displays first - that should cause an orderly
    #   shutdown of the rest of linuxcnc
    for KILL_TASK in linuxcncpanel iosh linuxcncsh linuxcncrsh linuxcnctop mdi debuglevel gmoccapy gscreen; do
	if $PIDOF $KILL_TASK >>$DEBUG_FILE ; then
	    KillTaskWithTimeout
	fi
    done

    if program_available axis-remote ; then
	if [ ! -z "$DISPLAY" ]; then
	    axis-remote --ping && axis-remote --quit
	fi
    fi

    if [ "$1" = "other" ]; then
        echo -n "Waiting for other session to finish exiting..."
	WAIT=$KILL_TIMEOUT
	while [ $WAIT -gt 1 ]; do
            if ! [ -f $LOCKFILE ]; then
                echo " Ok"
                return 0
            fi
            WAIT=$(($WAIT-1))
            sleep .1
        done
        echo "lockfile still not removed"
    fi

    SHUTDOWN=`$INIVAR -ini "$INIFILE" -var SHUTDOWN -sec HAL 2> /dev/null`
    if [ -n "$SHUTDOWN" ]; then
	echo "Running HAL shutdown script"
	$HALCMD -f $SHUTDOWN
    fi

    # now kill all the other user space components
    for KILL_TASK in linuxcncsvr milltask; do
	if $PIDOF $KILL_TASK >>$DEBUG_FILE ; then
	    KillTaskWithTimeout
	fi
    done

    echo "Stopping realtime threads" >> $DEBUG_FILE
    $HALCMD stop
    echo "Unloading hal components" >> $DEBUG_FILE
    $HALCMD unload all

    for i in `seq 10`; do
        # (the one component is the halcmd itself)
        if [ `$HALCMD list comp | wc -w` = 1 ]; then break; fi
        sleep .2
    done

    echo "Removing HAL_LIB, RTAPI, and Real Time OS modules" >>$PRINT_FILE
    $REALTIME stop

    echo "Removing NML shared memory segments" >> $PRINT_FILE
    while read b x t x x x x x x m x; do
        case $b$t in
            BSHMEM) ipcrm -M $m 2>/dev/null;;
        esac
    done < $NMLFILE


    # remove lock file
    if [ -f $LOCKFILE ] ; then
	rm $LOCKFILE
    fi
в нем видно - в какой очередности все выполняется ,включая SHUTDOWN=

Re: изменение пина при закрытии linuxcnc

Добавлено: 24 янв 2020, 12:27
nkp
чтоб "добить" эту тему - проверил работу так :
в ini записал

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

[HALUI]
MDI_COMMAND = M100

[HAL]
SHUTDOWN = s.sh
s.sh

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

setp halui.mdi-command-00  1
в M100 у меня окошко с предупреждением:

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

#!/bin/bash
yad --title "Ошибка!" --width 200 --height=100 --center\
  --on-top --text "\nСкорость шпинделя установлена\n меньше 6000 об/мин"
когда выхожу из емс - окошко появляется
то есть - пин срабатывает

Re: изменение пина при закрытии linuxcnc

Добавлено: 24 янв 2020, 13:44
j4zzur1
nkp писал(а):Running HAL shutdown script
Проблема решена.
Ошибка была в том, что пин, значение которого я хотел изменять при закрытии linuxcnc, соединен с сигналом, что в общем-то логично.
Поэтому сначала прописал unlinkp данного пина, а уже потом его изменил.
Спасибо за помощь!

Re: изменение пина при закрытии linuxcnc

Добавлено: 24 янв 2020, 14:24
nkp
j4zzur1 писал(а):Ошибка была в том, что пин, значение которого я хотел изменять при закрытии linuxcnc, соединен с сигналом, что в общем-то логично.
а обнаружилась ошибка ,предположу, когда стал запускать из терминала,и там емс уже ругнулся...
бывает очень полезен запуск программы из терминала...

Re: изменение пина при закрытии linuxcnc

Добавлено: 24 янв 2020, 18:11
j4zzur1
nkp писал(а):а обнаружилась ошибка ,предположу, когда стал запускать из терминала,и там емс уже ругнулся...
Всё верно, ну и плюс такую же ошибку видел, когда пытался управлять данным пином через "установки HAL" в самом linuxcnc. только в тот момент не придал значения этой ошибке..