Страница 43 из 53

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 фев 2016, 23:09
Ворон226
Кстати! Если Вы исправили описание adjustment параметра value в файле <имя файла>.glade , то после очередного изменения визуальной панели в Glade Ваши исправления анулируются! Параметр value в adjustment опять встанет на первое место и перестанет корректно отображаться!

Глюк программы? Будет ли исправлен со временем?

Re: GladeVCP и PyVCP для начинающих

Добавлено: 16 фев 2016, 00:32
Serg
Ворон226 писал(а):Будет ли исправлен со временем?
Нет. Эта версия glade давно не поддерживается.

Re: GladeVCP и PyVCP для начинающих

Добавлено: 17 фев 2016, 09:48
Ворон226
А другие версии не поддерживают LinuxCNC?

Re: GladeVCP и PyVCP для начинающих

Добавлено: 17 фев 2016, 10:38
Serg
Точнее LinuxCNC не поддерживает другие версии.

Просто никто до сих пор не переделал виджеты для HAL под современные версии.
Это не очень сложно, но лично мне проще формы в рукопашную писать, чем в glade рисовать. :)

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 10:16
Ворон226
Nick писал(а):Наверное да, проще всего будет компонент.
Берешь стандартную заготовку:
http://www.cnc-club.ru/wiki/index.php/P ... L_LinuxCNC
Обавляешь два пина float
В загрузку пишешь:

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

init = float(open("///файлик","r").read())
t = time.time()  
В основной цикл пишешь:

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

h["out"] = h["in"] + init
if (t<time.time()): 
 open("/файлик...","w").write(h["out"])
 t = time.time() + 100 #(100 - задержка в секундах)
В принципе - все.
Только "/файлик..." сделай с начальным значением.
Вот и дошли у меня руки до твоего совета...
Написал компонент:

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

#!/usr/bin/python
import hal
import time

h=hal.component("memoryform")
init = float(open("/home/sun/linuxcnc/configs/EXT13/st.txt","r").read())
t = time.time()
h.newpin("in", hal.HAL_FLOAT, hal.HAL_IN)
h.newpin("out", hal.HAL_FLOAT, hal.HAL_OUT)
h.ready()

try:
    while 1:
        time.sleep(1)
        h["out"] = h["in"] + init
        if (t<time.time()):
            open("/home/sun/linuxcnc/configs/EXT13/st.txt","w").write(h["out"])
            t = time.time() + 100
               
except KeyboardInterrupt:
     raise SystemExit
В папочку EXT3 положил файл st.txt со значением 123
В HAL прописал загрузку компонента:

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

loadusr -Wn skanform python memoryform.py
Прописал два пина компонента в теле HAL^

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

net    ct01            memoryform.in
net    ct01m           memoryform.out
При запуске конфигурации получаю вот такое ругательство:

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

Print file information:
RUN_IN_PLACE=no
LINUXCNC_DIR=
LINUXCNC_BIN_DIR=/usr/bin
LINUXCNC_TCL_DIR=/usr/lib/tcltk/linuxcnc
LINUXCNC_SCRIPT_DIR=
LINUXCNC_RTLIB_DIR=/usr/realtime-2.6.32-122-rtai/modules/linuxcnc
LINUXCNC_CONFIG_DIR=
LINUXCNC_LANG_DIR=/usr/share/linuxcnc/tcl/msgs
INIVAR=inivar
HALCMD=halcmd
LINUXCNC_EMCSH=/usr/bin/wish8.5
LINUXCNC - 2.6.4-22-g090bf29
Machine configuration directory is '/home/sun/linuxcnc/configs/EXT13'
Machine configuration file is 'MyGUI.ini'
INIFILE=/home/sun/linuxcnc/configs/EXT13/MyGUI.ini
PARAMETER_FILE=emc.var
TASK=milltask
HALUI=halui
DISPLAY=./mygui
Starting LinuxCNC...
Starting LinuxCNC server program: linuxcncsvr
Loading Real Time OS, RTAPI, and HAL_LIB modules
Starting LinuxCNC IO program: io
Starting HAL User Interface program: halui
Shutting down and cleaning up LinuxCNC...
Killing task linuxcncsvr, PID=2571
Removing HAL_LIB, RTAPI, and Real Time OS modules
Removing NML shared memory segments

Debug file information:
Can not find -sec DISPLAY -var INTRO_GRAPHIC -num 1 
Can not find -sec DISPLAY -var INTRO_TIME -num 1 
Traceback (most recent call last):
  File "memoryform.py", line 6, in <module>
    init = float(open("/home/sun/linuxcnc/configs/EXT13/st.txt","r").read())
ValueError: empty string for float()
MyGUI.hal:76: python exited without becoming ready
...
Посоветуйте - где не так?

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 11:38
Ворон226
Оказывается я пропустил следующее:
При первом запуске LCNC ругнулся так:

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

Debug file information:
5815
  PID TTY      STAT   TIME COMMAND
Stopping realtime threads
Unloading hal components
Can not find -sec DISPLAY -var INTRO_GRAPHIC -num 1 
Can not find -sec DISPLAY -var INTRO_TIME -num 1 
Traceback (most recent call last):
  File "memoryform.py", line 17, in <module>
    open("/home/sun/linuxcnc/configs/EXT13/st.txt","w").write(h["out"])
TypeError: argument 1 must be string or read-only character buffer, not float
После чего в файле st.txt вместо записи 123 оказалась пустая строка... А уже потом вышло сообщение про пустую строку.
Почему же компонент прописывает пустую строку?
Попробую организовать запись и чтение не по таймеру, а по входным сигналам "read" и "write"

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 12:00
Ворон226
Переделал компонент в такой:

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

#!/usr/bin/python
import hal
import time

h=hal.component("memoryform")
h.newpin("in", hal.HAL_FLOAT, hal.HAL_IN)
h.newpin("out", hal.HAL_FLOAT, hal.HAL_OUT)
h.newpin("read", hal.HAL_BIT, hal.HAL_IN)
h.newpin("write", hal.HAL_BIT, hal.HAL_IN)
h.ready()

init = 0
try:
    while 1:
        if h['read']==1:
        init = float(open("/home/sun/linuxcnc/configs/EXT13/st.txt","r").read())
        h["out"] = h["in"] + init
            if h['write']==1:
                open("/home/sun/linuxcnc/configs/EXT13/st.txt","w").write(h["out"])
               
except KeyboardInterrupt:
     raise SystemExit
Ругается на строку: init = float(open("/home/sun/linuxcnc/configs/EXT13/st.txt","r").read())
Пробовал её переписать в float(open("/home/sun/linuxcnc/configs/EXT13/st.txt","r").read(init) - тоже не хочет (эх, учить мне Питон...)

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 12:09
nkp
Ворон226 писал(а):Ругается
первое ,что бросается в глаза - отступы после IF(их отсутствие)

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 12:16
Ворон226
Исправил:

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

#!/usr/bin/python
import hal
import time

h=hal.component("memoryform")
h.newpin("in", hal.HAL_FLOAT, hal.HAL_IN)
h.newpin("out", hal.HAL_FLOAT, hal.HAL_OUT)
h.newpin("read", hal.HAL_BIT, hal.HAL_IN)
h.newpin("write", hal.HAL_BIT, hal.HAL_IN)
h.ready()

init = 0
try:
    while 1:
        if h['read']==1:
            init = float(open("/home/sun/linuxcnc/configs/EXT13/st.txt","r").read())
            h["out"] = h["in"] + init
                if h['write']==1:
                    open("/home/sun/linuxcnc/configs/EXT13/st.txt","w").write(h["out"])
               
except KeyboardInterrupt:
     raise SystemExit
Говорит:

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

Debug file information:
Can not find -sec DISPLAY -var INTRO_GRAPHIC -num 1 
Can not find -sec DISPLAY -var INTRO_TIME -num 1 
  File "memoryform.py", line 18
    if h['write']==1:
    ^
IndentationError: unexpected indent

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 12:24
nkp
(для просмотра содержимого нажмите на ссылку)
Выделение_034.png (3377 просмотров) <a class='original' href='./download/file.php?id=77814&mode=view' target=_blank>Загрузить оригинал (43.5 КБ)</a>
в gedit можно "включить" показ отступов...
Geany показывает по умолчанию(хорошая программка вообще)

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 12:44
Ворон226
При запуске конфигурации компонент зависает...

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

Debug file information:
Can not find -sec DISPLAY -var INTRO_GRAPHIC -num 1 
Can not find -sec DISPLAY -var INTRO_TIME -num 1 
Waiting for component 'skanform' to become ready.....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
MyGUI.hal:76: python exited without becoming ready


Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 12:51
Serg
И правльно делает - ты ж сам сказал ему ждать появления компонента skanform. :)

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 12:55
Ворон226
UAVpilot писал(а):И правльно делает - ты ж сам сказал ему ждать появления компонента skanform. :)
Это тут?
loadusr -Wn skanform python memoryform.py

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 12:56
Serg
Да.

P.S. А просто попробовать изменить эту строчку не было-бы быстрее, чем тут спрашивать?.. :)

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 12:57
nkp
loadusr -Wn memoryform python memoryform.py

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 13:12
Ворон226
Запустилось. Считывает значение из файла.
А вот при появлении сигнала memoryform.write на входе компонента - в файле исчезает число. Просто пустая строка.
Может дело в том, что формат записи не тот? Я пытался записать значение пина, которое в тот момент было равно 111.21

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 13:20
nkp
open("/home/sun/linuxcnc/configs/EXT13/st.txt","w") так открывает файл на запись
(перепишет новым значением)
open("/home/sun/linuxcnc/configs/EXT13/st.txt","a") так открывает файл на запись,добавляя в него
может тебе именно добавлять в файл требуется
(пишу "может" ,потому как не представляю - что делает твой компонент :) не вникал :thinking: )

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 13:21
Serg
А число в строку перед записью кто будет преобразовывать?..

Число не исчезает! Файл открывается для записи (затирая содержимое), но записи не происходит т.к. возникает ошибка. Но ты её не видишь т.к. в твоей проге подобные ошибки не обрабатываются, а игнорятся.

P.S. Тяжко тебе будет без знания базовых основ питона...

Re: GladeVCP и PyVCP для начинающих

Добавлено: 15 апр 2016, 14:14
Ворон226
Всё заработало:

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

#!/usr/bin/python
import hal
import time

h=hal.component("memoryform")
h.newpin("in", hal.HAL_FLOAT, hal.HAL_IN)
h.newpin("out", hal.HAL_FLOAT, hal.HAL_OUT)
h.newpin("write", hal.HAL_BIT, hal.HAL_IN)
h.ready()

init = float(open("/home/sun/linuxcnc/configs/EXT13/st.txt","r").read())

try:
    while 1:
        h["out"] = h["in"] + init
        if h['write']==1:
            f = str(h["out"])
            open("/home/sun/linuxcnc/configs/EXT13/st.txt","w").write(f)

except KeyboardInterrupt:
     raise SystemExit
При включении конфигурации переменной init присваивается значение из файла st.txt
При появлении на пине memoryform.write сигнала 1, происходит запись значения h["out"] в файл st.txt вместо старого значения.
Теперь можно в течение дня прописывать текущие значения счетчика в файл. А при перезагрузки значение из файла прописывается в счетчик общего метража ;)
Всем спасибо!

Re: GladeVCP и PyVCP для начинающих

Добавлено: 04 июн 2016, 22:17
raddd
чего то я туплю навероное...
linuxcnc 2.5 из коробки.
немогу запустить панель gladevcp.
появляется пустая панель и все((
раньше все работало...
или я забыл чего...